Repository: hive Updated Branches: refs/heads/branch-3 1218619f6 -> abc504c89
HIVE-19744: In Beeline if -u is specified the default connection should not be tried at all (Zoltan Haindrich reviewed by Peter Vary) Signed-off-by: Zoltan Haindrich <k...@rxd.hu> Project: http://git-wip-us.apache.org/repos/asf/hive/repo Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/abc504c8 Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/abc504c8 Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/abc504c8 Branch: refs/heads/branch-3 Commit: abc504c897d51d6cf9ba45c37acb51615b40808a Parents: 1218619 Author: Zoltan Haindrich <k...@rxd.hu> Authored: Fri Jun 15 07:14:22 2018 +0200 Committer: Zoltan Haindrich <k...@rxd.hu> Committed: Fri Jun 15 08:20:23 2018 +0200 ---------------------------------------------------------------------- .../java/org/apache/hive/beeline/BeeLine.java | 36 ++++++++++++-------- .../BeelineWithHS2ConnectionFileTestBase.java | 32 +++++++++++++---- .../TestBeelineConnectionUsingHiveSite.java | 26 +++++++++++--- .../TestBeelineWithUserHs2ConnectionFile.java | 6 ++-- 4 files changed, 70 insertions(+), 30 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/abc504c8/beeline/src/java/org/apache/hive/beeline/BeeLine.java ---------------------------------------------------------------------- diff --git a/beeline/src/java/org/apache/hive/beeline/BeeLine.java b/beeline/src/java/org/apache/hive/beeline/BeeLine.java index 0d98679..d25859a 100644 --- a/beeline/src/java/org/apache/hive/beeline/BeeLine.java +++ b/beeline/src/java/org/apache/hive/beeline/BeeLine.java @@ -51,8 +51,8 @@ import java.sql.SQLWarning; import java.sql.Statement; import java.text.ChoiceFormat; import java.text.MessageFormat; -import java.util.Arrays; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.Date; @@ -75,11 +75,6 @@ import java.util.TreeMap; import java.util.TreeSet; import java.util.jar.Attributes; import java.util.jar.Manifest; -import jline.console.completer.Completer; -import jline.console.completer.StringsCompleter; -import jline.console.completer.FileNameCompleter; -import jline.console.ConsoleReader; -import jline.console.history.FileHistory; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.GnuParser; @@ -91,21 +86,26 @@ import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.hive.conf.HiveConf; import org.apache.hadoop.io.IOUtils; import org.apache.hive.beeline.cli.CliOptionsProcessor; -import org.apache.hive.common.util.ShutdownHookManager; import org.apache.hive.beeline.hs2connection.BeelineConfFileParseException; import org.apache.hive.beeline.hs2connection.BeelineSiteParseException; import org.apache.hive.beeline.hs2connection.BeelineSiteParser; -import org.apache.hive.beeline.hs2connection.HS2ConnectionFileUtils; -import org.apache.hive.beeline.hs2connection.UserHS2ConnectionFileParser; import org.apache.hive.beeline.hs2connection.HS2ConnectionFileParser; +import org.apache.hive.beeline.hs2connection.HS2ConnectionFileUtils; import org.apache.hive.beeline.hs2connection.HiveSiteHS2ConnectionFileParser; +import org.apache.hive.beeline.hs2connection.UserHS2ConnectionFileParser; +import org.apache.hive.common.util.ShutdownHookManager; +import org.apache.hive.jdbc.JdbcUriParseException; +import org.apache.hive.jdbc.Utils; +import org.apache.hive.jdbc.Utils.JdbcConnectionParams; import org.apache.thrift.transport.TTransportException; import com.google.common.annotations.VisibleForTesting; -import org.apache.hive.jdbc.JdbcUriParseException; -import org.apache.hive.jdbc.Utils; -import org.apache.hive.jdbc.Utils.JdbcConnectionParams; +import jline.console.ConsoleReader; +import jline.console.completer.Completer; +import jline.console.completer.FileNameCompleter; +import jline.console.completer.StringsCompleter; +import jline.console.history.FileHistory; /** * A console SQL shell with command completion. @@ -897,7 +897,11 @@ public class BeeLine implements Closeable { comForDebug = constructCmdUrl(url, user, driver, true); } debug(comForDebug); - return dispatch(com); + if (!dispatch(com)) { + exit = true; + return false; + } + return true; } // load property file String propertyFile = cl.getOptionValue("property-file"); @@ -1269,7 +1273,9 @@ public class BeeLine implements Closeable { if (!dispatch(line)) { lastExecutionResult = ERRNO_OTHER; - if (exitOnError) break; + if (exitOnError) { + break; + } } else if (line != null) { lastExecutionResult = ERRNO_OK; } @@ -2205,7 +2211,7 @@ public class BeeLine implements Closeable { } info("scan complete in " + (System.currentTimeMillis() - start) + "ms"); - return (Driver[]) driverClasses.toArray(new Driver[0]); + return driverClasses.toArray(new Driver[0]); } // ///////////////////////////////////// http://git-wip-us.apache.org/repos/asf/hive/blob/abc504c8/itests/hive-unit/src/test/java/org/apache/hive/beeline/hs2connection/BeelineWithHS2ConnectionFileTestBase.java ---------------------------------------------------------------------- diff --git a/itests/hive-unit/src/test/java/org/apache/hive/beeline/hs2connection/BeelineWithHS2ConnectionFileTestBase.java b/itests/hive-unit/src/test/java/org/apache/hive/beeline/hs2connection/BeelineWithHS2ConnectionFileTestBase.java index 2ed631a..06ada23 100644 --- a/itests/hive-unit/src/test/java/org/apache/hive/beeline/hs2connection/BeelineWithHS2ConnectionFileTestBase.java +++ b/itests/hive-unit/src/test/java/org/apache/hive/beeline/hs2connection/BeelineWithHS2ConnectionFileTestBase.java @@ -17,6 +17,7 @@ */ package org.apache.hive.beeline.hs2connection; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import java.io.ByteArrayOutputStream; @@ -191,8 +192,28 @@ public abstract class BeelineWithHS2ConnectionFileTestBase { assertFalse(rowSet.numRows() == 0); } - protected String testBeeLineConnection(String path, String[] beelineArgs, - String expectedOutput) throws IOException { + protected void assertBeelineOutputContains(String path, String[] beelineArgs, + String expectedOutput) throws Exception { + BeelineResult res = getBeelineOutput(path, beelineArgs); + assertEquals(0, res.exitCode); + Assert.assertNotNull(res.output); + Assert.assertTrue("Output " + res.output + " does not contain " + expectedOutput, + res.output.toLowerCase().contains(expectedOutput.toLowerCase())); + } + + static class BeelineResult { + + public final String output; + public final int exitCode; + + public BeelineResult(String output, int exitCode) { + this.output = output; + this.exitCode = exitCode; + } + + } + + protected BeelineResult getBeelineOutput(String path, String[] beelineArgs) throws Exception { TestBeeLine beeLine = null; try { if(path != null) { @@ -202,13 +223,10 @@ public abstract class BeelineWithHS2ConnectionFileTestBase { } else { beeLine = new TestBeeLine(); } - beeLine.begin(beelineArgs, null); + int exitCode = beeLine.begin(beelineArgs, null); String output = beeLine.getOutput(); System.out.println(output); - Assert.assertNotNull(output); - Assert.assertTrue("Output " + output + " does not contain " + expectedOutput, - output.toLowerCase().contains(expectedOutput.toLowerCase())); - return output; + return new BeelineResult(output, exitCode); } finally { if (beeLine != null) { beeLine.close(); http://git-wip-us.apache.org/repos/asf/hive/blob/abc504c8/itests/hive-unit/src/test/java/org/apache/hive/beeline/hs2connection/TestBeelineConnectionUsingHiveSite.java ---------------------------------------------------------------------- diff --git a/itests/hive-unit/src/test/java/org/apache/hive/beeline/hs2connection/TestBeelineConnectionUsingHiveSite.java b/itests/hive-unit/src/test/java/org/apache/hive/beeline/hs2connection/TestBeelineConnectionUsingHiveSite.java index 8e60d67..480d414 100644 --- a/itests/hive-unit/src/test/java/org/apache/hive/beeline/hs2connection/TestBeelineConnectionUsingHiveSite.java +++ b/itests/hive-unit/src/test/java/org/apache/hive/beeline/hs2connection/TestBeelineConnectionUsingHiveSite.java @@ -17,6 +17,10 @@ */ package org.apache.hive.beeline.hs2connection; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + import java.io.File; import org.apache.hadoop.hive.conf.HiveConf.ConfVars; @@ -27,21 +31,31 @@ public class TestBeelineConnectionUsingHiveSite extends BeelineWithHS2Connection public void testBeelineConnectionHttp() throws Exception { setupHs2(); String path = createDefaultHs2ConnectionFile(); - testBeeLineConnection(path, new String[] { "-e", "show tables;" }, tableName); + assertBeelineOutputContains(path, new String[] { "-e", "show tables;" }, tableName); } @Test public void testBeelineConnectionSSL() throws Exception { setupSSLHs2(); String path = createDefaultHs2ConnectionFile(); - testBeeLineConnection(path, new String[] { "-e", "show tables;" }, tableName); + assertBeelineOutputContains(path, new String[] { "-e", "show tables;" }, tableName); } @Test public void testBeelineConnectionNoAuth() throws Exception { setupNoAuthHs2(); String path = createDefaultHs2ConnectionFile(); - testBeeLineConnection(path, new String[] { "-e", "show tables;" }, tableName); + assertBeelineOutputContains(path, new String[] { "-e", "show tables;" }, tableName); + } + + @Test + public void testBeelineDoesntUseDefaultIfU() throws Exception { + setupNoAuthHs2(); + String path = createDefaultHs2ConnectionFile(); + BeelineResult res = getBeelineOutput(path, new String[] {"-u", "invalidUrl", "-e", "show tables;" }); + assertEquals(1, res.exitCode); + assertFalse(tableName + " should not appear", res.output.toLowerCase().contains(tableName)); + } /* @@ -51,7 +65,9 @@ public class TestBeelineConnectionUsingHiveSite extends BeelineWithHS2Connection @Test public void testBeelineWithNoConnectionFile() throws Exception { setupNoAuthHs2(); - testBeeLineConnection(null, new String[] { "-e", "show tables;" }, "no current connection"); + BeelineResult res = getBeelineOutput(null, new String[] {"-e", "show tables;" }); + assertEquals(1, res.exitCode); + assertTrue(res.output.toLowerCase().contains("no current connection")); } @Test @@ -60,7 +76,7 @@ public class TestBeelineConnectionUsingHiveSite extends BeelineWithHS2Connection String url = miniHS2.getBaseJdbcURL() + "default"; String args[] = new String[] { "-u", url, "-n", System.getProperty("user.name"), "-p", "foo", "-e", "show tables;" }; - testBeeLineConnection(null, args, tableName); + assertBeelineOutputContains(null, args, tableName); } private void setupNoAuthHs2() throws Exception { http://git-wip-us.apache.org/repos/asf/hive/blob/abc504c8/itests/hive-unit/src/test/java/org/apache/hive/beeline/hs2connection/TestBeelineWithUserHs2ConnectionFile.java ---------------------------------------------------------------------- diff --git a/itests/hive-unit/src/test/java/org/apache/hive/beeline/hs2connection/TestBeelineWithUserHs2ConnectionFile.java b/itests/hive-unit/src/test/java/org/apache/hive/beeline/hs2connection/TestBeelineWithUserHs2ConnectionFile.java index ac595b4..84a8b37 100644 --- a/itests/hive-unit/src/test/java/org/apache/hive/beeline/hs2connection/TestBeelineWithUserHs2ConnectionFile.java +++ b/itests/hive-unit/src/test/java/org/apache/hive/beeline/hs2connection/TestBeelineWithUserHs2ConnectionFile.java @@ -29,7 +29,7 @@ public class TestBeelineWithUserHs2ConnectionFile extends BeelineWithHS2Connecti public void testBeelineConnectionHttp() throws Exception { setupHttpHs2(); String path = createHttpHs2ConnectionFile(); - testBeeLineConnection(path, new String[] { "-e", "show tables;" }, tableName); + assertBeelineOutputContains(path, new String[] { "-e", "show tables;" }, tableName); } private void setupHttpHs2() throws Exception { @@ -64,7 +64,7 @@ public class TestBeelineWithUserHs2ConnectionFile extends BeelineWithHS2Connecti public void testBeelineConnectionNoAuth() throws Exception { setupNoAuthConfHS2(); String path = createNoAuthHs2ConnectionFile(); - testBeeLineConnection(path, new String[] { "-e", "show tables;" }, tableName); + assertBeelineOutputContains(path, new String[] { "-e", "show tables;" }, tableName); } private void setupNoAuthConfHS2() throws Exception { @@ -91,7 +91,7 @@ public class TestBeelineWithUserHs2ConnectionFile extends BeelineWithHS2Connecti public void testBeelineConnectionSSL() throws Exception { setupSslHs2(); String path = createSSLHs2ConnectionFile(); - testBeeLineConnection(path, new String[] { "-e", "show tables;" }, tableName); + assertBeelineOutputContains(path, new String[] { "-e", "show tables;" }, tableName); } private String createSSLHs2ConnectionFile() throws Exception {