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 37e50f5581..67b2ce7bab 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
@@ -72,7 +72,7 @@ public final class ForkClient
/**
* testSetStartedAt is set to non-zero after received
- * {@link MasterProcessChannelEncoder#testSetStarting(ReportEntry, boolean)}.
+ * {@link MasterProcessChannelEncoder#testSetStarting(TestSetReportEntry, boolean)}.
*/
private final AtomicLong testSetStartedAt = new AtomicLong( START_TIME_ZERO );
diff --git a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/extensions/ForkedProcessEventNotifierTest.java b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/extensions/ForkedProcessEventNotifierTest.java
index c4b9de75c9..7aad5afc15 100644
--- a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/extensions/ForkedProcessEventNotifierTest.java
+++ b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/extensions/ForkedProcessEventNotifierTest.java
@@ -36,7 +36,7 @@
import org.apache.maven.surefire.api.report.RunMode;
import org.apache.maven.surefire.api.report.SafeThrowable;
import org.apache.maven.surefire.api.report.StackTraceWriter;
-import org.apache.maven.surefire.api.util.internal.ObjectUtils;
+import org.apache.maven.surefire.api.report.TestSetReportEntry;
import org.apache.maven.surefire.api.util.internal.WritableBufferedByteChannel;
import org.apache.maven.surefire.booter.spi.EventChannelEncoder;
import org.apache.maven.surefire.extensions.EventHandler;
@@ -79,6 +79,7 @@
import static org.apache.maven.surefire.api.report.TestOutputReportEntry.stdOutln;
import static org.apache.maven.surefire.api.util.internal.Channels.newBufferedChannel;
import static org.apache.maven.surefire.api.util.internal.Channels.newChannel;
+import static org.apache.maven.surefire.api.util.internal.ObjectUtils.systemProps;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.assertTrue;
import static org.junit.rules.ExpectedException.none;
@@ -104,48 +105,6 @@ public static class DecoderOperationsTest
@Rule
public final ExpectedException rule = none();
- @Test
- public void shouldHaveSystemProperty() throws Exception
- {
- final Stream out = Stream.newStream();
- WritableBufferedByteChannel wChannel = newBufferedChannel( out );
- EventChannelEncoder encoder = new EventChannelEncoder( wChannel );
- Map props = ObjectUtils.systemProps();
- encoder.systemProperties( props, NORMAL_RUN, 1L );
- wChannel.close();
-
- ForkedProcessEventNotifier notifier = new ForkedProcessEventNotifier();
- PropertyEventAssertionListener listener = new PropertyEventAssertionListener();
- notifier.setSystemPropertiesListener( listener );
-
- ReadableByteChannel channel = newChannel( new ByteArrayInputStream( out.toByteArray() ) );
-
- EH eventHandler = new EH();
- CountdownCloseable countdown = new CountdownCloseable( mock( Closeable.class ), 0 );
- ConsoleLoggerMock logger = new ConsoleLoggerMock( false, false, false, false );
- ForkNodeArgumentsMock arguments = new ForkNodeArgumentsMock( logger, new File( "" ) );
- try ( EventConsumerThread t = new EventConsumerThread( "t", channel, eventHandler, countdown, arguments ) )
- {
- t.start();
- for ( int i = 0; i < props.size(); i++ )
- {
- notifier.notifyEvent( eventHandler.pullEvent() );
- }
- }
-
- assertThat( logger.error ).isEmpty();
- assertThat( logger.warning ).isEmpty();
- assertThat( logger.info ).isEmpty();
- assertThat( logger.debug ).isEmpty();
-
- assertThat( logger.isCalled() )
- .isFalse();
- assertThat( arguments.isCalled() )
- .isFalse();
- assertThat( listener.counter.get() )
- .isEqualTo( props.size() );
- }
-
@Test
public void shouldSendByeEvent() throws Exception
{
@@ -799,44 +758,6 @@ public void testStdErrStream() throws Exception
.isTrue();
}
- @Test
- public void shouldCountSameNumberOfSystemProperties() throws Exception
- {
- final Stream out = Stream.newStream();
- WritableBufferedByteChannel wChannel = newBufferedChannel( out );
- EventChannelEncoder encoder = new EventChannelEncoder( wChannel );
- encoder.systemProperties( ObjectUtils.systemProps(), NORMAL_RUN, 1L );
- wChannel.close();
-
- ReadableByteChannel channel = newChannel( new ByteArrayInputStream( out.toByteArray() ) );
-
- ForkedProcessEventNotifier notifier = new ForkedProcessEventNotifier();
- PropertyEventAssertionListener listener = new PropertyEventAssertionListener();
- notifier.setSystemPropertiesListener( listener );
-
- EH eventHandler = new EH();
- CountdownCloseable countdown = new CountdownCloseable( mock( Closeable.class ), 0 );
- ConsoleLoggerMock logger = new ConsoleLoggerMock( false, false, false, false );
- ForkNodeArgumentsMock arguments = new ForkNodeArgumentsMock( logger, new File( "" ) );
- try ( EventConsumerThread t = new EventConsumerThread( "t", channel, eventHandler, countdown, arguments ) )
- {
- t.start();
- notifier.notifyEvent( eventHandler.pullEvent() );
- }
-
- assertThat( logger.error ).isEmpty();
- assertThat( logger.warning ).isEmpty();
- assertThat( logger.info ).isEmpty();
- assertThat( logger.debug ).isEmpty();
-
- assertThat( logger.isCalled() )
- .isFalse();
- assertThat( arguments.isCalled() )
- .isFalse();
- assertThat( listener.called.get() )
- .isTrue();
- }
-
@Test
public void shouldHandleErrorAfterNullLine()
{
@@ -999,7 +920,7 @@ public void testReportEntryOperations( @FromDataPoints( "operation" ) String[] o
when( stackTraceWriter.writeTraceToString() ).thenReturn( exceptionStackTrace );
}
- ReportEntry reportEntry = mock( ReportEntry.class );
+ TestSetReportEntry reportEntry = mock( TestSetReportEntry.class );
when( reportEntry.getElapsed() ).thenReturn( elapsed );
when( reportEntry.getGroup() ).thenReturn( "this group" );
when( reportEntry.getMessage() ).thenReturn( reportedMessage );
@@ -1009,12 +930,14 @@ public void testReportEntryOperations( @FromDataPoints( "operation" ) String[] o
when( reportEntry.getSourceName() ).thenReturn( "pkg.MyTest" );
when( reportEntry.getSourceText() ).thenReturn( "test class display name" );
when( reportEntry.getStackTraceWriter() ).thenReturn( stackTraceWriter );
+ when( reportEntry.getSystemProperties() ).thenReturn( systemProps() );
final Stream out = Stream.newStream();
EventChannelEncoder encoder = new EventChannelEncoder( newBufferedChannel( out ) );
- EventChannelEncoder.class.getMethod( operation[0], ReportEntry.class, boolean.class )
+ Class> reportType = operation[0].startsWith( "testSet" ) ? TestSetReportEntry.class : ReportEntry.class;
+ EventChannelEncoder.class.getMethod( operation[0], reportType, boolean.class )
.invoke( encoder, reportEntry, trim );
ForkedProcessEventNotifier notifier = new ForkedProcessEventNotifier();
diff --git a/surefire-api/src/main/java/org/apache/maven/surefire/api/booter/ForkingRunListener.java b/surefire-api/src/main/java/org/apache/maven/surefire/api/booter/ForkingRunListener.java
index dbb3156fb1..70391ad147 100644
--- a/surefire-api/src/main/java/org/apache/maven/surefire/api/booter/ForkingRunListener.java
+++ b/surefire-api/src/main/java/org/apache/maven/surefire/api/booter/ForkingRunListener.java
@@ -68,7 +68,6 @@ public void testSetStarting( TestSetReportEntry report )
@Override
public void testSetCompleted( TestSetReportEntry report )
{
- target.systemProperties( report.getSystemProperties(), null, null );
target.testSetCompleted( report, trim );
}
diff --git a/surefire-api/src/main/java/org/apache/maven/surefire/api/booter/MasterProcessChannelEncoder.java b/surefire-api/src/main/java/org/apache/maven/surefire/api/booter/MasterProcessChannelEncoder.java
index 193929504d..50e8c96a05 100644
--- a/surefire-api/src/main/java/org/apache/maven/surefire/api/booter/MasterProcessChannelEncoder.java
+++ b/surefire-api/src/main/java/org/apache/maven/surefire/api/booter/MasterProcessChannelEncoder.java
@@ -20,11 +20,9 @@
*/
import org.apache.maven.surefire.api.report.ReportEntry;
-import org.apache.maven.surefire.api.report.RunMode;
import org.apache.maven.surefire.api.report.StackTraceWriter;
import org.apache.maven.surefire.api.report.TestOutputReportEntry;
-
-import java.util.Map;
+import org.apache.maven.surefire.api.report.TestSetReportEntry;
/**
* An abstraction for physical encoder of events.
@@ -44,22 +42,13 @@ public interface MasterProcessChannelEncoder
*/
void onJvmExit();
- /**
- * System properties after the test set has finished.
- *
- * @param sysProps system properties handled after the test set tear down
- * @param runMode the run mode of particular test set
- * @param testRunId the test set identification
- */
- void systemProperties( Map sysProps, RunMode runMode, Long testRunId );
-
/**
* The test set has started.
*
* @param reportEntry test set report entry
* @param trimStackTraces {@code true} if stack trace trimming
*/
- void testSetStarting( ReportEntry reportEntry, boolean trimStackTraces );
+ void testSetStarting( TestSetReportEntry reportEntry, boolean trimStackTraces );
/**
* The test set has finished.
@@ -67,7 +56,7 @@ public interface MasterProcessChannelEncoder
* @param reportEntry test set report entry
* @param trimStackTraces {@code true} if stack trace trimming
*/
- void testSetCompleted( ReportEntry reportEntry, boolean trimStackTraces );
+ void testSetCompleted( TestSetReportEntry reportEntry, boolean trimStackTraces );
/**
* The test has started.
diff --git a/surefire-booter/src/main/java/org/apache/maven/surefire/booter/spi/EventChannelEncoder.java b/surefire-booter/src/main/java/org/apache/maven/surefire/booter/spi/EventChannelEncoder.java
index 67fd6bfe5e..5b74912452 100644
--- a/surefire-booter/src/main/java/org/apache/maven/surefire/booter/spi/EventChannelEncoder.java
+++ b/surefire-booter/src/main/java/org/apache/maven/surefire/booter/spi/EventChannelEncoder.java
@@ -28,6 +28,7 @@
import org.apache.maven.surefire.api.report.SafeThrowable;
import org.apache.maven.surefire.api.report.StackTraceWriter;
import org.apache.maven.surefire.api.report.TestOutputReportEntry;
+import org.apache.maven.surefire.api.report.TestSetReportEntry;
import org.apache.maven.surefire.api.util.internal.WritableBufferedByteChannel;
import org.apache.maven.surefire.booter.stream.EventEncoder;
@@ -127,8 +128,7 @@ public void onJvmExit()
write( ByteBuffer.wrap( new byte[] {'\n'} ), true );
}
- @Override
- public void systemProperties( Map sysProps, RunMode rm, Long testRunId )
+ private void encodeSystemProperties( Map sysProps, RunMode rm, Long testRunId )
{
CharsetEncoder encoder = newCharsetEncoder();
ByteBuffer result = null;
@@ -145,19 +145,20 @@ public void systemProperties( Map sysProps, RunMode rm, Long tes
// :maven-surefire-event:sys-prop:rerun-test-after-failure:UTF-8:::::
encode( encoder, result, BOOTERCODE_SYSPROPS, runMode, key, value );
boolean sync = !it.hasNext();
- write( result, sync );
+ write( result, true );
}
}
@Override
- public void testSetStarting( ReportEntry reportEntry, boolean trimStackTraces )
+ public void testSetStarting( TestSetReportEntry reportEntry, boolean trimStackTraces )
{
encode( BOOTERCODE_TESTSET_STARTING, runMode, reportEntry, trimStackTraces, true );
}
@Override
- public void testSetCompleted( ReportEntry reportEntry, boolean trimStackTraces )
+ public void testSetCompleted( TestSetReportEntry reportEntry, boolean trimStackTraces )
{
+ encodeSystemProperties( reportEntry.getSystemProperties(), null, null ); // todo in next commit
encode( BOOTERCODE_TESTSET_COMPLETED, runMode, reportEntry, trimStackTraces, true );
}
diff --git a/surefire-booter/src/test/java/org/apache/maven/surefire/booter/spi/EventChannelEncoderTest.java b/surefire-booter/src/test/java/org/apache/maven/surefire/booter/spi/EventChannelEncoderTest.java
index 14f1e5e6e5..98c4b7d6a7 100644
--- a/surefire-booter/src/test/java/org/apache/maven/surefire/booter/spi/EventChannelEncoderTest.java
+++ b/surefire-booter/src/test/java/org/apache/maven/surefire/booter/spi/EventChannelEncoderTest.java
@@ -23,7 +23,7 @@
import org.apache.maven.surefire.api.report.ReportEntry;
import org.apache.maven.surefire.api.report.SafeThrowable;
import org.apache.maven.surefire.api.report.StackTraceWriter;
-import org.apache.maven.surefire.api.util.internal.ObjectUtils;
+import org.apache.maven.surefire.api.report.TestSetReportEntry;
import org.apache.maven.surefire.api.util.internal.WritableBufferedByteChannel;
import org.junit.Test;
@@ -44,6 +44,7 @@
import static org.apache.maven.surefire.api.report.TestOutputReportEntry.stdOut;
import static org.apache.maven.surefire.api.report.TestOutputReportEntry.stdOutln;
import static org.apache.maven.surefire.api.util.internal.Channels.newBufferedChannel;
+import static org.apache.maven.surefire.api.util.internal.ObjectUtils.systemProps;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@@ -75,7 +76,7 @@ public void reportEntry() throws IOException
when( stackTraceWriter.writeTrimmedTraceToString() ).thenReturn( trimmedStackTrace );
when( stackTraceWriter.writeTraceToString() ).thenReturn( stackTrace );
- ReportEntry reportEntry = mock( ReportEntry.class );
+ TestSetReportEntry reportEntry = mock( TestSetReportEntry.class );
when( reportEntry.getElapsed() ).thenReturn( ELAPSED_TIME );
when( reportEntry.getGroup() ).thenReturn( "this group" );
when( reportEntry.getMessage() ).thenReturn( "skipped test" );
@@ -317,7 +318,9 @@ public void testSetCompleted() throws IOException
when( stackTraceWriter.writeTrimmedTraceToString() ).thenReturn( trimmedStackTrace );
when( stackTraceWriter.writeTraceToString() ).thenReturn( stackTrace );
- ReportEntry reportEntry = mock( ReportEntry.class );
+ Map props = systemProps();
+
+ TestSetReportEntry reportEntry = mock( TestSetReportEntry.class );
when( reportEntry.getElapsed() ).thenReturn( ELAPSED_TIME );
when( reportEntry.getGroup() ).thenReturn( "this group" );
when( reportEntry.getMessage() ).thenReturn( "skipped test" );
@@ -325,12 +328,41 @@ public void testSetCompleted() throws IOException
when( reportEntry.getNameWithGroup() ).thenReturn( "name with group" );
when( reportEntry.getSourceName() ).thenReturn( "pkg.MyTest" );
when( reportEntry.getStackTraceWriter() ).thenReturn( stackTraceWriter );
+ when( reportEntry.getSystemProperties() ).thenReturn( props );
Stream out = Stream.newStream();
EventChannelEncoder encoder = new EventChannelEncoder( newBufferedChannel( out ) );
encoder.testSetCompleted( reportEntry, false );
+
ByteArrayOutputStream expectedFrame = new ByteArrayOutputStream();
+ for ( Entry entry : props.entrySet() )
+ {
+ expectedFrame.write( ":maven-surefire-event:".getBytes() );
+ expectedFrame.write( 8 );
+ expectedFrame.write( ":sys-prop:".getBytes() );
+ expectedFrame.write( 10 );
+ expectedFrame.write( ":normal-run:".getBytes() );
+ expectedFrame.write( 5 );
+ expectedFrame.write( ":UTF-8:".getBytes() );
+ int[] k = toBytes( entry.getKey().length() );
+ expectedFrame.write( k[0] );
+ expectedFrame.write( k[1] );
+ expectedFrame.write( k[2] );
+ expectedFrame.write( k[3] );
+ expectedFrame.write( ':' );
+ expectedFrame.write( entry.getKey().getBytes( UTF_8 ) );
+ expectedFrame.write( ':' );
+ int[] v = toBytes( entry.getValue() == null ? 1 : entry.getValue().getBytes( UTF_8 ).length );
+ expectedFrame.write( v[0] );
+ expectedFrame.write( v[1] );
+ expectedFrame.write( v[2] );
+ expectedFrame.write( v[3] );
+ expectedFrame.write( ':' );
+ expectedFrame.write( ( entry.getValue() == null ? "\u0000" : entry.getValue() ).getBytes( UTF_8 ) );
+ expectedFrame.write( ':' );
+ }
+
expectedFrame.write( ":maven-surefire-event:".getBytes( UTF_8 ) );
expectedFrame.write( (byte) 17 );
expectedFrame.write( ":testset-completed:".getBytes( UTF_8 ) );
@@ -377,6 +409,7 @@ public void testSetCompleted() throws IOException
expectedFrame.write( ':' );
expectedFrame.write( stackTrace.getBytes( UTF_8 ) );
expectedFrame.write( ':' );
+
assertThat( out.toByteArray() )
.isEqualTo( expectedFrame.toByteArray() );
}
@@ -1142,41 +1175,6 @@ public void testStdErrStreamLn() throws IOException
.isEqualTo( expected );
}
- @Test
- @SuppressWarnings( "checkstyle:innerassignment" )
- public void shouldCountSameNumberOfSystemProperties() throws IOException
- {
- Stream stream = Stream.newStream();
- WritableBufferedByteChannel channel = newBufferedChannel( stream );
- EventChannelEncoder encoder = new EventChannelEncoder( channel );
-
- Map sysProps = ObjectUtils.systemProps();
- encoder.systemProperties( sysProps, NORMAL_RUN, 1L );
- channel.close();
-
- for ( Entry entry : sysProps.entrySet() )
- {
- int[] k = toBytes( entry.getKey().length() );
- int[] v = toBytes( entry.getValue() == null ? 1 : entry.getValue().getBytes( UTF_8 ).length );
- ByteArrayOutputStream expectedFrame = new ByteArrayOutputStream();
- expectedFrame.write( ":maven-surefire-event:sys-prop:normal-run:UTF-8:".getBytes( UTF_8 ) );
- expectedFrame.write( k[0] );
- expectedFrame.write( k[1] );
- expectedFrame.write( k[2] );
- expectedFrame.write( k[3] );
- expectedFrame.write( ':' );
- expectedFrame.write( v[0] );
- expectedFrame.write( v[1] );
- expectedFrame.write( v[2] );
- expectedFrame.write( v[3] );
- expectedFrame.write( ':' );
- expectedFrame.write( ( entry.getValue() == null ? "\u0000" : entry.getValue() ).getBytes( UTF_8 ) );
- expectedFrame.write( ':' );
- assertThat( stream.toByteArray() )
- .contains( expectedFrame.toByteArray() );
- }
- }
-
@Test
public void shouldHandleExit()
{