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 );
 }

Reply via email to