[SUREFIRE-1310] ForkClient should handle only one channel-id

Project: http://git-wip-us.apache.org/repos/asf/maven-surefire/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-surefire/commit/a1ecfc02
Tree: http://git-wip-us.apache.org/repos/asf/maven-surefire/tree/a1ecfc02
Diff: http://git-wip-us.apache.org/repos/asf/maven-surefire/diff/a1ecfc02

Branch: refs/heads/master
Commit: a1ecfc022de22ac891cfaa95b752869554544122
Parents: db251b3
Author: Tibor17 <tibo...@lycos.com>
Authored: Wed Nov 30 20:11:48 2016 +0100
Committer: Tibor17 <tibo...@lycos.com>
Committed: Wed Nov 30 20:11:48 2016 +0100

----------------------------------------------------------------------
 .../booterclient/output/ForkClient.java         | 100 +++++++------------
 .../booterclient/ForkingRunListenerTest.java    |  59 ++++++-----
 2 files changed, 68 insertions(+), 91 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/a1ecfc02/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/output/ForkClient.java
----------------------------------------------------------------------
diff --git 
a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/output/ForkClient.java
 
b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/output/ForkClient.java
index e6e5a6e..475b9ff 100644
--- 
a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/output/ForkClient.java
+++ 
b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/output/ForkClient.java
@@ -19,29 +19,26 @@ package 
org.apache.maven.plugin.surefire.booterclient.output;
  * under the License.
  */
 
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.StringReader;
-import java.nio.ByteBuffer;
-import java.util.NoSuchElementException;
-import java.util.Properties;
-import java.util.StringTokenizer;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.atomic.AtomicLong;
-
 import 
org.apache.maven.plugin.surefire.booterclient.lazytestprovider.NotifiableTestStream;
+import org.apache.maven.plugin.surefire.log.api.ConsoleLogger;
 import org.apache.maven.plugin.surefire.report.DefaultReporterFactory;
 import org.apache.maven.shared.utils.cli.StreamConsumer;
-import org.apache.maven.plugin.surefire.log.api.ConsoleLogger;
 import org.apache.maven.surefire.report.ConsoleOutputReceiver;
 import org.apache.maven.surefire.report.ReportEntry;
 import org.apache.maven.surefire.report.ReporterException;
 import org.apache.maven.surefire.report.RunListener;
 import org.apache.maven.surefire.report.StackTraceWriter;
 
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.StringReader;
+import java.nio.ByteBuffer;
+import java.util.NoSuchElementException;
+import java.util.Properties;
+import java.util.StringTokenizer;
+import java.util.concurrent.atomic.AtomicLong;
+
 import static java.lang.Integer.decode;
-import static java.lang.Integer.parseInt;
 import static java.lang.System.currentTimeMillis;
 import static 
org.apache.maven.surefire.booter.ForkingRunListener.BOOTERCODE_BYE;
 import static 
org.apache.maven.surefire.booter.ForkingRunListener.BOOTERCODE_CONSOLE;
@@ -52,14 +49,14 @@ import static 
org.apache.maven.surefire.booter.ForkingRunListener.BOOTERCODE_STD
 import static 
org.apache.maven.surefire.booter.ForkingRunListener.BOOTERCODE_STDOUT;
 import static 
org.apache.maven.surefire.booter.ForkingRunListener.BOOTERCODE_STOP_ON_NEXT_TEST;
 import static 
org.apache.maven.surefire.booter.ForkingRunListener.BOOTERCODE_SYSPROPS;
+import static 
org.apache.maven.surefire.booter.ForkingRunListener.BOOTERCODE_TESTSET_COMPLETED;
+import static 
org.apache.maven.surefire.booter.ForkingRunListener.BOOTERCODE_TESTSET_STARTING;
 import static 
org.apache.maven.surefire.booter.ForkingRunListener.BOOTERCODE_TEST_ASSUMPTIONFAILURE;
 import static 
