[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()