Pārlūkot izejas kodu

HADOOP-411. Add unit tests for command line parser. Contributed by Hairong.

git-svn-id: https://svn.apache.org/repos/asf/lucene/hadoop/trunk@428076 13f79535-47bb-0310-9956-ffa450edef68
Doug Cutting 19 gadi atpakaļ
vecāks
revīzija
57e1f7955f

+ 3 - 0
CHANGES.txt

@@ -131,6 +131,9 @@ Trunk (unreleased changes)
 37. HADOOP-410.  Replace some TreeMaps with HashMaps in DFS, for
     a 17% performance improvement. (Milind Bhandarkar via cutting)
 
+38. HADOOP-411.  Add unit tests for command line parser.
+    (Hairong Kuang via cutting)
+
 
 Release 0.4.0 - 2006-06-28
 

+ 105 - 0
src/test/org/apache/hadoop/dfs/TestDFSShellGenericOptions.java

@@ -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) {
+                }
+            }
+        }
+    }
+
+}