diff --git a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/cli/CLITestHelper.java b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/cli/CLITestHelper.java index b08af16302b..afcf2ac9427 100644 --- a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/cli/CLITestHelper.java +++ b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/cli/CLITestHelper.java @@ -297,6 +297,11 @@ public class CLITestHelper { return compareOutput; } + + private boolean compareTextExitCode(ComparatorData compdata, + Result cmdResult) { + return compdata.getExitCode() == cmdResult.getExitCode(); + } /*********************************** ************* TESTS RUNNER @@ -329,10 +334,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()); @@ -390,6 +402,7 @@ public class CLITestHelper { testComparators = new ArrayList(); } else if (qName.equals("comparator")) { comparatorData = new ComparatorData(); + comparatorData.setExitCode(-1); } charString = ""; } @@ -421,6 +434,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); diff --git a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/cli/util/CommandExecutor.java b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/cli/util/CommandExecutor.java index 79df284045b..5ef129cdc87 100644 --- a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/cli/util/CommandExecutor.java +++ b/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; diff --git a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/cli/util/FSCmdExecutor.java b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/cli/util/FSCmdExecutor.java index 98237ac7263..e2693bb6eaf 100644 --- a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/cli/util/FSCmdExecutor.java +++ b/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); } } diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/AdminHelper.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/AdminHelper.java index 8bab5505ef5..2c5fb0e1e82 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/AdminHelper.java +++ b/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 diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/CryptoAdmin.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/CryptoAdmin.java index 4c7335ffb27..14abf6e074f 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/CryptoAdmin.java +++ b/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()); diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/cli/util/CacheAdminCmdExecutor.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/cli/util/CacheAdminCmdExecutor.java index 922020faf84..75efb3edf4c 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/cli/util/CacheAdminCmdExecutor.java +++ b/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); } } diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/cli/util/CryptoAdminCmdExecutor.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/cli/util/CryptoAdminCmdExecutor.java index f781bf8d877..0ab5b0ea282 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/cli/util/CryptoAdminCmdExecutor.java +++ b/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); } } diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/resources/testCryptoConf.xml b/hadoop-hdfs-project/hadoop-hdfs/src/test/resources/testCryptoConf.xml index 7e372becaf8..f9bb29eb9e4 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/resources/testCryptoConf.xml +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/resources/testCryptoConf.xml @@ -46,6 +46,37 @@ + + Test help usage + + -help + + + + + + SubstringComparator + [-createZone -keyName + + + + + + Test extra help argument + + -help arg1 arg2 + + + + + + SubstringComparator + You must give exactly one argument to -help. + 1 + + + + Test create ez, dir doesn't exist