From de30767bb4ae12f728995765724efe0296d8226e Mon Sep 17 00:00:00 2001 From: Ashish Singhi Date: Wed, 22 Oct 2014 22:38:02 +0530 Subject: [PATCH] HBASE-12304 CellCounter will throw AIOBE when output directory is not specified --- .../apache/hadoop/hbase/mapreduce/CellCounter.java | 2 +- .../hadoop/hbase/mapreduce/TestCellCounter.java | 27 ++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/mapreduce/CellCounter.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/mapreduce/CellCounter.java index 476ca36..df97f63 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/mapreduce/CellCounter.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/mapreduce/CellCounter.java @@ -243,7 +243,7 @@ public class CellCounter { public static void main(String[] args) throws Exception { Configuration conf = HBaseConfiguration.create(); String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs(); - if (otherArgs.length < 1) { + if (otherArgs.length < 2) { System.err.println("ERROR: Wrong number of parameters: " + args.length); System.err.println("Usage: CellCounter " + "[^[regex pattern] or [Prefix] for row filter]] "); diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/mapreduce/TestCellCounter.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/mapreduce/TestCellCounter.java index e829755..36443ad 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/mapreduce/TestCellCounter.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/mapreduce/TestCellCounter.java @@ -197,4 +197,31 @@ public class TestCellCounter { FileUtil.fullyDelete(new File(outputPath)); } } + + @Test (timeout=300000) + public void TestCellCounterWithoutOutputDir() throws Exception { + PrintStream oldPrintStream = System.err; + SecurityManager SECURITY_MANAGER = System.getSecurityManager(); + LauncherSecurityManager newSecurityManager= new LauncherSecurityManager(); + System.setSecurityManager(newSecurityManager); + ByteArrayOutputStream data = new ByteArrayOutputStream(); + String[] args = {"tableName"}; + System.setErr(new PrintStream(data)); + try { + System.setErr(new PrintStream(data)); + try { + CellCounter.main(args); + fail("should be SecurityException"); + } catch (SecurityException e) { + assertEquals(-1, newSecurityManager.getExitCode()); + assertTrue(data.toString().contains("ERROR: Wrong number of parameters:")); + // should be information about usage + assertTrue(data.toString().contains("Usage:")); + } + + } finally { + System.setErr(oldPrintStream); + System.setSecurityManager(SECURITY_MANAGER); + } + } } -- 1.9.2.msysgit.0