|
@@ -0,0 +1,105 @@
|
|
|
+package org.apache.hadoop.dfs;
|
|
|
+
|
|
|
+import java.io.File;
|
|
|
+import java.io.FileNotFoundException;
|
|
|
+import java.io.IOException;
|
|
|
+import java.io.PrintWriter;
|
|
|
+
|
|
|
+import junit.framework.TestCase;
|
|
|
+
|
|
|
+import org.apache.hadoop.conf.Configuration;
|
|
|
+import org.apache.hadoop.dfs.DFSShell;
|
|
|
+import org.apache.hadoop.dfs.DataNode;
|
|
|
+import org.apache.hadoop.dfs.MiniDFSCluster;
|
|
|
+import org.apache.hadoop.fs.FileSystem;
|
|
|
+import org.apache.hadoop.fs.Path;
|
|
|
+
|
|
|
+public class TestDFSShellGenericOptions extends TestCase {
|
|
|
+
|
|
|
+ public void testDFSCommand() throws IOException {
|
|
|
+ String namenode = null;
|
|
|
+ MiniDFSCluster cluster = null;
|
|
|
+ try {
|
|
|
+ Configuration conf = new Configuration();
|
|
|
+ cluster = new MiniDFSCluster(65316, conf, true);
|
|
|
+ namenode = conf.get("fs.default.name", "local");
|
|
|
+ String [] args = new String[4];
|
|
|
+ args[2] = "-mkdir";
|
|
|
+ args[3] = "/data";
|
|
|
+ testFsOption(args, namenode);
|
|
|
+ testConfOption(args, namenode);
|
|
|
+ testPropertyOption(args, namenode);
|
|
|
+ } finally {
|
|
|
+ if (cluster != null) { cluster.shutdown(); }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void testFsOption(String [] args, String namenode) {
|
|
|
+ // prepare arguments to create a directory /data
|
|
|
+ args[0] = "-fs";
|
|
|
+ args[1] = namenode;
|
|
|
+ execute(args, namenode);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void testConfOption(String[] args, String namenode) {
|
|
|
+ // prepare configuration hadoop-site.xml
|
|
|
+ File configDir = new File("conf", "minidfs");
|
|
|
+ configDir.mkdirs();
|
|
|
+ File siteFile = new File(configDir, "hadoop-site.xml");
|
|
|
+ PrintWriter pw;
|
|
|
+ try {
|
|
|
+ pw = new PrintWriter(siteFile);
|
|
|
+ pw.print("<?xml version=\"1.0\"?>\n"+
|
|
|
+ "<?xml-stylesheet type=\"text/xsl\" href=\"configuration.xsl\"?>\n"+
|
|
|
+ "<configuration>\n"+
|
|
|
+ " <property>\n"+
|
|
|
+ " <name>fs.default.name</name>\n"+
|
|
|
+ " <value>"+namenode+"</value>\n"+
|
|
|
+ " </property>\n"+
|
|
|
+ "</configuration>\n");
|
|
|
+ pw.close();
|
|
|
+
|
|
|
+ // prepare arguments to create a directory /data
|
|
|
+ args[0] = "-conf";
|
|
|
+ args[1] = "conf/minidfs/hadoop-site.xml";
|
|
|
+ execute(args, namenode);
|
|
|
+ } catch (FileNotFoundException e) {
|
|
|
+ // TODO Auto-generated catch block
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+
|
|
|
+ configDir.delete();
|
|
|
+ }
|
|
|
+
|
|
|
+ private void testPropertyOption(String[] args, String namenode) {
|
|
|
+ // prepare arguments to create a directory /data
|
|
|
+ args[0] = "-D";
|
|
|
+ args[1] = "fs.default.name="+namenode;
|
|
|
+ execute(args, namenode);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void execute( String [] args, String namenode ) {
|
|
|
+ DFSShell shell=new DFSShell();
|
|
|
+ FileSystem fs=null;
|
|
|
+ try {
|
|
|
+ shell.doMain(new Configuration(), args);
|
|
|
+ fs = new DistributedFileSystem(
|
|
|
+ DataNode.createSocketAddr(namenode),
|
|
|
+ shell.getConf());
|
|
|
+ assertTrue( "Directory does not get created",
|
|
|
+ fs.isDirectory(new Path("/data")) );
|
|
|
+ fs.delete(new Path("/data"));
|
|
|
+ } catch (Exception e) {
|
|
|
+ System.err.println(e.getMessage());
|
|
|
+ e.printStackTrace();
|
|
|
+ } finally {
|
|
|
+ if( fs!=null ) {
|
|
|
+ try {
|
|
|
+ fs.close();
|
|
|
+ } catch (IOException ignored) {
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+}
|