org.apache.maven.surefire.booter.ForkingRunListener.BOOTERCODE_TEST_ERROR;
 import static 
org.apache.maven.surefire.booter.ForkingRunListener.BOOTERCODE_TEST_FAILED;
 import static 
org.apache.maven.surefire.booter.ForkingRunListener.BOOTERCODE_TEST_SKIPPED;
 import static 
org.apache.maven.surefire.booter.ForkingRunListener.BOOTERCODE_TEST_STARTING;
 import static 
org.apache.maven.surefire.booter.ForkingRunListener.BOOTERCODE_TEST_SUCCEEDED;
-import static 
org.apache.maven.surefire.booter.ForkingRunListener.BOOTERCODE_TESTSET_COMPLETED;
-import static 
org.apache.maven.surefire.booter.ForkingRunListener.BOOTERCODE_TESTSET_STARTING;
 import static 
org.apache.maven.surefire.booter.ForkingRunListener.BOOTERCODE_WARNING;
 import static org.apache.maven.surefire.booter.Shutdown.KILL;
 import static 
org.apache.maven.surefire.report.CategorizedReportEntry.reportEntry;
@@ -78,7 +75,7 @@ public class ForkClient
     private static final long START_TIME_ZERO = 0L;
     private static final long START_TIME_NEGATIVE_TIMEOUT = -1L;
 
-    private final ConcurrentMap<Integer, RunListener> testSetReporters;
+    private final RunListener testSetReporter;
 
     private final DefaultReporterFactory defaultReporterFactory;
 
@@ -101,7 +98,7 @@ public class ForkClient
     public ForkClient( DefaultReporterFactory defaultReporterFactory, 
Properties testVmSystemProperties,
                        NotifiableTestStream notifiableTestStream, 
ConsoleLogger log )
     {
-        testSetReporters = new ConcurrentHashMap<Integer, RunListener>();
+        testSetReporter = defaultReporterFactory.createReporter();
         this.defaultReporterFactory = defaultReporterFactory;
         this.testVmSystemProperties = testVmSystemProperties;
         this.notifiableTestStream = notifiableTestStream;
@@ -176,44 +173,35 @@ public class ForkClient
                 log.warning( s );
                 return;
             }
-            final int channelNumber = parseInt( s.substring( 2, comma ), 16 );
             int rest = s.indexOf( ",", comma );
             final String remaining = s.substring( rest + 1 );
 
             switch ( operationId )
             {
                 case BOOTERCODE_TESTSET_STARTING:
-                    getOrCreateReporter( channelNumber )
-                            .testSetStarting( createReportEntry( remaining ) );
+                    testSetReporter.testSetStarting( createReportEntry( 
remaining ) );
                     setCurrentStartTime();
                     break;
                 case BOOTERCODE_TESTSET_COMPLETED:
-                    getOrCreateReporter( channelNumber )
-                            .testSetCompleted( createReportEntry( remaining ) 
);
+                    testSetReporter.testSetCompleted( createReportEntry( 
remaining ) );
                     break;
                 case BOOTERCODE_TEST_STARTING:
-                    getOrCreateReporter( channelNumber )
-                            .testStarting( createReportEntry( remaining ) );
+                    testSetReporter.testStarting( createReportEntry( remaining 
) );
                     break;
                 case BOOTERCODE_TEST_SUCCEEDED:
-                    getOrCreateReporter( channelNumber )
-                            .testSucceeded( createReportEntry( remaining ) );
+                    testSetReporter.testSucceeded( createReportEntry( 
remaining ) );
                     break;
                 case BOOTERCODE_TEST_FAILED:
-                    getOrCreateReporter( channelNumber )
-                            .testFailed( createReportEntry( remaining ) );
+                    testSetReporter.testFailed( createReportEntry( remaining ) 
);
                     break;
                 case BOOTERCODE_TEST_SKIPPED:
-                    getOrCreateReporter( channelNumber )
-                            .testSkipped( createReportEntry( remaining ) );
+                    testSetReporter.testSkipped( createReportEntry( remaining 
) );
                     break;
                 case BOOTERCODE_TEST_ERROR:
-                    getOrCreateReporter( channelNumber )
-                            .testError( createReportEntry( remaining ) );
+                    testSetReporter.testError( createReportEntry( remaining ) 
);
                     break;
                 case BOOTERCODE_TEST_ASSUMPTIONFAILURE:
-                    getOrCreateReporter( channelNumber )
-                            .testAssumptionFailure( createReportEntry( 
remaining ) );
+                    testSetReporter.testAssumptionFailure( createReportEntry( 
remaining ) );
                     break;
                 case BOOTERCODE_SYSPROPS:
                     int keyEnd = remaining.indexOf( "," );
@@ -227,13 +215,13 @@ public class ForkClient
                     }
                     break;
                 case BOOTERCODE_STDOUT:
