Преглед на файлове

HDFS-11516. Admin command line should print message to stderr in failure case. Contributed by Kai Sasaki.

Andrew Wang преди 8 години
родител
ревизия
92ea6d74ec

+ 16 - 1
hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/cli/CLITestHelper.java

@@ -298,6 +298,11 @@ public class CLITestHelper {
     
     return compareOutput;
   }
+
+  private boolean compareTextExitCode(ComparatorData compdata,
+      Result cmdResult) {
+    return compdata.getExitCode() == cmdResult.getExitCode();
+  }
   
   /***********************************
    ************* TESTS RUNNER
@@ -330,10 +335,17 @@ public class CLITestHelper {
         final String comptype = cd.getComparatorType();
         
         boolean compareOutput = false;
+        boolean compareExitCode = false;
         
         if (! comptype.equalsIgnoreCase("none")) {
           compareOutput = compareTestOutput(cd, cmdResult);
-          overallTCResult &= compareOutput;
+          if (cd.getExitCode() == -1) {
+            // No need to check exit code if not specified
+            compareExitCode = true;
+          } else {
+            compareExitCode = compareTextExitCode(cd, cmdResult);
+          }
+          overallTCResult &= (compareOutput & compareExitCode);
         }
         
         cd.setExitCode(cmdResult.getExitCode());
@@ -391,6 +403,7 @@ public class CLITestHelper {
         testComparators = new ArrayList<ComparatorData>();
       } else if (qName.equals("comparator")) {
         comparatorData = new ComparatorData();
+        comparatorData.setExitCode(-1);
       }
       charString = "";
     }
@@ -422,6 +435,8 @@ public class CLITestHelper {
         comparatorData.setComparatorType(charString);
       } else if (qName.equals("expected-output")) {
         comparatorData.setExpectedOutput(charString);
+      } else if (qName.equals("expected-exit-code")) {
+        comparatorData.setExitCode(Integer.valueOf(charString));
       } else if (qName.equals("test")) {
         if (!Shell.WINDOWS || runOnWindows) {
           testsFromConfigFile.add(td);

+ 2 - 2
hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/cli/util/CommandExecutor.java

@@ -75,7 +75,7 @@ public abstract class CommandExecutor {
     System.setErr(new PrintStream(bao));
     
     try {
-      execute(cmd);
+      exitCode = execute(cmd);
     } catch (Exception e) {
       e.printStackTrace();
       lastException = e;
@@ -87,7 +87,7 @@ public abstract class CommandExecutor {
     return new Result(bao.toString(), exitCode, lastException, cmd);
   }
   
-  protected abstract void execute(final String cmd) throws Exception;
+  protected abstract int execute(String cmd) throws Exception;
   
   public static class Result {
     final String commandOutput;

+ 2 - 2
hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/cli/util/FSCmdExecutor.java

@@ -30,8 +30,8 @@ public class FSCmdExecutor extends CommandExecutor {
   }
 
   @Override
-  protected void execute(final String cmd) throws Exception{
+  protected int execute(final String cmd) throws Exception{
     String[] args = getCommandAsArgs(cmd, "NAMENODE", this.namenode);
-    ToolRunner.run(shell, args);
+    return ToolRunner.run(shell, args);
   }
 }

+ 3 - 3
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/AdminHelper.java

@@ -176,11 +176,11 @@ public class AdminHelper {
         for (AdminHelper.Command command : commands) {
           System.err.println(command.getLongUsage());
         }
-        return 0;
+        return 1;
       }
       if (args.size() != 1) {
-        System.out.println("You must give exactly one argument to -help.");
-        return 0;
+        System.err.println("You must give exactly one argument to -help.");
+        return 1;
       }
       final String commandName = args.get(0);
       // prepend a dash to match against the command names

+ 1 - 1
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/CryptoAdmin.java

@@ -233,7 +233,7 @@ public class CryptoAdmin extends Configured implements Tool {
         final FileEncryptionInfo fei =
             admin.getFileEncryptionInfo(p);
         if (fei == null) {
-          System.out.println("No FileEncryptionInfo found for path " + path);
+          System.err.println("No FileEncryptionInfo found for path " + path);
           return 2;
         }
         System.out.println(fei.toStringStable());

+ 2 - 2
hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/cli/util/CacheAdminCmdExecutor.java

@@ -30,8 +30,8 @@ public class CacheAdminCmdExecutor extends CommandExecutor {
   }
 
   @Override
-  protected void execute(final String cmd) throws Exception {
+  protected int execute(final String cmd) throws Exception {
     String[] args = getCommandAsArgs(cmd, "NAMENODE", this.namenode);
-    ToolRunner.run(admin, args);
+    return ToolRunner.run(admin, args);
   }
 }

+ 2 - 2
hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/cli/util/CryptoAdminCmdExecutor.java

@@ -30,8 +30,8 @@ public class CryptoAdminCmdExecutor extends CommandExecutor {
   }
 
   @Override
-  protected void execute(final String cmd) throws Exception {
+  protected int execute(final String cmd) throws Exception {
     String[] args = getCommandAsArgs(cmd, "NAMENODE", this.namenode);
-    ToolRunner.run(admin, args);
+    return ToolRunner.run(admin, args);
   }
 }

+ 2 - 2
hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/cli/util/ErasureCodingCliCmdExecutor.java

@@ -30,8 +30,8 @@ public class ErasureCodingCliCmdExecutor extends CommandExecutor {
   }
 
   @Override
-  protected void execute(final String cmd) throws Exception {
+  protected int execute(final String cmd) throws Exception {
     String[] args = getCommandAsArgs(cmd, "NAMENODE", this.namenode);
-    ToolRunner.run(admin, args);
+    return ToolRunner.run(admin, args);
   }
 }

+ 31 - 0
hadoop-hdfs-project/hadoop-hdfs/src/test/resources/testCryptoConf.xml

@@ -46,6 +46,37 @@
       </comparators>
     </test>
 
+    <test>
+      <description>Test help usage</description>
+      <test-commands>
+        <crypto-admin-command>-help</crypto-admin-command>
+      </test-commands>
+      <cleanup-commands>
+      </cleanup-commands>
+      <comparators>
+        <comparator>
+          <type>SubstringComparator</type>
+          <expected-output>[-createZone -keyName</expected-output>
+        </comparator>
+      </comparators>
+    </test>
+
+    <test>
+      <description>Test extra help argument</description>
+      <test-commands>
+        <crypto-admin-command>-help arg1 arg2</crypto-admin-command>
+      </test-commands>
+      <cleanup-commands>
+      </cleanup-commands>
+      <comparators>
+        <comparator>
+          <type>SubstringComparator</type>
+          <expected-output>You must give exactly one argument to -help.</expected-output>
+          <expected-exit-code>1</expected-exit-code>
+        </comparator>
+      </comparators>
+    </test>
+
     <test>
       <description>Test create ez, dir doesn't exist</description>
       <test-commands>

+ 16 - 0
hadoop-hdfs-project/hadoop-hdfs/src/test/resources/testErasureCodingConf.xml

@@ -71,6 +71,22 @@
       </comparators>
     </test>
 
+    <test>
+      <description>help: help with extra argument</description>
+      <test-commands>
+        <ec-admin-command>-help arg1 arg2</ec-admin-command>
+      </test-commands>
+      <cleanup-commands>
+      </cleanup-commands>
+      <comparators>
+        <comparator>
+          <type>SubstringComparator</type>
+          <expected-output>You must give exactly one argument to -help.</expected-output>
+          <expected-exit-code>1</expected-exit-code>
+        </comparator>
+      </comparators>
+    </test>
+
     <test>
       <description>help: setPolicy command</description>
       <test-commands>