package org.apache.hadoop.hdfs;
import java.io.File;
import java.io.FileOutputStream;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hdfs.tools.FastCopy;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.junit.AfterClass;
import static org.junit.Assert.*;
import org.junit.BeforeClass;
import org.junit.Test;
import org.mortbay.log.Log;
public class TestRaidFastCopy {
private static Configuration conf;
private static MiniDFSCluster cluster;
private static FileSystem fs;
private static String fileName = "core-site.xml";
private static String confFile = null;
private static String[] dirs = { "build/contrib/raid/test/",
"../../../build/contrib/raid/test/" };
@BeforeClass
public static void setUpBeforeClass() throws Exception {
conf = new Configuration();
conf.setInt("dfs.block.size", 1024);
conf.setClass("fs.hdfs.impl", DistributedRaidFileSystem.class,
FileSystem.class);
cluster = new MiniDFSCluster(conf, 3, true, null);
fs = cluster.getFileSystem();
// Writing conf to disk so that the FastCopy tool picks it up.
boolean flag = false;
for (String dir : dirs) {
if (new File(dir).exists()) {
confFile = dir + fileName;
String tmpConfFile = confFile + ".tmp";
FileOutputStream out = new FileOutputStream(tmpConfFile);
conf.writeXml(out);
out.close();
//rename the xml
(new File(tmpConfFile)).renameTo(new File(confFile));
flag = true;
}
}
if (!flag) {
throw new Exception("Could not write conf file");
}
}
@AfterClass
public static void tearDownAfterClass() throws Exception {
cluster.shutdown();
if (confFile != null) {
new File(confFile).delete();
}
}
@Test
public void testRaidFastCopyCLI() throws Exception {
String fileName = "/testRaidFastCopyCLI";
String dst = fileName + "dst";
DFSTestUtil.createFile(fs, new Path(fileName),
20 * 1024, (short) 3, System.currentTimeMillis());
String args[] = { fileName, dst };
FastCopy.runTool(args);
assertTrue(FastCopySetupUtil.compareFiles(fileName, fs, dst, fs));
}
}