From d56812632858833da896f4cdc278d3a6aea73805 Mon Sep 17 00:00:00 2001 From: pesse Date: Thu, 10 Jun 2021 23:21:09 +0200 Subject: [PATCH 1/4] Add new --catch-ora-stuck parameter Reson for this that I have the assumption that catch is too greedy, leading to more abort- and retries than necessary. --- src/main/java/org/utplsql/cli/RunAction.java | 3 ++- .../java/org/utplsql/cli/RunPicocliCommand.java | 4 ++++ .../org/utplsql/cli/config/RunCommandConfig.java | 16 +++++++++++++--- .../org/utplsql/cli/RunCommandArgumentsTest.java | 3 ++- ...andConfigParamsArePassedToTestRunnerTest.java | 10 ++++++++++ src/test/java/org/utplsql/cli/RunCommandIT.java | 10 ++++++++++ .../org/utplsql/cli/RunCommandIssue20IT.java | 3 ++- 7 files changed, 43 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/utplsql/cli/RunAction.java b/src/main/java/org/utplsql/cli/RunAction.java index d91108a..ba0faf3 100644 --- a/src/main/java/org/utplsql/cli/RunAction.java +++ b/src/main/java/org/utplsql/cli/RunAction.java @@ -166,7 +166,8 @@ TestRunner newTestRunner(List reporterList) { .randomTestOrder(config.isRandomTestOrder()) .randomTestOrderSeed(config.getRandomTestOrderSeed()) .addTags(Arrays.asList(config.getTags())) - .addCoverageSchemes(Arrays.asList(config.getCoverageSchemes())); + .addCoverageSchemes(Arrays.asList(config.getCoverageSchemes())) + .catchOraStuck(config.isCatchOraStuck()); } private void outputMainInformation() { diff --git a/src/main/java/org/utplsql/cli/RunPicocliCommand.java b/src/main/java/org/utplsql/cli/RunPicocliCommand.java index a90ffd9..c024a3b 100644 --- a/src/main/java/org/utplsql/cli/RunPicocliCommand.java +++ b/src/main/java/org/utplsql/cli/RunPicocliCommand.java @@ -183,6 +183,9 @@ FileMapperConfig toFileMapperConfig() { @Option(names = "-h", usageHelp = true, description = "display this help and exit") boolean help; + @Option(names = "--catch-ora-stuck", description = "Sets a timeout around Reporter creation and retries when not ready after a while") + boolean catchOraStuck = false; + private RunAction runAction; private String[] splitOrEmpty(String value) { @@ -245,6 +248,7 @@ public RunCommandConfig getRunCommandConfig() { .randomTestOrderSeed(randomTestOrderSeed) .tags(tags.toArray(new String[0])) .coverageSchemes(coverageSchemes.toArray(new String[0])) + .catchOraStuck(catchOraStuck) .create(); } diff --git a/src/main/java/org/utplsql/cli/config/RunCommandConfig.java b/src/main/java/org/utplsql/cli/config/RunCommandConfig.java index ea66ffd..7b92dbe 100644 --- a/src/main/java/org/utplsql/cli/config/RunCommandConfig.java +++ b/src/main/java/org/utplsql/cli/config/RunCommandConfig.java @@ -23,9 +23,10 @@ public class RunCommandConfig extends ConnectionConfig { private final Integer randomTestOrderSeed; private final String[] tags; private final String[] coverageSchemes; + private final boolean catchOraStuck; - @ConstructorProperties({"connectString", "suitePaths", "reporters", "outputAnsiColor", "failureExitCode", "skipCompatibilityCheck", "includePackages", "excludePackages", "sourceMapping", "testMapping", "logConfigLevel", "timeoutInMinutes", "dbmsOutput", "randomTestOrder", "randomTestOrderSeed", "tags", "coverageSchemes"}) - public RunCommandConfig(String connectString, String[] suitePaths, ReporterConfig[] reporters, boolean outputAnsiColor, Integer failureExitCode, boolean skipCompatibilityCheck, String[] includePackages, String[] excludePackages, FileMapperConfig sourceMapping, FileMapperConfig testMapping, ConfigLevel logConfigLevel, Integer timeoutInMinutes, boolean dbmsOutput, boolean randomTestOrder, Integer randomTestOrderSeed, String[] tags, String[] coverageSchemes) { + @ConstructorProperties({"connectString", "suitePaths", "reporters", "outputAnsiColor", "failureExitCode", "skipCompatibilityCheck", "includePackages", "excludePackages", "sourceMapping", "testMapping", "logConfigLevel", "timeoutInMinutes", "dbmsOutput", "randomTestOrder", "randomTestOrderSeed", "tags", "coverageSchemes", "catchOraStuck"}) + public RunCommandConfig(String connectString, String[] suitePaths, ReporterConfig[] reporters, boolean outputAnsiColor, Integer failureExitCode, boolean skipCompatibilityCheck, String[] includePackages, String[] excludePackages, FileMapperConfig sourceMapping, FileMapperConfig testMapping, ConfigLevel logConfigLevel, Integer timeoutInMinutes, boolean dbmsOutput, boolean randomTestOrder, Integer randomTestOrderSeed, String[] tags, String[] coverageSchemes, boolean catchOraStuck) { super(connectString); this.suitePaths = suitePaths; this.reporters = reporters; @@ -43,6 +44,7 @@ public RunCommandConfig(String connectString, String[] suitePaths, ReporterConfi this.randomTestOrderSeed = randomTestOrderSeed; this.tags = tags; this.coverageSchemes = coverageSchemes; + this.catchOraStuck = catchOraStuck; } public String[] getSuitePaths() { @@ -109,6 +111,8 @@ public String[] getCoverageSchemes() { return coverageSchemes; } + public boolean isCatchOraStuck() { return catchOraStuck; } + public static class Builder { private String connectString; @@ -128,6 +132,7 @@ public static class Builder { private Integer randomTestOrderSeed; private String[] tags = new String[0]; private String[] coverageSchemes = new String[0]; + private boolean catchOraStuck; public Builder connectString(String connectString) { this.connectString = connectString; @@ -214,8 +219,13 @@ public Builder coverageSchemes(String[] coverageSchemes) { return this; } + public Builder catchOraStuck(boolean catchOraStuck) { + this.catchOraStuck = catchOraStuck; + return this; + } + public RunCommandConfig create() { - return new RunCommandConfig(connectString, suitePaths, reporters, outputAnsiColor, failureExitCode, skipCompatibilityCheck, includePackages, excludePackages, sourceMapping, testMapping, logConfigLevel, timeoutInMinutes, dbmsOutput, randomTestOrder, randomTestOrderSeed, tags, coverageSchemes); + return new RunCommandConfig(connectString, suitePaths, reporters, outputAnsiColor, failureExitCode, skipCompatibilityCheck, includePackages, excludePackages, sourceMapping, testMapping, logConfigLevel, timeoutInMinutes, dbmsOutput, randomTestOrder, randomTestOrderSeed, tags, coverageSchemes, catchOraStuck); } } } diff --git a/src/test/java/org/utplsql/cli/RunCommandArgumentsTest.java b/src/test/java/org/utplsql/cli/RunCommandArgumentsTest.java index d280c2e..af368a4 100644 --- a/src/test/java/org/utplsql/cli/RunCommandArgumentsTest.java +++ b/src/test/java/org/utplsql/cli/RunCommandArgumentsTest.java @@ -41,7 +41,8 @@ public void allArgumentsAreRecognized() { "-type_mapping=\"sql=PACKAGE BODY\"", "-owner_subexpression=0", "-type_subexpression=0", - "-name_subexpression=0" + "-name_subexpression=0", + "--catch-ora-stuck" ); TestRunner testRunner = runCmd.newTestRunner(new ArrayList<>()); diff --git a/src/test/java/org/utplsql/cli/RunCommandConfigParamsArePassedToTestRunnerTest.java b/src/test/java/org/utplsql/cli/RunCommandConfigParamsArePassedToTestRunnerTest.java index b1b34d4..2a2e3bb 100644 --- a/src/test/java/org/utplsql/cli/RunCommandConfigParamsArePassedToTestRunnerTest.java +++ b/src/test/java/org/utplsql/cli/RunCommandConfigParamsArePassedToTestRunnerTest.java @@ -8,6 +8,7 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.contains; +import static org.junit.jupiter.api.Assertions.assertTrue; public class RunCommandConfigParamsArePassedToTestRunnerTest { @@ -28,4 +29,13 @@ void coverageSchemes() { TestRunner testRunner = new RunAction(config).newTestRunner(new ArrayList<>()); assertThat( testRunner.getOptions().coverageSchemes, contains("schema1", "another_schema", "and-another-one") ); } + + @Test + void catchOraStuck() { + RunCommandConfig config = new RunCommandConfig.Builder() + .catchOraStuck(true) + .create(); + TestRunner testRunner = new RunAction(config).newTestRunner(new ArrayList<>()); + assertTrue( testRunner.getOptions().catchOraStuck ); + } } diff --git a/src/test/java/org/utplsql/cli/RunCommandIT.java b/src/test/java/org/utplsql/cli/RunCommandIT.java index e6ac671..291e980 100644 --- a/src/test/java/org/utplsql/cli/RunCommandIT.java +++ b/src/test/java/org/utplsql/cli/RunCommandIT.java @@ -89,4 +89,14 @@ void run_withOutputButNoReporterDefined() throws Exception { assertValidReturnCode(result); } + + @Test + void run_withCatchOraStuck() throws Exception { + int result = TestHelper.runApp("run", + TestHelper.getConnectionString(), + "--catch-ora-stuck", + "--failure-exit-code=2"); + + assertValidReturnCode(result); + } } diff --git a/src/test/java/org/utplsql/cli/RunCommandIssue20IT.java b/src/test/java/org/utplsql/cli/RunCommandIssue20IT.java index 0976706..9db13e0 100644 --- a/src/test/java/org/utplsql/cli/RunCommandIssue20IT.java +++ b/src/test/java/org/utplsql/cli/RunCommandIssue20IT.java @@ -24,7 +24,8 @@ void runLoop() { IRunCommand runCmd = TestHelper.createRunCommand( TestHelper.getConnectionString(), "-p=TEST_BETWNSTR.normal_case", - "-f=ut_documentation_reporter"); + "-f=ut_documentation_reporter", + "--catch-ora-stuck"); List reporterOptionsList = runCmd.getReporterOptionsList(); ReporterOptions reporterOptions1 = reporterOptionsList.get(0); assertEquals(CoreReporters.UT_DOCUMENTATION_REPORTER.name(), reporterOptions1.getReporterName()); From 322a3f0c36ff7b1a2300b9cd49f29e7f726fc455 Mon Sep 17 00:00:00 2001 From: pesse Date: Thu, 9 Jun 2022 00:21:16 +0200 Subject: [PATCH 2/4] New parameter --ora-stuck-timeout Sets a timeout around Reporter creation and retries when not ready after a while. 0 = no timeout. Fixes #199 Fixes #197 Fixes #196 Fixes #193 Fixes #191 --- README.md | 2 ++ src/main/java/org/utplsql/cli/RunAction.java | 2 +- .../org/utplsql/cli/RunPicocliCommand.java | 6 +++--- .../utplsql/cli/config/RunCommandConfig.java | 18 +++++++++--------- .../utplsql/cli/RunCommandArgumentsTest.java | 2 +- ...dConfigParamsArePassedToTestRunnerTest.java | 7 ++++--- 6 files changed, 20 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 8e397c3..ba9fe0f 100644 --- a/README.md +++ b/README.md @@ -182,6 +182,8 @@ utplsql run "my/Username"/"myP@ssword"@connectstring --coverage-schemes - A comma separated list of schemas on which coverage should be gathered Format: --coverage-schemes=schema1[,schema2[,schema3]] + +--ora-stuck-timeout - Sets a timeout around Reporter creation and retries when not ready after a while. 0 = no timeout. ``` Parameters -f, -o, -s are correlated. That is parameters -o and -s are controlling outputs for reporter specified by the preceding -f parameter. diff --git a/src/main/java/org/utplsql/cli/RunAction.java b/src/main/java/org/utplsql/cli/RunAction.java index ba0faf3..de1be33 100644 --- a/src/main/java/org/utplsql/cli/RunAction.java +++ b/src/main/java/org/utplsql/cli/RunAction.java @@ -167,7 +167,7 @@ TestRunner newTestRunner(List reporterList) { .randomTestOrderSeed(config.getRandomTestOrderSeed()) .addTags(Arrays.asList(config.getTags())) .addCoverageSchemes(Arrays.asList(config.getCoverageSchemes())) - .catchOraStuck(config.isCatchOraStuck()); + .oraStuckTimeout(config.getOraStuckTimeout()); } private void outputMainInformation() { diff --git a/src/main/java/org/utplsql/cli/RunPicocliCommand.java b/src/main/java/org/utplsql/cli/RunPicocliCommand.java index c024a3b..0bdf33c 100644 --- a/src/main/java/org/utplsql/cli/RunPicocliCommand.java +++ b/src/main/java/org/utplsql/cli/RunPicocliCommand.java @@ -183,8 +183,8 @@ FileMapperConfig toFileMapperConfig() { @Option(names = "-h", usageHelp = true, description = "display this help and exit") boolean help; - @Option(names = "--catch-ora-stuck", description = "Sets a timeout around Reporter creation and retries when not ready after a while") - boolean catchOraStuck = false; + @Option(names = "--ora-stuck-timeout", description = "Sets a timeout around Reporter creation and retries when not ready after a while. 0 = no timeout.") + Integer oraStuckTimeout = 0; private RunAction runAction; @@ -248,7 +248,7 @@ public RunCommandConfig getRunCommandConfig() { .randomTestOrderSeed(randomTestOrderSeed) .tags(tags.toArray(new String[0])) .coverageSchemes(coverageSchemes.toArray(new String[0])) - .catchOraStuck(catchOraStuck) + .oraStuckTimeout(oraStuckTimeout) .create(); } diff --git a/src/main/java/org/utplsql/cli/config/RunCommandConfig.java b/src/main/java/org/utplsql/cli/config/RunCommandConfig.java index 7b92dbe..218466b 100644 --- a/src/main/java/org/utplsql/cli/config/RunCommandConfig.java +++ b/src/main/java/org/utplsql/cli/config/RunCommandConfig.java @@ -23,10 +23,10 @@ public class RunCommandConfig extends ConnectionConfig { private final Integer randomTestOrderSeed; private final String[] tags; private final String[] coverageSchemes; - private final boolean catchOraStuck; + private final Integer oraStuckTimeout; - @ConstructorProperties({"connectString", "suitePaths", "reporters", "outputAnsiColor", "failureExitCode", "skipCompatibilityCheck", "includePackages", "excludePackages", "sourceMapping", "testMapping", "logConfigLevel", "timeoutInMinutes", "dbmsOutput", "randomTestOrder", "randomTestOrderSeed", "tags", "coverageSchemes", "catchOraStuck"}) - public RunCommandConfig(String connectString, String[] suitePaths, ReporterConfig[] reporters, boolean outputAnsiColor, Integer failureExitCode, boolean skipCompatibilityCheck, String[] includePackages, String[] excludePackages, FileMapperConfig sourceMapping, FileMapperConfig testMapping, ConfigLevel logConfigLevel, Integer timeoutInMinutes, boolean dbmsOutput, boolean randomTestOrder, Integer randomTestOrderSeed, String[] tags, String[] coverageSchemes, boolean catchOraStuck) { + @ConstructorProperties({"connectString", "suitePaths", "reporters", "outputAnsiColor", "failureExitCode", "skipCompatibilityCheck", "includePackages", "excludePackages", "sourceMapping", "testMapping", "logConfigLevel", "timeoutInMinutes", "dbmsOutput", "randomTestOrder", "randomTestOrderSeed", "tags", "coverageSchemes", "oraStuckTimeout"}) + public RunCommandConfig(String connectString, String[] suitePaths, ReporterConfig[] reporters, boolean outputAnsiColor, Integer failureExitCode, boolean skipCompatibilityCheck, String[] includePackages, String[] excludePackages, FileMapperConfig sourceMapping, FileMapperConfig testMapping, ConfigLevel logConfigLevel, Integer timeoutInMinutes, boolean dbmsOutput, boolean randomTestOrder, Integer randomTestOrderSeed, String[] tags, String[] coverageSchemes, Integer oraStuckTimeout) { super(connectString); this.suitePaths = suitePaths; this.reporters = reporters; @@ -44,7 +44,7 @@ public RunCommandConfig(String connectString, String[] suitePaths, ReporterConfi this.randomTestOrderSeed = randomTestOrderSeed; this.tags = tags; this.coverageSchemes = coverageSchemes; - this.catchOraStuck = catchOraStuck; + this.oraStuckTimeout = oraStuckTimeout; } public String[] getSuitePaths() { @@ -111,7 +111,7 @@ public String[] getCoverageSchemes() { return coverageSchemes; } - public boolean isCatchOraStuck() { return catchOraStuck; } + public Integer getOraStuckTimeout() { return oraStuckTimeout; } public static class Builder { @@ -132,7 +132,7 @@ public static class Builder { private Integer randomTestOrderSeed; private String[] tags = new String[0]; private String[] coverageSchemes = new String[0]; - private boolean catchOraStuck; + private Integer oraStuckTimeout; public Builder connectString(String connectString) { this.connectString = connectString; @@ -219,13 +219,13 @@ public Builder coverageSchemes(String[] coverageSchemes) { return this; } - public Builder catchOraStuck(boolean catchOraStuck) { - this.catchOraStuck = catchOraStuck; + public Builder oraStuckTimeout(Integer oraStuckTimeout) { + this.oraStuckTimeout = oraStuckTimeout; return this; } public RunCommandConfig create() { - return new RunCommandConfig(connectString, suitePaths, reporters, outputAnsiColor, failureExitCode, skipCompatibilityCheck, includePackages, excludePackages, sourceMapping, testMapping, logConfigLevel, timeoutInMinutes, dbmsOutput, randomTestOrder, randomTestOrderSeed, tags, coverageSchemes, catchOraStuck); + return new RunCommandConfig(connectString, suitePaths, reporters, outputAnsiColor, failureExitCode, skipCompatibilityCheck, includePackages, excludePackages, sourceMapping, testMapping, logConfigLevel, timeoutInMinutes, dbmsOutput, randomTestOrder, randomTestOrderSeed, tags, coverageSchemes, oraStuckTimeout); } } } diff --git a/src/test/java/org/utplsql/cli/RunCommandArgumentsTest.java b/src/test/java/org/utplsql/cli/RunCommandArgumentsTest.java index af368a4..63be6e2 100644 --- a/src/test/java/org/utplsql/cli/RunCommandArgumentsTest.java +++ b/src/test/java/org/utplsql/cli/RunCommandArgumentsTest.java @@ -42,7 +42,7 @@ public void allArgumentsAreRecognized() { "-owner_subexpression=0", "-type_subexpression=0", "-name_subexpression=0", - "--catch-ora-stuck" + "--ora-stuck-timeout=2" ); TestRunner testRunner = runCmd.newTestRunner(new ArrayList<>()); diff --git a/src/test/java/org/utplsql/cli/RunCommandConfigParamsArePassedToTestRunnerTest.java b/src/test/java/org/utplsql/cli/RunCommandConfigParamsArePassedToTestRunnerTest.java index 2a2e3bb..95d146a 100644 --- a/src/test/java/org/utplsql/cli/RunCommandConfigParamsArePassedToTestRunnerTest.java +++ b/src/test/java/org/utplsql/cli/RunCommandConfigParamsArePassedToTestRunnerTest.java @@ -8,6 +8,7 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.contains; +import static org.hamcrest.Matchers.equalTo; import static org.junit.jupiter.api.Assertions.assertTrue; public class RunCommandConfigParamsArePassedToTestRunnerTest { @@ -31,11 +32,11 @@ void coverageSchemes() { } @Test - void catchOraStuck() { + void oraStuckTimeout() { RunCommandConfig config = new RunCommandConfig.Builder() - .catchOraStuck(true) + .oraStuckTimeout(2) .create(); TestRunner testRunner = new RunAction(config).newTestRunner(new ArrayList<>()); - assertTrue( testRunner.getOptions().catchOraStuck ); + assertThat( testRunner.getOptions().oraStuckTimeout, equalTo(2) ); } } From 288ca0530b3f41266832328d85583234a7de1b55 Mon Sep 17 00:00:00 2001 From: pesse Date: Thu, 9 Jun 2022 00:24:46 +0200 Subject: [PATCH 3/4] Fix failing test --- src/test/java/org/utplsql/cli/RunCommandIT.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/org/utplsql/cli/RunCommandIT.java b/src/test/java/org/utplsql/cli/RunCommandIT.java index 291e980..95effad 100644 --- a/src/test/java/org/utplsql/cli/RunCommandIT.java +++ b/src/test/java/org/utplsql/cli/RunCommandIT.java @@ -91,10 +91,10 @@ void run_withOutputButNoReporterDefined() throws Exception { } @Test - void run_withCatchOraStuck() throws Exception { + void run_withOraStuckTimeout() throws Exception { int result = TestHelper.runApp("run", TestHelper.getConnectionString(), - "--catch-ora-stuck", + "--ora-stuck-timeout=2", "--failure-exit-code=2"); assertValidReturnCode(result); From a5094839adf72c70bf41d56dddb2b820a57d0b70 Mon Sep 17 00:00:00 2001 From: pesse Date: Thu, 9 Jun 2022 00:27:57 +0200 Subject: [PATCH 4/4] Fix another test Yes I need my local setup again --- src/test/java/org/utplsql/cli/RunCommandIssue20IT.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/org/utplsql/cli/RunCommandIssue20IT.java b/src/test/java/org/utplsql/cli/RunCommandIssue20IT.java index 9db13e0..8162fc9 100644 --- a/src/test/java/org/utplsql/cli/RunCommandIssue20IT.java +++ b/src/test/java/org/utplsql/cli/RunCommandIssue20IT.java @@ -25,7 +25,7 @@ void runLoop() { TestHelper.getConnectionString(), "-p=TEST_BETWNSTR.normal_case", "-f=ut_documentation_reporter", - "--catch-ora-stuck"); + "--ora-stuck-timeout=3"); List reporterOptionsList = runCmd.getReporterOptionsList(); ReporterOptions reporterOptions1 = reporterOptionsList.get(0); assertEquals(CoreReporters.UT_DOCUMENTATION_REPORTER.name(), reporterOptions1.getReporterName());