HADOOP-12442. Display help if the command option to 'hdfs dfs' is not valid (Contributed by nijel)

(cherry picked from commit 861b52db24)
This commit is contained in:
Vinayakumar B 2015-09-26 21:36:17 +05:30
parent e5dc723d48
commit b46e4ceafd
3 changed files with 37 additions and 0 deletions

View File

@ -651,6 +651,9 @@ Release 2.8.0 - UNRELEASED
HADOOP-12437. Allow SecurityUtil to lookup alternate hostnames. HADOOP-12437. Allow SecurityUtil to lookup alternate hostnames.
(Arpit Agarwal) (Arpit Agarwal)
HADOOP-12442. Display help if the command option to 'hdfs dfs' is not valid
(nijel via vinayakumarb)
Release 2.7.2 - UNRELEASED Release 2.7.2 - UNRELEASED
INCOMPATIBLE CHANGES INCOMPATIBLE CHANGES

View File

@ -313,6 +313,7 @@ public class FsShell extends Configured implements Tool {
} }
} catch (IllegalArgumentException e) { } catch (IllegalArgumentException e) {
displayError(cmd, e.getLocalizedMessage()); displayError(cmd, e.getLocalizedMessage());
printUsage(System.err);
if (instance != null) { if (instance != null) {
printInstanceUsage(System.err, instance); printInstanceUsage(System.err, instance);
} }

View File

@ -17,8 +17,12 @@
*/ */
package org.apache.hadoop.fs; package org.apache.hadoop.fs;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import junit.framework.AssertionFailedError; import junit.framework.AssertionFailedError;
import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.tracing.SetSpanReceiver; import org.apache.hadoop.tracing.SetSpanReceiver;
import org.apache.hadoop.tracing.SpanReceiverHost; import org.apache.hadoop.tracing.SpanReceiverHost;
import org.apache.hadoop.util.ToolRunner; import org.apache.hadoop.util.ToolRunner;
@ -67,4 +71,33 @@ public class TestFsShell {
SetSpanReceiver.getMap() SetSpanReceiver.getMap()
.get("help").get(0).getKVAnnotations().get("args")); .get("help").get(0).getKVAnnotations().get("args"));
} }
@Test
public void testDFSWithInvalidCommmand() throws Throwable {
Configuration conf = new Configuration();
FsShell shell = new FsShell(conf);
String[] args = new String[1];
args[0] = "dfs -mkdirs";
final ByteArrayOutputStream bytes = new ByteArrayOutputStream();
final PrintStream out = new PrintStream(bytes);
final PrintStream oldErr = System.err;
try {
System.setErr(out);
ToolRunner.run(shell, args);
String errorValue=new String(bytes.toString());
Assert
.assertTrue(
"FSShell dfs command did not print the error " +
"message when invalid command is passed",
errorValue.contains("-mkdirs: Unknown command"));
Assert
.assertTrue(
"FSShell dfs command did not print help " +
"message when invalid command is passed",
errorValue.contains("Usage: hadoop fs [generic options]"));
} finally {
IOUtils.closeStream(out);
System.setErr(oldErr);
}
}
} }