-                    writeTestOutput( channelNumber, remaining, true );
+                    writeTestOutput( remaining, true );
                     break;
                 case BOOTERCODE_STDERR:
-                    writeTestOutput( channelNumber, remaining, false );
+                    writeTestOutput( remaining, false );
                     break;
                 case BOOTERCODE_CONSOLE:
-                    getOrCreateConsoleLogger( channelNumber )
+                    getOrCreateConsoleLogger()
                             .info( createConsoleMessage( remaining ) );
                     break;
                 case BOOTERCODE_NEXT_TEST:
@@ -249,11 +237,11 @@ public class ForkClient
                     stopOnNextTest();
                     break;
                 case BOOTERCODE_DEBUG:
-                    getOrCreateConsoleLogger( channelNumber )
+                    getOrCreateConsoleLogger()
                             .debug( createConsoleMessage( remaining ) );
                     break;
                 case BOOTERCODE_WARNING:
-                    getOrCreateConsoleLogger( channelNumber )
+                    getOrCreateConsoleLogger()
                             .warning( createConsoleMessage( remaining ) );
                     break;
                 default:
@@ -276,7 +264,7 @@ public class ForkClient
         }
     }
 
-    private void writeTestOutput( final int channelNumber, final String 
remaining, final boolean isStdout )
+    private void writeTestOutput( String remaining, boolean isStdout )
     {
         int csNameEnd = remaining.indexOf( ',' );
         String charsetName = remaining.substring( 0, csNameEnd );
@@ -286,14 +274,14 @@ public class ForkClient
         if ( unescaped.hasArray() )
         {
             byte[] convertedBytes = unescaped.array();
-            getOrCreateConsoleOutputReceiver( channelNumber )
+            getOrCreateConsoleOutputReceiver()
                 .writeTestOutput( convertedBytes, unescaped.position(), 
unescaped.remaining(), isStdout );
         }
         else
         {
             byte[] convertedBytes = new byte[unescaped.remaining()];
             unescaped.get( convertedBytes, 0, unescaped.remaining() );
-            getOrCreateConsoleOutputReceiver( channelNumber )
+            getOrCreateConsoleOutputReceiver()
                 .writeTestOutput( convertedBytes, 0, convertedBytes.length, 
isStdout );
         }
     }
@@ -359,37 +347,21 @@ public class ForkClient
     /**
      * Used when getting reporters on the plugin side of a fork.
      *
-     * @param channelNumber The logical channel number
      * @return A mock provider reporter
      */
-    public final RunListener getReporter( int channelNumber )
+    public final RunListener getReporter()
     {
-        return testSetReporters.get( channelNumber );
-    }
-
-    private RunListener getOrCreateReporter( int channelNumber )
-    {
-        RunListener reporter = testSetReporters.get( channelNumber );
-        if ( reporter == null )
-        {
-            reporter = defaultReporterFactory.createReporter();
-            RunListener old = testSetReporters.putIfAbsent( channelNumber, 
reporter );
-            if ( old != null )
-            {
-                reporter = old;
-            }
-        }
-        return reporter;
+        return testSetReporter;
     }
 
