Author: wang Date: Tue Aug 5 00:26:06 2014 New Revision: 1615829 URL: http://svn.apache.org/r1615829 Log: HADOOP-10927. Fix CredentialShell help behavior and error codes. Contributed by Josh Elser.
Modified: hadoop/common/branches/branch-2/hadoop-common-project/ (props changed) hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/ (props changed) hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/CHANGES.txt (contents, props changed) hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/ (props changed) hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/main/bin/hadoop hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/main/java/ (props changed) hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/alias/CredentialShell.java hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/alias/TestCredShell.java Propchange: hadoop/common/branches/branch-2/hadoop-common-project/ ------------------------------------------------------------------------------ Merged /hadoop/common/trunk/hadoop-common-project:r1615827 Propchange: hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/ ------------------------------------------------------------------------------ Merged /hadoop/common/trunk/hadoop-common-project/hadoop-common:r1615827 Modified: hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/CHANGES.txt URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/CHANGES.txt?rev=1615829&r1=1615828&r2=1615829&view=diff ============================================================================== --- hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/CHANGES.txt (original) +++ hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/CHANGES.txt Tue Aug 5 00:26:06 2014 @@ -97,6 +97,9 @@ Release 2.6.0 - UNRELEASED HADOOP-10928. Incorrect usage on `hadoop credential list`. (Josh Elser via wang) + HADOOP-10927. Fix CredentialShell help behavior and error codes. + (Josh Elser via wang) + Release 2.5.0 - UNRELEASED INCOMPATIBLE CHANGES Propchange: hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/CHANGES.txt ------------------------------------------------------------------------------ Merged /hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt:r1615827 Propchange: hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/ ------------------------------------------------------------------------------ Merged /hadoop/common/trunk/hadoop-common-project/hadoop-common/src:r1615827 Modified: hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/main/bin/hadoop URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/main/bin/hadoop?rev=1615829&r1=1615828&r2=1615829&view=diff ============================================================================== --- hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/main/bin/hadoop (original) +++ hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/main/bin/hadoop Tue Aug 5 00:26:06 2014 @@ -35,6 +35,7 @@ function print_usage(){ echo " distcp <srcurl> <desturl> copy file or directories recursively" echo " archive -archiveName NAME -p <parent path> <src>* <dest> create a hadoop archive" echo " classpath prints the class path needed to get the" + echo " credential interact with credential providers" echo " Hadoop jar and the required libraries" echo " daemonlog get/set the log level for each daemon" echo " or" Propchange: hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/main/java/ ------------------------------------------------------------------------------ Merged /hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java:r1615827 Modified: hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/alias/CredentialShell.java URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/alias/CredentialShell.java?rev=1615829&r1=1615828&r2=1615829&view=diff ============================================================================== --- hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/alias/CredentialShell.java (original) +++ hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/alias/CredentialShell.java Tue Aug 5 00:26:06 2014 @@ -67,11 +67,11 @@ public class CredentialShell extends Con if (command.validate()) { command.execute(); } else { - exitCode = -1; + exitCode = 1; } } catch (Exception e) { e.printStackTrace(err); - return -1; + return 1; } return exitCode; } @@ -79,29 +79,36 @@ public class CredentialShell extends Con /** * Parse the command line arguments and initialize the data * <pre> - * % hadoop alias create alias [-provider providerPath] - * % hadoop alias list [-provider providerPath] - * % hadoop alias delete alias [-provider providerPath] [-i] + * % hadoop credential create alias [-provider providerPath] + * % hadoop credential list [-provider providerPath] + * % hadoop credential delete alias [-provider providerPath] [-i] * </pre> * @param args - * @return + * @return 0 if the argument(s) were recognized, 1 otherwise * @throws IOException */ - private int init(String[] args) throws IOException { + protected int init(String[] args) throws IOException { + // no args should print the help message + if (0 == args.length) { + printCredShellUsage(); + ToolRunner.printGenericCommandUsage(System.err); + return 1; + } + for (int i = 0; i < args.length; i++) { // parse command line if (args[i].equals("create")) { String alias = args[++i]; command = new CreateCommand(alias); if (alias.equals("-help")) { printCredShellUsage(); - return -1; + return 0; } } else if (args[i].equals("delete")) { String alias = args[++i]; command = new DeleteCommand(alias); if (alias.equals("-help")) { printCredShellUsage(); - return -1; + return 0; } } else if (args[i].equals("list")) { command = new ListCommand(); @@ -115,11 +122,11 @@ public class CredentialShell extends Con value = args[++i]; } else if (args[i].equals("-help")) { printCredShellUsage(); - return -1; + return 0; } else { printCredShellUsage(); ToolRunner.printGenericCommandUsage(System.err); - return -1; + return 1; } } return 0; Modified: hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/alias/TestCredShell.java URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/alias/TestCredShell.java?rev=1615829&r1=1615828&r2=1615829&view=diff ============================================================================== --- hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/alias/TestCredShell.java (original) +++ hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/alias/TestCredShell.java Tue Aug 5 00:26:06 2014 @@ -17,16 +17,18 @@ */ package org.apache.hadoop.security.alias; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.PrintStream; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import org.apache.hadoop.conf.Configuration; -import org.apache.hadoop.security.alias.CredentialShell.PasswordReader; import org.junit.Before; import org.junit.Test; @@ -87,7 +89,7 @@ public class TestCredShell { CredentialShell cs = new CredentialShell(); cs.setConf(new Configuration()); rc = cs.run(args1); - assertEquals(-1, rc); + assertEquals(1, rc); assertTrue(outContent.toString().contains("There are no valid " + "CredentialProviders configured.")); } @@ -122,7 +124,7 @@ public class TestCredShell { config.set(CredentialProviderFactory.CREDENTIAL_PROVIDER_PATH, "user:///"); cs.setConf(config); rc = cs.run(args1); - assertEquals(-1, rc); + assertEquals(1, rc); assertTrue(outContent.toString().contains("There are no valid " + "CredentialProviders configured.")); } @@ -139,7 +141,7 @@ public class TestCredShell { shell.setConf(new Configuration()); shell.setPasswordReader(new MockPasswordReader(passwords)); rc = shell.run(args1); - assertEquals(outContent.toString(), -1, rc); + assertEquals(outContent.toString(), 1, rc); assertTrue(outContent.toString().contains("Passwords don't match")); } @@ -186,4 +188,21 @@ public class TestCredShell { System.out.println(message); } } + + @Test + public void testEmptyArgList() throws Exception { + CredentialShell shell = new CredentialShell(); + shell.setConf(new Configuration()); + assertEquals(1, shell.init(new String[0])); + } + + @Test + public void testCommandHelpExitsNormally() throws Exception { + for (String cmd : Arrays.asList("create", "list", "delete")) { + CredentialShell shell = new CredentialShell(); + shell.setConf(new Configuration()); + assertEquals("Expected help argument on " + cmd + " to return 0", + 0, shell.init(new String[] {cmd, "-help"})); + } + } }