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"}));
+ }
+ }
}