-    private ConsoleOutputReceiver getOrCreateConsoleOutputReceiver( int 
channelNumber )
+    private ConsoleOutputReceiver getOrCreateConsoleOutputReceiver()
     {
-        return (ConsoleOutputReceiver) getOrCreateReporter( channelNumber );
+        return (ConsoleOutputReceiver) testSetReporter;
     }
 
-    private ConsoleLogger getOrCreateConsoleLogger( int channelNumber )
+    private ConsoleLogger getOrCreateConsoleLogger()
     {
-        return (ConsoleLogger) getOrCreateReporter( channelNumber );
+        return (ConsoleLogger) testSetReporter;
     }
 
     public void close( boolean hadTimeout )

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/a1ecfc02/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/ForkingRunListenerTest.java
----------------------------------------------------------------------
diff --git 
a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/ForkingRunListenerTest.java
 
b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/ForkingRunListenerTest.java
index 5b8867b..19356f5 100644
--- 
a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/ForkingRunListenerTest.java
+++ 
b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/ForkingRunListenerTest.java
@@ -19,19 +19,14 @@ package org.apache.maven.plugin.surefire.booterclient;
  * under the License.
  */
 
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.PrintStream;
-import java.nio.charset.Charset;
-import java.util.List;
-import java.util.Properties;
-import java.util.StringTokenizer;
-
+import junit.framework.Assert;
+import junit.framework.TestCase;
+import 
org.apache.maven.plugin.surefire.booterclient.lazytestprovider.NotifiableTestStream;
 import org.apache.maven.plugin.surefire.booterclient.output.ForkClient;
-import org.apache.maven.surefire.booter.ForkingRunListener;
-import org.apache.maven.surefire.report.CategorizedReportEntry;
 import org.apache.maven.plugin.surefire.log.api.ConsoleLogger;
 import org.apache.maven.plugin.surefire.log.api.NullConsoleLogger;
+import org.apache.maven.surefire.booter.ForkingRunListener;
+import org.apache.maven.surefire.report.CategorizedReportEntry;
 import org.apache.maven.surefire.report.ConsoleOutputReceiver;
 import org.apache.maven.surefire.report.LegacyPojoStackTraceWriter;
 import org.apache.maven.surefire.report.ReportEntry;
@@ -40,12 +35,17 @@ import org.apache.maven.surefire.report.RunListener;
 import org.apache.maven.surefire.report.SimpleReportEntry;
 import org.apache.maven.surefire.report.StackTraceWriter;
 
-import junit.framework.Assert;
-import junit.framework.TestCase;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.nio.charset.Charset;
+import java.util.List;
+import java.util.Properties;
+import java.util.StringTokenizer;
 
+import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.greaterThan;
 import static org.hamcrest.Matchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * @author Kristian Rosenvold
@@ -53,10 +53,9 @@ import static org.hamcrest.MatcherAssert.assertThat;
 public class ForkingRunListenerTest
     extends TestCase
 {
+    private final ByteArrayOutputStream content, anotherContent;
 
-    private final ByteArrayOutputStream content;
-
-    private final PrintStream printStream;
+    private final PrintStream printStream, anotherPrintStream;
 
     final int defaultChannel = 17;
 
@@ -64,8 +63,11 @@ public class ForkingRunListenerTest
 
     public ForkingRunListenerTest()
     {
-        this.content = new ByteArrayOutputStream();
+        content = new ByteArrayOutputStream();
         printStream = new PrintStream( content );
+
+        anotherContent = new ByteArrayOutputStream();
+        anotherPrintStream = new PrintStream( anotherContent );
     }
 
     private void reset()
@@ -74,7 +76,6 @@ public class ForkingRunListenerTest
         content.reset();
     }
 
