This is an automated email from the ASF dual-hosted git repository. sjaranowski pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/maven-surefire.git
The following commit(s) were added to refs/heads/master by this push: new d4e1389 Fix flaky test - Surefire1098BalancedRunOrderIT d4e1389 is described below commit d4e1389708e80072acc916745ddbc785d0e82c55 Author: Slawomir Jaranowski <s.jaranow...@gmail.com> AuthorDate: Fri Dec 17 23:07:13 2021 +0100 Fix flaky test - Surefire1098BalancedRunOrderIT - execute maven twice as required - use jvm synchronization instead of sleep --- .../maven/surefire/its/fixture/MavenLauncher.java | 6 +++++- .../maven/surefire/its/fixture/SurefireLauncher.java | 7 +++++++ .../its/jiras/Surefire1098BalancedRunOrderIT.java | 9 +++++---- .../src/test/java/jiras/surefire1098/ATest.java | 4 +--- .../src/test/java/jiras/surefire1098/BTest.java | 4 +--- .../src/test/java/jiras/surefire1098/CTest.java | 4 +--- .../src/test/java/jiras/surefire1098/DTest.java | 8 +++++++- .../jiras/surefire1098/{BTest.java => Locker.java} | 19 ++++++++----------- 8 files changed, 35 insertions(+), 26 deletions(-) diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/fixture/MavenLauncher.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/fixture/MavenLauncher.java index ecd1ee8..95e6a2e 100755 --- a/surefire-its/src/test/java/org/apache/maven/surefire/its/fixture/MavenLauncher.java +++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/fixture/MavenLauncher.java @@ -395,6 +395,11 @@ public final class MavenLauncher getVerifier().setAutoclean( autoclean ); } + public void setLogFileName( String logFileName ) + { + getVerifier().setLogFileName( logFileName ); + } + private Verifier getVerifier() { if ( verifier == null ) @@ -476,7 +481,6 @@ public final class MavenLauncher basedir, settingsFile, false, defaultCliOptions ); verifier.getVerifierProperties().setProperty( "use.mavenRepoLocal", "true" ); - return verifier; } diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/fixture/SurefireLauncher.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/fixture/SurefireLauncher.java index cbe02fd..0394123 100755 --- a/surefire-its/src/test/java/org/apache/maven/surefire/its/fixture/SurefireLauncher.java +++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/fixture/SurefireLauncher.java @@ -444,4 +444,11 @@ public final class SurefireLauncher mavenLauncher.setForkJvm( true ); return this; } + + + public SurefireLauncher setLogFileName( String logFileName ) + { + mavenLauncher.setLogFileName( logFileName ); + return this; + } } diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1098BalancedRunOrderIT.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1098BalancedRunOrderIT.java index f50bb8e..00546ef 100644 --- a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1098BalancedRunOrderIT.java +++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1098BalancedRunOrderIT.java @@ -51,14 +51,15 @@ public class Surefire1098BalancedRunOrderIT extends SurefireJUnit4IntegrationTes @Test public void reorderedParallelClasses() throws VerificationException { - SurefireLauncher launcher = unpack(); - - launcher + // first execution + unpack().setLogFileName( "log1.txt" ) // .runOrder( "balanced" ) call it in 3.x and remove it in surefire-1098-balanced-runorder/pom.xml // as soon as there is prefix available "failsafe" and "surefire" in system property for this parameter. .parallelClasses().threadCount( 2 ).disablePerCoreThreadCount().executeTest().verifyErrorFree( 4 ); - OutputValidator validator = launcher + + // and second from new instance - if we use the same instance - hasExecutedBefore return true + OutputValidator validator = unpack().setLogFileName( "log2.txt" ) // .runOrder( "balanced" ) call it in 3.x and remove it in surefire-1098-balanced-runorder/pom.xml // as soon as there is prefix available "failsafe" and "surefire" in system property for this parameter. .parallelClasses().threadCount( 2 ).disablePerCoreThreadCount().executeTest().verifyErrorFree( 4 ); diff --git a/surefire-its/src/test/resources/surefire-1098-balanced-runorder/src/test/java/jiras/surefire1098/ATest.java b/surefire-its/src/test/resources/surefire-1098-balanced-runorder/src/test/java/jiras/surefire1098/ATest.java index 34bb895..3acb9cd 100644 --- a/surefire-its/src/test/resources/surefire-1098-balanced-runorder/src/test/java/jiras/surefire1098/ATest.java +++ b/surefire-its/src/test/resources/surefire-1098-balanced-runorder/src/test/java/jiras/surefire1098/ATest.java @@ -21,14 +21,12 @@ package jiras.surefire1098; import org.junit.Test; -import java.util.concurrent.TimeUnit; - public final class ATest { @Test public void someMethod() throws InterruptedException { System.out.println(getClass() + " " + Thread.currentThread().getName()); - TimeUnit.MILLISECONDS.sleep(100); + Locker.QUEUE.put( "A" ); } } diff --git a/surefire-its/src/test/resources/surefire-1098-balanced-runorder/src/test/java/jiras/surefire1098/BTest.java b/surefire-its/src/test/resources/surefire-1098-balanced-runorder/src/test/java/jiras/surefire1098/BTest.java index a9a52b8..d9073c6 100644 --- a/surefire-its/src/test/resources/surefire-1098-balanced-runorder/src/test/java/jiras/surefire1098/BTest.java +++ b/surefire-its/src/test/resources/surefire-1098-balanced-runorder/src/test/java/jiras/surefire1098/BTest.java @@ -21,14 +21,12 @@ package jiras.surefire1098; import org.junit.Test; -import java.util.concurrent.TimeUnit; - public final class BTest { @Test public void someMethod() throws InterruptedException { System.out.println(getClass() + " " + Thread.currentThread().getName()); - TimeUnit.SECONDS.sleep(2); + Locker.QUEUE.put( "B" ); } } diff --git a/surefire-its/src/test/resources/surefire-1098-balanced-runorder/src/test/java/jiras/surefire1098/CTest.java b/surefire-its/src/test/resources/surefire-1098-balanced-runorder/src/test/java/jiras/surefire1098/CTest.java index 63e4e0f..b02b7b8 100644 --- a/surefire-its/src/test/resources/surefire-1098-balanced-runorder/src/test/java/jiras/surefire1098/CTest.java +++ b/surefire-its/src/test/resources/surefire-1098-balanced-runorder/src/test/java/jiras/surefire1098/CTest.java @@ -21,14 +21,12 @@ package jiras.surefire1098; import org.junit.Test; -import java.util.concurrent.TimeUnit; - public final class CTest { @Test public void someMethod() throws InterruptedException { System.out.println(getClass() + " " + Thread.currentThread().getName()); - TimeUnit.SECONDS.sleep(4); + Locker.QUEUE.put( "C" ); } } diff --git a/surefire-its/src/test/resources/surefire-1098-balanced-runorder/src/test/java/jiras/surefire1098/DTest.java b/surefire-its/src/test/resources/surefire-1098-balanced-runorder/src/test/java/jiras/surefire1098/DTest.java index a97640e..b5b029d 100644 --- a/surefire-its/src/test/resources/surefire-1098-balanced-runorder/src/test/java/jiras/surefire1098/DTest.java +++ b/surefire-its/src/test/resources/surefire-1098-balanced-runorder/src/test/java/jiras/surefire1098/DTest.java @@ -28,7 +28,13 @@ public final class DTest { @Test public void someMethod() throws InterruptedException { System.out.println(getClass() + " " + Thread.currentThread().getName()); - TimeUnit.SECONDS.sleep(8); + // wait from result from 3 tests + // so test will be the longest and finish as last + Locker.QUEUE.take(); + Locker.QUEUE.take(); + Locker.QUEUE.take(); + // and sleep a little + TimeUnit.MILLISECONDS.sleep(100); } } diff --git a/surefire-its/src/test/resources/surefire-1098-balanced-runorder/src/test/java/jiras/surefire1098/BTest.java b/surefire-its/src/test/resources/surefire-1098-balanced-runorder/src/test/java/jiras/surefire1098/Locker.java similarity index 74% copy from surefire-its/src/test/resources/surefire-1098-balanced-runorder/src/test/java/jiras/surefire1098/BTest.java copy to surefire-its/src/test/resources/surefire-1098-balanced-runorder/src/test/java/jiras/surefire1098/Locker.java index a9a52b8..4f0bc55 100644 --- a/surefire-its/src/test/resources/surefire-1098-balanced-runorder/src/test/java/jiras/surefire1098/BTest.java +++ b/surefire-its/src/test/resources/surefire-1098-balanced-runorder/src/test/java/jiras/surefire1098/Locker.java @@ -19,16 +19,13 @@ package jiras.surefire1098; * under the License. */ -import org.junit.Test; - -import java.util.concurrent.TimeUnit; - -public final class BTest { - - @Test - public void someMethod() throws InterruptedException { - System.out.println(getClass() + " " + Thread.currentThread().getName()); - TimeUnit.SECONDS.sleep(2); - } +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.BlockingQueue; +/** + * Tests are executet in one jvm in parallel, + * so we can use simple synchronization. + */ +class Locker { + static BlockingQueue<String> QUEUE = new ArrayBlockingQueue<>( 3 ); }