This is an automated email from the ASF dual-hosted git repository.

tibordigana pushed a commit to branch maven2surefire-jvm-communication
in repository https://gitbox.apache.org/repos/asf/maven-surefire.git

commit 862f2d110ab20ae4c095b2c8f1d342f99a99ad74
Author: tibordigana <tibordig...@apache.org>
AuthorDate: Sat Apr 4 00:08:43 2020 +0200

    fixed Surefire817SystemExitIT
---
 .../booter/MasterProcessChannelEncoder.java         |  2 ++
 .../apache/maven/surefire/booter/ForkedBooter.java  | 21 +++++++++++++++++++++
 .../spi/LegacyMasterProcessChannelEncoder.java      |  6 ++++++
 3 files changed, 29 insertions(+)

diff --git 
a/surefire-api/src/main/java/org/apache/maven/surefire/booter/MasterProcessChannelEncoder.java
 
b/surefire-api/src/main/java/org/apache/maven/surefire/booter/MasterProcessChannelEncoder.java
index 062a57c..75c9e17 100644
--- 
a/surefire-api/src/main/java/org/apache/maven/surefire/booter/MasterProcessChannelEncoder.java
+++ 
b/surefire-api/src/main/java/org/apache/maven/surefire/booter/MasterProcessChannelEncoder.java
@@ -38,6 +38,8 @@ public interface MasterProcessChannelEncoder
 
     boolean checkError();
 
+    void onJvmExit();
+
     void sendSystemProperties( Map<String, String> sysProps );
 
     void testSetStarting( ReportEntry reportEntry, boolean trimStackTraces );
diff --git 
a/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ForkedBooter.java
 
b/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ForkedBooter.java
index 8b24d90..7b6d09e 100644
--- 
a/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ForkedBooter.java
+++ 
b/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ForkedBooter.java
@@ -27,6 +27,7 @@ import 
org.apache.maven.surefire.providerapi.ProviderParameters;
 import org.apache.maven.surefire.providerapi.SurefireProvider;
 import org.apache.maven.surefire.report.LegacyPojoStackTraceWriter;
 import org.apache.maven.surefire.report.StackTraceWriter;
+import org.apache.maven.surefire.shared.utils.cli.ShutdownHookUtils;
 import org.apache.maven.surefire.spi.MasterProcessChannelProcessorFactory;
 import org.apache.maven.surefire.testset.TestSetFailedException;
 
@@ -119,6 +120,8 @@ public final class ForkedBooter
         eventChannel = channelProcessorFactory.createEncoder();
         MasterProcessChannelDecoder decoder = 
channelProcessorFactory.createDecoder();
 
+        flushEventChannelOnExit();
+
         forkingReporterFactory = createForkingReporterFactory();
         ConsoleLogger logger = (ConsoleLogger) 
forkingReporterFactory.createReporter();
         commandReader = new CommandReader( decoder, 
providerConfiguration.getShutdown(), logger );
@@ -481,6 +484,24 @@ public final class ForkedBooter
         return (SurefireProvider) instantiateOneArg( classLoader, 
providerClass, ProviderParameters.class, bpf );
     }
 
+    /**
+     * Necessary for the Surefire817SystemExitIT.
+     */
+    private void flushEventChannelOnExit()
+    {
+        Runnable target = new Runnable()
+        {
+            @Override
+            public void run()
+            {
+                eventChannel.onJvmExit();
+            }
+        };
+        Thread t = new Thread( target );
+        t.setDaemon( true );
+        ShutdownHookUtils.addShutDownHook( t );
+    }
+
     private static MasterProcessChannelProcessorFactory lookupDecoderFactory( 
String channelConfig )
     {
         MasterProcessChannelProcessorFactory defaultFactory = null;
diff --git 
a/surefire-booter/src/main/java/org/apache/maven/surefire/booter/spi/LegacyMasterProcessChannelEncoder.java
 
b/surefire-booter/src/main/java/org/apache/maven/surefire/booter/spi/LegacyMasterProcessChannelEncoder.java
index 4a0c226..91d9d1b 100644
--- 
a/surefire-booter/src/main/java/org/apache/maven/surefire/booter/spi/LegacyMasterProcessChannelEncoder.java
+++ 
b/surefire-booter/src/main/java/org/apache/maven/surefire/booter/spi/LegacyMasterProcessChannelEncoder.java
@@ -114,6 +114,12 @@ public class LegacyMasterProcessChannelEncoder implements 
MasterProcessChannelEn
     }
 
     @Override
+    public void onJvmExit()
+    {
+        encodeAndPrintEvent( new StringBuilder( "\n" ), true );
+    }
+
+    @Override
     public void sendSystemProperties( Map<String, String> sysProps )
     {
         for ( Entry<String, String> entry : sysProps.entrySet() )

Reply via email to