-
     public void testHeaderCreation()
     {
         final byte[] header = ForkingRunListener.createHeader( (byte) 'F', 
0xCAFE );
@@ -253,7 +254,7 @@ public class ForkingRunListenerTest
 
         forkStreamClient.consumeMultiLineContent( content.toString( "utf-8" ) 
);
 
-        final MockReporter reporter = (MockReporter) 
forkStreamClient.getReporter( defaultChannel );
+        final MockReporter reporter = (MockReporter) 
forkStreamClient.getReporter();
         final List<String> events = reporter.getEvents();
         assertEquals( MockReporter.SET_STARTING, events.get( 0 ) );
         assertEquals( MockReporter.TEST_STARTING, events.get( 1 ) );
@@ -271,21 +272,25 @@ public class ForkingRunListenerTest
         new ForkingRunListener( printStream, defaultChannel, false )
                 .testStarting( expected );
 
-        new ForkingRunListener( printStream, anotherChannel, false )
+        new ForkingRunListener( anotherPrintStream, anotherChannel, false )
                 .testSkipped( secondExpected );
 
         TestSetMockReporterFactory providerReporterFactory = new 
TestSetMockReporterFactory();
+        Properties vmProps = new Properties();
+        NotifiableTestStream notifiableTestStream = new 
MockNotifiableTestStream();
         NullConsoleLogger log = new NullConsoleLogger();
-        final ForkClient forkStreamClient = new ForkClient( 
providerReporterFactory, new Properties(),
-                                                            new 
MockNotifiableTestStream(), log );
+
+        ForkClient forkStreamClient = new ForkClient( providerReporterFactory, 
vmProps, notifiableTestStream, log );
         forkStreamClient.consumeMultiLineContent( content.toString( "utf-8" ) 
);
 
-        MockReporter reporter = (MockReporter) forkStreamClient.getReporter( 
defaultChannel );
+        MockReporter reporter = (MockReporter) forkStreamClient.getReporter();
         Assert.assertEquals( MockReporter.TEST_STARTING, 
reporter.getFirstEvent() );
         Assert.assertEquals( expected, reporter.getFirstData() );
         Assert.assertEquals( 1, reporter.getEvents().size() );
 
-        MockReporter reporter2 = (MockReporter) forkStreamClient.getReporter( 
anotherChannel );
+        forkStreamClient = new ForkClient( providerReporterFactory, vmProps, 
notifiableTestStream, log );
+        forkStreamClient.consumeMultiLineContent( anotherContent.toString( 
"utf-8" ) );
+        MockReporter reporter2 = (MockReporter) forkStreamClient.getReporter();
         Assert.assertEquals( MockReporter.TEST_SKIPPED, 
reporter2.getFirstEvent() );
         Assert.assertEquals( secondExpected, reporter2.getFirstData() );
         Assert.assertEquals( 1, reporter2.getEvents().size() );
@@ -331,9 +336,9 @@ public class ForkingRunListenerTest
         }
     }
 
-    private RunListener createForkingRunListener( Integer testSetCHannel )
+    private RunListener createForkingRunListener( Integer testSetChannel )
     {
-        return new ForkingRunListener( printStream, testSetCHannel, false );
+        return new ForkingRunListener( printStream, testSetChannel, false );
     }
 
     private class StandardTestRun
@@ -355,7 +360,7 @@ public class ForkingRunListenerTest
             final ForkClient forkStreamClient = new ForkClient( 
providerReporterFactory, new Properties(),
                                                                 new 
MockNotifiableTestStream(), log );
             forkStreamClient.consumeMultiLineContent( content.toString( ) );
-            reporter = (MockReporter) forkStreamClient.getReporter( 
defaultChannel );
+            reporter = (MockReporter) forkStreamClient.getReporter();
         }
 
         public String getFirstEvent()

Reply via email to