blob: e6121966e9310b87710ae168fc36302e91cb8f9d [file] [log] [blame]
package org.apache.maven.surefire.its;
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase;
import org.apache.maven.surefire.its.fixture.SurefireLauncher;
import org.junit.Test;
/**
* Testing JUnitCoreWrapper with ParallelComputerBuilder.
*
* @author <a href="mailto:tibordigana@apache.org">Tibor Digana (tibor17)</a>
* @since 2.16
*/
@SuppressWarnings( "checkstyle:magicnumber" )
public class JUnit47ParallelIT extends SurefireJUnit4IntegrationTestCase
{
@Test
public void unknownThreadCountSuites()
{
unpack().parallelSuites().setTestToRun( "TestClass" ).failNever().executeTest().verifyTextInLog(
"Use threadCount or threadCountSuites > 0 or useUnlimitedThreads=true for parallel='suites'" );
}
@Test
public void unknownThreadCountClasses()
{
unpack().parallelClasses().setTestToRun( "TestClass" ).failNever().executeTest().verifyTextInLog(
"Use threadCount or threadCountClasses > 0 or useUnlimitedThreads=true for parallel='classes'" );
}
@Test
public void unknownThreadCountMethods()
{
unpack().parallelMethods().setTestToRun( "TestClass" ).failNever().executeTest().verifyTextInLog(
"Use threadCount or threadCountMethods > 0 or useUnlimitedThreads=true for parallel='methods'" );
}
@Test
public void unknownThreadCountBoth()
{
unpack().parallelBoth().setTestToRun( "TestClass" ).failNever().executeTest().verifyTextInLog(
"Use useUnlimitedThreads=true, " + "or only threadCount > 0, " + "or (threadCountClasses > 0 and "
+ "threadCountMethods > 0), " + "or (threadCount > 0 and threadCountClasses > 0 and "
+ "threadCountMethods > 0), " + "or (threadCount > 0 and threadCountClasses > 0 and "
+ "threadCount > threadCountClasses) " + "for parallel='both' or "
+ "parallel='classesAndMethods'" );
}
@Test
public void unknownThreadCountAll()
{
unpack().parallelAll().setTestToRun( "TestClass" ).failNever().executeTest().verifyTextInLog(
"Use useUnlimitedThreads=true, " + "or only threadCount > 0, " + "or (threadCountSuites > 0 and "
+ "threadCountClasses > 0 and threadCountMethods > 0), " + "or every thread-count is "
+ "specified, " + "or (threadCount > 0 and threadCountSuites > 0 and threadCountClasses > 0 "
+ "and threadCount > threadCountSuites + threadCountClasses) " + "for parallel='all'" );
}
@Test
public void unknownThreadCountSuitesAndClasses()
{
unpack().parallelSuitesAndClasses().setTestToRun( "TestClass" ).failNever().executeTest().verifyTextInLog(
"Use useUnlimitedThreads=true, " + "or only threadCount > 0, " + "or (threadCountSuites > 0 and "
+ "threadCountClasses > 0), " + "or (threadCount > 0 and threadCountSuites > 0 and "
+ "threadCountClasses > 0) " + "or (threadCount > 0 and threadCountSuites > 0 and threadCount"
+ " > threadCountSuites) " + "for parallel='suitesAndClasses' or 'both'" );
}
@Test
public void unknownThreadCountSuitesAndMethods()
{
unpack().parallelSuitesAndMethods().setTestToRun( "TestClass" ).failNever().executeTest().verifyTextInLog(
"Use useUnlimitedThreads=true, " + "or only threadCount > 0, " + "or (threadCountSuites > 0 and "
+ "threadCountMethods > 0), " + "or (threadCount > 0 and threadCountSuites > 0 and "
+ "threadCountMethods > 0), " + "or (threadCount > 0 and threadCountSuites > 0 and "
+ "threadCount > threadCountSuites) " + "for parallel='suitesAndMethods'" );
}
@Test
public void unknownThreadCountClassesAndMethods()
{
unpack().parallelClassesAndMethods().setTestToRun( "TestClass" ).failNever().executeTest().verifyTextInLog(
"Use useUnlimitedThreads=true, " + "or only threadCount > 0, " + "or (threadCountClasses > 0 and "
+ "threadCountMethods > 0), " + "or (threadCount > 0 and threadCountClasses > 0 and "
+ "threadCountMethods > 0), " + "or (threadCount > 0 and threadCountClasses > 0 and "
+ "threadCount > threadCountClasses) " + "for parallel='both' or "
+ "parallel='classesAndMethods'" );
}
@Test
public void serial()
{
// takes 7.2 sec
unpack().setTestToRun( "Suite*Test" ).executeTest().verifyErrorFree( 24 );
}
@Test
public void unlimitedThreadsSuites1()
{
// takes 3.6 sec
unpack().parallelSuites().useUnlimitedThreads().setTestToRun( "Suite*Test" ).executeTest().verifyErrorFree(
24 );
}
@Test
public void unlimitedThreadsSuites2()
{
// takes 3.6 sec
unpack().parallelSuites().useUnlimitedThreads().threadCountSuites( 5 ).setTestToRun(
"Suite*Test" ).executeTest().verifyErrorFree( 24 );
}
@Test
public void unlimitedThreadsClasses1()
{
// takes 1.8 sec
unpack().parallelClasses().useUnlimitedThreads().setTestToRun( "Suite*Test" ).executeTest().verifyErrorFree(
24 );
}
@Test
public void unlimitedThreadsClasses2()
{
// takes 1.8 sec
unpack().parallelClasses().useUnlimitedThreads().threadCountClasses( 5 ).setTestToRun(
"Suite*Test" ).executeTest().verifyErrorFree( 24 );
}
@Test
public void unlimitedThreadsMethods1()
{
// takes 2.4 sec
unpack().parallelMethods().useUnlimitedThreads().setTestToRun( "Suite*Test" ).executeTest().verifyErrorFree(
24 );
}
@Test
public void unlimitedThreadsMethods2()
{
// takes 2.4 sec
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 );
}
@Test
public void unlimitedThreadsSuitesAndClasses2()
{
// takes 0.9 sec
// 1.8 sec with 4 parallel classes
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 );
}
@Test
public void unlimitedThreadsSuitesAndMethods2()
{
// takes 1.2 sec
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 );
}
@Test
public void unlimitedThreadsClassesAndMethods2()
{
// takes 0.6 sec
unpack().parallelClassesAndMethods().useUnlimitedThreads().threadCountClasses( 5 ).threadCountMethods(
15 ).setTestToRun( "Suite*Test" ).executeTest().verifyErrorFree( 24 );
}
@Test
public void unlimitedThreadsAll1()
{
// takes 0.3 sec
unpack().parallelAll().useUnlimitedThreads().setTestToRun( "Suite*Test" ).executeTest().verifyErrorFree( 24 );
}
@Test
public void unlimitedThreadsAll2()
{
// takes 0.3 sec
unpack().parallelAll().useUnlimitedThreads().threadCountSuites( 5 ).threadCountClasses( 15 ).threadCountMethods(
30 ).setTestToRun( "Suite*Test" ).executeTest().verifyErrorFree( 24 );
}
@Test
public void threadCountSuites()
{
// takes 3.6 sec
unpack().parallelSuites().threadCount( 3 ).setTestToRun( "Suite*Test" ).executeTest().verifyErrorFree( 24 );
}
@Test
public void threadCountClasses()
{
// takes 3.6 sec for single core
// takes 1.8 sec for double core
unpack().parallelClasses().threadCount( 3 ).setTestToRun( "Suite*Test" ).executeTest().verifyErrorFree( 24 );
}
@Test
public void threadCountMethods()
{
// takes 2.4 sec
unpack().parallelMethods().threadCount( 3 ).setTestToRun( "Suite*Test" ).executeTest().verifyErrorFree( 24 );
}
@Test
public void threadCountClassesAndMethodsOneCore()
{
// takes 4.8 sec
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().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
public void threadCountSuitesAndMethods()
{
// usually 24 times 0.3 sec = 7.2 sec with one core CPU
// takes 1.8 sec for double core CPU
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().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 );
}
@Test
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 );
}
@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 );
}
@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 );
}
@Test
public void everyThreadCountAll()
{
// takes 2.4 sec for double core CPU
unpack().parallelAll().threadCount( 3 ).threadCountSuites( 17 ).threadCountClasses( 34 ).threadCountMethods(
49 ).setTestToRun( "Suite*Test" ).executeTest().verifyErrorFree( 24 );
}
@Test
public void reusableThreadCountSuitesAndClasses()
{
// 4 * cpu to 5 * cpu threads to run test classes
// takes cca 1.8 sec
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
public void reusableThreadCountSuitesAndMethods()
{
// 4 * cpu to 5 * cpu threads to run test methods
// takes cca 1.8 sec
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
public void reusableThreadCountClassesAndMethods()
{
// 4 * cpu to 5 * cpu threads to run test methods
// takes cca 1.8 sec
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
public void reusableThreadCountAll()
{
// 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 );
}
@Test
public void suites()
{
// takes 3.6 sec
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 );
}
@Test
public void methods()
{
// 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 );
}
@Test
public void suitesAndClasses()
{
// takes 0.9 sec
unpack().parallelSuitesAndClasses().threadCountSuites( 5 ).threadCountClasses( 15 ).setTestToRun(
"Suite*Test" ).executeTest().verifyErrorFree( 24 );
}
@Test
public void suitesAndMethods()
{
// takes 1.2 sec on any CPU
unpack().parallelSuitesAndMethods().threadCountSuites( 5 ).threadCountMethods( 15 ).setTestToRun(
"Suite*Test" ).executeTest().verifyErrorFree( 24 );
}
@Test
public void classesAndMethods()
{
// takes 0.6 sec on any CPU
unpack().parallelClassesAndMethods().threadCountClasses( 5 ).threadCountMethods( 15 ).setTestToRun(
"Suite*Test" ).executeTest().verifyErrorFree( 24 );
}
@Test
public void all()
{
// takes 0.3 sec on any CPU
unpack().parallelAll().threadCountSuites( 5 ).threadCountClasses( 15 ).threadCountMethods( 30 ).setTestToRun(
"Suite*Test" ).executeTest().verifyErrorFree( 24 );
}
@Test
public void shutdown()
{
// executes for 2.5 sec until timeout has elapsed
unpack().parallelMethods().threadCountMethods( 2 ).parallelTestsTimeoutInSeconds( 2.5d ).setTestToRun(
"TestClass" ).failNever().executeTest().verifyTextInLog(
"The test run has finished abruptly after timeout of 2.5 seconds." );
}
@Test
public void forcedShutdown()
{
// executes for 2.5 sec until timeout has elapsed
unpack().parallelMethods().threadCountMethods( 2 ).parallelTestsTimeoutForcedInSeconds( 2.5d ).setTestToRun(
"TestClass" ).failNever().executeTest().verifyTextInLog(
"The test run has finished abruptly after timeout of 2.5 seconds." );
}
@Test
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." );
}
@Test
public void forcedShutdownVerifyingLogs()
{
// attempts to run for 2.4 sec until timeout has elapsed
unpack().parallelMethods().threadCountMethods(
3 ).disablePerCoreThreadCount().parallelTestsTimeoutForcedInSeconds( 1.05d ).setTestToRun(
"Waiting*Test" ).failNever().executeTest().verifyTextInLog(
"The test run has finished abruptly after timeout of 1.05 seconds." ).verifyTextInLog(
"These tests were executed in prior to the shutdown operation:" ).verifyTextInLog(
"These tests are incomplete:" );
}
private SurefireLauncher unpack()
{
return unpack( "junit47-parallel" ).showErrorStackTraces().forkOnce().redirectToFile( false );
}
}