diff --git cli/src/java/org/apache/hadoop/hive/cli/CliDriver.java cli/src/java/org/apache/hadoop/hive/cli/CliDriver.java index 21ba38c..06c3f6c 100644 --- cli/src/java/org/apache/hadoop/hive/cli/CliDriver.java +++ cli/src/java/org/apache/hadoop/hive/cli/CliDriver.java @@ -67,7 +67,6 @@ import org.apache.hadoop.hive.ql.session.SessionState.LogHelper; import org.apache.hadoop.hive.service.HiveClient; import org.apache.hadoop.hive.service.HiveServerException; -import org.apache.hadoop.hive.shims.ShimLoader; import org.apache.hadoop.io.IOUtils; import org.apache.thrift.TException; @@ -99,6 +98,7 @@ public CliDriver() { public int processCmd(String cmd) { CliSessionState ss = (CliSessionState) SessionState.get(); + ss.setLastCommand(cmd); // Flush the print stream, so it doesn't include output from the last command ss.err.flush(); String cmd_trimmed = cmd.trim(); diff --git hbase-handler/src/test/templates/TestHBaseCliDriver.vm hbase-handler/src/test/templates/TestHBaseCliDriver.vm index dee189d..01d596a 100644 --- hbase-handler/src/test/templates/TestHBaseCliDriver.vm +++ hbase-handler/src/test/templates/TestHBaseCliDriver.vm @@ -120,21 +120,17 @@ public class $className extends TestCase { qt.clearTestSideEffects(); int ecode = qt.executeClient(fname); if (ecode != 0) { - fail("Client Execution failed with error code = " + ecode); + qt.failed(ecode, fname, null); } ecode = qt.checkCliDriverResults(fname); if (ecode != 0) { - fail("Client execution results failed with error code = " + ecode); + qt.failedDiff(ecode, fname, null); } qt.clearPostTestEffects(); } catch (Throwable e) { - System.err.println("Exception: " + e.getMessage()); - e.printStackTrace(); - System.err.println("Failed query: " + fname); - System.err.flush(); - fail("Unexpected exception"); + qt.failed(e, fname, null); } long elapsedTime = System.currentTimeMillis() - startTime; diff --git hbase-handler/src/test/templates/TestHBaseNegativeCliDriver.vm hbase-handler/src/test/templates/TestHBaseNegativeCliDriver.vm index 00e7174..45c7338 100644 --- hbase-handler/src/test/templates/TestHBaseNegativeCliDriver.vm +++ hbase-handler/src/test/templates/TestHBaseNegativeCliDriver.vm @@ -120,21 +120,17 @@ public class $className extends TestCase { qt.clearTestSideEffects(); int ecode = qt.executeClient(fname); if (ecode == 0) { - fail("Client Execution failed with error code = " + ecode); + qt.failed(fname, null); } ecode = qt.checkCliDriverResults(fname); if (ecode != 0) { - fail("Client execution results failed with error code = " + ecode); + qt.failedDiff(ecode, fname, null); } qt.clearPostTestEffects(); } catch (Throwable e) { - System.err.println("Exception: " + e.getMessage()); - e.printStackTrace(); - System.err.println("Failed query: " + fname); - System.err.flush(); - fail("Unexpected exception"); + qt.failed(e, fname, null); } long elapsedTime = System.currentTimeMillis() - startTime; diff --git itests/util/src/main/java/org/apache/hadoop/hive/ql/QTestUtil.java itests/util/src/main/java/org/apache/hadoop/hive/ql/QTestUtil.java index d714cd4..9ad5986 100644 --- itests/util/src/main/java/org/apache/hadoop/hive/ql/QTestUtil.java +++ itests/util/src/main/java/org/apache/hadoop/hive/ql/QTestUtil.java @@ -51,6 +51,7 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; +import junit.framework.Assert; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.apache.commons.logging.Log; @@ -1709,4 +1710,31 @@ public boolean accept(File dir, String name) { } return result; } + + public void failed(int ecode, String fname, String debugHint) { + String command = SessionState.get() != null ? SessionState.get().getLastCommand() : null; + Assert.fail("Client Execution failed with error code = " + ecode + + (command != null ? " running " + command : "") + (debugHint != null ? debugHint : "")); + } + + public void failed(String fname, String debugHint) { + String command = SessionState.get() != null ? SessionState.get().getLastCommand() : null; + Assert.fail("Client Execution was expected to fail, but succeeded with error code 0 " + + (command != null ? " running " + command : "") + (debugHint != null ? debugHint : "")); + } + + public void failedDiff(int ecode, String fname, String debugHint) { + Assert.fail("Client Execution results failed with error code = " + ecode + + (debugHint != null ? debugHint : "")); + } + + public void failed(Throwable e, String fname, String debugHint) { + String command = SessionState.get() != null ? SessionState.get().getLastCommand() : null; + System.err.println("Exception: " + e.getMessage()); + e.printStackTrace(); + System.err.println("Failed query: " + fname); + System.err.flush(); + Assert.fail("Unexpected exception" + (command != null ? " running " + command : "") + + (debugHint != null ? debugHint : "")); + } } diff --git ql/src/java/org/apache/hadoop/hive/ql/session/SessionState.java ql/src/java/org/apache/hadoop/hive/ql/session/SessionState.java index ef35f1a..611a481 100644 --- ql/src/java/org/apache/hadoop/hive/ql/session/SessionState.java +++ ql/src/java/org/apache/hadoop/hive/ql/session/SessionState.java @@ -116,6 +116,8 @@ */ private HiveOperation commandType; + private String lastCommand; + private HiveAuthorizationProvider authorizer; private HiveAuthenticationProvider authenticator; @@ -379,6 +381,14 @@ private static String makeSessionId() { return UUID.randomUUID().toString(); } + public String getLastCommand() { + return lastCommand; + } + + public void setLastCommand(String lastCommand) { + this.lastCommand = lastCommand; + } + /** * This class provides helper routines to emit informational and error * messages to the user and log4j files while obeying the current session's diff --git ql/src/test/templates/TestCliDriver.vm ql/src/test/templates/TestCliDriver.vm index c3d0e5e..4776c75 100644 --- ql/src/test/templates/TestCliDriver.vm +++ ql/src/test/templates/TestCliDriver.vm @@ -143,20 +143,15 @@ public class $className extends TestCase { qt.cliInit(fname, false); int ecode = qt.executeClient(fname); if (ecode != 0) { - fail("Client Execution failed with error code = " + ecode + debugHint); + qt.failed(ecode, fname, debugHint); } ecode = qt.checkCliDriverResults(fname); if (ecode != 0) { - fail("Client execution results failed with error code = " + ecode - + debugHint); + qt.failedDiff(ecode, fname, debugHint); } } catch (Throwable e) { - System.err.println("Exception: " + e.getMessage()); - e.printStackTrace(); - System.err.println("Failed query: " + fname); - System.err.flush(); - fail("Unexpected exception" + debugHint); + qt.failed(e, fname, debugHint); } long elapsedTime = System.currentTimeMillis() - startTime; diff --git ql/src/test/templates/TestCompareCliDriver.vm ql/src/test/templates/TestCompareCliDriver.vm index f155f3d..f6f43b8 100644 --- ql/src/test/templates/TestCompareCliDriver.vm +++ ql/src/test/templates/TestCompareCliDriver.vm @@ -165,21 +165,17 @@ public class $className extends TestCase { // TODO: will this work? ecode = qt.executeClient(versionFile, fname); if (ecode != 0) { - fail("Client Execution failed with error code = " + ecode + debugHint); + qt.failed(ecode, fname, debugHint); } } ecode = qt.checkCompareCliDriverResults(fname, outputs); if (ecode != 0) { - fail("Diff failed with exit code = " + ecode + debugHint); + qt.failedDiff(ecode, fname, debugHint); } } catch (Throwable e) { - System.err.println("Exception: " + e.getMessage()); - e.printStackTrace(); - System.err.println("Failed query: " + fname); - System.err.flush(); - fail("Unexpected exception" + debugHint); + qt.failed(e, fname, debugHint); } long elapsedTime = System.currentTimeMillis() - startTime; diff --git ql/src/test/templates/TestNegativeCliDriver.vm ql/src/test/templates/TestNegativeCliDriver.vm index 54c35ca..991d5ac 100644 --- ql/src/test/templates/TestNegativeCliDriver.vm +++ ql/src/test/templates/TestNegativeCliDriver.vm @@ -141,22 +141,16 @@ public class $className extends TestCase { qt.cliInit(fname, false); int ecode = qt.executeClient(fname); if (ecode == 0) { - fail("Client Execution was expected to fail, but succeeded with error code 0 " - + debugHint); + qt.failed(fname, debugHint); } ecode = qt.checkCliDriverResults(fname); if (ecode != 0) { - fail("Client execution results failed with error code = " + ecode - + debugHint); + qt.failedDiff(ecode, fname, debugHint); } } catch (Throwable e) { - System.err.println("Exception: " + e.getMessage()); - e.printStackTrace(); - System.err.println("Failed query: " + fname); - System.err.flush(); - fail("Unexpected exception" + debugHint); + qt.failed(e, fname, debugHint); } long elapsedTime = System.currentTimeMillis() - startTime; diff --git ql/src/test/templates/TestParse.vm ql/src/test/templates/TestParse.vm index e3ea302..c476536 100644 --- ql/src/test/templates/TestParse.vm +++ ql/src/test/templates/TestParse.vm @@ -138,11 +138,7 @@ public class $className extends TestCase { qt.getQMap().clear(); } catch (Throwable e) { - System.err.println("Exception: " + e.getMessage()); - e.printStackTrace(); - System.err.println("Failed query: " + fname); - System.err.flush(); - fail("Unexpected exception" + debugHint); + qt.failed(e, fname, debugHint); } long elapsedTime = System.currentTimeMillis() - startTime; diff --git ql/src/test/templates/TestParseNegative.vm ql/src/test/templates/TestParseNegative.vm index 658eda3..f62f17e 100755 --- ql/src/test/templates/TestParseNegative.vm +++ ql/src/test/templates/TestParseNegative.vm @@ -128,21 +128,17 @@ public class $className extends TestCase { catch (ParseException pe) { int ecode = qt.checkNegativeResults(fname, pe); if (ecode != 0) { - fail("failed with error code = " + ecode + debugHint); + qt.failed(ecode, fname, debugHint); } } catch (SemanticException se) { int ecode = qt.checkNegativeResults(fname, se); if (ecode != 0) { - fail("failed with error code = " + ecode + debugHint); + qt.failedDiff(ecode, fname, debugHint); } } catch (Throwable e) { - System.err.println("Exception: " + e.getMessage()); - e.printStackTrace(); - System.err.println("Failed query: " + fname); - System.err.flush(); - fail("Unexpected exception" + debugHint); + qt.failed(e, fname, debugHint); } long elapsedTime = System.currentTimeMillis() - startTime;