я думаю, что решил свою проблему. Вот мой окончательный код.
import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;
//import static org.hamcrest.*;
import org.junit.Before;
import org.junit.After;
import org.junit.Test;
import java.io.*;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.hdfs.MiniDFSCluster;
import org.apache.hadoop.fs.Path;
public class ShowFileStatusTest{
private MiniDFSCluster cluster;
private FileSystem fs;
@Before
public void setUp() throws IOException {
Configuration conf = new Configuration();
// conf.set("fs.default.name","hdfs://master:9000");
if(System.getProperty("test.build.data")==null) {
System.setProperty("test.build.data","/tmp");
}
cluster = new MiniDFSCluster(conf, 1, true, null);
fs = cluster.getFileSystem();
OutputStream out = fs.create(new Path("/dir/file"));
out.write("content".getBytes("UTF-8"));
out.close();
}
@After
public void tearDown() throws IOException{
if( fs!=null ){fs.close();}
if( cluster!=null ) {cluster.shutdown();}
}
@Test(expected=FileNotFoundException.class)
public void throwsFileNotFoundForNonExistentFile() throws IOException{
fs.getFileStatus(new Path("no-such-file"));
}
@Test
public void fileStatusForFile() throws IOException{
Path file = new Path("/dir/file");
FileStatus stat = fs.getFileStatus(file);
assertThat(stat.getPath().toUri().getPath(),is("/dir/file"));
assertThat(stat.isDir(),is(false));
assertThat(stat.getLen(),is(7L));
// assertThat(stat.getModificationTime(),
// is(lessThanOrEqualTo(System.currentTimeMillis()))
// );
assertThat(stat.getReplication(),is((short)1) );
assertThat(stat.getBlockSize(),is(128*1024*1024L));
assertThat(stat.getOwner(),is("hadoop"));
assertThat(stat.getGroup(),is("supergroup"));
assertThat(stat.getPermission().toString(),is("rw-r--r--"));
}
@Test
public void fileStatusForDirectory() throws IOException{
Path dir = new Path("/dir");
FileStatus stat = fs.getFileStatus(dir);
assertThat(stat.getPath().toUri().getPath(),is("/dir"));
assertThat(stat.isDir(),is(true));
assertThat(stat.getLen(),is(0L));
// assertThat(stat.getModificationTime());
assertThat(stat.getReplication(),is((short)0));
assertThat(stat.getBlockSize(),is(0L));
assertThat(stat.getOwner(),is("hadoop"));
assertThat(stat.getGroup(),is("supergroup"));
assertThat(stat.getPermission().toString(),is("rwxr-xr-x"));
}
}
Спасибо за Джагрут Шарма. Я изменил код ключа assertThat(stat.getBlockSize(),is(64*124*1024));
на assertThat(stat.getBlockSize(),is(128*1024*1024L));
и моя проблема решена без провала теста. В этом примере я думаю, что главная проблема в том, что я всегда неправильно понимаю сообщение в журнале. Когда я использую свой старый код с assertThat(stat.getBlockSize(),is(64*124*1024));
, я всегда получаю сообщение журнала, которое объявляет ошибку:
java.lang.NoSuchMethodError: org.hamcrest.Matcher.describeMismatch(Ljava/lang/Object;Lorg/hamcrest/Description;)V
Сообщение действительно смущает меня. Я понятия не имел, что это подразумевает утверждение моей ошибки. Однако, я неправильно понимаю это, и я принимаю это как ошибку моего неправильного использования некоторых функций. Более того, я считаю само собой разумеющимся, что должен быть файл "/ dir / file" либо в локальной файловой системе, либо в формате hdf, так как я не имею представления об использовании MiniDFSCluster в этом примере. Во всяком случае, я должен сделать узнать больше ...