OpenJDK / jdk / jdk
changeset 59967:d90ab2b4e119
8247438: JShell: When FailOverExecutionControlProvider fails the proximal cause is not shown
8237743: test/langtools/jdk/jshell/FailOverExecutionControlTest.java fails No ExecutionControlProvider with name 'nonExistent' and parameter keys: []
8199646: JShell tests: jdk/jshell/FailOverDirectExecutionControlTest.java failed with java.lang.UnsupportedOperationException
Reviewed-by: jlahoda
author | rfield |
---|---|
date | Fri, 26 Jun 2020 18:20:22 -0700 |
parents | 561a1d66a4fd |
children | f3f74bdf454d |
files | src/jdk.jshell/share/classes/jdk/jshell/execution/FailOverExecutionControlProvider.java test/langtools/jdk/jshell/ExecutionControlTestBase.java test/langtools/jdk/jshell/FailOverDirectExecutionControlTest.java test/langtools/jdk/jshell/FailOverExecutionControlDyingLaunchTest.java test/langtools/jdk/jshell/FailOverExecutionControlHangingLaunchTest.java test/langtools/jdk/jshell/FailOverExecutionControlHangingListenTest.java test/langtools/jdk/jshell/FailOverExecutionControlTest.java |
diffstat | 7 files changed, 46 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/src/jdk.jshell/share/classes/jdk/jshell/execution/FailOverExecutionControlProvider.java Fri Jun 26 15:08:25 2020 -0700 +++ b/src/jdk.jshell/share/classes/jdk/jshell/execution/FailOverExecutionControlProvider.java Fri Jun 26 18:20:22 2020 -0700 @@ -96,6 +96,8 @@ public ExecutionControl generate(ExecutionEnv env, Map<String, String> parameters) throws Throwable { Throwable thrown = null; + StringWriter dumpsw = new StringWriter(); + PrintWriter dump = new PrintWriter(dumpsw); for (int i = 0; i <= 9; ++i) { String param = parameters.get("" + i); if (param != null && !param.isEmpty()) { @@ -115,10 +117,17 @@ ex.printStackTrace(log); log.flush(); logger().fine(writer.toString()); - // only care about the first, and only if they all fail - if (thrown == null) { - thrown = ex; + // if they all fail, use the last as cause and include info about prior in message + dump.printf("FailOverExecutionControlProvider: FAILED: %d:%s --%n", i, param); + dump.printf(" Exception: %s%n", ex); + var st = ex.getStackTrace(); + for (int k = 0; k < 5 && k < st.length; ++k) { + dump.printf(" %s%n", st[k]); } + if (ex.getCause() != null) { + dump.printf(" cause: %s%n", ex.getCause()); + } + thrown = ex; } } @@ -127,7 +136,7 @@ if (thrown == null) { throw new IllegalArgumentException("All least one parameter must be set to a provider."); } - throw thrown; + throw new RuntimeException(dumpsw.toString(), thrown); } private Logger logger() {
--- a/test/langtools/jdk/jshell/ExecutionControlTestBase.java Fri Jun 26 15:08:25 2020 -0700 +++ b/test/langtools/jdk/jshell/ExecutionControlTestBase.java Fri Jun 26 18:20:22 2020 -0700 @@ -25,12 +25,30 @@ import org.testng.annotations.Test; import jdk.jshell.VarSnippet; +import java.net.InetAddress; import static jdk.jshell.Snippet.Status.VALID; import static jdk.jshell.Snippet.SubKind.*; public class ExecutionControlTestBase extends KullaTesting { + String standardListenSpec() { + String loopback = InetAddress.getLoopbackAddress().getHostAddress(); + return "jdi:hostname(" + loopback + ")"; + } + + String standardLaunchSpec() { + return "jdi:launch(true)"; + } + + String standardJdiSpec() { + return "jdi"; + } + + String standardSpecs() { + return "5(" + standardListenSpec() + "), 6(" + standardLaunchSpec() + "), 7(" + standardJdiSpec() + ")"; + } + @Test public void classesDeclaration() { assertEval("interface A { }");
--- a/test/langtools/jdk/jshell/FailOverDirectExecutionControlTest.java Fri Jun 26 15:08:25 2020 -0700 +++ b/test/langtools/jdk/jshell/FailOverDirectExecutionControlTest.java Fri Jun 26 18:20:22 2020 -0700 @@ -129,7 +129,9 @@ Map<String, String> pm = provider.defaultParameters(); pm.put("0", "alwaysFailing"); pm.put("1", "alwaysFailing"); - pm.put("2", "jdi"); + pm.put("2", standardListenSpec()); + pm.put("3", standardLaunchSpec()); + pm.put("4", standardJdiSpec()); setUp(builder -> builder.executionEngine(provider, pm)); } @@ -156,6 +158,10 @@ assertTrue(log.contains("Failure failover -- 1 = alwaysFailing"), log); assertTrue(log.contains("This operation intentionally broken"), log); log = logged.get(Level.FINEST).get(0); - assertTrue(log.contains("Success failover -- 2 = jdi"), log); + assertTrue( + log.contains("Success failover -- 2 = " + standardListenSpec()) + || log.contains("Success failover -- 3 = " + standardLaunchSpec()) + || log.contains("Success failover -- 4 = " + standardJdiSpec()), + log); } }
--- a/test/langtools/jdk/jshell/FailOverExecutionControlDyingLaunchTest.java Fri Jun 26 15:08:25 2020 -0700 +++ b/test/langtools/jdk/jshell/FailOverExecutionControlDyingLaunchTest.java Fri Jun 26 18:20:22 2020 -0700 @@ -42,6 +42,7 @@ @Override public void setUp() { setUp(builder -> builder.executionEngine( - "failover:0(jdi:remoteAgent(DyingRemoteAgent),launch(true)), 4(jdi:launch(true))")); + "failover:0(jdi:remoteAgent(DyingRemoteAgent),launch(true)), " + + standardSpecs())); } }
--- a/test/langtools/jdk/jshell/FailOverExecutionControlHangingLaunchTest.java Fri Jun 26 15:08:25 2020 -0700 +++ b/test/langtools/jdk/jshell/FailOverExecutionControlHangingLaunchTest.java Fri Jun 26 18:20:22 2020 -0700 @@ -41,6 +41,7 @@ @Override public void setUp() { setUp(builder -> builder.executionEngine( - "failover:0(jdi:remoteAgent(HangingRemoteAgent),launch(true)), 1(jdi:launch(true))")); + "failover:0(jdi:remoteAgent(HangingRemoteAgent),launch(true)), " + + standardSpecs())); } }
--- a/test/langtools/jdk/jshell/FailOverExecutionControlHangingListenTest.java Fri Jun 26 15:08:25 2020 -0700 +++ b/test/langtools/jdk/jshell/FailOverExecutionControlHangingListenTest.java Fri Jun 26 18:20:22 2020 -0700 @@ -45,6 +45,6 @@ String loopback = InetAddress.getLoopbackAddress().getHostAddress(); setUp(builder -> builder.executionEngine( "failover:0(jdi:remoteAgent(HangingRemoteAgent),hostname(" + loopback + "))," - + "1(jdi:hostname(" + loopback + "))")); + + standardSpecs())); } }
--- a/test/langtools/jdk/jshell/FailOverExecutionControlTest.java Fri Jun 26 15:08:25 2020 -0700 +++ b/test/langtools/jdk/jshell/FailOverExecutionControlTest.java Fri Jun 26 18:20:22 2020 -0700 @@ -40,7 +40,8 @@ @BeforeMethod @Override public void setUp() { - setUp(builder -> builder.executionEngine("failover:0(nonExistent), 1(nonExistent), 2(jdi:launch(true))")); + setUp(builder -> builder.executionEngine("failover:0(expectedFailureNonExistent1), 1(expectedFailureNonExistent2), " + + standardSpecs())); } }