HADOOP-10586. KeyShell doesn't allow setting Options via CLI. (clamb via tucu)

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1595105 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Alejandro Abdelnur 2014-05-16 05:06:28 +00:00
parent 8f48760663
commit 51b37969df
3 changed files with 38 additions and 6 deletions

View File

@ -328,6 +328,8 @@ Trunk (Unreleased)
HADOOP-10583. bin/hadoop key throws NPE with no args and assorted other fixups. (clamb via tucu) HADOOP-10583. bin/hadoop key throws NPE with no args and assorted other fixups. (clamb via tucu)
HADOOP-10586. KeyShell doesn't allow setting Options via CLI. (clamb via tucu)
OPTIMIZATIONS OPTIMIZATIONS
HADOOP-7761. Improve the performance of raw comparisons. (todd) HADOOP-7761. Improve the performance of raw comparisons. (todd)

View File

@ -89,6 +89,8 @@ public int run(String[] args) throws Exception {
* @throws IOException * @throws IOException
*/ */
private int init(String[] args) throws IOException { private int init(String[] args) throws IOException {
final Options options = KeyProvider.options(getConf());
for (int i = 0; i < args.length; i++) { // parse command line for (int i = 0; i < args.length; i++) { // parse command line
boolean moreTokens = (i < args.length - 1); boolean moreTokens = (i < args.length - 1);
if (args[i].equals("create")) { if (args[i].equals("create")) {
@ -97,7 +99,7 @@ private int init(String[] args) throws IOException {
keyName = args[++i]; keyName = args[++i];
} }
command = new CreateCommand(keyName); command = new CreateCommand(keyName, options);
if ("--help".equals(keyName)) { if ("--help".equals(keyName)) {
printKeyShellUsage(); printKeyShellUsage();
return -1; return -1;
@ -127,9 +129,11 @@ private int init(String[] args) throws IOException {
} else if ("list".equals(args[i])) { } else if ("list".equals(args[i])) {
command = new ListCommand(); command = new ListCommand();
} else if ("--size".equals(args[i]) && moreTokens) { } else if ("--size".equals(args[i]) && moreTokens) {
getConf().set(KeyProvider.DEFAULT_BITLENGTH_NAME, args[++i]); options.setBitLength(Integer.parseInt(args[++i]));
} else if ("--cipher".equals(args[i]) && moreTokens) { } else if ("--cipher".equals(args[i]) && moreTokens) {
getConf().set(KeyProvider.DEFAULT_CIPHER_NAME, args[++i]); options.setCipher(args[++i]);
} else if ("--description".equals(args[i]) && moreTokens) {
options.setDescription(args[++i]);
} else if ("--provider".equals(args[i]) && moreTokens) { } else if ("--provider".equals(args[i]) && moreTokens) {
userSuppliedProvider = true; userSuppliedProvider = true;
getConf().set(KeyProviderFactory.KEY_PROVIDER_PATH, args[++i]); getConf().set(KeyProviderFactory.KEY_PROVIDER_PATH, args[++i]);
@ -399,6 +403,7 @@ public String getUsage() {
private class CreateCommand extends Command { private class CreateCommand extends Command {
public static final String USAGE = public static final String USAGE =
"create <keyname> [--cipher <cipher>] [--size <size>]\n" + "create <keyname> [--cipher <cipher>] [--size <size>]\n" +
" [--description <description>]\n" +
" [--provider <provider>] [--help]"; " [--provider <provider>] [--help]";
public static final String DESC = public static final String DESC =
"The create subcommand creates a new key for the name specified\n" + "The create subcommand creates a new key for the name specified\n" +
@ -408,10 +413,12 @@ private class CreateCommand extends Command {
"The default keysize is 256. You may specify the requested key\n" + "The default keysize is 256. You may specify the requested key\n" +
"length using the --size argument.\n"; "length using the --size argument.\n";
String keyName = null; final String keyName;
final Options options;
public CreateCommand(String keyName) { public CreateCommand(String keyName, Options options) {
this.keyName = keyName; this.keyName = keyName;
this.options = options;
} }
public boolean validate() { public boolean validate() {
@ -434,7 +441,6 @@ public boolean validate() {
public void execute() throws IOException, NoSuchAlgorithmException { public void execute() throws IOException, NoSuchAlgorithmException {
warnIfTransientProvider(); warnIfTransientProvider();
try { try {
Options options = KeyProvider.options(getConf());
provider.createKey(keyName, options); provider.createKey(keyName, options);
out.println(keyName + " has been successfully created."); out.println(keyName + " has been successfully created.");
provider.flush(); provider.flush();

View File

@ -111,6 +111,30 @@ public void testKeySuccessfulKeyLifecycle() throws Exception {
assertFalse(outContent.toString(), outContent.toString().contains("key1")); assertFalse(outContent.toString(), outContent.toString().contains("key1"));
} }
/* HADOOP-10586 KeyShell didn't allow -description. */
@Test
public void testKeySuccessfulCreationWithDescription() throws Exception {
outContent.reset();
String[] args1 = {"create", "key1", "--provider",
"jceks://file" + tmpDir + "/keystore.jceks",
"--description", "someDescription"};
int rc = 0;
KeyShell ks = new KeyShell();
ks.setConf(new Configuration());
rc = ks.run(args1);
assertEquals(0, rc);
assertTrue(outContent.toString().contains("key1 has been successfully " +
"created."));
outContent.reset();
String[] args2a = {"list", "--metadata", "--provider",
"jceks://file" + tmpDir + "/keystore.jceks"};
rc = ks.run(args2a);
assertEquals(0, rc);
assertTrue(outContent.toString().contains("description"));
assertTrue(outContent.toString().contains("someDescription"));
}
@Test @Test
public void testInvalidKeySize() throws Exception { public void testInvalidKeySize() throws Exception {
String[] args1 = {"create", "key1", "--size", "56", "--provider", String[] args1 = {"create", "key1", "--size", "56", "--provider",