From 02aa1217d991247b9aeeabadfaeca11f3c18780d Mon Sep 17 00:00:00 2001 From: pesse Date: Thu, 4 Apr 2019 23:53:42 +0200 Subject: [PATCH 1/7] First failing test for new parameter --- pom.xml | 6 ++++++ src/main/java/org/utplsql/cli/RunCommand.java | 2 +- src/test/java/org/utplsql/cli/RunCommandTest.java | 13 +++++++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index b1fc034..a74200d 100644 --- a/pom.xml +++ b/pom.xml @@ -81,6 +81,12 @@ ${junit.jupiter.version} test + + org.hamcrest + hamcrest + 2.1 + test + diff --git a/src/main/java/org/utplsql/cli/RunCommand.java b/src/main/java/org/utplsql/cli/RunCommand.java index e85b9e7..3bc4cb0 100644 --- a/src/main/java/org/utplsql/cli/RunCommand.java +++ b/src/main/java/org/utplsql/cli/RunCommand.java @@ -228,7 +228,7 @@ public int run() { return Cli.DEFAULT_ERROR_CODE; } - private TestRunner newTestRunner( List reporterList) { + TestRunner newTestRunner( List reporterList) { final File baseDir = new File("").getAbsoluteFile(); diff --git a/src/test/java/org/utplsql/cli/RunCommandTest.java b/src/test/java/org/utplsql/cli/RunCommandTest.java index 941a0e1..c0726a5 100644 --- a/src/test/java/org/utplsql/cli/RunCommandTest.java +++ b/src/test/java/org/utplsql/cli/RunCommandTest.java @@ -1,10 +1,14 @@ package org.utplsql.cli; import org.junit.jupiter.api.Test; +import org.utplsql.api.TestRunnerOptions; import org.utplsql.api.reporter.CoreReporters; +import java.util.ArrayList; import java.util.List; +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.*; /** @@ -92,4 +96,13 @@ void connectionString_asSysdba() { assertEquals("sys as sysdba/mypass@connectstring/service", runCmd.getConnectionInfo().getConnectionString()); } + + @Test + void randomOrder_withoutSeed() { + RunCommand runCmd = TestHelper.createRunCommand(TestHelper.getConnectionString(), + "-random"); + + TestRunnerOptions options = runCmd.newTestRunner(new ArrayList<>()).getOptions(); + assertThat(options.randomTestOrder, equalTo(true)); + } } From 277091a9ec5a64db078be99a0d1c5f18d1dbae56 Mon Sep 17 00:00:00 2001 From: pesse Date: Thu, 4 Apr 2019 23:59:06 +0200 Subject: [PATCH 2/7] New parameter `-random` --- src/main/java/org/utplsql/cli/RunCommand.java | 9 ++++++++- src/test/java/org/utplsql/cli/RunCommandTest.java | 2 ++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/utplsql/cli/RunCommand.java b/src/main/java/org/utplsql/cli/RunCommand.java index 3bc4cb0..ed147b1 100644 --- a/src/main/java/org/utplsql/cli/RunCommand.java +++ b/src/main/java/org/utplsql/cli/RunCommand.java @@ -126,6 +126,12 @@ public class RunCommand implements ICommand { ) private boolean enableDbmsOutput = false; + @Parameter( + names = {"-random", "--random_test_order"}, + description = "Enables random order of test executions (default: DISABLED)" + ) + private boolean randomTestOrder = false; + private CompatibilityProxy compatibilityProxy; private ReporterFactory reporterFactory; private ReporterManager reporterManager; @@ -241,7 +247,8 @@ TestRunner newTestRunner( List reporterList) { .failOnErrors(true) .skipCompatibilityCheck(skipCompatibilityCheck) .includeObjects(getObjectList(includeObjects)) - .excludeObjects(getObjectList(excludeObjects)); + .excludeObjects(getObjectList(excludeObjects)) + .randomTestOrder(randomTestOrder); } private ArrayList getObjectList(String includeObjects) { diff --git a/src/test/java/org/utplsql/cli/RunCommandTest.java b/src/test/java/org/utplsql/cli/RunCommandTest.java index c0726a5..53b5c84 100644 --- a/src/test/java/org/utplsql/cli/RunCommandTest.java +++ b/src/test/java/org/utplsql/cli/RunCommandTest.java @@ -8,6 +8,7 @@ import java.util.List; import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.CoreMatchers.nullValue; import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.*; @@ -104,5 +105,6 @@ void randomOrder_withoutSeed() { TestRunnerOptions options = runCmd.newTestRunner(new ArrayList<>()).getOptions(); assertThat(options.randomTestOrder, equalTo(true)); + assertThat(options.randomTestOrderSeed, nullValue()); } } From 144adf02478d2cb7b7c3e2dc15529a9c22df8f71 Mon Sep 17 00:00:00 2001 From: pesse Date: Fri, 5 Apr 2019 00:02:41 +0200 Subject: [PATCH 3/7] New parameter `-seed` --- src/main/java/org/utplsql/cli/RunCommand.java | 9 ++++++++- src/test/java/org/utplsql/cli/RunCommandTest.java | 10 ++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/utplsql/cli/RunCommand.java b/src/main/java/org/utplsql/cli/RunCommand.java index ed147b1..5c61617 100644 --- a/src/main/java/org/utplsql/cli/RunCommand.java +++ b/src/main/java/org/utplsql/cli/RunCommand.java @@ -132,6 +132,12 @@ public class RunCommand implements ICommand { ) private boolean randomTestOrder = false; + @Parameter( + names = {"-seed", "--random_test_order_seed"}, + description = "Sets the seed to use for random test execution order. If set, it sets -random to true" + ) + private Integer randomTestOrderSeed; + private CompatibilityProxy compatibilityProxy; private ReporterFactory reporterFactory; private ReporterManager reporterManager; @@ -248,7 +254,8 @@ TestRunner newTestRunner( List reporterList) { .skipCompatibilityCheck(skipCompatibilityCheck) .includeObjects(getObjectList(includeObjects)) .excludeObjects(getObjectList(excludeObjects)) - .randomTestOrder(randomTestOrder); + .randomTestOrder(randomTestOrder) + .randomTestOrderSeed(randomTestOrderSeed); } private ArrayList getObjectList(String includeObjects) { diff --git a/src/test/java/org/utplsql/cli/RunCommandTest.java b/src/test/java/org/utplsql/cli/RunCommandTest.java index 53b5c84..1ed8a10 100644 --- a/src/test/java/org/utplsql/cli/RunCommandTest.java +++ b/src/test/java/org/utplsql/cli/RunCommandTest.java @@ -107,4 +107,14 @@ void randomOrder_withoutSeed() { assertThat(options.randomTestOrder, equalTo(true)); assertThat(options.randomTestOrderSeed, nullValue()); } + + @Test + void randomOrder_withSeed() { + RunCommand runCmd = TestHelper.createRunCommand(TestHelper.getConnectionString(), + "-seed=42"); + + TestRunnerOptions options = runCmd.newTestRunner(new ArrayList<>()).getOptions(); + assertThat(options.randomTestOrder, equalTo(true)); + assertThat(options.randomTestOrderSeed, equalTo(42)); + } } From d9eb0a78e39af483b730404c5aea8433e5bf6353 Mon Sep 17 00:00:00 2001 From: pesse Date: Fri, 5 Apr 2019 00:17:24 +0200 Subject: [PATCH 4/7] Added compatibility warning in case Random Execution Order was specified Also refactored it all into one function --- src/main/java/org/utplsql/cli/RunCommand.java | 28 +++++++++++++++---- .../org/utplsql/cli/RunCommandChecker.java | 14 ---------- 2 files changed, 23 insertions(+), 19 deletions(-) diff --git a/src/main/java/org/utplsql/cli/RunCommand.java b/src/main/java/org/utplsql/cli/RunCommand.java index 5c61617..5f13084 100644 --- a/src/main/java/org/utplsql/cli/RunCommand.java +++ b/src/main/java/org/utplsql/cli/RunCommand.java @@ -7,6 +7,7 @@ import org.slf4j.LoggerFactory; import org.utplsql.api.*; import org.utplsql.api.compatibility.CompatibilityProxy; +import org.utplsql.api.compatibility.OptionalFeatures; import org.utplsql.api.db.DefaultDatabaseInformation; import org.utplsql.api.exception.DatabaseNotCompatibleException; import org.utplsql.api.exception.OracleCreateStatmenetStuckException; @@ -174,11 +175,7 @@ public int doRun() throws OracleCreateStatmenetStuckException { initDatabase(dataSource); reporterList = initReporters(dataSource); - // Output a message if --failureExitCode is set but database framework is not capable of - String msg = RunCommandChecker.getCheckFailOnErrorMessage(failureExitCode, compatibilityProxy.getUtPlsqlVersion()); - if (msg != null) { - System.out.println(msg); - } + checkForCompatibility(compatibilityProxy.getUtPlsqlVersion()); ExecutorService executorService = Executors.newFixedThreadPool(1 + reporterList.size()); @@ -240,6 +237,27 @@ public int run() { return Cli.DEFAULT_ERROR_CODE; } + private void checkForCompatibility( Version utPlSqlVersion ) { + if (!OptionalFeatures.FAIL_ON_ERROR.isAvailableFor(utPlSqlVersion) && failureExitCode != 1 ) { + System.out.println("You specified option `--failure-exit-code` but your database framework version (" + + utPlSqlVersion.getNormalizedString() + ") is not able to " + + "redirect failureCodes. Please upgrade to a newer version if you want to use that feature."); + } + + if ( !OptionalFeatures.RANDOM_EXECUTION_ORDER.isAvailableFor(utPlSqlVersion) && randomTestOrder ) { + System.out.println("You specified option `-random` but your database framework version (" + + utPlSqlVersion.getNormalizedString() + ") is not able to " + + "redirect failureCodes. Please upgrade to a newer version if you want to use that feature."); + } + + if ( !OptionalFeatures.RANDOM_EXECUTION_ORDER.isAvailableFor(utPlSqlVersion) && randomTestOrderSeed != null ) { + System.out.println("You specified option `-seed` but your database framework version (" + + utPlSqlVersion.getNormalizedString() + ") is not able to " + + "redirect failureCodes. Please upgrade to a newer version if you want to use that feature."); + } + + } + TestRunner newTestRunner( List reporterList) { final File baseDir = new File("").getAbsoluteFile(); diff --git a/src/main/java/org/utplsql/cli/RunCommandChecker.java b/src/main/java/org/utplsql/cli/RunCommandChecker.java index 6adce56..ed9d43d 100644 --- a/src/main/java/org/utplsql/cli/RunCommandChecker.java +++ b/src/main/java/org/utplsql/cli/RunCommandChecker.java @@ -27,18 +27,4 @@ static void checkOracleI18nExists(Connection con) throws SQLException { System.out.println("Download from http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-112010-090769.html"); } } - - /** Returns a warning message if failureExitCode is specified but database version is too low - * - * @param failureExitCode - * @param databaseVersion - */ - static String getCheckFailOnErrorMessage(int failureExitCode, Version databaseVersion) { - if ( failureExitCode != 1 && !OptionalFeatures.FAIL_ON_ERROR.isAvailableFor(databaseVersion)) { - return "Your database framework version (" + databaseVersion.getNormalizedString() + ") is not able to " + - "redirect failureCodes. Please upgrade to a newer version if you want to use that feature."; - } - - return null; - } } From 9915f2ddd83da0ae38c10526192ccdc48c09553e Mon Sep 17 00:00:00 2001 From: pesse Date: Fri, 5 Apr 2019 07:58:22 +0200 Subject: [PATCH 5/7] Test not needed - we already test for failure-exit-code in RunCommandIT --- .../utplsql/cli/TestRunCommandChecker.java | 21 ------------------- 1 file changed, 21 deletions(-) delete mode 100644 src/test/java/org/utplsql/cli/TestRunCommandChecker.java diff --git a/src/test/java/org/utplsql/cli/TestRunCommandChecker.java b/src/test/java/org/utplsql/cli/TestRunCommandChecker.java deleted file mode 100644 index 803a3f1..0000000 --- a/src/test/java/org/utplsql/cli/TestRunCommandChecker.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.utplsql.cli; - -import org.junit.jupiter.api.Test; -import org.utplsql.api.Version; - -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertNull; - -class TestRunCommandChecker { - - @Test - void getCheckFailOnErrorMessage() - { - // FailOnError option should work since 3.0.3+ framework - assertNotNull(RunCommandChecker.getCheckFailOnErrorMessage(2, new Version("3.0.0"))); - assertNotNull(RunCommandChecker.getCheckFailOnErrorMessage(2, new Version("3.0.1"))); - assertNotNull(RunCommandChecker.getCheckFailOnErrorMessage(2, new Version("3.0.2"))); - assertNull(RunCommandChecker.getCheckFailOnErrorMessage(2, new Version("3.0.3.1266"))); - assertNull(RunCommandChecker.getCheckFailOnErrorMessage(2, new Version("3.0.4"))); - } -} From d9b181ba2402f8759350e18ff81ca6cd5198f38f Mon Sep 17 00:00:00 2001 From: pesse Date: Tue, 14 May 2019 22:34:02 +0200 Subject: [PATCH 6/7] Add help and change alternative command from _ to - --- README.md | 6 ++++++ src/main/java/org/utplsql/cli/RunCommand.java | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d8391e3..bb43dee 100644 --- a/README.md +++ b/README.md @@ -147,6 +147,12 @@ utplsql run "my/Username"/"myP@ssword"@connectstring -dbout - Enables DBMS_OUTPUT in the TestRunner-Session (--dbms_output) Default: false + +-random - Enables random order of test executions +(--random-test-order) Default: false + +-seed - Sets the seed to use for random test execution order. If set, it sets -random to true +(--random-test-order-seed) ``` 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/RunCommand.java b/src/main/java/org/utplsql/cli/RunCommand.java index 5f13084..9ebc251 100644 --- a/src/main/java/org/utplsql/cli/RunCommand.java +++ b/src/main/java/org/utplsql/cli/RunCommand.java @@ -128,13 +128,13 @@ public class RunCommand implements ICommand { private boolean enableDbmsOutput = false; @Parameter( - names = {"-random", "--random_test_order"}, + names = {"-random", "--random-test-order"}, description = "Enables random order of test executions (default: DISABLED)" ) private boolean randomTestOrder = false; @Parameter( - names = {"-seed", "--random_test_order_seed"}, + names = {"-seed", "--random-test-order-seed"}, description = "Sets the seed to use for random test execution order. If set, it sets -random to true" ) private Integer randomTestOrderSeed; From 3fc12f56d4d5108862dc5889bd312f647e1fb3af Mon Sep 17 00:00:00 2001 From: pesse Date: Tue, 14 May 2019 22:34:17 +0200 Subject: [PATCH 7/7] Add default-test for RandomOrder --- src/test/java/org/utplsql/cli/RunCommandTest.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/test/java/org/utplsql/cli/RunCommandTest.java b/src/test/java/org/utplsql/cli/RunCommandTest.java index 1ed8a10..e2ec155 100644 --- a/src/test/java/org/utplsql/cli/RunCommandTest.java +++ b/src/test/java/org/utplsql/cli/RunCommandTest.java @@ -98,6 +98,15 @@ void connectionString_asSysdba() { runCmd.getConnectionInfo().getConnectionString()); } + @Test + void randomOrder_default() { + RunCommand runCmd = TestHelper.createRunCommand(TestHelper.getConnectionString()); + + TestRunnerOptions options = runCmd.newTestRunner(new ArrayList<>()).getOptions(); + assertThat(options.randomTestOrder, equalTo(false)); + assertThat(options.randomTestOrderSeed, nullValue()); + } + @Test void randomOrder_withoutSeed() { RunCommand runCmd = TestHelper.createRunCommand(TestHelper.getConnectionString(),