[SUREFIRE-1055] Integration Tests
Project: http://git-wip-us.apache.org/repos/asf/maven-surefire/repo Commit: http://git-wip-us.apache.org/repos/asf/maven-surefire/commit/1c843d67 Tree: http://git-wip-us.apache.org/repos/asf/maven-surefire/tree/1c843d67 Diff: http://git-wip-us.apache.org/repos/asf/maven-surefire/diff/1c843d67 Branch: refs/heads/master Commit: 1c843d672ad8c7406ac2c62b93684771aff81014 Parents: 01c39b0 Author: Tibor Digana <tibo...@lycos.com> Authored: Sun Mar 9 12:57:10 2014 +0100 Committer: Andreas Gudian <agud...@apache.org> Committed: Sun Mar 9 19:46:42 2014 +0100 ---------------------------------------------------------------------- .../maven/surefire/its/JUnit47ParallelIT.java | 202 +++++++++++++------ .../surefire/its/fixture/SurefireLauncher.java | 8 +- .../src/test/resources/junit47-parallel/pom.xml | 15 +- .../test/java/surefireparallel/TestClass.java | 5 +- 4 files changed, 157 insertions(+), 73 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/1c843d67/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/JUnit47ParallelIT.java ---------------------------------------------------------------------- diff --git a/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/JUnit47ParallelIT.java b/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/JUnit47ParallelIT.java index 5edfb6a..03c0628 100644 --- a/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/JUnit47ParallelIT.java +++ b/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/JUnit47ParallelIT.java @@ -26,7 +26,7 @@ import org.junit.Test; /** * Testing JUnitCoreWrapper with ParallelComputerBuilder. * - * @author Tibor Digana (tibor17) + * @author <a href="mailto:tibor.dig...@gmail.com">Tibor Digana (tibor17)</a> * @since 2.16 */ public class JUnit47ParallelIT @@ -124,59 +124,59 @@ public class JUnit47ParallelIT } @Test - public void useUnlimitedThreadsSuites1() + public void unlimitedThreadsSuites1() { // takes 3.6 sec - unpack().parallelSuites().useUnlimitedThreads().setTestToRun( "Suite*Test" ).executeTest() - .verifyErrorFree( 24 ); + unpack().parallelSuites().useUnlimitedThreads().setTestToRun( "Suite*Test" ).executeTest().verifyErrorFree( + 24 ); } @Test - public void useUnlimitedThreadsSuites2() + public void unlimitedThreadsSuites2() { // takes 3.6 sec - unpack().parallelSuites().useUnlimitedThreads().threadCountSuites( 5 ).setTestToRun( "Suite*Test" ) - .executeTest().verifyErrorFree( 24 ); + unpack().parallelSuites().useUnlimitedThreads().threadCountSuites( 5 ).setTestToRun( + "Suite*Test" ).executeTest().verifyErrorFree( 24 ); } @Test - public void useUnlimitedThreadsClasses1() + public void unlimitedThreadsClasses1() { // takes 1.8 sec - unpack().parallelClasses().useUnlimitedThreads().setTestToRun( "Suite*Test" ).executeTest() - .verifyErrorFree( 24 ); + unpack().parallelClasses().useUnlimitedThreads().setTestToRun( "Suite*Test" ).executeTest().verifyErrorFree( + 24 ); } @Test - public void useUnlimitedThreadsClasses2() + public void unlimitedThreadsClasses2() { // takes 1.8 sec - unpack().parallelClasses().useUnlimitedThreads().threadCountClasses( 5 ).setTestToRun( "Suite*Test" ) - .executeTest().verifyErrorFree( 24 ); + unpack().parallelClasses().useUnlimitedThreads().threadCountClasses( 5 ).setTestToRun( + "Suite*Test" ).executeTest().verifyErrorFree( 24 ); } @Test - public void useUnlimitedThreadsMethods1() + public void unlimitedThreadsMethods1() { // takes 2.4 sec - unpack().parallelMethods().useUnlimitedThreads().setTestToRun( "Suite*Test" ).executeTest() - .verifyErrorFree( 24 ); + unpack().parallelMethods().useUnlimitedThreads().setTestToRun( "Suite*Test" ).executeTest().verifyErrorFree( + 24 ); } @Test - public void useUnlimitedThreadsMethods2() + public void unlimitedThreadsMethods2() { // takes 2.4 sec - unpack().parallelMethods().useUnlimitedThreads().threadCountMethods( 5 ).setTestToRun( "Suite*Test" ) - .executeTest().verifyErrorFree( 24 ); + unpack().parallelMethods().useUnlimitedThreads().threadCountMethods( 5 ).setTestToRun( + "Suite*Test" ).executeTest().verifyErrorFree( 24 ); } @Test public void unlimitedThreadsSuitesAndClasses1() { // takes 0.9 sec - unpack().parallelSuitesAndClasses().useUnlimitedThreads().setTestToRun( "Suite*Test" ).executeTest() - .verifyErrorFree( 24 ); + unpack().parallelSuitesAndClasses().useUnlimitedThreads().setTestToRun( + "Suite*Test" ).executeTest().verifyErrorFree( 24 ); } @Test @@ -184,40 +184,40 @@ public class JUnit47ParallelIT { // takes 0.9 sec // 1.8 sec with 4 parallel classes - unpack().parallelSuitesAndClasses().useUnlimitedThreads().threadCountSuites( 5 ).threadCountClasses( 15 ) - .setTestToRun( "Suite*Test" ).executeTest().verifyErrorFree( 24 ); + unpack().parallelSuitesAndClasses().useUnlimitedThreads().threadCountSuites( 5 ).threadCountClasses( + 15 ).setTestToRun( "Suite*Test" ).executeTest().verifyErrorFree( 24 ); } @Test public void unlimitedThreadsSuitesAndMethods1() { // takes 1.2 sec - unpack().parallelSuitesAndMethods().useUnlimitedThreads().setTestToRun( "Suite*Test" ).executeTest() - .verifyErrorFree( 24 ); + unpack().parallelSuitesAndMethods().useUnlimitedThreads().setTestToRun( + "Suite*Test" ).executeTest().verifyErrorFree( 24 ); } @Test public void unlimitedThreadsSuitesAndMethods2() { // takes 1.2 sec - unpack().parallelSuitesAndMethods().useUnlimitedThreads().threadCountSuites( 5 ).threadCountMethods( 15 ) - .setTestToRun( "Suite*Test" ).executeTest().verifyErrorFree( 24 ); + unpack().parallelSuitesAndMethods().useUnlimitedThreads().threadCountSuites( 5 ).threadCountMethods( + 15 ).setTestToRun( "Suite*Test" ).executeTest().verifyErrorFree( 24 ); } @Test public void unlimitedThreadsClassesAndMethods1() { // takes 0.6 sec - unpack().parallelClassesAndMethods().useUnlimitedThreads().setTestToRun( "Suite*Test" ).executeTest() - .verifyErrorFree( 24 ); + unpack().parallelClassesAndMethods().useUnlimitedThreads().setTestToRun( + "Suite*Test" ).executeTest().verifyErrorFree( 24 ); } @Test public void unlimitedThreadsClassesAndMethods2() { // takes 0.6 sec - unpack().parallelClassesAndMethods().useUnlimitedThreads().threadCountClasses( 5 ).threadCountMethods( 15 ) - .setTestToRun( "Suite*Test" ).executeTest().verifyErrorFree( 24 ); + unpack().parallelClassesAndMethods().useUnlimitedThreads().threadCountClasses( 5 ).threadCountMethods( + 15 ).setTestToRun( "Suite*Test" ).executeTest().verifyErrorFree( 24 ); } @Test @@ -231,8 +231,8 @@ public class JUnit47ParallelIT public void unlimitedThreadsAll2() { // takes 0.3 sec - unpack().parallelAll().useUnlimitedThreads().threadCountSuites( 5 ).threadCountClasses( 15 ) - .threadCountMethods( 30 ).setTestToRun( "Suite*Test" ).executeTest().verifyErrorFree( 24 ); + unpack().parallelAll().useUnlimitedThreads().threadCountSuites( 5 ).threadCountClasses( 15 ).threadCountMethods( + 30 ).setTestToRun( "Suite*Test" ).executeTest().verifyErrorFree( 24 ); } @Test @@ -247,8 +247,7 @@ public class JUnit47ParallelIT { // takes 3.6 sec for single core // takes 1.8 sec for double core - unpack().parallelClasses().threadCount( 3 ).setTestToRun( "Suite*Test" ).executeTest() - .verifyErrorFree( 24 ); + unpack().parallelClasses().threadCount( 3 ).setTestToRun( "Suite*Test" ).executeTest().verifyErrorFree( 24 ); } @Test @@ -262,16 +261,32 @@ public class JUnit47ParallelIT public void threadCountClassesAndMethodsOneCore() { // takes 4.8 sec - unpack().disablePerCoreThreadCount().parallelClassesAndMethods().threadCount( 3 ).setTestToRun( "Suite*Test" ) - .executeTest().verifyErrorFree( 24 ); + unpack().disablePerCoreThreadCount().disableParallelOptimization().parallelClassesAndMethods().threadCount( + 3 ).setTestToRun( "Suite*Test" ).executeTest().verifyErrorFree( 24 ); + } + + @Test + public void threadCountClassesAndMethodsOneCoreOptimized() + { + // the number of reused threads in leafs depends on the number of runners and CPU + unpack().disablePerCoreThreadCount().parallelClassesAndMethods().threadCount( 3 ).setTestToRun( + "Suite*Test" ).executeTest().verifyErrorFree( 24 ); } @Test public void threadCountClassesAndMethods() { // takes 2.4 sec for double core CPU - unpack().parallelClassesAndMethods().threadCount( 3 ).setTestToRun( "Suite*Test" ).executeTest() - .verifyErrorFree( 24 ); + unpack().disableParallelOptimization().parallelClassesAndMethods().threadCount( 3 ).setTestToRun( + "Suite*Test" ).executeTest().verifyErrorFree( 24 ); + } + + @Test + public void threadCountClassesAndMethodsOptimized() + { + // the number of reused threads in leafs depends on the number of runners and CPU + unpack().parallelClassesAndMethods().threadCount( 3 ).setTestToRun( + "Suite*Test" ).executeTest().verifyErrorFree( 24 ); } @Test @@ -279,20 +294,44 @@ public class JUnit47ParallelIT { // usually 24 times 0.3 sec = 7.2 sec with one core CPU // takes 1.8 sec for double core CPU - unpack().parallelSuitesAndMethods().threadCount( 3 ).setTestToRun( "Suite*Test" ).executeTest() - .verifyErrorFree( 24 ); + unpack().disableParallelOptimization().parallelSuitesAndMethods().threadCount( 3 ).setTestToRun( + "Suite*Test" ).executeTest().verifyErrorFree( 24 ); + } + + @Test + public void threadCountSuitesAndMethodsOptimized() + { + // the number of reused threads in leafs depends on the number of runners and CPU + unpack().parallelSuitesAndMethods().threadCount( 3 ).setTestToRun( "Suite*Test" ).executeTest().verifyErrorFree( + 24 ); } @Test public void threadCountSuitesAndClasses() { - unpack().parallelSuitesAndClasses().threadCount( 3 ).setTestToRun( "Suite*Test" ).executeTest() - .verifyErrorFree( 24 ); + unpack().disableParallelOptimization().parallelSuitesAndClasses().threadCount( 3 ).setTestToRun( + "Suite*Test" ).executeTest().verifyErrorFree( 24 ); + } + + @Test + public void threadCountSuitesAndClassesOptimized() + { + // the number of reused threads in leafs depends on the number of runners and CPU + unpack().parallelSuitesAndClasses().threadCount( 3 ).setTestToRun( "Suite*Test" ).executeTest().verifyErrorFree( + 24 ); } @Test public void threadCountAll() { + unpack().disableParallelOptimization().parallelAll().threadCount( 3 ).setTestToRun( + "Suite*Test" ).executeTest().verifyErrorFree( 24 ); + } + + @Test + public void threadCountAllOptimized() + { + // the number of reused threads in leafs depends on the number of runners and CPU unpack().parallelAll().threadCount( 3 ).setTestToRun( "Suite*Test" ).executeTest().verifyErrorFree( 24 ); } @@ -300,25 +339,24 @@ public class JUnit47ParallelIT public void everyThreadCountSuitesAndClasses() { // takes 1.8 sec for double core CPU - unpack().parallelSuitesAndClasses().threadCount( 3 ).threadCountSuites( 34 ).threadCountClasses( 66 ) - .setTestToRun( "Suite*Test" ).executeTest() - .verifyErrorFree( 24 ); + unpack().parallelSuitesAndClasses().threadCount( 3 ).threadCountSuites( 34 ).threadCountClasses( + 66 ).setTestToRun( "Suite*Test" ).executeTest().verifyErrorFree( 24 ); } @Test public void everyThreadCountSuitesAndMethods() { // takes 1.8 sec for double core CPU - unpack().parallelSuitesAndMethods().threadCount( 3 ).threadCountSuites( 34 ).threadCountMethods( 66 ) - .setTestToRun( "Suite*Test" ).executeTest().verifyErrorFree( 24 ); + unpack().parallelSuitesAndMethods().threadCount( 3 ).threadCountSuites( 34 ).threadCountMethods( + 66 ).setTestToRun( "Suite*Test" ).executeTest().verifyErrorFree( 24 ); } @Test public void everyThreadCountClassesAndMethods() { // takes 1.8 sec for double core CPU - unpack().parallelClassesAndMethods().threadCount( 3 ).threadCountClasses( 34 ).threadCountMethods( 66 ) - .setTestToRun( "Suite*Test" ).executeTest().verifyErrorFree( 24 ); + unpack().parallelClassesAndMethods().threadCount( 3 ).threadCountClasses( 34 ).threadCountMethods( + 66 ).setTestToRun( "Suite*Test" ).executeTest().verifyErrorFree( 24 ); } @Test @@ -334,8 +372,16 @@ public class JUnit47ParallelIT { // 4 * cpu to 5 * cpu threads to run test classes // takes cca 1.8 sec - unpack().parallelSuitesAndClasses().disablePerCoreThreadCount().threadCount( 6 ).threadCountSuites( 2 ) - .setTestToRun( "Suite*Test" ).executeTest().verifyErrorFree( 24 ); + unpack().disableParallelOptimization().parallelSuitesAndClasses().disablePerCoreThreadCount().threadCount( + 6 ).threadCountSuites( 2 ).setTestToRun( "Suite*Test" ).executeTest().verifyErrorFree( 24 ); + } + + @Test + public void reusableThreadCountSuitesAndClassesOptimized() + { + // the number of reused threads in leafs depends on the number of runners and CPU + unpack().parallelSuitesAndClasses().disablePerCoreThreadCount().threadCount( 6 ).threadCountSuites( + 2 ).setTestToRun( "Suite*Test" ).executeTest().verifyErrorFree( 24 ); } @Test @@ -343,8 +389,16 @@ public class JUnit47ParallelIT { // 4 * cpu to 5 * cpu threads to run test methods // takes cca 1.8 sec - unpack().parallelSuitesAndMethods().disablePerCoreThreadCount().threadCount( 6 ).threadCountSuites( 2 ) - .setTestToRun( "Suite*Test" ).executeTest().verifyErrorFree( 24 ); + unpack().disableParallelOptimization().parallelSuitesAndMethods().disablePerCoreThreadCount().threadCount( + 6 ).threadCountSuites( 2 ).setTestToRun( "Suite*Test" ).executeTest().verifyErrorFree( 24 ); + } + + @Test + public void reusableThreadCountSuitesAndMethodsOptimized() + { + // the number of reused threads in leafs depends on the number of runners and CPU + unpack().parallelSuitesAndMethods().disablePerCoreThreadCount().threadCount( 6 ).threadCountSuites( + 2 ).setTestToRun( "Suite*Test" ).executeTest().verifyErrorFree( 24 ); } @Test @@ -352,8 +406,16 @@ public class JUnit47ParallelIT { // 4 * cpu to 5 * cpu threads to run test methods // takes cca 1.8 sec - unpack().parallelClassesAndMethods().disablePerCoreThreadCount().threadCount( 6 ).threadCountClasses( 2 ) - .setTestToRun( "Suite*Test" ).executeTest().verifyErrorFree( 24 ); + unpack().disableParallelOptimization().parallelClassesAndMethods().disablePerCoreThreadCount().threadCount( + 6 ).threadCountClasses( 2 ).setTestToRun( "Suite*Test" ).executeTest().verifyErrorFree( 24 ); + } + + @Test + public void reusableThreadCountClassesAndMethodsOptimized() + { + // the number of reused threads in leafs depends on the number of runners and CPU + unpack().parallelClassesAndMethods().disablePerCoreThreadCount().threadCount( 6 ).threadCountClasses( + 2 ).setTestToRun( "Suite*Test" ).executeTest().verifyErrorFree( 24 ); } @Test @@ -361,6 +423,15 @@ public class JUnit47ParallelIT { // 8 * cpu to 13 * cpu threads to run test methods // takes 0.9 sec + unpack().disableParallelOptimization().parallelAll().disablePerCoreThreadCount().threadCount( + 14 ).threadCountSuites( 2 ).threadCountClasses( 4 ).setTestToRun( + "Suite*Test" ).executeTest().verifyErrorFree( 24 ); + } + + @Test + public void reusableThreadCountAllOptimized() + { + // the number of reused threads in leafs depends on the number of runners and CPU unpack().parallelAll().disablePerCoreThreadCount().threadCount( 14 ).threadCountSuites( 2 ).threadCountClasses( 4 ).setTestToRun( "Suite*Test" ).executeTest().verifyErrorFree( 24 ); } @@ -369,16 +440,16 @@ public class JUnit47ParallelIT public void suites() { // takes 3.6 sec - unpack().parallelSuites().threadCountSuites( 5 ).setTestToRun( "Suite*Test" ).executeTest() - .verifyErrorFree( 24 ); + unpack().parallelSuites().threadCountSuites( 5 ).setTestToRun( "Suite*Test" ).executeTest().verifyErrorFree( + 24 ); } @Test public void classes() { // takes 1.8 sec on any CPU because the suites are running in a sequence - unpack().parallelClasses().threadCountClasses( 5 ).setTestToRun( "Suite*Test" ).executeTest() - .verifyErrorFree( 24 ); + unpack().parallelClasses().threadCountClasses( 5 ).setTestToRun( "Suite*Test" ).executeTest().verifyErrorFree( + 24 ); } @Test @@ -386,8 +457,8 @@ public class JUnit47ParallelIT { // takes 2.4 sec on any CPU because every class has only three methods // and the suites and classes are running in a sequence - unpack().parallelMethods().threadCountMethods( 5 ).setTestToRun( "Suite*Test" ).executeTest() - .verifyErrorFree( 24 ); + unpack().parallelMethods().threadCountMethods( 5 ).setTestToRun( "Suite*Test" ).executeTest().verifyErrorFree( + 24 ); } @Test @@ -444,9 +515,10 @@ public class JUnit47ParallelIT public void timeoutAndForcedShutdown() { // executes for one sec until timeout has elapsed - unpack().parallelMethods().threadCountMethods( 2 ).parallelTestsTimeoutInSeconds( 1 ) - .parallelTestsTimeoutForcedInSeconds( 2.5d ).setTestToRun( "TestClass" ).failNever().executeTest() - .verifyTextInLog( "The test run has finished abruptly after timeout of 1.0 seconds." ); + unpack().parallelMethods().threadCountMethods( 2 ).parallelTestsTimeoutInSeconds( + 1 ).parallelTestsTimeoutForcedInSeconds( 2.5d ).setTestToRun( + "TestClass" ).failNever().executeTest().verifyTextInLog( + "The test run has finished abruptly after timeout of 1.0 seconds." ); } private SurefireLauncher unpack() http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/1c843d67/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/fixture/SurefireLauncher.java ---------------------------------------------------------------------- diff --git a/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/fixture/SurefireLauncher.java b/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/fixture/SurefireLauncher.java index 3ac3e20..149adcc 100755 --- a/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/fixture/SurefireLauncher.java +++ b/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/fixture/SurefireLauncher.java @@ -130,7 +130,6 @@ public class SurefireLauncher return this; } - public SurefireLauncher showErrorStackTraces() { mavenLauncher.showErrorStackTraces(); @@ -162,7 +161,6 @@ public class SurefireLauncher return this; } - public SurefireLauncher addGoal( String goal ) { mavenLauncher.addGoal( goal ); @@ -319,6 +317,12 @@ public class SurefireLauncher return this; } + public SurefireLauncher disableParallelOptimization() + { + mavenLauncher.sysProp( "parallelOptimized", "false" ); + return this; + } + public SurefireLauncher parallel( String parallel ) { mavenLauncher.sysProp( "parallel", parallel ); http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/1c843d67/surefire-integration-tests/src/test/resources/junit47-parallel/pom.xml ---------------------------------------------------------------------- diff --git a/surefire-integration-tests/src/test/resources/junit47-parallel/pom.xml b/surefire-integration-tests/src/test/resources/junit47-parallel/pom.xml index d8de300..69a743d 100644 --- a/surefire-integration-tests/src/test/resources/junit47-parallel/pom.xml +++ b/surefire-integration-tests/src/test/resources/junit47-parallel/pom.xml @@ -6,6 +6,13 @@ <version>1.0-SNAPSHOT</version> <name>junit47-parallel</name> <url>http://maven.apache.org</url> + <contributors> + <contributor> + <name>Tibor Digana (tibor17)</name> + <email>tibor.dig...@gmail.com</email> + <timezone>+1</timezone> + </contributor> + </contributors> <dependencies> <dependency> <groupId>junit</groupId> @@ -16,17 +23,21 @@ <build> <plugins> <plugin> - <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> + <version>2.5.1</version> <configuration> <source>1.5</source> <target>1.5</target> </configuration> </plugin> <plugin> - <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>${surefire.version}</version> + <configuration> + <perCoreThreadCount>false</perCoreThreadCount> + <threadCount>4</threadCount> + <parallel>methods</parallel> + </configuration> </plugin> </plugins> </build> http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/1c843d67/surefire-integration-tests/src/test/resources/junit47-parallel/src/test/java/surefireparallel/TestClass.java ---------------------------------------------------------------------- diff --git a/surefire-integration-tests/src/test/resources/junit47-parallel/src/test/java/surefireparallel/TestClass.java b/surefire-integration-tests/src/test/resources/junit47-parallel/src/test/java/surefireparallel/TestClass.java index 3b1f842..e3906fd 100644 --- a/surefire-integration-tests/src/test/resources/junit47-parallel/src/test/java/surefireparallel/TestClass.java +++ b/surefire-integration-tests/src/test/resources/junit47-parallel/src/test/java/surefireparallel/TestClass.java @@ -19,13 +19,10 @@ package surefireparallel; * under the License. */ -import org.junit.AfterClass; -import org.junit.BeforeClass; import org.junit.Test; -import org.junit.runners.BlockJUnit4ClassRunner; /** - * @author Tibor Digana (tibor17) + * @author <a href="mailto:tibor.dig...@gmail.com">Tibor Digana (tibor17)</a> * @since 2.16 */ public class TestClass