You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ti...@apache.org on 2020/02/11 01:47:32 UTC
[maven-surefire] branch maven2surefire-jvm-communication updated:
Finished JavaDoc, TCP client, renamed magic number.
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
The following commit(s) were added to refs/heads/maven2surefire-jvm-communication by this push:
new 9f4fb37 Finished JavaDoc, TCP client, renamed magic number.
9f4fb37 is described below
commit 9f4fb3753f4363c6adc30590853e248ee1928ee4
Author: tibordigana <ti...@apache.org>
AuthorDate: Tue Feb 11 02:47:20 2020 +0100
Finished JavaDoc, TCP client, renamed magic number.
---
.../plugin/surefire/AbstractSurefireMojo.java | 16 +-
.../surefire/booterclient/output/ForkClient.java | 3 +-
.../booterclient/output/ForkedChannelDecoder.java | 6 +-
.../AbstractSurefireMojoJava7PlusTest.java | 1 -
.../plugin/surefire/AbstractSurefireMojoTest.java | 1 -
...ooterDeserializerProviderConfigurationTest.java | 9 +-
...BooterDeserializerStartupConfigurationTest.java | 24 ++-
.../booterclient/DefaultForkConfigurationTest.java | 4 +-
.../booterclient/ForkConfigurationTest.java | 11 +-
.../booterclient/ForkingRunListenerTest.java | 12 +-
.../plugin/surefire/booterclient/MainClass.java | 4 +-
.../ModularClasspathForkConfigurationTest.java | 10 +-
.../TestLessInputStreamBuilderTest.java | 4 +-
.../TestProvidingInputStreamTest.java | 6 +-
.../booterclient/output/ForkClientTest.java | 54 +++---
.../output/ForkedChannelDecoderTest.java | 90 +++++-----
.../maven/surefire/extensions/ForkChannelTest.java | 36 ++--
.../maven/surefire/booter/BaseProviderFactory.java | 16 +-
.../maven/surefire/booter/ForkedProcessEvent.java | 4 +-
.../surefire/booter/ForkingReporterFactory.java | 5 +-
.../maven/surefire/booter/ForkingRunListener.java | 5 +-
.../booter/MasterProcessChannelEncoder.java | 49 ------
.../surefire/booter/MasterProcessCommand.java | 8 +-
.../providerapi/MasterProcessChannelEncoder.java | 84 +++++++++
.../surefire/providerapi/ProviderParameters.java | 3 +-
.../java/org/apache/maven/JUnit4SuiteTest.java | 4 +-
.../surefire/booter/ForkingRunListenerTest.java | 25 ++-
.../maven/surefire/booter/BooterDeserializer.java | 11 +-
.../maven/surefire/booter/CommandReader.java | 14 +-
.../apache/maven/surefire/booter/ForkedBooter.java | 72 ++++++--
.../maven/surefire/booter/LazyTestsToRun.java | 5 +-
.../surefire/booter/StartupConfiguration.java | 27 +--
.../DefaultMasterProcessChannelDecoderFactory.java | 46 -----
...java => LegacyMasterProcessChannelDecoder.java} | 19 +-
.../spi/LegacyMasterProcessChannelEncoder.java | 50 ++++--
...LegacyMasterProcessChannelProcessorFactory.java | 70 ++++++++
...refireMasterProcessChannelProcessorFactory.java | 91 ++++++++++
...efire.spi.MasterProcessChannelProcessorFactory} | 3 +-
.../surefire/booter/BooterDeserializerTest.java | 2 +-
.../maven/surefire/booter/CommandReaderTest.java | 21 ++-
.../surefire/booter/ForkedBooterMockTest.java | 5 +-
.../maven/surefire/booter/JUnit4SuiteTest.java | 5 +-
.../LegacyMasterProcessChannelDecoderTest.java} | 38 ++--
.../spi/LegacyMasterProcessChannelEncoderTest.java | 195 +++++++++++----------
.../maven/surefire/extensions/ForkNodeFactory.java | 2 +-
...a => MasterProcessChannelProcessorFactory.java} | 34 +++-
46 files changed, 733 insertions(+), 471 deletions(-)
diff --git a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java
index 2239921..7cf4b38 100644
--- a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java
+++ b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java
@@ -1748,7 +1748,7 @@ public abstract class AbstractSurefireMojo
return new File( getBasedir(), ".surefire-" + configurationHash );
}
- private StartupConfiguration createStartupConfiguration( @Nonnull ProviderInfo provider, boolean isInprocess,
+ private StartupConfiguration createStartupConfiguration( @Nonnull ProviderInfo provider, boolean isForking,
@Nonnull ClassLoaderConfiguration classLoaderConfiguration,
@Nonnull DefaultScanResult scanResult,
@Nonnull Platform platform,
@@ -1759,7 +1759,7 @@ public abstract class AbstractSurefireMojo
{
Set<Artifact> providerArtifacts = provider.getProviderClasspath();
String providerName = provider.getProviderName();
- if ( canExecuteProviderWithModularPath( platform ) && !isInprocess )
+ if ( isForking && canExecuteProviderWithModularPath( platform ) )
{
String jvmExecutable = platform.getJdkExecAttributesForTests().getJvmExecutable();
String javaHome = Paths.get( jvmExecutable )
@@ -1811,8 +1811,8 @@ public abstract class AbstractSurefireMojo
ClasspathConfiguration classpathConfiguration = new ClasspathConfiguration( testClasspath, providerClasspath,
inProcClasspath, effectiveIsEnableAssertions(), isChildDelegation() );
- return new StartupConfiguration( providerName, classpathConfiguration, classLoaderConfiguration, isForking(),
- false, ProcessCheckerType.toEnum( getEnableProcessChecker() ) );
+ return new StartupConfiguration( providerName, classpathConfiguration, classLoaderConfiguration,
+ ProcessCheckerType.toEnum( getEnableProcessChecker() ) );
}
private static Set<Artifact> retainInProcArtifactsUnique( Set<Artifact> providerArtifacts,
@@ -1921,8 +1921,8 @@ public abstract class AbstractSurefireMojo
getConsoleLogger().debug( inProcClasspath.getLogMessage( "in-process classpath:" ) );
getConsoleLogger().debug( inProcClasspath.getCompactLogMessage( "in-process(compact) classpath:" ) );
- return new StartupConfiguration( providerName, classpathConfiguration, classLoaderConfiguration, isForking(),
- false, ProcessCheckerType.toEnum( getEnableProcessChecker() ) );
+ return new StartupConfiguration( providerName, classpathConfiguration, classLoaderConfiguration,
+ ProcessCheckerType.toEnum( getEnableProcessChecker() ) );
}
private Artifact getCommonArtifact()
@@ -2239,7 +2239,7 @@ public abstract class AbstractSurefireMojo
@Nonnull TestClassPath testClasspathWrapper )
throws MojoExecutionException, MojoFailureException
{
- StartupConfiguration startupConfiguration = createStartupConfiguration( provider, false,
+ StartupConfiguration startupConfiguration = createStartupConfiguration( provider, true,
classLoaderConfiguration, scanResult, platform, testClasspathWrapper );
String configChecksum = getConfigChecksum();
StartupReportConfiguration startupReportConfiguration = getStartupReportConfiguration( configChecksum, true );
@@ -2256,7 +2256,7 @@ public abstract class AbstractSurefireMojo
@Nonnull TestClassPath testClasspathWrapper )
throws MojoExecutionException, MojoFailureException
{
- StartupConfiguration startupConfiguration = createStartupConfiguration( provider, true, classLoaderConfig,
+ StartupConfiguration startupConfiguration = createStartupConfiguration( provider, false, classLoaderConfig,
scanResult, platform, testClasspathWrapper );
String configChecksum = getConfigChecksum();
StartupReportConfiguration startupReportConfiguration = getStartupReportConfiguration( configChecksum, false );
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 18cfe28..a02db78 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
@@ -22,6 +22,7 @@ package org.apache.maven.plugin.surefire.booterclient.output;
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.surefire.providerapi.MasterProcessChannelEncoder;
import org.apache.maven.surefire.shared.utils.cli.StreamConsumer;
import org.apache.maven.surefire.report.ConsoleOutputReceiver;
import org.apache.maven.surefire.report.ReportEntry;
@@ -74,7 +75,7 @@ public class ForkClient
/**
* <em>testSetStartedAt</em> is set to non-zero after received
- * {@link org.apache.maven.surefire.booter.ForkedChannelEncoder#testSetStarting(ReportEntry, boolean)}.
+ * {@link MasterProcessChannelEncoder#testSetStarting(ReportEntry, boolean)}.
*/
private final AtomicLong testSetStartedAt = new AtomicLong( START_TIME_ZERO );
diff --git a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/output/ForkedChannelDecoder.java b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/output/ForkedChannelDecoder.java
index f0c96e3..5d49b0e 100644
--- a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/output/ForkedChannelDecoder.java
+++ b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/output/ForkedChannelDecoder.java
@@ -32,7 +32,7 @@ import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import static java.nio.charset.StandardCharsets.US_ASCII;
-import static org.apache.maven.surefire.booter.ForkedProcessEvent.MAGIC_NUMBER;
+import static org.apache.maven.surefire.booter.ForkedProcessEvent.MAGIC_NUMBER_DELIMITED;
import static org.apache.maven.surefire.booter.ForkedProcessEvent.BOOTERCODE_STDERR;
import static org.apache.maven.surefire.booter.ForkedProcessEvent.BOOTERCODE_STDERR_NEW_LINE;
import static org.apache.maven.surefire.booter.ForkedProcessEvent.BOOTERCODE_STDOUT;
@@ -183,13 +183,13 @@ public final class ForkedChannelDecoder
public void handleEvent( String line, ForkedChannelDecoderErrorHandler errorHandler )
{
- if ( line == null || !line.startsWith( MAGIC_NUMBER ) )
+ if ( line == null || !line.startsWith( MAGIC_NUMBER_DELIMITED ) )
{
errorHandler.handledError( line, null );
return;
}
- StringTokenizer tokenizer = new StringTokenizer( line.substring( MAGIC_NUMBER.length() ), ":" );
+ StringTokenizer tokenizer = new StringTokenizer( line.substring( MAGIC_NUMBER_DELIMITED.length() ), ":" );
String opcode = tokenizer.hasMoreTokens() ? tokenizer.nextToken() : null;
ForkedProcessEvent event = opcode == null ? null : EVENTS.get( opcode );
if ( event == null )
diff --git a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/AbstractSurefireMojoJava7PlusTest.java b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/AbstractSurefireMojoJava7PlusTest.java
index cc6f9a3..abd896e 100644
--- a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/AbstractSurefireMojoJava7PlusTest.java
+++ b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/AbstractSurefireMojoJava7PlusTest.java
@@ -209,7 +209,6 @@ public class AbstractSurefireMojoJava7PlusTest
verify( mojo, times( 1 ) ).effectiveIsEnableAssertions();
verify( mojo, times( 1 ) ).isChildDelegation();
- verify( mojo, times( 1 ) ).getEffectiveForkCount();
verify( mojo, times( 1 ) ).getTestClassesDirectory();
verify( scanResult, times( 1 ) ).getClasses();
verifyStatic( ResolvePathsRequest.class, times( 1 ) );
diff --git a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/AbstractSurefireMojoTest.java b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/AbstractSurefireMojoTest.java
index d1e4b9d..0553de7 100644
--- a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/AbstractSurefireMojoTest.java
+++ b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/AbstractSurefireMojoTest.java
@@ -374,7 +374,6 @@ public class AbstractSurefireMojoTest
verify( mojo, times( 1 ) ).effectiveIsEnableAssertions();
verify( mojo, times( 1 ) ).isChildDelegation();
- verify( mojo, times( 1 ) ).getEffectiveForkCount();
ArgumentCaptor<String> argument = ArgumentCaptor.forClass( String.class );
verify( logger, times( 6 ) ).debug( argument.capture() );
assertThat( argument.getAllValues() )
diff --git a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/BooterDeserializerProviderConfigurationTest.java b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/BooterDeserializerProviderConfigurationTest.java
index caf1376..10563a8 100644
--- a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/BooterDeserializerProviderConfigurationTest.java
+++ b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/BooterDeserializerProviderConfigurationTest.java
@@ -25,7 +25,6 @@ import org.apache.maven.surefire.shared.io.FileUtils;
import org.apache.maven.surefire.booter.BooterDeserializer;
import org.apache.maven.surefire.booter.ClassLoaderConfiguration;
import org.apache.maven.surefire.booter.ClasspathConfiguration;
-import org.apache.maven.surefire.booter.ProcessCheckerType;
import org.apache.maven.surefire.booter.PropertiesWrapper;
import org.apache.maven.surefire.booter.ProviderConfiguration;
import org.apache.maven.surefire.booter.Shutdown;
@@ -52,6 +51,7 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.List;
+import static org.apache.maven.surefire.booter.ProcessCheckerType.ALL;
import static org.apache.maven.surefire.cli.CommandLineOption.LOGGING_LEVEL_DEBUG;
import static org.apache.maven.surefire.cli.CommandLineOption.REACTOR_FAIL_FAST;
import static org.apache.maven.surefire.cli.CommandLineOption.SHOW_ERRORS;
@@ -260,10 +260,10 @@ public class BooterDeserializerProviderConfigurationTest
test = "aTest";
}
final File propsTest = booterSerializer.serialize( props, booterConfiguration, testProviderConfiguration, test,
- readTestsFromInStream, 51L, 1, "pipe://" );
+ readTestsFromInStream, 51L, 1, "pipe://1" );
BooterDeserializer booterDeserializer = new BooterDeserializer( new FileInputStream( propsTest ) );
assertEquals( "51", (Object) booterDeserializer.getPluginPid() );
- assertEquals( "pipe://", booterDeserializer.getForkNodeConnectionString() );
+ assertEquals( "pipe://1", booterDeserializer.getConnectionString() );
return booterDeserializer.deserialize();
}
@@ -286,8 +286,7 @@ public class BooterDeserializerProviderConfigurationTest
{
ClasspathConfiguration classpathConfiguration = new ClasspathConfiguration( true, true );
- return new StartupConfiguration( "com.provider", classpathConfiguration, classLoaderConfiguration, false,
- false, ProcessCheckerType.ALL );
+ return new StartupConfiguration( "com.provider", classpathConfiguration, classLoaderConfiguration, ALL );
}
private File getTestSourceDirectory()
diff --git a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/BooterDeserializerStartupConfigurationTest.java b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/BooterDeserializerStartupConfigurationTest.java
index 5054e6c..63f6162 100644
--- a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/BooterDeserializerStartupConfigurationTest.java
+++ b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/BooterDeserializerStartupConfigurationTest.java
@@ -20,24 +20,23 @@ package org.apache.maven.plugin.surefire.booterclient;
*/
import junit.framework.TestCase;
-import org.apache.maven.surefire.shared.io.FileUtils;
import org.apache.maven.surefire.booter.AbstractPathConfiguration;
import org.apache.maven.surefire.booter.BooterDeserializer;
+import org.apache.maven.surefire.booter.ClassLoaderConfiguration;
import org.apache.maven.surefire.booter.Classpath;
import org.apache.maven.surefire.booter.ClasspathConfiguration;
-import org.apache.maven.surefire.booter.ClassLoaderConfiguration;
-import org.apache.maven.surefire.booter.ProcessCheckerType;
import org.apache.maven.surefire.booter.PropertiesWrapper;
import org.apache.maven.surefire.booter.ProviderConfiguration;
-import org.apache.maven.surefire.booter.StartupConfiguration;
import org.apache.maven.surefire.booter.Shutdown;
+import org.apache.maven.surefire.booter.StartupConfiguration;
import org.apache.maven.surefire.cli.CommandLineOption;
import org.apache.maven.surefire.report.ReporterConfiguration;
+import org.apache.maven.surefire.shared.io.FileUtils;
import org.apache.maven.surefire.testset.DirectoryScannerParameters;
import org.apache.maven.surefire.testset.RunOrderParameters;
import org.apache.maven.surefire.testset.TestArtifactInfo;
-import org.apache.maven.surefire.testset.TestRequest;
import org.apache.maven.surefire.testset.TestListResolver;
+import org.apache.maven.surefire.testset.TestRequest;
import org.apache.maven.surefire.util.RunOrder;
import org.junit.After;
import org.junit.Before;
@@ -50,6 +49,7 @@ import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
+import static org.apache.maven.surefire.booter.ProcessCheckerType.ALL;
import static org.apache.maven.surefire.cli.CommandLineOption.LOGGING_LEVEL_DEBUG;
import static org.apache.maven.surefire.cli.CommandLineOption.REACTOR_FAIL_FAST;
import static org.apache.maven.surefire.cli.CommandLineOption.SHOW_ERRORS;
@@ -105,7 +105,7 @@ public class BooterDeserializerStartupConfigurationTest
public void testProcessChecker() throws IOException
{
- assertEquals( ProcessCheckerType.ALL, getReloadedStartupConfiguration().getProcessChecker() );
+ assertEquals( ALL, getReloadedStartupConfiguration().getProcessChecker() );
}
private void assertCpConfigEquals( ClasspathConfiguration expectedConfiguration,
@@ -136,13 +136,13 @@ public class BooterDeserializerStartupConfigurationTest
public void testProcessCheckerAll() throws IOException
{
- assertEquals( ProcessCheckerType.ALL, getReloadedStartupConfiguration().getProcessChecker() );
+ assertEquals( ALL, getReloadedStartupConfiguration().getProcessChecker() );
}
public void testProcessCheckerNull() throws IOException
{
StartupConfiguration startupConfiguration = new StartupConfiguration( "com.provider", classpathConfiguration,
- getManifestOnlyJarForkConfiguration(), false, false, null );
+ getManifestOnlyJarForkConfiguration(), null );
assertNull( saveAndReload( startupConfiguration ).getProcessChecker() );
}
@@ -178,16 +178,15 @@ public class BooterDeserializerStartupConfigurationTest
BooterSerializer booterSerializer = new BooterSerializer( forkConfiguration );
String aTest = "aTest";
File propsTest = booterSerializer.serialize( props, getProviderConfiguration(), startupConfiguration, aTest,
- false, null, 1, null );
+ false, null, 1, "tcp://127.0.0.1:63003" );
BooterDeserializer booterDeserializer = new BooterDeserializer( new FileInputStream( propsTest ) );
assertNull( booterDeserializer.getPluginPid() );
- assertNull( booterDeserializer.getForkNodeConnectionString() );
+ assertEquals( "tcp://127.0.0.1:63003", booterDeserializer.getConnectionString() );
return booterDeserializer.getStartupConfiguration();
}
private ProviderConfiguration getProviderConfiguration()
{
-
File cwd = new File( "." );
DirectoryScannerParameters directoryScannerParameters =
new DirectoryScannerParameters( cwd, new ArrayList<String>(), new ArrayList<String>(),
@@ -205,8 +204,7 @@ public class BooterDeserializerStartupConfigurationTest
private StartupConfiguration getTestStartupConfiguration( ClassLoaderConfiguration classLoaderConfiguration )
{
- return new StartupConfiguration( "com.provider", classpathConfiguration, classLoaderConfiguration, false,
- false, ProcessCheckerType.ALL );
+ return new StartupConfiguration( "com.provider", classpathConfiguration, classLoaderConfiguration, ALL );
}
private File getTestSourceDirectory()
diff --git a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/DefaultForkConfigurationTest.java b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/DefaultForkConfigurationTest.java
index f0d3482..45a6b4a 100644
--- a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/DefaultForkConfigurationTest.java
+++ b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/DefaultForkConfigurationTest.java
@@ -307,7 +307,7 @@ public class DefaultForkConfigurationTest
ClassLoaderConfiguration clc = new ClassLoaderConfiguration( true, true );
ClasspathConfiguration cc = new ClasspathConfiguration( true, true );
StartupConfiguration conf = new StartupConfiguration( "org.apache.maven.shadefire.surefire.MyProvider",
- cc, clc, false, false, null );
+ cc, clc, null );
StartupConfiguration confMock = spy( conf );
mockStatic( Relocator.class );
when( Relocator.relocate( anyString() ) ).thenCallRealMethod();
@@ -328,7 +328,7 @@ public class DefaultForkConfigurationTest
ClassLoaderConfiguration clc = new ClassLoaderConfiguration( true, true );
ClasspathConfiguration cc = new ClasspathConfiguration( true, true );
StartupConfiguration conf =
- new StartupConfiguration( "org.apache.maven.surefire.MyProvider", cc, clc, false, false, null );
+ new StartupConfiguration( "org.apache.maven.surefire.MyProvider", cc, clc, null );
StartupConfiguration confMock = spy( conf );
mockStatic( Relocator.class );
when( Relocator.relocate( anyString() ) ).thenCallRealMethod();
diff --git a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/ForkConfigurationTest.java b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/ForkConfigurationTest.java
index 8d806ca..bc01ee8 100644
--- a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/ForkConfigurationTest.java
+++ b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/ForkConfigurationTest.java
@@ -57,10 +57,7 @@ public class ForkConfigurationTest
{
private static final StartupConfiguration STARTUP_CONFIG = new StartupConfiguration( "",
new ClasspathConfiguration( true, true ),
- new ClassLoaderConfiguration( true, true ),
- false,
- false,
- ALL );
+ new ClassLoaderConfiguration( true, true ), ALL );
private static int idx = 0;
@@ -93,7 +90,7 @@ public class ForkConfigurationTest
ClasspathConfiguration cpConfig = new ClasspathConfiguration( new Classpath( cp ), emptyClasspath(),
emptyClasspath(), true, true );
ClassLoaderConfiguration clc = new ClassLoaderConfiguration( true, true );
- StartupConfiguration startup = new StartupConfiguration( "", cpConfig, clc, false, false, ALL );
+ StartupConfiguration startup = new StartupConfiguration( "", cpConfig, clc, ALL );
Commandline cli = config.createCommandLine( startup, 1, temporaryFolder() );
@@ -113,7 +110,7 @@ public class ForkConfigurationTest
ClasspathConfiguration cpConfig = new ClasspathConfiguration( new Classpath( cp ), emptyClasspath(),
emptyClasspath(), true, true );
ClassLoaderConfiguration clc = new ClassLoaderConfiguration( true, true );
- StartupConfiguration startup = new StartupConfiguration( "", cpConfig, clc, false, false, ALL );
+ StartupConfiguration startup = new StartupConfiguration( "", cpConfig, clc, ALL );
Commandline commandLine = config.createCommandLine( startup, 1, temporaryFolder() );
assertTrue( commandLine.toString().contains( "abc def" ) );
@@ -128,7 +125,7 @@ public class ForkConfigurationTest
ClasspathConfiguration cpConfig = new ClasspathConfiguration( emptyClasspath(), emptyClasspath(),
emptyClasspath(), true, true );
ClassLoaderConfiguration clc = new ClassLoaderConfiguration( true, true );
- StartupConfiguration startup = new StartupConfiguration( "", cpConfig, clc, false, false, ALL );
+ StartupConfiguration startup = new StartupConfiguration( "", cpConfig, clc, ALL );
ForkConfiguration config = getForkConfiguration( cwd.getCanonicalFile() );
Commandline commandLine = config.createCommandLine( startup, 1, temporaryFolder() );
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 79c6f0e..2e44e75 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
@@ -25,7 +25,7 @@ import org.apache.maven.plugin.surefire.booterclient.lazytestprovider.Notifiable
import org.apache.maven.plugin.surefire.booterclient.output.ForkClient;
import org.apache.maven.plugin.surefire.log.api.ConsoleLogger;
import org.apache.maven.plugin.surefire.log.api.NullConsoleLogger;
-import org.apache.maven.surefire.booter.ForkedChannelEncoder;
+import org.apache.maven.surefire.booter.spi.LegacyMasterProcessChannelEncoder;
import org.apache.maven.surefire.booter.ForkingRunListener;
import org.apache.maven.surefire.report.CategorizedReportEntry;
import org.apache.maven.surefire.report.ConsoleOutputReceiver;
@@ -196,8 +196,8 @@ public class ForkingRunListenerTest
ForkClient forkStreamClient =
new ForkClient( providerReporterFactory, new MockNotifiableTestStream(), log, new AtomicBoolean(), 1 );
- forkStreamClient.consumeMultiLineContent( ":maven:surefire:std:out:sys-prop:normal-run:UTF-8:azE=:djE="
- + "\n:maven:surefire:std:out:sys-prop:normal-run:UTF-8:azI=:djI=" );
+ forkStreamClient.consumeMultiLineContent( ":maven-surefire-event:sys-prop:normal-run:UTF-8:azE=:djE="
+ + "\n:maven-surefire-event:sys-prop:normal-run:UTF-8:azI=:djI=" );
MatcherAssert.assertThat( forkStreamClient.getTestVmSystemProperties().size(), is( 2 ) );
}
@@ -239,10 +239,10 @@ public class ForkingRunListenerTest
ReportEntry expected = createDefaultReportEntry();
final SimpleReportEntry secondExpected = createAnotherDefaultReportEntry();
- new ForkingRunListener( new ForkedChannelEncoder( printStream ), false )
+ new ForkingRunListener( new LegacyMasterProcessChannelEncoder( printStream ), false )
.testStarting( expected );
- new ForkingRunListener( new ForkedChannelEncoder( anotherPrintStream ), false )
+ new ForkingRunListener( new LegacyMasterProcessChannelEncoder( anotherPrintStream ), false )
.testSkipped( secondExpected );
TestSetMockReporterFactory providerReporterFactory = new TestSetMockReporterFactory();
@@ -312,7 +312,7 @@ public class ForkingRunListenerTest
private RunListener createForkingRunListener()
{
- return new ForkingRunListener( new ForkedChannelEncoder( printStream ), false );
+ return new ForkingRunListener( new LegacyMasterProcessChannelEncoder( printStream ), false );
}
private class StandardTestRun
diff --git a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/MainClass.java b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/MainClass.java
index f546d66..63fdd4e 100644
--- a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/MainClass.java
+++ b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/MainClass.java
@@ -34,8 +34,8 @@ public class MainClass
}
else
{
- System.out.println( ":maven:surefire:std:out:bye\n" );
- String byeAck = ":maven-surefire-std-out:bye-ack:";
+ System.out.println( ":maven-surefire-event:bye\n" );
+ String byeAck = ":maven-surefire-command:bye-ack:";
byte[] cmd = new byte[byeAck.length()];
int len = System.in.read( cmd );
if ( len != -1 && new String( cmd, 0, len ).equals( byeAck ) )
diff --git a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/ModularClasspathForkConfigurationTest.java b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/ModularClasspathForkConfigurationTest.java
index 77cc49d..cfa7dce 100644
--- a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/ModularClasspathForkConfigurationTest.java
+++ b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/ModularClasspathForkConfigurationTest.java
@@ -27,6 +27,7 @@ import org.apache.maven.surefire.booter.ForkedBooter;
import org.apache.maven.surefire.booter.ModularClasspath;
import org.apache.maven.surefire.booter.ModularClasspathConfiguration;
import org.apache.maven.surefire.booter.StartupConfiguration;
+import org.apache.maven.surefire.extensions.ForkNodeFactory;
import org.junit.Test;
import java.io.File;
@@ -43,9 +44,10 @@ import static java.nio.charset.StandardCharsets.UTF_8;
import static java.nio.file.Files.readAllLines;
import static java.util.Arrays.asList;
import static java.util.Collections.singleton;
-import static org.apache.maven.surefire.shared.utils.StringUtils.replace;
import static org.apache.maven.surefire.booter.Classpath.emptyClasspath;
+import static org.apache.maven.surefire.shared.utils.StringUtils.replace;
import static org.fest.assertions.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
/**
* @author <a href="mailto:tibordigana@apache.org">Tibor Digana (tibor17)</a>
@@ -66,7 +68,7 @@ public class ModularClasspathForkConfigurationTest
ModularClasspathForkConfiguration config = new ModularClasspathForkConfiguration( booter, tmp, "", pwd,
new Properties(), "",
Collections.<String, String>emptyMap(), new String[0], true, 1, true,
- new Platform(), new NullConsoleLogger(), null );
+ new Platform(), new NullConsoleLogger(), mock( ForkNodeFactory.class ) );
File patchFile = new File( "target" + separatorChar + "test-classes" );
File descriptor = new File( tmp, "module-info.class" );
@@ -141,8 +143,8 @@ public class ModularClasspathForkConfigurationTest
new ModularClasspathConfiguration( modularClasspath, testClasspathUrls, surefireClasspathUrls,
emptyClasspath(), true, true );
ClassLoaderConfiguration clc = new ClassLoaderConfiguration( true, true );
- StartupConfiguration startupConfiguration =
- new StartupConfiguration( "JUnitCoreProvider", modularClasspathConfiguration, clc, true, true, null );
+ StartupConfiguration startupConfiguration = new StartupConfiguration( "JUnitCoreProvider",
+ modularClasspathConfiguration, clc, null );
OutputStreamFlushableCommandline cli = new OutputStreamFlushableCommandline();
config.resolveClasspath( cli, ForkedBooter.class.getName(), startupConfiguration,
createTempFile( "surefire", "surefire-reports" ) );
diff --git a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/lazytestprovider/TestLessInputStreamBuilderTest.java b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/lazytestprovider/TestLessInputStreamBuilderTest.java
index d14014a..6496bb8 100644
--- a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/lazytestprovider/TestLessInputStreamBuilderTest.java
+++ b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/lazytestprovider/TestLessInputStreamBuilderTest.java
@@ -21,7 +21,7 @@ package org.apache.maven.plugin.surefire.booterclient.lazytestprovider;
import org.apache.maven.surefire.booter.Command;
import org.apache.maven.surefire.booter.MasterProcessCommand;
-import org.apache.maven.surefire.booter.spi.DefaultMasterProcessChannelDecoder;
+import org.apache.maven.surefire.booter.spi.LegacyMasterProcessChannelDecoder;
import org.apache.maven.surefire.providerapi.MasterProcessChannelDecoder;
import org.junit.Rule;
import org.junit.Test;
@@ -175,7 +175,7 @@ public class TestLessInputStreamBuilderTest
throw new IOException();
}
};
- MasterProcessChannelDecoder decoder = new DefaultMasterProcessChannelDecoder( is, null );
+ MasterProcessChannelDecoder decoder = new LegacyMasterProcessChannelDecoder( is );
builder.getImmediateCommands().shutdown( KILL );
builder.getImmediateCommands().noop();
Command bye = decoder.decode();
diff --git a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/lazytestprovider/TestProvidingInputStreamTest.java b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/lazytestprovider/TestProvidingInputStreamTest.java
index 66b4218..731a1ff 100644
--- a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/lazytestprovider/TestProvidingInputStreamTest.java
+++ b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/lazytestprovider/TestProvidingInputStreamTest.java
@@ -20,7 +20,7 @@ package org.apache.maven.plugin.surefire.booterclient.lazytestprovider;
*/
import org.apache.maven.surefire.booter.Command;
-import org.apache.maven.surefire.booter.spi.DefaultMasterProcessChannelDecoder;
+import org.apache.maven.surefire.booter.spi.LegacyMasterProcessChannelDecoder;
import org.apache.maven.surefire.providerapi.MasterProcessChannelDecoder;
import org.junit.Test;
@@ -112,7 +112,7 @@ public class TestProvidingInputStreamTest
stream += new String( cmd.getCommandType().encode(), US_ASCII );
assertThat( stream,
- is( ":maven-surefire-std-out:testset-finished::maven-surefire-std-out:testset-finished:" ) );
+ is( ":maven-surefire-command:testset-finished::maven-surefire-command:testset-finished:" ) );
boolean emptyStream = isInputStreamEmpty( is );
@@ -176,7 +176,7 @@ public class TestProvidingInputStreamTest
throw new IOException();
}
};
- MasterProcessChannelDecoder decoder = new DefaultMasterProcessChannelDecoder( is, null );
+ MasterProcessChannelDecoder decoder = new LegacyMasterProcessChannelDecoder( is );
pluginIs.acknowledgeByeEventReceived();
pluginIs.noop();
Command bye = decoder.decode();
diff --git a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/output/ForkClientTest.java b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/output/ForkClientTest.java
index 09230bb..8a5db41 100644
--- a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/output/ForkClientTest.java
+++ b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/output/ForkClientTest.java
@@ -299,7 +299,7 @@ public class ForkClientTest
AtomicBoolean printedErrorStream = new AtomicBoolean();
ConsoleLogger logger = mock( ConsoleLogger.class );
ForkClient client = new ForkClient( factory, notifiableTestStream, logger, printedErrorStream, 0 );
- client.consumeMultiLineContent( ":maven:surefire:std:out:next-test\n" );
+ client.consumeMultiLineContent( ":maven-surefire-event:next-test\n" );
verify( notifiableTestStream, times( 1 ) )
.provideNewTest();
verifyNoMoreInteractions( notifiableTestStream );
@@ -334,7 +334,7 @@ public class ForkClientTest
ConsoleLogger logger = mock( ConsoleLogger.class );
ForkClient client = new ForkClient( factory, notifiableTestStream, logger, printedErrorStream, 0 );
- client.consumeMultiLineContent( ":maven:surefire:std:out:bye\n" );
+ client.consumeMultiLineContent( ":maven-surefire-event:bye\n" );
client.kill();
verify( notifiableTestStream, times( 1 ) )
@@ -381,7 +381,7 @@ public class ForkClientTest
verified[0] = true;
}
};
- client.consumeMultiLineContent( ":maven:surefire:std:out:stop-on-next-test\n" );
+ client.consumeMultiLineContent( ":maven-surefire-event:stop-on-next-test\n" );
verifyZeroInteractions( notifiableTestStream );
verifyZeroInteractions( factory );
assertThat( verified[0] )
@@ -418,7 +418,7 @@ public class ForkClientTest
AtomicBoolean printedErrorStream = new AtomicBoolean();
ConsoleLogger logger = mock( ConsoleLogger.class );
ForkClient client = new ForkClient( factory, notifiableTestStream, logger, printedErrorStream, 0 );
- client.consumeMultiLineContent( ":maven:surefire:std:out:std-out-stream:normal-run:UTF-8:bXNn\n" );
+ client.consumeMultiLineContent( ":maven-surefire-event:std-out-stream:normal-run:UTF-8:bXNn\n" );
verifyZeroInteractions( notifiableTestStream );
verify( factory, times( 1 ) )
.createReporter();
@@ -463,7 +463,7 @@ public class ForkClientTest
AtomicBoolean printedErrorStream = new AtomicBoolean();
ConsoleLogger logger = mock( ConsoleLogger.class );
ForkClient client = new ForkClient( factory, notifiableTestStream, logger, printedErrorStream, 0 );
- client.consumeMultiLineContent( ":maven:surefire:std:out:std-out-stream-new-line:normal-run:UTF-8:bXNn\n" );
+ client.consumeMultiLineContent( ":maven-surefire-event:std-out-stream-new-line:normal-run:UTF-8:bXNn\n" );
verifyZeroInteractions( notifiableTestStream );
verify( factory, times( 1 ) )
.createReporter();
@@ -508,7 +508,7 @@ public class ForkClientTest
AtomicBoolean printedErrorStream = new AtomicBoolean();
ConsoleLogger logger = mock( ConsoleLogger.class );
ForkClient client = new ForkClient( factory, notifiableTestStream, logger, printedErrorStream, 0 );
- client.consumeMultiLineContent( ":maven:surefire:std:out:std-err-stream:normal-run:UTF-8:bXNn\n" );
+ client.consumeMultiLineContent( ":maven-surefire-event:std-err-stream:normal-run:UTF-8:bXNn\n" );
verifyZeroInteractions( notifiableTestStream );
verify( factory, times( 1 ) )
.createReporter();
@@ -553,7 +553,7 @@ public class ForkClientTest
AtomicBoolean printedErrorStream = new AtomicBoolean();
ConsoleLogger logger = mock( ConsoleLogger.class );
ForkClient client = new ForkClient( factory, notifiableTestStream, logger, printedErrorStream, 0 );
- client.consumeMultiLineContent( ":maven:surefire:std:out:std-err-stream-new-line:normal-run:UTF-8:bXNn\n" );
+ client.consumeMultiLineContent( ":maven-surefire-event:std-err-stream-new-line:normal-run:UTF-8:bXNn\n" );
verifyZeroInteractions( notifiableTestStream );
verify( factory, times( 1 ) )
.createReporter();
@@ -598,7 +598,7 @@ public class ForkClientTest
AtomicBoolean printedErrorStream = new AtomicBoolean();
ConsoleLogger logger = mock( ConsoleLogger.class );
ForkClient client = new ForkClient( factory, notifiableTestStream, logger, printedErrorStream, 0 );
- client.consumeMultiLineContent( ":maven:surefire:std:out:console-error-log:UTF-8:"
+ client.consumeMultiLineContent( ":maven-surefire-event:console-error-log:UTF-8:"
+ encodeBase64String( "Listening for transport dt_socket at address:".getBytes( UTF_8 ) )
+ ":-:-:-" );
verifyZeroInteractions( notifiableTestStream );
@@ -649,7 +649,7 @@ public class ForkClientTest
AtomicBoolean printedErrorStream = new AtomicBoolean();
ConsoleLogger logger = mock( ConsoleLogger.class );
ForkClient client = new ForkClient( factory, notifiableTestStream, logger, printedErrorStream, 0 );
- client.consumeMultiLineContent( ":maven:surefire:std:out:console-error-log:UTF-8"
+ client.consumeMultiLineContent( ":maven-surefire-event:console-error-log:UTF-8"
+ ":" + encodeBase64String( "Listening for transport dt_socket at address:".getBytes( UTF_8 ) )
+ ":" + encodeBase64String( "s1".getBytes( UTF_8 ) )
+ ":" + encodeBase64String( "s2".getBytes( UTF_8 ) ) );
@@ -709,7 +709,7 @@ public class ForkClientTest
when( logger.isWarnEnabled() )
.thenReturn( true );
ForkClient client = new ForkClient( factory, notifiableTestStream, logger, printedErrorStream, 0 );
- client.consumeMultiLineContent( ":maven:surefire:std:out:console-warning-log:UTF-8:"
+ client.consumeMultiLineContent( ":maven-surefire-event:console-warning-log:UTF-8:"
+ encodeBase64String( "s1".getBytes( UTF_8 ) ) );
verifyZeroInteractions( notifiableTestStream );
verify( factory, times( 1 ) )
@@ -757,7 +757,7 @@ public class ForkClientTest
when( logger.isDebugEnabled() )
.thenReturn( true );
ForkClient client = new ForkClient( factory, notifiableTestStream, logger, printedErrorStream, 0 );
- client.consumeMultiLineContent( ":maven:surefire:std:out:console-debug-log:UTF-8:"
+ client.consumeMultiLineContent( ":maven-surefire-event:console-debug-log:UTF-8:"
+ encodeBase64String( "s1".getBytes( UTF_8 ) ) );
verifyZeroInteractions( notifiableTestStream );
verify( factory, times( 1 ) )
@@ -803,7 +803,7 @@ public class ForkClientTest
AtomicBoolean printedErrorStream = new AtomicBoolean();
ConsoleLogger logger = mock( ConsoleLogger.class );
ForkClient client = new ForkClient( factory, notifiableTestStream, logger, printedErrorStream, 0 );
- client.consumeMultiLineContent( ":maven:surefire:std:out:console-info-log:UTF-8:"
+ client.consumeMultiLineContent( ":maven-surefire-event:console-info-log:UTF-8:"
+ encodeBase64String( "s1".getBytes( UTF_8 ) ) );
verifyZeroInteractions( notifiableTestStream );
verify( factory, times( 1 ) )
@@ -849,7 +849,7 @@ public class ForkClientTest
AtomicBoolean printedErrorStream = new AtomicBoolean();
ConsoleLogger logger = mock( ConsoleLogger.class );
ForkClient client = new ForkClient( factory, notifiableTestStream, logger, printedErrorStream, 0 );
- client.consumeMultiLineContent( ":maven:surefire:std:out:sys-prop:normal-run:UTF-8:azE=:djE="
+ client.consumeMultiLineContent( ":maven-surefire-event:sys-prop:normal-run:UTF-8:azE=:djE="
+ encodeBase64String( "s1".getBytes( UTF_8 ) ) );
verifyZeroInteractions( notifiableTestStream );
verifyZeroInteractions( factory );
@@ -928,7 +928,7 @@ public class ForkClientTest
String encodedMessage = encodeBase64String( toArray( UTF_8.encode( reportEntry.getMessage() ) ) );
ForkClient client = new ForkClient( factory, notifiableTestStream, logger, printedErrorStream, 0 );
- client.consumeMultiLineContent( ":maven:surefire:std:out:testset-starting:normal-run:UTF-8:"
+ client.consumeMultiLineContent( ":maven-surefire-event:testset-starting:normal-run:UTF-8:"
+ encodedSourceName
+ ":"
+ "-"
@@ -1063,7 +1063,7 @@ public class ForkClientTest
String encodedMessage = encodeBase64String( toArray( UTF_8.encode( reportEntry.getMessage() ) ) );
ForkClient client = new ForkClient( factory, notifiableTestStream, logger, printedErrorStream, 0 );
- client.consumeMultiLineContent( ":maven:surefire:std:out:testset-starting:normal-run:UTF-8:"
+ client.consumeMultiLineContent( ":maven-surefire-event:testset-starting:normal-run:UTF-8:"
+ encodedSourceName
+ ":"
+ encodedSourceText
@@ -1194,7 +1194,7 @@ public class ForkClientTest
String encodedMessage = encodeBase64String( toArray( UTF_8.encode( reportEntry.getMessage() ) ) );
ForkClient client = new ForkClient( factory, notifiableTestStream, logger, printedErrorStream, 0 );
- client.consumeMultiLineContent( ":maven:surefire:std:out:testset-completed:normal-run:UTF-8:"
+ client.consumeMultiLineContent( ":maven-surefire-event:testset-completed:normal-run:UTF-8:"
+ encodedSourceName
+ ":"
+ "-"
@@ -1323,7 +1323,7 @@ public class ForkClientTest
String encodedMessage = encodeBase64String( toArray( UTF_8.encode( reportEntry.getMessage() ) ) );
ForkClient client = new ForkClient( factory, notifiableTestStream, logger, printedErrorStream, 0 );
- client.consumeMultiLineContent( ":maven:surefire:std:out:test-starting:normal-run:UTF-8:"
+ client.consumeMultiLineContent( ":maven-surefire-event:test-starting:normal-run:UTF-8:"
+ encodedSourceName
+ ":"
+ "-"
@@ -1454,7 +1454,7 @@ public class ForkClientTest
ForkClient client = new ForkClient( factory, notifiableTestStream, logger, printedErrorStream, 0 );
- client.consumeMultiLineContent( ":maven:surefire:std:out:test-starting:normal-run:UTF-8:"
+ client.consumeMultiLineContent( ":maven-surefire-event:test-starting:normal-run:UTF-8:"
+ encodedSourceName
+ ":-:-:-:-:-:-:-:-:-" );
@@ -1462,7 +1462,7 @@ public class ForkClientTest
.hasSize( 1 )
.contains( "pkg.MyTest" );
- client.consumeMultiLineContent( ":maven:surefire:std:out:test-succeeded:normal-run:UTF-8:"
+ client.consumeMultiLineContent( ":maven-surefire-event:test-succeeded:normal-run:UTF-8:"
+ encodedSourceName
+ ":"
+ "-"
@@ -1596,7 +1596,7 @@ public class ForkClientTest
ForkClient client = new ForkClient( factory, notifiableTestStream, logger, printedErrorStream, 0 );
- client.consumeMultiLineContent( ":maven:surefire:std:out:test-starting:normal-run:UTF-8:"
+ client.consumeMultiLineContent( ":maven-surefire-event:test-starting:normal-run:UTF-8:"
+ encodedSourceName
+ ":-:-:-:-:-:-:-:-:-" );
@@ -1604,7 +1604,7 @@ public class ForkClientTest
.hasSize( 1 )
.contains( "pkg.MyTest" );
- client.consumeMultiLineContent( ":maven:surefire:std:out:test-failed:normal-run:UTF-8:"
+ client.consumeMultiLineContent( ":maven-surefire-event:test-failed:normal-run:UTF-8:"
+ encodedSourceName
+ ":"
+ "-"
@@ -1742,7 +1742,7 @@ public class ForkClientTest
ForkClient client = new ForkClient( factory, notifiableTestStream, logger, printedErrorStream, 0 );
- client.consumeMultiLineContent( ":maven:surefire:std:out:test-starting:normal-run:UTF-8:"
+ client.consumeMultiLineContent( ":maven-surefire-event:test-starting:normal-run:UTF-8:"
+ encodedSourceName
+ ":-:-:-:-:-:-:-:-:-" );
@@ -1750,7 +1750,7 @@ public class ForkClientTest
.hasSize( 1 )
.contains( "pkg.MyTest" );
- client.consumeMultiLineContent( ":maven:surefire:std:out:test-skipped:normal-run:UTF-8:"
+ client.consumeMultiLineContent( ":maven-surefire-event:test-skipped:normal-run:UTF-8:"
+ encodedSourceName
+ ":"
+ "-"
@@ -1890,7 +1890,7 @@ public class ForkClientTest
ForkClient client = new ForkClient( factory, notifiableTestStream, logger, printedErrorStream, 0 );
- client.consumeMultiLineContent( ":maven:surefire:std:out:test-starting:normal-run:UTF-8:"
+ client.consumeMultiLineContent( ":maven-surefire-event:test-starting:normal-run:UTF-8:"
+ encodedSourceName
+ ":"
+ encodedSourceText
@@ -1900,7 +1900,7 @@ public class ForkClientTest
.hasSize( 1 )
.contains( "pkg.MyTest" );
- client.consumeMultiLineContent( ":maven:surefire:std:out:test-error:normal-run:UTF-8:"
+ client.consumeMultiLineContent( ":maven-surefire-event:test-error:normal-run:UTF-8:"
+ encodedSourceName
+ ":"
+ encodedSourceText
@@ -2036,7 +2036,7 @@ public class ForkClientTest
ForkClient client = new ForkClient( factory, notifiableTestStream, logger, printedErrorStream, 0 );
- client.consumeMultiLineContent( ":maven:surefire:std:out:test-starting:normal-run:UTF-8:"
+ client.consumeMultiLineContent( ":maven-surefire-event:test-starting:normal-run:UTF-8:"
+ encodedSourceName
+ ":-:-:-:-:-:-:-:-:-" );
@@ -2044,7 +2044,7 @@ public class ForkClientTest
.hasSize( 1 )
.contains( "pkg.MyTest" );
- client.consumeMultiLineContent( ":maven:surefire:std:out:test-assumption-failure:normal-run:UTF-8:"
+ client.consumeMultiLineContent( ":maven-surefire-event:test-assumption-failure:normal-run:UTF-8:"
+ encodedSourceName
+ ":"
+ "-"
diff --git a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/output/ForkedChannelDecoderTest.java b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/output/ForkedChannelDecoderTest.java
index 42dd636..5265f09 100644
--- a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/output/ForkedChannelDecoderTest.java
+++ b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/output/ForkedChannelDecoderTest.java
@@ -20,7 +20,7 @@ package org.apache.maven.plugin.surefire.booterclient.output;
*/
import org.apache.maven.plugin.surefire.log.api.ConsoleLoggerUtils;
-import org.apache.maven.surefire.booter.ForkedChannelEncoder;
+import org.apache.maven.surefire.booter.spi.LegacyMasterProcessChannelEncoder;
import org.apache.maven.surefire.report.ReportEntry;
import org.apache.maven.surefire.report.RunMode;
import org.apache.maven.surefire.report.SafeThrowable;
@@ -93,8 +93,8 @@ public class ForkedChannelDecoderTest
public void shouldHaveSystemProperty() throws IOException
{
Stream out = Stream.newStream();
- ForkedChannelEncoder forkedChannelEncoder = new ForkedChannelEncoder( out );
- forkedChannelEncoder.sendSystemProperties( ObjectUtils.systemProps() );
+ LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( out );
+ encoder.sendSystemProperties( ObjectUtils.systemProps() );
ForkedChannelDecoder decoder = new ForkedChannelDecoder();
decoder.setSystemPropertiesListener( new PropertyEventAssertionListener() );
@@ -259,11 +259,11 @@ public class ForkedChannelDecoderTest
public void shouldSendByeEvent() throws IOException
{
Stream out = Stream.newStream();
- ForkedChannelEncoder forkedChannelEncoder = new ForkedChannelEncoder( out );
- forkedChannelEncoder.bye();
+ LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( out );
+ encoder.bye();
String read = new String( out.toByteArray(), UTF_8 );
assertThat( read )
- .isEqualTo( ":maven:surefire:std:out:bye\n" );
+ .isEqualTo( ":maven-surefire-event:bye\n" );
LineNumberReader lines = out.newReader( UTF_8 );
ForkedChannelDecoder decoder = new ForkedChannelDecoder();
decoder.setByeListener( new EventAssertionListener() );
@@ -279,11 +279,11 @@ public class ForkedChannelDecoderTest
{
Stream out = Stream.newStream();
- ForkedChannelEncoder forkedChannelEncoder = new ForkedChannelEncoder( out );
- forkedChannelEncoder.stopOnNextTest();
+ LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( out );
+ encoder.stopOnNextTest();
String read = new String( out.toByteArray(), UTF_8 );
assertThat( read )
- .isEqualTo( ":maven:surefire:std:out:stop-on-next-test\n" );
+ .isEqualTo( ":maven-surefire-event:stop-on-next-test\n" );
LineNumberReader lines = out.newReader( UTF_8 );
ForkedChannelDecoder decoder = new ForkedChannelDecoder();
decoder.setStopOnNextTestListener( new EventAssertionListener() );
@@ -299,11 +299,11 @@ public class ForkedChannelDecoderTest
{
Stream out = Stream.newStream();
- ForkedChannelEncoder forkedChannelEncoder = new ForkedChannelEncoder( out );
- forkedChannelEncoder.acquireNextTest();
+ LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( out );
+ encoder.acquireNextTest();
String read = new String( out.toByteArray(), UTF_8 );
assertThat( read )
- .isEqualTo( ":maven:surefire:std:out:next-test\n" );
+ .isEqualTo( ":maven-surefire-event:next-test\n" );
LineNumberReader lines = out.newReader( UTF_8 );
ForkedChannelDecoder decoder = new ForkedChannelDecoder();
decoder.setAcquireNextTestListener( new EventAssertionListener() );
@@ -319,8 +319,8 @@ public class ForkedChannelDecoderTest
{
Stream out = Stream.newStream();
- ForkedChannelEncoder forkedChannelEncoder = new ForkedChannelEncoder( out );
- forkedChannelEncoder.consoleInfoLog( "msg" );
+ LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( out );
+ encoder.consoleInfoLog( "msg" );
LineNumberReader lines = out.newReader( UTF_8 );
ForkedChannelDecoder decoder = new ForkedChannelDecoder();
@@ -337,8 +337,8 @@ public class ForkedChannelDecoderTest
{
Stream out = Stream.newStream();
- ForkedChannelEncoder forkedChannelEncoder = new ForkedChannelEncoder( out );
- forkedChannelEncoder.consoleErrorLog( "msg" );
+ LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( out );
+ encoder.consoleErrorLog( "msg" );
LineNumberReader lines = out.newReader( UTF_8 );
ForkedChannelDecoder decoder = new ForkedChannelDecoder();
@@ -357,8 +357,8 @@ public class ForkedChannelDecoderTest
Stream out = Stream.newStream();
- ForkedChannelEncoder forkedChannelEncoder = new ForkedChannelEncoder( out );
- forkedChannelEncoder.consoleErrorLog( t );
+ LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( out );
+ encoder.consoleErrorLog( t );
LineNumberReader lines = out.newReader( UTF_8 );
ForkedChannelDecoder decoder = new ForkedChannelDecoder();
@@ -376,9 +376,9 @@ public class ForkedChannelDecoderTest
{
Stream out = Stream.newStream();
- ForkedChannelEncoder forkedChannelEncoder = new ForkedChannelEncoder( out );
+ LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( out );
StackTraceWriter stackTraceWriter = new DeserializedStacktraceWriter( "1", "2", "3" );
- forkedChannelEncoder.consoleErrorLog( stackTraceWriter, false );
+ encoder.consoleErrorLog( stackTraceWriter, false );
LineNumberReader lines = out.newReader( UTF_8 );
ForkedChannelDecoder decoder = new ForkedChannelDecoder();
@@ -395,8 +395,8 @@ public class ForkedChannelDecoderTest
{
Stream out = Stream.newStream();
- ForkedChannelEncoder forkedChannelEncoder = new ForkedChannelEncoder( out );
- forkedChannelEncoder.consoleDebugLog( "msg" );
+ LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( out );
+ encoder.consoleDebugLog( "msg" );
LineNumberReader lines = out.newReader( UTF_8 );
ForkedChannelDecoder decoder = new ForkedChannelDecoder();
@@ -413,8 +413,8 @@ public class ForkedChannelDecoderTest
{
Stream out = Stream.newStream();
- ForkedChannelEncoder forkedChannelEncoder = new ForkedChannelEncoder( out );
- forkedChannelEncoder.consoleWarningLog( "msg" );
+ LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( out );
+ encoder.consoleWarningLog( "msg" );
LineNumberReader lines = out.newReader( UTF_8 );
ForkedChannelDecoder decoder = new ForkedChannelDecoder();
@@ -430,8 +430,8 @@ public class ForkedChannelDecoderTest
public void testStdOutStream() throws IOException
{
Stream out = Stream.newStream();
- ForkedChannelEncoder forkedChannelEncoder = new ForkedChannelEncoder( out );
- forkedChannelEncoder.stdOut( "msg", false );
+ LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( out );
+ encoder.stdOut( "msg", false );
LineNumberReader lines = out.newReader( UTF_8 );
ForkedChannelDecoder decoder = new ForkedChannelDecoder();
@@ -447,8 +447,8 @@ public class ForkedChannelDecoderTest
public void testStdOutStreamPrint() throws IOException
{
Stream out = Stream.newStream();
- ForkedChannelEncoder forkedChannelEncoder = new ForkedChannelEncoder( out );
- forkedChannelEncoder.stdOut( "", false );
+ LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( out );
+ encoder.stdOut( "", false );
LineNumberReader lines = out.newReader( UTF_8 );
ForkedChannelDecoder decoder = new ForkedChannelDecoder();
@@ -464,8 +464,8 @@ public class ForkedChannelDecoderTest
public void testStdOutStreamPrintWithNull() throws IOException
{
Stream out = Stream.newStream();
- ForkedChannelEncoder forkedChannelEncoder = new ForkedChannelEncoder( out );
- forkedChannelEncoder.stdOut( null, false );
+ LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( out );
+ encoder.stdOut( null, false );
LineNumberReader lines = out.newReader( UTF_8 );
ForkedChannelDecoder decoder = new ForkedChannelDecoder();
@@ -481,8 +481,8 @@ public class ForkedChannelDecoderTest
public void testStdOutStreamPrintln() throws IOException
{
Stream out = Stream.newStream();
- ForkedChannelEncoder forkedChannelEncoder = new ForkedChannelEncoder( out );
- forkedChannelEncoder.stdOut( "", true );
+ LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( out );
+ encoder.stdOut( "", true );
LineNumberReader lines = out.newReader( UTF_8 );
ForkedChannelDecoder decoder = new ForkedChannelDecoder();
@@ -498,8 +498,8 @@ public class ForkedChannelDecoderTest
public void testStdOutStreamPrintlnWithNull() throws IOException
{
Stream out = Stream.newStream();
- ForkedChannelEncoder forkedChannelEncoder = new ForkedChannelEncoder( out );
- forkedChannelEncoder.stdOut( null, true );
+ LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( out );
+ encoder.stdOut( null, true );
LineNumberReader lines = out.newReader( UTF_8 );
ForkedChannelDecoder decoder = new ForkedChannelDecoder();
@@ -515,8 +515,8 @@ public class ForkedChannelDecoderTest
public void testStdErrStream() throws IOException
{
Stream out = Stream.newStream();
- ForkedChannelEncoder forkedChannelEncoder = new ForkedChannelEncoder( out );
- forkedChannelEncoder.stdErr( "msg", false );
+ LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( out );
+ encoder.stdErr( "msg", false );
LineNumberReader lines = out.newReader( UTF_8 );
ForkedChannelDecoder decoder = new ForkedChannelDecoder();
@@ -532,8 +532,8 @@ public class ForkedChannelDecoderTest
public void shouldCountSameNumberOfSystemProperties() throws IOException
{
Stream out = Stream.newStream();
- ForkedChannelEncoder forkedChannelEncoder = new ForkedChannelEncoder( out );
- forkedChannelEncoder.sendSystemProperties( ObjectUtils.systemProps() );
+ LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( out );
+ encoder.sendSystemProperties( ObjectUtils.systemProps() );
LineNumberReader lines = out.newReader( UTF_8 );
ForkedChannelDecoder decoder = new ForkedChannelDecoder();
@@ -560,22 +560,22 @@ public class ForkedChannelDecoderTest
ForkedChannelDecoder decoder = new ForkedChannelDecoder();
decoder.setSystemPropertiesListener( new PropertyEventAssertionListener() );
AssertionErrorHandler errorHandler = mock( AssertionErrorHandler.class );
- decoder.handleEvent( ":maven:surefire:std:out:abnormal-run:-", errorHandler );
+ decoder.handleEvent( ":maven-surefire-event:abnormal-run:-", errorHandler );
verify( errorHandler, times( 1 ) )
- .handledError( eq( ":maven:surefire:std:out:abnormal-run:-" ), nullable( Throwable.class ) );
+ .handledError( eq( ":maven-surefire-event:abnormal-run:-" ), nullable( Throwable.class ) );
}
@Test
public void shouldHandleExit() throws IOException
{
Stream out = Stream.newStream();
- ForkedChannelEncoder forkedChannelEncoder = new ForkedChannelEncoder( out );
+ LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( out );
StackTraceWriter stackTraceWriter = mock( StackTraceWriter.class );
when( stackTraceWriter.getThrowable() ).thenReturn( new SafeThrowable( "1" ) );
when( stackTraceWriter.smartTrimmedStackTrace() ).thenReturn( "2" );
when( stackTraceWriter.writeTraceToString() ).thenReturn( "3" );
when( stackTraceWriter.writeTrimmedTraceToString() ).thenReturn( "4" );
- forkedChannelEncoder.sendExitEvent( stackTraceWriter, false );
+ encoder.sendExitEvent( stackTraceWriter, false );
LineNumberReader lines = out.newReader( UTF_8 );
ForkedChannelDecoder decoder = new ForkedChannelDecoder();
@@ -677,10 +677,10 @@ public class ForkedChannelDecoderTest
Stream out = Stream.newStream();
- ForkedChannelEncoder forkedChannelEncoder = new ForkedChannelEncoder( out );
+ LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( out );
- ForkedChannelEncoder.class.getMethod( operation[0], ReportEntry.class, boolean.class )
- .invoke( forkedChannelEncoder, reportEntry, trim );
+ LegacyMasterProcessChannelEncoder.class.getMethod( operation[0], ReportEntry.class, boolean.class )
+ .invoke( encoder, reportEntry, trim );
ForkedChannelDecoder decoder = new ForkedChannelDecoder();
diff --git a/maven-surefire-common/src/test/java/org/apache/maven/surefire/extensions/ForkChannelTest.java b/maven-surefire-common/src/test/java/org/apache/maven/surefire/extensions/ForkChannelTest.java
index 431cb91..63db316 100644
--- a/maven-surefire-common/src/test/java/org/apache/maven/surefire/extensions/ForkChannelTest.java
+++ b/maven-surefire-common/src/test/java/org/apache/maven/surefire/extensions/ForkChannelTest.java
@@ -34,10 +34,10 @@ import java.io.IOException;
import java.lang.Thread.UncaughtExceptionHandler;
import java.net.Socket;
import java.net.URI;
-import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
import static java.nio.charset.StandardCharsets.US_ASCII;
+import static java.util.concurrent.TimeUnit.SECONDS;
import static org.fest.assertions.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.doNothing;
@@ -57,20 +57,28 @@ public class ForkChannelTest
private StreamConsumer consumer;
@Test( timeout = TESTCASE_TIMEOUT )
- public void test() throws Exception
+ public void shouldRequestReplyMessagesViaTCP() throws Exception
{
ForkNodeFactory factory = new SurefireForkNodeFactory();
ForkChannel channel = factory.createForkChannel( 1 );
- assertThat( channel.getForkChannelId() ).isEqualTo( 1 );
- assertThat( channel.useStdIn() ).isFalse();
- assertThat( channel.useStdOut() ).isFalse();
+ assertThat( channel.getForkChannelId() )
+ .isEqualTo( 1 );
+
+ assertThat( channel.useStdIn() )
+ .isFalse();
+
+ assertThat( channel.useStdOut() )
+ .isFalse();
+
assertThat( channel.getForkNodeConnectionString() )
.startsWith( "tcp://127.0.0.1:" )
.isNotEqualTo( "tcp://127.0.0.1:" );
URI uri = new URI( channel.getForkNodeConnectionString() );
- assertThat( uri.getPort() ).isPositive();
+
+ assertThat( uri.getPort() )
+ .isPositive();
ArgumentCaptor<String> line = ArgumentCaptor.forClass( String.class );
doNothing().when( consumer ).consumeLine( anyString() );
@@ -89,7 +97,7 @@ public class ForkChannelTest
client.start();
channel.openChannel();
- TimeUnit.SECONDS.sleep( 3L );
+ SECONDS.sleep( 3L );
TestLessInputStreamBuilder builder = new TestLessInputStreamBuilder();
TestLessInputStream commandReader = builder.build();
@@ -97,12 +105,16 @@ public class ForkChannelTest
channel.bindCommandReader( commandReader ).start();
channel.bindEventHandler( consumer ).start();
- client.join();
+ client.join( TESTCASE_TIMEOUT );
+
+ assertThat( hasError.get() )
+ .isFalse();
- assertThat( hasError.get() ).isFalse();
+ verify( consumer, times( 1 ) )
+ .consumeLine( line.capture() );
- verify( consumer, times( 1 ) ).consumeLine( line.capture() );
- assertThat( line.getValue() ).isEqualTo( "Hi There!" );
+ assertThat( line.getValue() )
+ .isEqualTo( "Hi There!" );
}
private static class Client extends Thread
@@ -122,7 +134,7 @@ public class ForkChannelTest
byte[] data = new byte[128];
int readLength = socket.getInputStream().read( data );
String token = new String( data, 0, readLength, US_ASCII );
- assertThat( token ).isEqualTo( ":maven-surefire-std-out:noop:" );
+ assertThat( token ).isEqualTo( ":maven-surefire-command:noop:" );
socket.getOutputStream().write( "Hi There!".getBytes( US_ASCII ) );
}
catch ( IOException e )
diff --git a/surefire-api/src/main/java/org/apache/maven/surefire/booter/BaseProviderFactory.java b/surefire-api/src/main/java/org/apache/maven/surefire/booter/BaseProviderFactory.java
index 9d2dc73..6ac0ce2 100644
--- a/surefire-api/src/main/java/org/apache/maven/surefire/booter/BaseProviderFactory.java
+++ b/surefire-api/src/main/java/org/apache/maven/surefire/booter/BaseProviderFactory.java
@@ -21,6 +21,7 @@ package org.apache.maven.surefire.booter;
import org.apache.maven.surefire.cli.CommandLineOption;
import org.apache.maven.surefire.providerapi.CommandChainReader;
+import org.apache.maven.surefire.providerapi.MasterProcessChannelEncoder;
import org.apache.maven.surefire.providerapi.ProviderParameters;
import org.apache.maven.surefire.report.ConsoleStream;
import org.apache.maven.surefire.report.DefaultDirectConsoleReporter;
@@ -53,7 +54,7 @@ public class BaseProviderFactory
private ReporterFactory reporterFactory;
- private ForkedChannelEncoder forkedChannelEncoder;
+ private MasterProcessChannelEncoder masterProcessChannelEncoder;
private List<CommandLineOption> mainCliOptions = emptyList();
@@ -152,8 +153,9 @@ public class BaseProviderFactory
@Override
public ConsoleStream getConsoleLogger()
{
- return insideFork ? new ForkingRunListener( forkedChannelEncoder, reporterConfiguration.isTrimStackTrace() )
- : new DefaultDirectConsoleReporter( reporterConfiguration.getOriginalSystemOut() );
+ return insideFork
+ ? new ForkingRunListener( masterProcessChannelEncoder, reporterConfiguration.isTrimStackTrace() )
+ : new DefaultDirectConsoleReporter( reporterConfiguration.getOriginalSystemOut() );
}
public void setTestRequest( TestRequest testRequest )
@@ -262,13 +264,13 @@ public class BaseProviderFactory
}
@Override
- public ForkedChannelEncoder getForkedChannelEncoder()
+ public MasterProcessChannelEncoder getForkedChannelEncoder()
{
- return forkedChannelEncoder;
+ return masterProcessChannelEncoder;
}
- public void setForkedChannelEncoder( ForkedChannelEncoder forkedChannelEncoder )
+ public void setForkedChannelEncoder( MasterProcessChannelEncoder masterProcessChannelEncoder )
{
- this.forkedChannelEncoder = forkedChannelEncoder;
+ this.masterProcessChannelEncoder = masterProcessChannelEncoder;
}
}
diff --git a/surefire-api/src/main/java/org/apache/maven/surefire/booter/ForkedProcessEvent.java b/surefire-api/src/main/java/org/apache/maven/surefire/booter/ForkedProcessEvent.java
index 74b9eb9..617eadc 100644
--- a/surefire-api/src/main/java/org/apache/maven/surefire/booter/ForkedProcessEvent.java
+++ b/surefire-api/src/main/java/org/apache/maven/surefire/booter/ForkedProcessEvent.java
@@ -59,7 +59,9 @@ public enum ForkedProcessEvent
BOOTERCODE_JVM_EXIT_ERROR( "jvm-exit-error" );
- public static final String MAGIC_NUMBER = ":maven:surefire:std:out:";
+ public static final String MAGIC_NUMBER = "maven-surefire-event";
+
+ public static final String MAGIC_NUMBER_DELIMITED = ':' + MAGIC_NUMBER + ':';
public static final Map<String, ForkedProcessEvent> EVENTS = events();
diff --git a/surefire-api/src/main/java/org/apache/maven/surefire/booter/ForkingReporterFactory.java b/surefire-api/src/main/java/org/apache/maven/surefire/booter/ForkingReporterFactory.java
index 5bb16ee..1c6db50 100644
--- a/surefire-api/src/main/java/org/apache/maven/surefire/booter/ForkingReporterFactory.java
+++ b/surefire-api/src/main/java/org/apache/maven/surefire/booter/ForkingReporterFactory.java
@@ -19,6 +19,7 @@ package org.apache.maven.surefire.booter;
* under the License.
*/
+import org.apache.maven.surefire.providerapi.MasterProcessChannelEncoder;
import org.apache.maven.surefire.report.ReporterFactory;
import org.apache.maven.surefire.report.RunListener;
import org.apache.maven.surefire.suite.RunResult;
@@ -34,9 +35,9 @@ public class ForkingReporterFactory
{
private final boolean trimstackTrace;
- private final ForkedChannelEncoder eventChannel;
+ private final MasterProcessChannelEncoder eventChannel;
- public ForkingReporterFactory( boolean trimstackTrace, ForkedChannelEncoder eventChannel )
+ public ForkingReporterFactory( boolean trimstackTrace, MasterProcessChannelEncoder eventChannel )
{
this.trimstackTrace = trimstackTrace;
this.eventChannel = eventChannel;
diff --git a/surefire-api/src/main/java/org/apache/maven/surefire/booter/ForkingRunListener.java b/surefire-api/src/main/java/org/apache/maven/surefire/booter/ForkingRunListener.java
index 528b607..6148149 100644
--- a/surefire-api/src/main/java/org/apache/maven/surefire/booter/ForkingRunListener.java
+++ b/surefire-api/src/main/java/org/apache/maven/surefire/booter/ForkingRunListener.java
@@ -20,6 +20,7 @@ package org.apache.maven.surefire.booter;
*/
import org.apache.maven.plugin.surefire.log.api.ConsoleLogger;
+import org.apache.maven.surefire.providerapi.MasterProcessChannelEncoder;
import org.apache.maven.surefire.report.ConsoleOutputReceiver;
import org.apache.maven.surefire.report.ConsoleStream;
import org.apache.maven.surefire.report.ReportEntry;
@@ -50,13 +51,13 @@ import static java.util.Objects.requireNonNull;
public class ForkingRunListener
implements RunListener, ConsoleLogger, ConsoleOutputReceiver, ConsoleStream
{
- private final ForkedChannelEncoder target;
+ private final MasterProcessChannelEncoder target;
private final boolean trim;
private volatile RunMode runMode = NORMAL_RUN;
- public ForkingRunListener( ForkedChannelEncoder target, boolean trim )
+ public ForkingRunListener( MasterProcessChannelEncoder target, boolean trim )
{
this.target = target;
this.trim = trim;
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
deleted file mode 100644
index 527782d..0000000
--- a/surefire-api/src/main/java/org/apache/maven/surefire/booter/MasterProcessChannelEncoder.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package org.apache.maven.surefire.booter;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-/**
- * magic number : opcode [: opcode specific data]*
- * <br>
- *
- * @author <a href="mailto:tibordigana@apache.org">Tibor Digana (tibor17)</a>
- * @since 3.0.0-M4
- */
-public final class MasterProcessChannelEncoder
-{
-
- private static final String MAGIC_NUMBER = ":maven:surefire:std:out:";
-
- /**
- * Encodes opcode and data.
- *
- * @param operation opcode
- * @param data data
- * @return encoded command
- */
- private static StringBuilder encode( String operation, String data )
- {
- StringBuilder s = new StringBuilder( 128 )
- .append( MAGIC_NUMBER )
- .append( operation );
-
- return data == null ? s : s.append( ':' ).append( data );
- }
-}
diff --git a/surefire-api/src/main/java/org/apache/maven/surefire/booter/MasterProcessCommand.java b/surefire-api/src/main/java/org/apache/maven/surefire/booter/MasterProcessCommand.java
index 182eddc..6fa85a1 100644
--- a/surefire-api/src/main/java/org/apache/maven/surefire/booter/MasterProcessCommand.java
+++ b/surefire-api/src/main/java/org/apache/maven/surefire/booter/MasterProcessCommand.java
@@ -47,7 +47,7 @@ public enum MasterProcessCommand
NOOP( "noop", Void.class ),
BYE_ACK( "bye-ack", Void.class );
- private static final String MAGIC_NUMBER = ":maven-surefire-std-out:";
+ public static final String MAGIC_NUMBER = "maven-surefire-command";
private final String opcodeName;
@@ -125,8 +125,10 @@ public enum MasterProcessCommand
private static StringBuilder encode( String operation, String data )
{
StringBuilder s = new StringBuilder( 128 )
- .append( MAGIC_NUMBER )
- .append( operation );
+ .append( ':' )
+ .append( MAGIC_NUMBER )
+ .append( ':' )
+ .append( operation );
if ( data != null )
{
diff --git a/surefire-api/src/main/java/org/apache/maven/surefire/providerapi/MasterProcessChannelEncoder.java b/surefire-api/src/main/java/org/apache/maven/surefire/providerapi/MasterProcessChannelEncoder.java
new file mode 100644
index 0000000..b734b61
--- /dev/null
+++ b/surefire-api/src/main/java/org/apache/maven/surefire/providerapi/MasterProcessChannelEncoder.java
@@ -0,0 +1,84 @@
+package org.apache.maven.surefire.providerapi;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.surefire.report.ReportEntry;
+import org.apache.maven.surefire.report.StackTraceWriter;
+
+import java.util.Map;
+
+/**
+ * An abstraction for physical encoder of events.
+ *
+ * @author <a href="mailto:tibordigana@apache.org">Tibor Digana (tibor17)</a>
+ * @since 3.0.0-M5
+ */
+public interface MasterProcessChannelEncoder
+{
+ MasterProcessChannelEncoder asRerunMode();
+
+ MasterProcessChannelEncoder asNormalMode();
+
+ boolean checkError();
+
+ void sendSystemProperties( Map<String, String> sysProps );
+
+ void testSetStarting( ReportEntry reportEntry, boolean trimStackTraces );
+
+ void testSetCompleted( ReportEntry reportEntry, boolean trimStackTraces );
+
+ void testStarting( ReportEntry reportEntry, boolean trimStackTraces );
+
+ void testSucceeded( ReportEntry reportEntry, boolean trimStackTraces );
+
+ void testFailed( ReportEntry reportEntry, boolean trimStackTraces );
+
+ void testSkipped( ReportEntry reportEntry, boolean trimStackTraces );
+
+ void testError( ReportEntry reportEntry, boolean trimStackTraces );
+
+ void testAssumptionFailure( ReportEntry reportEntry, boolean trimStackTraces );
+
+ void stdOut( String msg, boolean newLine );
+
+ void stdErr( String msg, boolean newLine );
+
+ void consoleInfoLog( String msg );
+
+ void consoleErrorLog( String msg );
+
+ void consoleErrorLog( Throwable t );
+
+ void consoleErrorLog( String msg, Throwable t );
+
+ void consoleErrorLog( StackTraceWriter stackTraceWriter, boolean trimStackTraces );
+
+ void consoleDebugLog( String msg );
+
+ void consoleWarningLog( String msg );
+
+ void bye();
+
+ void stopOnNextTest();
+
+ void acquireNextTest();
+
+ void sendExitEvent( StackTraceWriter stackTraceWriter, boolean trimStackTraces );
+}
diff --git a/surefire-api/src/main/java/org/apache/maven/surefire/providerapi/ProviderParameters.java b/surefire-api/src/main/java/org/apache/maven/surefire/providerapi/ProviderParameters.java
index e4caae7..47a6a7e 100644
--- a/surefire-api/src/main/java/org/apache/maven/surefire/providerapi/ProviderParameters.java
+++ b/surefire-api/src/main/java/org/apache/maven/surefire/providerapi/ProviderParameters.java
@@ -19,7 +19,6 @@ package org.apache.maven.surefire.providerapi;
* under the License.
*/
-import org.apache.maven.surefire.booter.ForkedChannelEncoder;
import org.apache.maven.surefire.cli.CommandLineOption;
import org.apache.maven.surefire.report.ConsoleStream;
import org.apache.maven.surefire.report.ReporterConfiguration;
@@ -148,7 +147,7 @@ public interface ProviderParameters
Integer getSystemExitTimeout();
- ForkedChannelEncoder getForkedChannelEncoder();
+ MasterProcessChannelEncoder getForkedChannelEncoder();
CommandChainReader getCommandReader();
}
diff --git a/surefire-api/src/test/java/org/apache/maven/JUnit4SuiteTest.java b/surefire-api/src/test/java/org/apache/maven/JUnit4SuiteTest.java
index ea27d8a..66a95a6 100644
--- a/surefire-api/src/test/java/org/apache/maven/JUnit4SuiteTest.java
+++ b/surefire-api/src/test/java/org/apache/maven/JUnit4SuiteTest.java
@@ -23,7 +23,6 @@ import junit.framework.JUnit4TestAdapter;
import junit.framework.Test;
import org.apache.maven.plugin.surefire.runorder.ThreadedExecutionSchedulerTest;
import org.apache.maven.surefire.SpecificTestClassFilterTest;
-import org.apache.maven.surefire.booter.ForkedChannelEncoderTest;
import org.apache.maven.surefire.booter.ForkingRunListenerTest;
import org.apache.maven.surefire.report.LegacyPojoStackTraceWriterTest;
import org.apache.maven.surefire.suite.RunResultTest;
@@ -63,8 +62,7 @@ import org.junit.runners.Suite;
SpecificTestClassFilterTest.class,
FundamentalFilterTest.class,
ImmutableMapTest.class,
- ReflectionUtilsTest.class,
- ForkedChannelEncoderTest.class
+ ReflectionUtilsTest.class
} )
@RunWith( Suite.class )
public class JUnit4SuiteTest
diff --git a/surefire-api/src/test/java/org/apache/maven/surefire/booter/ForkingRunListenerTest.java b/surefire-api/src/test/java/org/apache/maven/surefire/booter/ForkingRunListenerTest.java
index 549f3aa..b125b0c 100644
--- a/surefire-api/src/test/java/org/apache/maven/surefire/booter/ForkingRunListenerTest.java
+++ b/surefire-api/src/test/java/org/apache/maven/surefire/booter/ForkingRunListenerTest.java
@@ -19,10 +19,17 @@ package org.apache.maven.surefire.booter;
* under the License.
*/
-import java.io.ByteArrayOutputStream;
-import java.io.PrintStream;
-
import junit.framework.TestCase;
+import org.apache.maven.surefire.providerapi.MasterProcessChannelEncoder;
+import org.mockito.ArgumentCaptor;
+
+import static org.fest.assertions.Assertions.assertThat;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
/**
* @author <a href="mailto:kristian.rosenvold@gmail.com">Kristian Rosenvold</a>
@@ -32,10 +39,16 @@ public class ForkingRunListenerTest
{
public void testInfo()
{
- ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
- PrintStream target = new PrintStream( byteArrayOutputStream );
- ForkingRunListener forkingRunListener = new ForkingRunListener( new ForkedChannelEncoder( target ), true );
+ MasterProcessChannelEncoder encoder = mock( MasterProcessChannelEncoder.class );
+ ArgumentCaptor<String> argument1 = ArgumentCaptor.forClass( String.class );
+ doNothing().when( encoder ).consoleInfoLog( anyString() );
+ ForkingRunListener forkingRunListener = new ForkingRunListener( encoder, true );
forkingRunListener.info( new String( new byte[]{ (byte) 'A' } ) );
forkingRunListener.info( new String( new byte[]{ } ) );
+ verify( encoder, times( 2 ) ).consoleInfoLog( argument1.capture() );
+ assertThat( argument1.getAllValues() )
+ .hasSize( 2 )
+ .containsSequence( "A", "" );
+ verifyNoMoreInteractions( encoder );
}
}
diff --git a/surefire-booter/src/main/java/org/apache/maven/surefire/booter/BooterDeserializer.java b/surefire-booter/src/main/java/org/apache/maven/surefire/booter/BooterDeserializer.java
index 4b31db8..9c8a9ed 100644
--- a/surefire-booter/src/main/java/org/apache/maven/surefire/booter/BooterDeserializer.java
+++ b/surefire-booter/src/main/java/org/apache/maven/surefire/booter/BooterDeserializer.java
@@ -32,6 +32,8 @@ import org.apache.maven.surefire.testset.TestListResolver;
import org.apache.maven.surefire.testset.TestRequest;
// CHECKSTYLE_OFF: imports
+import javax.annotation.Nonnull;
+
import static org.apache.maven.surefire.booter.BooterConstants.*;
import static org.apache.maven.surefire.cli.CommandLineOption.*;
@@ -58,7 +60,14 @@ public class BooterDeserializer
properties = SystemPropertyManager.loadProperties( inputStream );
}
- public String getForkNodeConnectionString()
+ /**
+ * Describes the current connection channel used by the client in the forked JVM
+ * in order to connect to the plugin process.
+ *
+ * @return connection string (must not be null)
+ */
+ @Nonnull
+ public String getConnectionString()
{
return properties.getProperty( FORK_NODE_CONNECTION_STRING );
}
diff --git a/surefire-booter/src/main/java/org/apache/maven/surefire/booter/CommandReader.java b/surefire-booter/src/main/java/org/apache/maven/surefire/booter/CommandReader.java
index a197157..4b43fb2 100644
--- a/surefire-booter/src/main/java/org/apache/maven/surefire/booter/CommandReader.java
+++ b/surefire-booter/src/main/java/org/apache/maven/surefire/booter/CommandReader.java
@@ -25,6 +25,7 @@ import org.apache.maven.surefire.booter.spi.MasterProcessUnknownCommandException
import org.apache.maven.surefire.providerapi.CommandChainReader;
import org.apache.maven.surefire.providerapi.CommandListener;
import org.apache.maven.surefire.providerapi.MasterProcessChannelDecoder;
+import org.apache.maven.surefire.providerapi.MasterProcessChannelEncoder;
import org.apache.maven.surefire.testset.TestSetFailedException;
import java.io.EOFException;
@@ -175,7 +176,8 @@ public final class CommandReader implements CommandChainReader
}
/**
- * @return test classes which have been retrieved by {@link CommandReader#getIterableClasses(ForkedChannelEncoder)}.
+ * @return test classes which have been retrieved by
+ * {@link CommandReader#getIterableClasses(MasterProcessChannelEncoder)}.
*/
Iterator<String> iterated()
{
@@ -189,7 +191,7 @@ public final class CommandReader implements CommandChainReader
* @param eventChannel original stream in current JVM process
* @return Iterator with test classes lazily loaded as commands from the main process
*/
- Iterable<String> getIterableClasses( ForkedChannelEncoder eventChannel )
+ Iterable<String> getIterableClasses( MasterProcessChannelEncoder eventChannel )
{
return new ClassesIterable( eventChannel );
}
@@ -240,9 +242,9 @@ public final class CommandReader implements CommandChainReader
private final class ClassesIterable
implements Iterable<String>
{
- private final ForkedChannelEncoder eventChannel;
+ private final MasterProcessChannelEncoder eventChannel;
- ClassesIterable( ForkedChannelEncoder eventChannel )
+ ClassesIterable( MasterProcessChannelEncoder eventChannel )
{
this.eventChannel = eventChannel;
}
@@ -257,13 +259,13 @@ public final class CommandReader implements CommandChainReader
private final class ClassesIterator
implements Iterator<String>
{
- private final ForkedChannelEncoder eventChannel;
+ private final MasterProcessChannelEncoder eventChannel;
private String clazz;
private int nextQueueIndex;
- private ClassesIterator( ForkedChannelEncoder eventChannel )
+ private ClassesIterator( MasterProcessChannelEncoder eventChannel )
{
this.eventChannel = eventChannel;
}
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 4e0bf99..34b752e 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
@@ -20,14 +20,16 @@ package org.apache.maven.surefire.booter;
*/
import org.apache.maven.plugin.surefire.log.api.ConsoleLogger;
-import org.apache.maven.surefire.booter.spi.DefaultMasterProcessChannelDecoderFactory;
+import org.apache.maven.surefire.booter.spi.LegacyMasterProcessChannelProcessorFactory;
+import org.apache.maven.surefire.booter.spi.SurefireMasterProcessChannelProcessorFactory;
import org.apache.maven.surefire.providerapi.CommandListener;
import org.apache.maven.surefire.providerapi.MasterProcessChannelDecoder;
+import org.apache.maven.surefire.providerapi.MasterProcessChannelEncoder;
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.spi.MasterProcessChannelDecoderFactory;
+import org.apache.maven.surefire.spi.MasterProcessChannelProcessorFactory;
import org.apache.maven.surefire.testset.TestSetFailedException;
import java.io.File;
@@ -42,7 +44,6 @@ import java.lang.reflect.InvocationTargetException;
import java.security.AccessControlException;
import java.security.AccessController;
import java.security.PrivilegedAction;
-import java.util.ServiceLoader;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.Semaphore;
@@ -51,6 +52,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
import static java.lang.Math.max;
import static java.lang.Thread.currentThread;
+import static java.util.ServiceLoader.load;
import static java.util.concurrent.TimeUnit.MILLISECONDS;
import static java.util.concurrent.TimeUnit.SECONDS;
import static org.apache.maven.surefire.booter.ProcessCheckerType.ALL;
@@ -79,16 +81,17 @@ public final class ForkedBooter
private static final String LAST_DITCH_SHUTDOWN_THREAD = "surefire-forkedjvm-last-ditch-daemon-shutdown-thread-";
private static final String PING_THREAD = "surefire-forkedjvm-ping-";
- private final ForkedChannelEncoder eventChannel = new ForkedChannelEncoder( System.out );
private final Semaphore exitBarrier = new Semaphore( 0 );
+ private volatile MasterProcessChannelEncoder eventChannel;
+ private volatile MasterProcessChannelProcessorFactory channelProcessorFactory;
+ private volatile CommandReader commandReader;
private volatile long systemExitTimeoutInSeconds = DEFAULT_SYSTEM_EXIT_TIMEOUT_IN_SECONDS;
private volatile PingScheduler pingScheduler;
private ScheduledThreadPoolExecutor jvmTerminator;
private ProviderConfiguration providerConfiguration;
private ForkingReporterFactory forkingReporterFactory;
- private volatile CommandReader commandReader;
private StartupConfiguration startupConfiguration;
private Object testSet;
@@ -112,11 +115,14 @@ public final class ForkedBooter
startupConfiguration = booterDeserializer.getStartupConfiguration();
- forkingReporterFactory = createForkingReporterFactory();
+ String channelConfig = booterDeserializer.getConnectionString();
+ channelProcessorFactory = lookupDecoderFactory( channelConfig );
+ channelProcessorFactory.connect( channelConfig );
+ eventChannel = channelProcessorFactory.createEncoder();
+ MasterProcessChannelDecoder decoder = channelProcessorFactory.createDecoder();
+ forkingReporterFactory = createForkingReporterFactory();
ConsoleLogger logger = (ConsoleLogger) forkingReporterFactory.createReporter();
- String communicationConfig = startupConfiguration.getInterProcessChannelConfiguration();
- MasterProcessChannelDecoder decoder = lookupDecoderFactory().createDecoder( communicationConfig, logger );
commandReader = new CommandReader( decoder, providerConfiguration.getShutdown(), logger );
pingScheduler = isDebugging() ? null : listenToShutdownCommands( booterDeserializer.getPluginPid(), logger );
@@ -201,6 +207,21 @@ public final class ForkedBooter
}
}
+ private void closeForkChannel()
+ {
+ if ( channelProcessorFactory != null )
+ {
+ try
+ {
+ channelProcessorFactory.close();
+ }
+ catch ( IOException e )
+ {
+ e.printStackTrace();
+ }
+ }
+ }
+
private PingScheduler listenToShutdownCommands( String ppid, ConsoleLogger logger )
{
PpidChecker ppidChecker = ppid == null ? null : new PpidChecker( ppid );
@@ -349,6 +370,7 @@ public final class ForkedBooter
private void kill( int returnCode )
{
commandReader.stop();
+ closeForkChannel();
Runtime.getRuntime().halt( returnCode );
}
@@ -375,6 +397,7 @@ public final class ForkedBooter
acquireOnePermit( exitBarrier, timeoutMillis );
cancelPingScheduler();
commandReader.stop();
+ closeForkChannel();
System.exit( 0 );
}
@@ -447,23 +470,31 @@ public final class ForkedBooter
return (SurefireProvider) instantiateOneArg( classLoader, providerClass, ProviderParameters.class, bpf );
}
- private static MasterProcessChannelDecoderFactory lookupDecoderFactory()
+ private static MasterProcessChannelProcessorFactory lookupDecoderFactory( String channelConfig )
{
- MasterProcessChannelDecoderFactory defaultDecoderFactory = null;
- MasterProcessChannelDecoderFactory customDecoderFactory = null;
- for ( MasterProcessChannelDecoderFactory decoderFactory : ServiceLoader.load(
- MasterProcessChannelDecoderFactory.class ) )
+ MasterProcessChannelProcessorFactory defaultFactory = null;
+ MasterProcessChannelProcessorFactory customFactory = null;
+ for ( MasterProcessChannelProcessorFactory factory : load( MasterProcessChannelProcessorFactory.class ) )
{
- if ( decoderFactory.getClass() == DefaultMasterProcessChannelDecoderFactory.class )
+ Class<?> cls = factory.getClass();
+
+ boolean isSurefireFactory =
+ cls == LegacyMasterProcessChannelProcessorFactory.class
+ || cls == SurefireMasterProcessChannelProcessorFactory.class;
+
+ if ( isSurefireFactory )
{
- defaultDecoderFactory = decoderFactory;
+ if ( factory.canUse( channelConfig ) )
+ {
+ defaultFactory = factory;
+ }
}
else
{
- customDecoderFactory = decoderFactory;
+ customFactory = factory;
}
}
- return defaultDecoderFactory == null ? customDecoderFactory : defaultDecoderFactory;
+ return customFactory != null ? customFactory : defaultFactory;
}
/**
@@ -495,8 +526,11 @@ public final class ForkedBooter
{
DumpErrorSingleton.getSingleton().dumpException( t );
t.printStackTrace();
- StackTraceWriter stack = new LegacyPojoStackTraceWriter( "test subsystem", "no method", t );
- booter.eventChannel.consoleErrorLog( stack, false );
+ if ( booter.eventChannel != null )
+ {
+ StackTraceWriter stack = new LegacyPojoStackTraceWriter( "test subsystem", "no method", t );
+ booter.eventChannel.consoleErrorLog( stack, false );
+ }
booter.cancelPingScheduler();
booter.exit1();
}
diff --git a/surefire-booter/src/main/java/org/apache/maven/surefire/booter/LazyTestsToRun.java b/surefire-booter/src/main/java/org/apache/maven/surefire/booter/LazyTestsToRun.java
index ada3384..568a2c5 100644
--- a/surefire-booter/src/main/java/org/apache/maven/surefire/booter/LazyTestsToRun.java
+++ b/surefire-booter/src/main/java/org/apache/maven/surefire/booter/LazyTestsToRun.java
@@ -22,6 +22,7 @@ package org.apache.maven.surefire.booter;
import java.util.Collections;
import java.util.Iterator;
+import org.apache.maven.surefire.providerapi.MasterProcessChannelEncoder;
import org.apache.maven.surefire.util.CloseableIterator;
import org.apache.maven.surefire.util.TestsToRun;
@@ -42,7 +43,7 @@ import static org.apache.maven.surefire.util.ReflectionUtils.loadClass;
final class LazyTestsToRun
extends TestsToRun
{
- private final ForkedChannelEncoder eventChannel;
+ private final MasterProcessChannelEncoder eventChannel;
private final CommandReader commandReader;
/**
@@ -50,7 +51,7 @@ final class LazyTestsToRun
*
* @param eventChannel the output stream to use when requesting new new tests
*/
- LazyTestsToRun( ForkedChannelEncoder eventChannel, CommandReader commandReader )
+ LazyTestsToRun( MasterProcessChannelEncoder eventChannel, CommandReader commandReader )
{
super( Collections.<Class<?>>emptySet() );
this.eventChannel = eventChannel;
diff --git a/surefire-booter/src/main/java/org/apache/maven/surefire/booter/StartupConfiguration.java b/surefire-booter/src/main/java/org/apache/maven/surefire/booter/StartupConfiguration.java
index 44eb5b7..d6a3dd0 100644
--- a/surefire-booter/src/main/java/org/apache/maven/surefire/booter/StartupConfiguration.java
+++ b/surefire-booter/src/main/java/org/apache/maven/surefire/booter/StartupConfiguration.java
@@ -33,40 +33,30 @@ public class StartupConfiguration
private final String providerClassName;
private final AbstractPathConfiguration classpathConfiguration;
private final ClassLoaderConfiguration classLoaderConfiguration;
- private final boolean isForkRequested;
- private final boolean isInForkedVm;
private final ProcessCheckerType processChecker;
public StartupConfiguration( @Nonnull String providerClassName,
@Nonnull AbstractPathConfiguration classpathConfiguration,
- @Nonnull ClassLoaderConfiguration classLoaderConfiguration, boolean isForkRequested,
- boolean inForkedVm, ProcessCheckerType processChecker )
+ @Nonnull ClassLoaderConfiguration classLoaderConfiguration,
+ ProcessCheckerType processChecker )
{
this.classpathConfiguration = classpathConfiguration;
this.classLoaderConfiguration = classLoaderConfiguration;
- this.isForkRequested = isForkRequested;
this.providerClassName = providerClassName;
- isInForkedVm = inForkedVm;
this.processChecker = processChecker;
}
- public String getInterProcessChannelConfiguration()
- {
- return "pipe:std:in";
- }
-
public boolean isProviderMainClass()
{
return providerClassName.endsWith( "#main" );
}
public static StartupConfiguration inForkedVm( String providerClassName,
- ClasspathConfiguration classpathConfiguration,
- ClassLoaderConfiguration classLoaderConfiguration,
+ ClasspathConfiguration classpathConfig,
+ ClassLoaderConfiguration classLoaderConfig,
ProcessCheckerType processChecker )
{
- return new StartupConfiguration( providerClassName, classpathConfiguration, classLoaderConfiguration, true,
- true, processChecker );
+ return new StartupConfiguration( providerClassName, classpathConfig, classLoaderConfig, processChecker );
}
public AbstractPathConfiguration getClasspathConfiguration()
@@ -74,13 +64,6 @@ public class StartupConfiguration
return classpathConfiguration;
}
- @Deprecated
- public boolean useSystemClassLoader()
- {
- // todo; I am not totally convinced this logic is as simple as it could be
- return classLoaderConfiguration.isUseSystemClassLoader() && ( isInForkedVm || isForkRequested );
- }
-
public boolean isManifestOnlyJarRequestedAndUsable()
{
return classLoaderConfiguration.isManifestOnlyJarRequestedAndUsable();
diff --git a/surefire-booter/src/main/java/org/apache/maven/surefire/booter/spi/DefaultMasterProcessChannelDecoderFactory.java b/surefire-booter/src/main/java/org/apache/maven/surefire/booter/spi/DefaultMasterProcessChannelDecoderFactory.java
deleted file mode 100644
index f7e7911..0000000
--- a/surefire-booter/src/main/java/org/apache/maven/surefire/booter/spi/DefaultMasterProcessChannelDecoderFactory.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package org.apache.maven.surefire.booter.spi;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.maven.plugin.surefire.log.api.ConsoleLogger;
-import org.apache.maven.surefire.providerapi.MasterProcessChannelDecoder;
-import org.apache.maven.surefire.spi.MasterProcessChannelDecoderFactory;
-
-import java.io.IOException;
-
-/**
- *
- */
-public class DefaultMasterProcessChannelDecoderFactory
- implements MasterProcessChannelDecoderFactory
-{
- @Override
- public MasterProcessChannelDecoder createDecoder( String channelConfig, ConsoleLogger logger ) throws IOException
- {
- if ( "pipe:std:in".equals( channelConfig ) )
- {
- return new DefaultMasterProcessChannelDecoder( System.in, logger );
- }
- else
- {
- throw new IOException( "Unknown chanel configuration string " + channelConfig );
- }
- }
-}
diff --git a/surefire-booter/src/main/java/org/apache/maven/surefire/booter/spi/DefaultMasterProcessChannelDecoder.java b/surefire-booter/src/main/java/org/apache/maven/surefire/booter/spi/LegacyMasterProcessChannelDecoder.java
similarity index 88%
rename from surefire-booter/src/main/java/org/apache/maven/surefire/booter/spi/DefaultMasterProcessChannelDecoder.java
rename to surefire-booter/src/main/java/org/apache/maven/surefire/booter/spi/LegacyMasterProcessChannelDecoder.java
index 40cf880..c22ee11 100644
--- a/surefire-booter/src/main/java/org/apache/maven/surefire/booter/spi/DefaultMasterProcessChannelDecoder.java
+++ b/surefire-booter/src/main/java/org/apache/maven/surefire/booter/spi/LegacyMasterProcessChannelDecoder.java
@@ -19,7 +19,6 @@ package org.apache.maven.surefire.booter.spi;
* under the License.
*/
-import org.apache.maven.plugin.surefire.log.api.ConsoleLogger;
import org.apache.maven.surefire.booter.Command;
import org.apache.maven.surefire.booter.MasterProcessCommand;
import org.apache.maven.surefire.providerapi.MasterProcessChannelDecoder;
@@ -37,17 +36,15 @@ import java.util.List;
* <br>
*
* @author <a href="mailto:tibordigana@apache.org">Tibor Digana (tibor17)</a>
- * @since 3.0.0-M4
+ * @since 3.0.0-M5
*/
-public class DefaultMasterProcessChannelDecoder implements MasterProcessChannelDecoder
+public class LegacyMasterProcessChannelDecoder implements MasterProcessChannelDecoder
{
private final InputStream is;
- private final ConsoleLogger logger;
- public DefaultMasterProcessChannelDecoder( InputStream is, ConsoleLogger logger )
+ public LegacyMasterProcessChannelDecoder( InputStream is )
{
this.is = is;
- this.logger = logger;
}
protected boolean hasData( String opcode )
@@ -105,7 +102,7 @@ public class DefaultMasterProcessChannelDecoder implements MasterProcessChannelD
}
}
- boolean removed = removeUnsynchronizedTokens( tokens, logger );
+ boolean removed = removeUnsynchronizedTokens( tokens );
if ( removed && tokens.isEmpty() )
{
frameStarted = false;
@@ -118,7 +115,7 @@ public class DefaultMasterProcessChannelDecoder implements MasterProcessChannelD
throw new EOFException();
}
- if ( tokens.size() <= 1 )
+ if ( tokens.size() <= 1 ) // todo
{
throw new MasterProcessCommandNoMagicNumberException( frame.toString() );
}
@@ -145,19 +142,19 @@ public class DefaultMasterProcessChannelDecoder implements MasterProcessChannelD
return false;
}
- private boolean removeUnsynchronizedTokens( Collection<String> tokens, ConsoleLogger logger )
+ private boolean removeUnsynchronizedTokens( Collection<String> tokens )
{
boolean removed = false;
for ( Iterator<String> it = tokens.iterator(); it.hasNext(); )
{
String token = it.next();
- if ( token.equals( "maven-surefire-std-out" ) )
+ if ( token.equals( MasterProcessCommand.MAGIC_NUMBER ) )
{
break;
}
removed = true;
it.remove();
- logger.error( "Forked JVM could not synchronize the '" + token + "' token with preamble sequence." );
+ System.err.println( "Forked JVM could not synchronize the '" + token + "' token with preamble sequence." );
}
return removed;
}
diff --git a/surefire-api/src/main/java/org/apache/maven/surefire/booter/ForkedChannelEncoder.java b/surefire-booter/src/main/java/org/apache/maven/surefire/booter/spi/LegacyMasterProcessChannelEncoder.java
similarity index 92%
rename from surefire-api/src/main/java/org/apache/maven/surefire/booter/ForkedChannelEncoder.java
rename to surefire-booter/src/main/java/org/apache/maven/surefire/booter/spi/LegacyMasterProcessChannelEncoder.java
index 94f620a..d4b32bd 100644
--- a/surefire-api/src/main/java/org/apache/maven/surefire/booter/ForkedChannelEncoder.java
+++ b/surefire-booter/src/main/java/org/apache/maven/surefire/booter/spi/LegacyMasterProcessChannelEncoder.java
@@ -1,4 +1,4 @@
-package org.apache.maven.surefire.booter;
+package org.apache.maven.surefire.booter.spi;
/*
* Licensed to the Apache Software Foundation (ASF) under one
@@ -19,6 +19,9 @@ package org.apache.maven.surefire.booter;
* under the License.
*/
+import org.apache.maven.surefire.booter.DumpErrorSingleton;
+import org.apache.maven.surefire.booter.ForkedProcessEvent;
+import org.apache.maven.surefire.providerapi.MasterProcessChannelEncoder;
import org.apache.maven.surefire.shared.codec.binary.Base64;
import org.apache.maven.plugin.surefire.log.api.ConsoleLoggerUtils;
import org.apache.maven.surefire.report.ReportEntry;
@@ -34,7 +37,7 @@ import java.util.Map.Entry;
import static java.nio.charset.StandardCharsets.US_ASCII;
import static java.nio.charset.StandardCharsets.UTF_8;
-import static org.apache.maven.surefire.booter.ForkedProcessEvent.MAGIC_NUMBER;
+import static org.apache.maven.surefire.booter.ForkedProcessEvent.MAGIC_NUMBER_DELIMITED;
import static org.apache.maven.surefire.booter.ForkedProcessEvent.BOOTERCODE_SYSPROPS;
import static org.apache.maven.surefire.booter.ForkedProcessEvent.BOOTERCODE_STDERR;
import static org.apache.maven.surefire.booter.ForkedProcessEvent.BOOTERCODE_STDERR_NEW_LINE;
@@ -67,42 +70,46 @@ import static java.util.Objects.requireNonNull;
* @author <a href="mailto:tibordigana@apache.org">Tibor Digana (tibor17)</a>
* @since 3.0.0-M4
*/
-public final class ForkedChannelEncoder
+public class LegacyMasterProcessChannelEncoder implements MasterProcessChannelEncoder
{
private static final Base64 BASE64 = new Base64();
private static final Charset STREAM_ENCODING = US_ASCII;
private static final Charset STRING_ENCODING = UTF_8;
- private final OutputStream out;
+ protected final OutputStream out;
private final RunMode runMode;
private volatile boolean trouble;
- public ForkedChannelEncoder( OutputStream out )
+ public LegacyMasterProcessChannelEncoder( OutputStream out )
{
this( out, NORMAL_RUN );
}
- private ForkedChannelEncoder( OutputStream out, RunMode runMode )
+ protected LegacyMasterProcessChannelEncoder( OutputStream out, RunMode runMode )
{
this.out = requireNonNull( out );
this.runMode = requireNonNull( runMode );
}
- public ForkedChannelEncoder asRerunMode() // todo apply this and rework providers
+ @Override
+ public MasterProcessChannelEncoder asRerunMode() // todo apply this and rework providers
{
- return new ForkedChannelEncoder( out, RERUN_TEST_AFTER_FAILURE );
+ return new LegacyMasterProcessChannelEncoder( out, RERUN_TEST_AFTER_FAILURE );
}
- public ForkedChannelEncoder asNormalMode()
+ @Override
+ public MasterProcessChannelEncoder asNormalMode()
{
- return new ForkedChannelEncoder( out, NORMAL_RUN );
+ return new LegacyMasterProcessChannelEncoder( out, NORMAL_RUN );
}
+ @Override
public boolean checkError()
{
return trouble;
}
+ @Override
public void sendSystemProperties( Map<String, String> sysProps )
{
for ( Entry<String, String> entry : sysProps.entrySet() )
@@ -114,52 +121,62 @@ public final class ForkedChannelEncoder
}
}
+ @Override
public void testSetStarting( ReportEntry reportEntry, boolean trimStackTraces )
{
encode( BOOTERCODE_TESTSET_STARTING, runMode, reportEntry, trimStackTraces );
}
+ @Override
public void testSetCompleted( ReportEntry reportEntry, boolean trimStackTraces )
{
encode( BOOTERCODE_TESTSET_COMPLETED, runMode, reportEntry, trimStackTraces );
}
+ @Override
public void testStarting( ReportEntry reportEntry, boolean trimStackTraces )
{
encode( BOOTERCODE_TEST_STARTING, runMode, reportEntry, trimStackTraces );
}
+ @Override
public void testSucceeded( ReportEntry reportEntry, boolean trimStackTraces )
{
encode( BOOTERCODE_TEST_SUCCEEDED, runMode, reportEntry, trimStackTraces );
}
+ @Override
public void testFailed( ReportEntry reportEntry, boolean trimStackTraces )
{
encode( BOOTERCODE_TEST_FAILED, runMode, reportEntry, trimStackTraces );
}
+ @Override
public void testSkipped( ReportEntry reportEntry, boolean trimStackTraces )
{
encode( BOOTERCODE_TEST_SKIPPED, runMode, reportEntry, trimStackTraces );
}
+ @Override
public void testError( ReportEntry reportEntry, boolean trimStackTraces )
{
encode( BOOTERCODE_TEST_ERROR, runMode, reportEntry, trimStackTraces );
}
+ @Override
public void testAssumptionFailure( ReportEntry reportEntry, boolean trimStackTraces )
{
encode( BOOTERCODE_TEST_ASSUMPTIONFAILURE, runMode, reportEntry, trimStackTraces );
}
+ @Override
public void stdOut( String msg, boolean newLine )
{
ForkedProcessEvent event = newLine ? BOOTERCODE_STDOUT_NEW_LINE : BOOTERCODE_STDOUT;
setOutErr( event.getOpcode(), msg );
}
+ @Override
public void stdErr( String msg, boolean newLine )
{
ForkedProcessEvent event = newLine ? BOOTERCODE_STDERR_NEW_LINE : BOOTERCODE_STDERR;
@@ -173,23 +190,27 @@ public final class ForkedChannelEncoder
encodeAndPrintEvent( event );
}
+ @Override
public void consoleInfoLog( String msg )
{
StringBuilder event = print( BOOTERCODE_CONSOLE_INFO.getOpcode(), msg );
encodeAndPrintEvent( event );
}
+ @Override
public void consoleErrorLog( String msg )
{
StringBuilder event = print( BOOTERCODE_CONSOLE_ERROR.getOpcode(), msg );
encodeAndPrintEvent( event );
}
+ @Override
public void consoleErrorLog( Throwable t )
{
consoleErrorLog( t.getLocalizedMessage(), t );
}
+ @Override
public void consoleErrorLog( String msg, Throwable t )
{
StringBuilder encoded = encodeHeader( BOOTERCODE_CONSOLE_ERROR.getOpcode(), null );
@@ -197,38 +218,45 @@ public final class ForkedChannelEncoder
encodeAndPrintEvent( encoded );
}
+ @Override
public void consoleErrorLog( StackTraceWriter stackTraceWriter, boolean trimStackTraces )
{
error( stackTraceWriter, trimStackTraces, BOOTERCODE_CONSOLE_ERROR );
}
+ @Override
public void consoleDebugLog( String msg )
{
StringBuilder event = print( BOOTERCODE_CONSOLE_DEBUG.getOpcode(), msg );
encodeAndPrintEvent( event );
}
+ @Override
public void consoleWarningLog( String msg )
{
StringBuilder event = print( BOOTERCODE_CONSOLE_WARNING.getOpcode(), msg );
encodeAndPrintEvent( event );
}
+ @Override
public void bye()
{
encodeOpcode( BOOTERCODE_BYE );
}
+ @Override
public void stopOnNextTest()
{
encodeOpcode( BOOTERCODE_STOP_ON_NEXT_TEST );
}
+ @Override
public void acquireNextTest()
{
encodeOpcode( BOOTERCODE_NEXT_TEST );
}
+ @Override
public void sendExitEvent( StackTraceWriter stackTraceWriter, boolean trimStackTraces )
{
error( stackTraceWriter, trimStackTraces, BOOTERCODE_JVM_EXIT_ERROR );
@@ -390,7 +418,7 @@ public final class ForkedChannelEncoder
static StringBuilder encodeOpcode( String operation, String runMode )
{
StringBuilder s = new StringBuilder( 128 )
- .append( MAGIC_NUMBER )
+ .append( MAGIC_NUMBER_DELIMITED )
.append( operation );
return runMode == null ? s : s.append( ':' ).append( runMode );
diff --git a/surefire-booter/src/main/java/org/apache/maven/surefire/booter/spi/LegacyMasterProcessChannelProcessorFactory.java b/surefire-booter/src/main/java/org/apache/maven/surefire/booter/spi/LegacyMasterProcessChannelProcessorFactory.java
new file mode 100644
index 0000000..b5d4dd5
--- /dev/null
+++ b/surefire-booter/src/main/java/org/apache/maven/surefire/booter/spi/LegacyMasterProcessChannelProcessorFactory.java
@@ -0,0 +1,70 @@
+package org.apache.maven.surefire.booter.spi;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.surefire.providerapi.MasterProcessChannelDecoder;
+import org.apache.maven.surefire.providerapi.MasterProcessChannelEncoder;
+import org.apache.maven.surefire.spi.MasterProcessChannelProcessorFactory;
+
+import java.io.IOException;
+import java.net.MalformedURLException;
+
+/**
+ * Producer of encoder and decoder for process pipes.
+ * <br>
+ *
+ * @author <a href="mailto:tibordigana@apache.org">Tibor Digana (tibor17)</a>
+ * @since 3.0.0-M5
+ */
+public class LegacyMasterProcessChannelProcessorFactory
+ implements MasterProcessChannelProcessorFactory
+{
+ @Override
+ public boolean canUse( String channelConfig )
+ {
+ return channelConfig.startsWith( "pipe://" );
+ }
+
+ @Override
+ public void connect( String channelConfig ) throws IOException
+ {
+ if ( !canUse( channelConfig ) )
+ {
+ throw new MalformedURLException( "Unknown chanel string " + channelConfig );
+ }
+ }
+
+ @Override
+ public MasterProcessChannelDecoder createDecoder()
+ {
+ return new LegacyMasterProcessChannelDecoder( System.in );
+ }
+
+ @Override
+ public MasterProcessChannelEncoder createEncoder()
+ {
+ return new LegacyMasterProcessChannelEncoder( System.out );
+ }
+
+ @Override
+ public void close()
+ {
+ }
+}
diff --git a/surefire-booter/src/main/java/org/apache/maven/surefire/booter/spi/SurefireMasterProcessChannelProcessorFactory.java b/surefire-booter/src/main/java/org/apache/maven/surefire/booter/spi/SurefireMasterProcessChannelProcessorFactory.java
new file mode 100644
index 0000000..497e748
--- /dev/null
+++ b/surefire-booter/src/main/java/org/apache/maven/surefire/booter/spi/SurefireMasterProcessChannelProcessorFactory.java
@@ -0,0 +1,91 @@
+package org.apache.maven.surefire.booter.spi;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.surefire.providerapi.MasterProcessChannelDecoder;
+import org.apache.maven.surefire.providerapi.MasterProcessChannelEncoder;
+import org.apache.maven.surefire.spi.MasterProcessChannelProcessorFactory;
+
+import java.io.IOException;
+import java.net.InetSocketAddress;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.nio.channels.Channels;
+import java.nio.channels.SocketChannel;
+
+/**
+ * Producer of TCP/IP encoder and decoder.
+ * <br>
+ *
+ * @author <a href="mailto:tibordigana@apache.org">Tibor Digana (tibor17)</a>
+ * @since 3.0.0-M5
+ */
+public class SurefireMasterProcessChannelProcessorFactory
+ implements MasterProcessChannelProcessorFactory
+{
+ private volatile SocketChannel channel;
+
+ @Override
+ public boolean canUse( String channelConfig )
+ {
+ return channelConfig.startsWith( "tcp://" );
+ }
+
+ @Override
+ public void connect( String channelConfig ) throws IOException
+ {
+ if ( !canUse( channelConfig ) )
+ {
+ throw new MalformedURLException( "Unknown chanel string " + channelConfig );
+ }
+
+ try
+ {
+ URI uri = new URI( channelConfig );
+ channel = SocketChannel.open( new InetSocketAddress( uri.getHost(), uri.getPort() ) );
+ }
+ catch ( URISyntaxException e )
+ {
+ throw new IOException( e.getLocalizedMessage(), e );
+ }
+ }
+
+ @Override
+ public MasterProcessChannelDecoder createDecoder()
+ {
+ return new LegacyMasterProcessChannelDecoder( Channels.newInputStream( channel ) );
+ }
+
+ @Override
+ public MasterProcessChannelEncoder createEncoder()
+ {
+ return new LegacyMasterProcessChannelEncoder( Channels.newOutputStream( channel ) );
+ }
+
+ @Override
+ public void close() throws IOException
+ {
+ if ( channel != null )
+ {
+ channel.close();
+ }
+ }
+}
diff --git a/surefire-booter/src/main/resources/META-INF/services/org.apache.maven.surefire.spi.MasterProcessChannelDecoderFactory b/surefire-booter/src/main/resources/META-INF/services/org.apache.maven.surefire.spi.MasterProcessChannelProcessorFactory
similarity index 83%
rename from surefire-booter/src/main/resources/META-INF/services/org.apache.maven.surefire.spi.MasterProcessChannelDecoderFactory
rename to surefire-booter/src/main/resources/META-INF/services/org.apache.maven.surefire.spi.MasterProcessChannelProcessorFactory
index 2b44ee1..22a3f43 100644
--- a/surefire-booter/src/main/resources/META-INF/services/org.apache.maven.surefire.spi.MasterProcessChannelDecoderFactory
+++ b/surefire-booter/src/main/resources/META-INF/services/org.apache.maven.surefire.spi.MasterProcessChannelProcessorFactory
@@ -16,4 +16,5 @@
# specific language governing permissions and limitations
# under the License.
#
-org.apache.maven.surefire.booter.spi.DefaultMasterProcessChannelDecoderFactory
+org.apache.maven.surefire.booter.spi.LegacyMasterProcessChannelProcessorFactory
+org.apache.maven.surefire.booter.spi.SurefireMasterProcessChannelProcessorFactory
diff --git a/surefire-booter/src/test/java/org/apache/maven/surefire/booter/BooterDeserializerTest.java b/surefire-booter/src/test/java/org/apache/maven/surefire/booter/BooterDeserializerTest.java
index 302f7ad..b1c0284 100644
--- a/surefire-booter/src/test/java/org/apache/maven/surefire/booter/BooterDeserializerTest.java
+++ b/surefire-booter/src/test/java/org/apache/maven/surefire/booter/BooterDeserializerTest.java
@@ -48,7 +48,7 @@ public class BooterDeserializerTest
assertThat( deserializer.getStartupConfiguration().getProcessChecker() )
.isEqualTo( ALL );
- assertThat( deserializer.getStartupConfiguration().useSystemClassLoader() )
+ assertThat( deserializer.getStartupConfiguration().getClassLoaderConfiguration().isUseSystemClassLoader() )
.isTrue();
assertThat( deserializer.getStartupConfiguration().getProviderClassName() )
diff --git a/surefire-booter/src/test/java/org/apache/maven/surefire/booter/CommandReaderTest.java b/surefire-booter/src/test/java/org/apache/maven/surefire/booter/CommandReaderTest.java
index 096cfb4..74d7b16 100644
--- a/surefire-booter/src/test/java/org/apache/maven/surefire/booter/CommandReaderTest.java
+++ b/surefire-booter/src/test/java/org/apache/maven/surefire/booter/CommandReaderTest.java
@@ -21,7 +21,8 @@ package org.apache.maven.surefire.booter;
import org.apache.maven.plugin.surefire.log.api.ConsoleLogger;
import org.apache.maven.plugin.surefire.log.api.NullConsoleLogger;
-import org.apache.maven.surefire.booter.spi.DefaultMasterProcessChannelDecoder;
+import org.apache.maven.surefire.booter.spi.LegacyMasterProcessChannelDecoder;
+import org.apache.maven.surefire.booter.spi.LegacyMasterProcessChannelEncoder;
import org.apache.maven.surefire.providerapi.MasterProcessChannelDecoder;
import org.apache.maven.surefire.testset.TestSetFailedException;
import org.junit.After;
@@ -89,7 +90,7 @@ public class CommandReaderTest
InputStream realInputStream = new SystemInputStream();
addTestToPipeline( getClass().getName() );
ConsoleLogger logger = new NullConsoleLogger();
- MasterProcessChannelDecoder decoder = new DefaultMasterProcessChannelDecoder( realInputStream, logger );
+ MasterProcessChannelDecoder decoder = new LegacyMasterProcessChannelDecoder( realInputStream );
reader = new CommandReader( decoder, Shutdown.DEFAULT, logger );
}
@@ -102,7 +103,7 @@ public class CommandReaderTest
@Test
public void readJustOneClass()
{
- Iterator<String> it = reader.getIterableClasses( new ForkedChannelEncoder( nul() ) ).iterator();
+ Iterator<String> it = reader.getIterableClasses( new LegacyMasterProcessChannelEncoder( nul() ) ).iterator();
assertTrue( it.hasNext() );
assertThat( it.next(), is( getClass().getName() ) );
reader.stop();
@@ -121,7 +122,7 @@ public class CommandReaderTest
@Test
public void manyClasses()
{
- Iterator<String> it1 = reader.getIterableClasses( new ForkedChannelEncoder( nul() ) ).iterator();
+ Iterator<String> it1 = reader.getIterableClasses( new LegacyMasterProcessChannelEncoder( nul() ) ).iterator();
assertThat( it1.next(), is( getClass().getName() ) );
addTestToPipeline( A.class.getName() );
assertThat( it1.next(), is( A.class.getName() ) );
@@ -137,7 +138,7 @@ public class CommandReaderTest
@Test
public void twoIterators() throws Exception
{
- Iterator<String> it1 = reader.getIterableClasses( new ForkedChannelEncoder( nul() ) ).iterator();
+ Iterator<String> it1 = reader.getIterableClasses( new LegacyMasterProcessChannelEncoder( nul() ) ).iterator();
assertThat( it1.next(), is( getClass().getName() ) );
addTestToPipeline( A.class.getName() );
@@ -170,7 +171,8 @@ public class CommandReaderTest
@Override
public void run()
{
- Iterator<String> it = reader.getIterableClasses( new ForkedChannelEncoder( nul() ) ).iterator();
+ Iterator<String> it =
+ reader.getIterableClasses( new LegacyMasterProcessChannelEncoder( nul() ) ).iterator();
assertThat( it.next(), is( CommandReaderTest.class.getName() ) );
}
};
@@ -197,7 +199,8 @@ public class CommandReaderTest
@Override
public void run()
{
- Iterator<String> it = reader.getIterableClasses( new ForkedChannelEncoder( nul() ) ).iterator();
+ Iterator<String> it =
+ reader.getIterableClasses( new LegacyMasterProcessChannelEncoder( nul() ) ).iterator();
assertThat( it.next(), is( CommandReaderTest.class.getName() ) );
counter.countDown();
assertThat( it.next(), is( Foo.class.getName() ) );
@@ -244,7 +247,7 @@ public class CommandReaderTest
private void addTestToPipeline( String cls )
{
- String cmd = ":maven-surefire-std-out:"
+ String cmd = ":maven-surefire-command:"
+ MasterProcessCommand.RUN_CLASS.getOpcode() + ':' + cls + '\n';
for ( byte cmdByte : cmd.getBytes( US_ASCII ) )
{
@@ -254,7 +257,7 @@ public class CommandReaderTest
private void addEndOfPipeline()
{
- String cmd = ":maven-surefire-std-out:" + MasterProcessCommand.TEST_SET_FINISHED.getOpcode() + '\n';
+ String cmd = ":maven-surefire-command:" + MasterProcessCommand.TEST_SET_FINISHED.getOpcode() + '\n';
for ( byte cmdByte : cmd.getBytes( US_ASCII ) )
{
blockingStream.add( cmdByte );
diff --git a/surefire-booter/src/test/java/org/apache/maven/surefire/booter/ForkedBooterMockTest.java b/surefire-booter/src/test/java/org/apache/maven/surefire/booter/ForkedBooterMockTest.java
index 24a250b..2cbb3f2 100644
--- a/surefire-booter/src/test/java/org/apache/maven/surefire/booter/ForkedBooterMockTest.java
+++ b/surefire-booter/src/test/java/org/apache/maven/surefire/booter/ForkedBooterMockTest.java
@@ -19,6 +19,7 @@ package org.apache.maven.surefire.booter;
* under the License.
*/
+import org.apache.maven.surefire.booter.spi.LegacyMasterProcessChannelEncoder;
import org.apache.maven.surefire.report.StackTraceWriter;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -50,7 +51,7 @@ import static org.powermock.utils.JavaVersion.JAVA_12;
* PowerMock tests for {@link ForkedBooter}.
*/
@RunWith( PowerMockRunner.class )
-@PrepareForTest( { PpidChecker.class, ForkedBooter.class, ForkedChannelEncoder.class } )
+@PrepareForTest( { PpidChecker.class, ForkedBooter.class, LegacyMasterProcessChannelEncoder.class } )
@PowerMockIgnore( { "org.jacoco.agent.rt.*", "com.vladium.emma.rt.*" } )
public class ForkedBooterMockTest
{
@@ -61,7 +62,7 @@ public class ForkedBooterMockTest
private ForkedBooter booter;
@Mock
- private ForkedChannelEncoder eventChannel;
+ private LegacyMasterProcessChannelEncoder eventChannel;
@Captor
private ArgumentCaptor<StackTraceWriter> capturedStackTraceWriter;
diff --git a/surefire-booter/src/test/java/org/apache/maven/surefire/booter/JUnit4SuiteTest.java b/surefire-booter/src/test/java/org/apache/maven/surefire/booter/JUnit4SuiteTest.java
index 9ef4fce..a7c6298 100644
--- a/surefire-booter/src/test/java/org/apache/maven/surefire/booter/JUnit4SuiteTest.java
+++ b/surefire-booter/src/test/java/org/apache/maven/surefire/booter/JUnit4SuiteTest.java
@@ -23,6 +23,8 @@ import junit.framework.JUnit4TestAdapter;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
+import org.apache.maven.surefire.booter.spi.LegacyMasterProcessChannelDecoderTest;
+import org.apache.maven.surefire.booter.spi.LegacyMasterProcessChannelEncoderTest;
/**
* Adapt the JUnit4 tests which use only annotations to the JUnit3 test suite.
@@ -44,7 +46,8 @@ public class JUnit4SuiteTest extends TestCase
suite.addTest( new JUnit4TestAdapter( BooterDeserializerTest.class ) );
suite.addTestSuite( ClasspathTest.class );
suite.addTestSuite( PropertiesWrapperTest.class );
- suite.addTestSuite( DefaultMasterProcessChannelDecoderTest.class );
+ suite.addTestSuite( LegacyMasterProcessChannelDecoderTest.class );
+ suite.addTest( new JUnit4TestAdapter( LegacyMasterProcessChannelEncoderTest.class ) );
suite.addTestSuite( SurefireReflectorTest.class );
return suite;
}
diff --git a/surefire-booter/src/test/java/org/apache/maven/surefire/booter/DefaultMasterProcessChannelDecoderTest.java b/surefire-booter/src/test/java/org/apache/maven/surefire/booter/spi/LegacyMasterProcessChannelDecoderTest.java
similarity index 81%
rename from surefire-booter/src/test/java/org/apache/maven/surefire/booter/DefaultMasterProcessChannelDecoderTest.java
rename to surefire-booter/src/test/java/org/apache/maven/surefire/booter/spi/LegacyMasterProcessChannelDecoderTest.java
index debab05..13efee2 100644
--- a/surefire-booter/src/test/java/org/apache/maven/surefire/booter/DefaultMasterProcessChannelDecoderTest.java
+++ b/surefire-booter/src/test/java/org/apache/maven/surefire/booter/spi/LegacyMasterProcessChannelDecoderTest.java
@@ -1,4 +1,4 @@
-package org.apache.maven.surefire.booter;
+package org.apache.maven.surefire.booter.spi;
/*
* Licensed to the Apache Software Foundation (ASF) under one
@@ -20,7 +20,9 @@ package org.apache.maven.surefire.booter;
*/
import junit.framework.TestCase;
-import org.apache.maven.surefire.booter.spi.DefaultMasterProcessChannelDecoder;
+import org.apache.maven.surefire.booter.Command;
+import org.apache.maven.surefire.booter.MasterProcessCommand;
+import org.apache.maven.surefire.booter.Shutdown;
import java.io.ByteArrayInputStream;
import java.io.IOException;
@@ -32,9 +34,9 @@ import static org.hamcrest.Matchers.is;
import static org.fest.assertions.Assertions.assertThat;
/**
- * Tests for {@link DefaultMasterProcessChannelDecoder}.
+ * Tests for {@link LegacyMasterProcessChannelDecoder}.
*/
-public class DefaultMasterProcessChannelDecoderTest
+public class LegacyMasterProcessChannelDecoderTest
extends TestCase
{
public void testDataToByteArrayAndBack() throws IOException
@@ -47,10 +49,10 @@ public class DefaultMasterProcessChannelDecoderTest
assertEquals( String.class, commandType.getDataType() );
byte[] encoded = commandType.encode( "pkg.Test" );
assertThat( new String( encoded ) )
- .isEqualTo( ":maven-surefire-std-out:run-testclass:pkg.Test:" );
+ .isEqualTo( ":maven-surefire-command:run-testclass:pkg.Test:" );
byte[] line = addNL( encoded, '\n' );
InputStream is = new ByteArrayInputStream( line );
- DefaultMasterProcessChannelDecoder decoder = new DefaultMasterProcessChannelDecoder( is, null );
+ LegacyMasterProcessChannelDecoder decoder = new LegacyMasterProcessChannelDecoder( is );
Command command = decoder.decode();
assertThat( command.getCommandType(), is( commandType ) );
assertThat( command.getData(), is( "pkg.Test" ) );
@@ -60,9 +62,9 @@ public class DefaultMasterProcessChannelDecoderTest
assertEquals( Void.class, commandType.getDataType() );
encoded = commandType.encode();
assertThat( new String( encoded ) )
- .isEqualTo( ":maven-surefire-std-out:testset-finished:" );
+ .isEqualTo( ":maven-surefire-command:testset-finished:" );
is = new ByteArrayInputStream( encoded );
- decoder = new DefaultMasterProcessChannelDecoder( is, null );
+ decoder = new LegacyMasterProcessChannelDecoder( is );
command = decoder.decode();
assertThat( command.getCommandType(), is( commandType ) );
assertNull( command.getData() );
@@ -72,9 +74,9 @@ public class DefaultMasterProcessChannelDecoderTest
assertEquals( Void.class, commandType.getDataType() );
encoded = commandType.encode();
assertThat( new String( encoded ) )
- .isEqualTo( ":maven-surefire-std-out:skip-since-next-test:" );
+ .isEqualTo( ":maven-surefire-command:skip-since-next-test:" );
is = new ByteArrayInputStream( encoded );
- decoder = new DefaultMasterProcessChannelDecoder( is, null );
+ decoder = new LegacyMasterProcessChannelDecoder( is );
command = decoder.decode();
assertThat( command.getCommandType(), is( commandType ) );
assertNull( command.getData() );
@@ -83,9 +85,9 @@ public class DefaultMasterProcessChannelDecoderTest
assertEquals( String.class, commandType.getDataType() );
encoded = commandType.encode( Shutdown.EXIT.name() );
assertThat( new String( encoded ) )
- .isEqualTo( ":maven-surefire-std-out:shutdown:EXIT:" );
+ .isEqualTo( ":maven-surefire-command:shutdown:EXIT:" );
is = new ByteArrayInputStream( encoded );
- decoder = new DefaultMasterProcessChannelDecoder( is, null );
+ decoder = new LegacyMasterProcessChannelDecoder( is );
command = decoder.decode();
assertThat( command.getCommandType(), is( commandType ) );
assertThat( command.getData(), is( "EXIT" ) );
@@ -95,9 +97,9 @@ public class DefaultMasterProcessChannelDecoderTest
assertEquals( Void.class, commandType.getDataType() );
encoded = commandType.encode();
assertThat( new String( encoded ) )
- .isEqualTo( ":maven-surefire-std-out:noop:" );
+ .isEqualTo( ":maven-surefire-command:noop:" );
is = new ByteArrayInputStream( encoded );
- decoder = new DefaultMasterProcessChannelDecoder( is, null );
+ decoder = new LegacyMasterProcessChannelDecoder( is );
command = decoder.decode();
assertThat( command.getCommandType(), is( commandType ) );
assertNull( command.getData() );
@@ -107,9 +109,9 @@ public class DefaultMasterProcessChannelDecoderTest
assertEquals( Void.class, commandType.getDataType() );
encoded = commandType.encode();
assertThat( new String( encoded ) )
- .isEqualTo( ":maven-surefire-std-out:bye-ack:" );
+ .isEqualTo( ":maven-surefire-command:bye-ack:" );
is = new ByteArrayInputStream( encoded );
- decoder = new DefaultMasterProcessChannelDecoder( is, null );
+ decoder = new LegacyMasterProcessChannelDecoder( is );
command = decoder.decode();
assertThat( command.getCommandType(), is( commandType ) );
assertNull( command.getData() );
@@ -122,9 +124,9 @@ public class DefaultMasterProcessChannelDecoderTest
public void testShouldDecodeTwoCommands() throws IOException
{
- String cmd = ":maven-surefire-std-out:bye-ack\n:maven-surefire-std-out:bye-ack:";
+ String cmd = ":maven-surefire-command:bye-ack\n:maven-surefire-command:bye-ack:";
InputStream is = new ByteArrayInputStream( cmd.getBytes() );
- DefaultMasterProcessChannelDecoder decoder = new DefaultMasterProcessChannelDecoder( is, null );
+ LegacyMasterProcessChannelDecoder decoder = new LegacyMasterProcessChannelDecoder( is );
Command command = decoder.decode();
assertThat( command.getCommandType() ).isEqualTo( BYE_ACK );
diff --git a/surefire-api/src/test/java/org/apache/maven/surefire/booter/ForkedChannelEncoderTest.java b/surefire-booter/src/test/java/org/apache/maven/surefire/booter/spi/LegacyMasterProcessChannelEncoderTest.java
similarity index 84%
rename from surefire-api/src/test/java/org/apache/maven/surefire/booter/ForkedChannelEncoderTest.java
rename to surefire-booter/src/test/java/org/apache/maven/surefire/booter/spi/LegacyMasterProcessChannelEncoderTest.java
index 1dcf4d9..eaafd6e 100644
--- a/surefire-api/src/test/java/org/apache/maven/surefire/booter/ForkedChannelEncoderTest.java
+++ b/surefire-booter/src/test/java/org/apache/maven/surefire/booter/spi/LegacyMasterProcessChannelEncoderTest.java
@@ -1,4 +1,4 @@
-package org.apache.maven.surefire.booter;
+package org.apache.maven.surefire.booter.spi;
/*
* Licensed to the Apache Software Foundation (ASF) under one
@@ -36,40 +36,41 @@ import java.util.Map;
import static java.nio.charset.StandardCharsets.UTF_8;
import static java.util.Arrays.copyOfRange;
+import static org.apache.maven.surefire.booter.spi.LegacyMasterProcessChannelEncoder.encode;
import static org.apache.maven.surefire.shared.codec.binary.Base64.encodeBase64String;
-import static org.apache.maven.surefire.booter.ForkedChannelEncoder.encode;
-import static org.apache.maven.surefire.booter.ForkedChannelEncoder.encodeHeader;
-import static org.apache.maven.surefire.booter.ForkedChannelEncoder.encodeMessage;
-import static org.apache.maven.surefire.booter.ForkedChannelEncoder.encodeOpcode;
+import static org.apache.maven.surefire.booter.spi.LegacyMasterProcessChannelEncoder.encodeHeader;
+import static org.apache.maven.surefire.booter.spi.LegacyMasterProcessChannelEncoder.encodeMessage;
+import static org.apache.maven.surefire.booter.spi.LegacyMasterProcessChannelEncoder.encodeOpcode;
import static org.apache.maven.surefire.booter.ForkedProcessEvent.BOOTERCODE_SYSPROPS;
-import static org.apache.maven.surefire.booter.ForkedProcessEvent.MAGIC_NUMBER;
+import static org.apache.maven.surefire.booter.ForkedProcessEvent.MAGIC_NUMBER_DELIMITED;
import static org.apache.maven.surefire.report.RunMode.NORMAL_RUN;
import static org.fest.assertions.Assertions.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
/**
- * Test for {@link ForkedChannelEncoder}.
+ * Test for {@link LegacyMasterProcessChannelEncoder}.
*
* @author <a href="mailto:tibordigana@apache.org">Tibor Digana (tibor17)</a>
* @since 3.0.0-M4
*/
-public class ForkedChannelEncoderTest
+public class LegacyMasterProcessChannelEncoderTest
{
private static final int ELAPSED_TIME = 102;
@Test
public void shouldBeFailSafe()
{
- assertThat( ForkedChannelEncoder.toBase64( null ) ).isEqualTo( "-" );
- assertThat( ForkedChannelEncoder.toBase64( "" ) ).isEqualTo( "" );
+ assertThat( LegacyMasterProcessChannelEncoder.toBase64( null ) ).isEqualTo( "-" );
+ assertThat( LegacyMasterProcessChannelEncoder.toBase64( "" ) ).isEqualTo( "" );
}
@Test
public void shouldHaveSystemProperty()
{
StringBuilder actualEncoded = encode( BOOTERCODE_SYSPROPS, NORMAL_RUN, "arg1", "arg2" );
- String expected = MAGIC_NUMBER + BOOTERCODE_SYSPROPS.getOpcode() + ":normal-run" + ":UTF-8:YXJnMQ==:YXJnMg==";
+ String expected = MAGIC_NUMBER_DELIMITED + BOOTERCODE_SYSPROPS.getOpcode()
+ + ":normal-run:UTF-8:YXJnMQ==:YXJnMg==";
assertThat( actualEncoded.toString() )
.isEqualTo( expected );
@@ -179,7 +180,7 @@ public class ForkedChannelEncoderTest
StringBuilder encode = encode( "X", "normal-run", reportEntry, false );
assertThat( encode.toString() )
- .isEqualTo( ":maven:surefire:std:out:X:normal-run:UTF-8:"
+ .isEqualTo( ":maven-surefire-event:X:normal-run:UTF-8:"
+ encodedSourceName
+ ":"
+ "-"
@@ -204,7 +205,7 @@ public class ForkedChannelEncoderTest
encode = encode( "X", "normal-run", reportEntry, true );
assertThat( encode.toString() )
- .isEqualTo( ":maven:surefire:std:out:X:normal-run:UTF-8:"
+ .isEqualTo( ":maven-surefire-event:X:normal-run:UTF-8:"
+ encodedSourceName
+ ":"
+ "-"
@@ -228,12 +229,12 @@ public class ForkedChannelEncoderTest
);
Stream out = Stream.newStream();
- ForkedChannelEncoder forkedChannelEncoder = new ForkedChannelEncoder( out );
+ LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( out );
- forkedChannelEncoder.testSetStarting( reportEntry, true );
+ encoder.testSetStarting( reportEntry, true );
LineNumberReader printedLines = out.newReader( UTF_8 );
assertThat( printedLines.readLine() )
- .isEqualTo( ":maven:surefire:std:out:testset-starting:normal-run:UTF-8:"
+ .isEqualTo( ":maven-surefire-event:testset-starting:normal-run:UTF-8:"
+ encodedSourceName
+ ":"
+ "-"
@@ -258,12 +259,12 @@ public class ForkedChannelEncoderTest
assertThat( printedLines.readLine() ).isNull();
out = Stream.newStream();
- forkedChannelEncoder = new ForkedChannelEncoder( out );
+ encoder = new LegacyMasterProcessChannelEncoder( out );
- forkedChannelEncoder.testSetStarting( reportEntry, false );
+ encoder.testSetStarting( reportEntry, false );
printedLines = out.newReader( UTF_8 );
assertThat( printedLines.readLine() )
- .isEqualTo( ":maven:surefire:std:out:testset-starting:normal-run:UTF-8:"
+ .isEqualTo( ":maven-surefire-event:testset-starting:normal-run:UTF-8:"
+ encodedSourceName
+ ":"
+ "-"
@@ -325,12 +326,12 @@ public class ForkedChannelEncoderTest
String encodedMessage = encodeBase64String( toArray( UTF_8.encode( reportEntry.getMessage() ) ) );
Stream out = Stream.newStream();
- ForkedChannelEncoder forkedChannelEncoder = new ForkedChannelEncoder( out );
+ LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( out );
- forkedChannelEncoder.testSetCompleted( reportEntry, false );
+ encoder.testSetCompleted( reportEntry, false );
LineNumberReader printedLines = out.newReader( UTF_8 );
assertThat( printedLines.readLine() )
- .isEqualTo( ":maven:surefire:std:out:testset-completed:normal-run:UTF-8:"
+ .isEqualTo( ":maven-surefire-event:testset-completed:normal-run:UTF-8:"
+ encodedSourceName
+ ":"
+ "-"
@@ -392,12 +393,12 @@ public class ForkedChannelEncoderTest
String encodedMessage = encodeBase64String( toArray( UTF_8.encode( reportEntry.getMessage() ) ) );
Stream out = Stream.newStream();
- ForkedChannelEncoder forkedChannelEncoder = new ForkedChannelEncoder( out );
+ LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( out );
- forkedChannelEncoder.testStarting( reportEntry, true );
+ encoder.testStarting( reportEntry, true );
LineNumberReader printedLines = out.newReader( UTF_8 );
assertThat( printedLines.readLine() )
- .isEqualTo( ":maven:surefire:std:out:test-starting:normal-run:UTF-8:"
+ .isEqualTo( ":maven-surefire-event:test-starting:normal-run:UTF-8:"
+ encodedSourceName
+ ":"
+ "-"
@@ -459,12 +460,12 @@ public class ForkedChannelEncoderTest
String encodedMessage = encodeBase64String( toArray( UTF_8.encode( reportEntry.getMessage() ) ) );
Stream out = Stream.newStream();
- ForkedChannelEncoder forkedChannelEncoder = new ForkedChannelEncoder( out );
+ LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( out );
- forkedChannelEncoder.testSucceeded( reportEntry, true );
+ encoder.testSucceeded( reportEntry, true );
LineNumberReader printedLines = out.newReader( UTF_8 );
assertThat( printedLines.readLine() )
- .isEqualTo( ":maven:surefire:std:out:test-succeeded:normal-run:UTF-8:"
+ .isEqualTo( ":maven-surefire-event:test-succeeded:normal-run:UTF-8:"
+ encodedSourceName
+ ":"
+ "-"
@@ -526,12 +527,12 @@ public class ForkedChannelEncoderTest
String encodedMessage = encodeBase64String( toArray( UTF_8.encode( reportEntry.getMessage() ) ) );
Stream out = Stream.newStream();
- ForkedChannelEncoder forkedChannelEncoder = new ForkedChannelEncoder( out );
+ LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( out );
- forkedChannelEncoder.testFailed( reportEntry, false );
+ encoder.testFailed( reportEntry, false );
LineNumberReader printedLines = out.newReader( UTF_8 );
assertThat( printedLines.readLine() )
- .isEqualTo( ":maven:surefire:std:out:test-failed:normal-run:UTF-8:"
+ .isEqualTo( ":maven-surefire-event:test-failed:normal-run:UTF-8:"
+ encodedSourceName
+ ":"
+ "-"
@@ -592,12 +593,12 @@ public class ForkedChannelEncoderTest
String encodedMessage = encodeBase64String( toArray( UTF_8.encode( reportEntry.getMessage() ) ) );
Stream out = Stream.newStream();
- ForkedChannelEncoder forkedChannelEncoder = new ForkedChannelEncoder( out );
+ LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( out );
- forkedChannelEncoder.testSkipped( reportEntry, false );
+ encoder.testSkipped( reportEntry, false );
LineNumberReader printedLines = out.newReader( UTF_8 );
assertThat( printedLines.readLine() )
- .isEqualTo( ":maven:surefire:std:out:test-skipped:normal-run:UTF-8:"
+ .isEqualTo( ":maven-surefire-event:test-skipped:normal-run:UTF-8:"
+ encodedSourceName
+ ":"
+ "-"
@@ -657,12 +658,12 @@ public class ForkedChannelEncoderTest
String encodedMessage = encodeBase64String( toArray( UTF_8.encode( reportEntry.getMessage() ) ) );
Stream out = Stream.newStream();
- ForkedChannelEncoder forkedChannelEncoder = new ForkedChannelEncoder( out );
+ LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( out );
- forkedChannelEncoder.testError( reportEntry, false );
+ encoder.testError( reportEntry, false );
LineNumberReader printedLines = out.newReader( UTF_8 );
assertThat( printedLines.readLine() )
- .isEqualTo( ":maven:surefire:std:out:test-error:normal-run:UTF-8:"
+ .isEqualTo( ":maven-surefire-event:test-error:normal-run:UTF-8:"
+ encodedSourceName
+ ":"
+ "-"
@@ -720,12 +721,12 @@ public class ForkedChannelEncoderTest
String encodedMessage = encodeBase64String( toArray( UTF_8.encode( reportEntry.getMessage() ) ) );
Stream out = Stream.newStream();
- ForkedChannelEncoder forkedChannelEncoder = new ForkedChannelEncoder( out );
+ LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( out );
- forkedChannelEncoder.testAssumptionFailure( reportEntry, false );
+ encoder.testAssumptionFailure( reportEntry, false );
LineNumberReader printedLines = out.newReader( UTF_8 );
assertThat( printedLines.readLine() )
- .isEqualTo( ":maven:surefire:std:out:test-assumption-failure:normal-run:UTF-8:"
+ .isEqualTo( ":maven-surefire-event:test-assumption-failure:normal-run:UTF-8:"
+ encodedSourceName
+ ":"
+ "-"
@@ -754,12 +755,12 @@ public class ForkedChannelEncoderTest
public void testBye() throws IOException
{
Stream out = Stream.newStream();
- ForkedChannelEncoder forkedChannelEncoder = new ForkedChannelEncoder( out );
+ LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( out );
- forkedChannelEncoder.bye();
+ encoder.bye();
LineNumberReader printedLines = out.newReader( UTF_8 );
assertThat( printedLines.readLine() )
- .isEqualTo( ":maven:surefire:std:out:bye" );
+ .isEqualTo( ":maven-surefire-event:bye" );
assertThat( printedLines.readLine() ).isNull();
}
@@ -767,12 +768,12 @@ public class ForkedChannelEncoderTest
public void testStopOnNextTest() throws IOException
{
Stream out = Stream.newStream();
- ForkedChannelEncoder forkedChannelEncoder = new ForkedChannelEncoder( out );
+ LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( out );
- forkedChannelEncoder.stopOnNextTest();
+ encoder.stopOnNextTest();
LineNumberReader printedLines = out.newReader( UTF_8 );
assertThat( printedLines.readLine() )
- .isEqualTo( ":maven:surefire:std:out:stop-on-next-test" );
+ .isEqualTo( ":maven-surefire-event:stop-on-next-test" );
assertThat( printedLines.readLine() ).isNull();
}
@@ -780,12 +781,12 @@ public class ForkedChannelEncoderTest
public void testAcquireNextTest() throws IOException
{
Stream out = Stream.newStream();
- ForkedChannelEncoder forkedChannelEncoder = new ForkedChannelEncoder( out );
+ LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( out );
- forkedChannelEncoder.acquireNextTest();
+ encoder.acquireNextTest();
LineNumberReader printedLines = out.newReader( UTF_8 );
assertThat( printedLines.readLine() )
- .isEqualTo( ":maven:surefire:std:out:next-test" );
+ .isEqualTo( ":maven-surefire-event:next-test" );
assertThat( printedLines.readLine() ).isNull();
}
@@ -794,38 +795,38 @@ public class ForkedChannelEncoderTest
{
StringBuilder encoded = encodeOpcode( "some-opcode", "normal-run" );
assertThat( encoded.toString() )
- .isEqualTo( ":maven:surefire:std:out:some-opcode:normal-run" );
+ .isEqualTo( ":maven-surefire-event:some-opcode:normal-run" );
encoded = encodeHeader( "some-opcode", "normal-run" );
assertThat( encoded.toString() )
- .isEqualTo( ":maven:surefire:std:out:some-opcode:normal-run:UTF-8" );
+ .isEqualTo( ":maven-surefire-event:some-opcode:normal-run:UTF-8" );
encoded = encodeMessage( "some-opcode", "normal-run", "msg" );
assertThat( encoded.toString() )
- .isEqualTo( ":maven:surefire:std:out:some-opcode:normal-run:UTF-8:msg" );
+ .isEqualTo( ":maven-surefire-event:some-opcode:normal-run:UTF-8:msg" );
Stream out = Stream.newStream();
- ForkedChannelEncoder encoder = new ForkedChannelEncoder( out );
+ LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( out );
encoded = encoder.print( "some-opcode", "msg" );
assertThat( encoded.toString() )
- .isEqualTo( ":maven:surefire:std:out:some-opcode:UTF-8:bXNn" );
+ .isEqualTo( ":maven-surefire-event:some-opcode:UTF-8:bXNn" );
encoded = encoder.print( "some-opcode", new String[] { null } );
assertThat( encoded.toString() )
- .isEqualTo( ":maven:surefire:std:out:some-opcode:UTF-8:-" );
+ .isEqualTo( ":maven-surefire-event:some-opcode:UTF-8:-" );
}
@Test
public void testConsoleInfo()
{
Stream out = Stream.newStream();
- ForkedChannelEncoder forkedChannelEncoder = new ForkedChannelEncoder( out );
+ LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( out );
- forkedChannelEncoder.consoleInfoLog( "msg" );
+ encoder.consoleInfoLog( "msg" );
String encoded = new String( out.toByteArray(), UTF_8 );
- String expected = ":maven:surefire:std:out:console-info-log:UTF-8:"
+ String expected = ":maven-surefire-event:console-info-log:UTF-8:"
+ encodeBase64String( toArray( UTF_8.encode( "msg" ) ) )
+ "\n";
@@ -837,13 +838,13 @@ public class ForkedChannelEncoderTest
public void testConsoleError()
{
Stream out = Stream.newStream();
- ForkedChannelEncoder forkedChannelEncoder = new ForkedChannelEncoder( out );
+ LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( out );
- forkedChannelEncoder.consoleErrorLog( "msg" );
+ encoder.consoleErrorLog( "msg" );
String encoded = new String( out.toByteArray(), UTF_8 );
- String expected = ":maven:surefire:std:out:console-error-log:UTF-8:"
+ String expected = ":maven-surefire-event:console-error-log:UTF-8:"
+ encodeBase64String( toArray( UTF_8.encode( "msg" ) ) )
+ "\n";
@@ -855,12 +856,12 @@ public class ForkedChannelEncoderTest
public void testConsoleErrorLog1() throws IOException
{
Stream out = Stream.newStream();
- ForkedChannelEncoder forkedChannelEncoder = new ForkedChannelEncoder( out );
+ LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( out );
- forkedChannelEncoder.consoleErrorLog( new Exception( "msg" ) );
+ encoder.consoleErrorLog( new Exception( "msg" ) );
LineNumberReader printedLines = out.newReader( UTF_8 );
assertThat( printedLines.readLine() )
- .startsWith( ":maven:surefire:std:out:console-error-log:UTF-8:bXNn:-:" );
+ .startsWith( ":maven-surefire-event:console-error-log:UTF-8:bXNn:-:" );
assertThat( printedLines.readLine() ).isNull();
}
@@ -868,12 +869,12 @@ public class ForkedChannelEncoderTest
public void testConsoleErrorLog2() throws IOException
{
Stream out = Stream.newStream();
- ForkedChannelEncoder forkedChannelEncoder = new ForkedChannelEncoder( out );
+ LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( out );
- forkedChannelEncoder.consoleErrorLog( "msg2", new Exception( "msg" ) );
+ encoder.consoleErrorLog( "msg2", new Exception( "msg" ) );
LineNumberReader printedLines = out.newReader( UTF_8 );
assertThat( printedLines.readLine() )
- .startsWith( ":maven:surefire:std:out:console-error-log:UTF-8:bXNnMg==:-:" );
+ .startsWith( ":maven-surefire-event:console-error-log:UTF-8:bXNnMg==:-:" );
assertThat( printedLines.readLine() ).isNull();
}
@@ -881,7 +882,7 @@ public class ForkedChannelEncoderTest
public void testConsoleErrorLog3() throws IOException
{
Stream out = Stream.newStream();
- ForkedChannelEncoder forkedChannelEncoder = new ForkedChannelEncoder( out );
+ LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( out );
StackTraceWriter stackTraceWriter = mock( StackTraceWriter.class );
when( stackTraceWriter.getThrowable() ).thenReturn( new SafeThrowable( "1" ) );
@@ -889,10 +890,10 @@ public class ForkedChannelEncoderTest
when( stackTraceWriter.writeTraceToString() ).thenReturn( "3" );
when( stackTraceWriter.writeTrimmedTraceToString() ).thenReturn( "4" );
- forkedChannelEncoder.consoleErrorLog( stackTraceWriter, true );
+ encoder.consoleErrorLog( stackTraceWriter, true );
LineNumberReader printedLines = out.newReader( UTF_8 );
assertThat( printedLines.readLine() )
- .startsWith( ":maven:surefire:std:out:console-error-log:UTF-8:MQ==:Mg==:NA==" );
+ .startsWith( ":maven-surefire-event:console-error-log:UTF-8:MQ==:Mg==:NA==" );
assertThat( printedLines.readLine() ).isNull();
}
@@ -900,13 +901,13 @@ public class ForkedChannelEncoderTest
public void testConsoleDebug()
{
Stream out = Stream.newStream();
- ForkedChannelEncoder forkedChannelEncoder = new ForkedChannelEncoder( out );
+ LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( out );
- forkedChannelEncoder.consoleDebugLog( "msg" );
+ encoder.consoleDebugLog( "msg" );
String encoded = new String( out.toByteArray(), UTF_8 );
- String expected = ":maven:surefire:std:out:console-debug-log:UTF-8:"
+ String expected = ":maven-surefire-event:console-debug-log:UTF-8:"
+ encodeBase64String( toArray( UTF_8.encode( "msg" ) ) )
+ "\n";
@@ -918,13 +919,13 @@ public class ForkedChannelEncoderTest
public void testConsoleWarning()
{
Stream out = Stream.newStream();
- ForkedChannelEncoder forkedChannelEncoder = new ForkedChannelEncoder( out );
+ LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( out );
- forkedChannelEncoder.consoleWarningLog( "msg" );
+ encoder.consoleWarningLog( "msg" );
String encoded = new String( out.toByteArray(), UTF_8 );
- String expected = ":maven:surefire:std:out:console-warning-log:UTF-8:"
+ String expected = ":maven-surefire-event:console-warning-log:UTF-8:"
+ encodeBase64String( toArray( UTF_8.encode( "msg" ) ) )
+ "\n";
@@ -936,11 +937,11 @@ public class ForkedChannelEncoderTest
public void testStdOutStream() throws IOException
{
Stream out = Stream.newStream();
- ForkedChannelEncoder forkedChannelEncoder = new ForkedChannelEncoder( out );
+ LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( out );
- forkedChannelEncoder.stdOut( "msg", false );
+ encoder.stdOut( "msg", false );
- String expected = ":maven:surefire:std:out:std-out-stream:normal-run:UTF-8:bXNn";
+ String expected = ":maven-surefire-event:std-out-stream:normal-run:UTF-8:bXNn";
LineNumberReader printedLines = out.newReader( UTF_8 );
assertThat( printedLines.readLine() )
@@ -953,11 +954,11 @@ public class ForkedChannelEncoderTest
public void testStdOutStreamLn() throws IOException
{
Stream out = Stream.newStream();
- ForkedChannelEncoder forkedChannelEncoder = new ForkedChannelEncoder( out );
+ LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( out );
- forkedChannelEncoder.stdOut( "msg", true );
+ encoder.stdOut( "msg", true );
- String expected = ":maven:surefire:std:out:std-out-stream-new-line:normal-run:UTF-8:bXNn";
+ String expected = ":maven-surefire-event:std-out-stream-new-line:normal-run:UTF-8:bXNn";
LineNumberReader printedLines = out.newReader( UTF_8 );
assertThat( printedLines.readLine() )
@@ -970,11 +971,11 @@ public class ForkedChannelEncoderTest
public void testStdErrStream() throws IOException
{
Stream out = Stream.newStream();
- ForkedChannelEncoder forkedChannelEncoder = new ForkedChannelEncoder( out );
+ LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( out );
- forkedChannelEncoder.stdErr( "msg", false );
+ encoder.stdErr( "msg", false );
- String expected = ":maven:surefire:std:out:std-err-stream:normal-run:UTF-8:bXNn";
+ String expected = ":maven-surefire-event:std-err-stream:normal-run:UTF-8:bXNn";
LineNumberReader printedLines = out.newReader( UTF_8 );
assertThat( printedLines.readLine() )
@@ -987,11 +988,11 @@ public class ForkedChannelEncoderTest
public void testStdErrStreamLn() throws IOException
{
Stream out = Stream.newStream();
- ForkedChannelEncoder forkedChannelEncoder = new ForkedChannelEncoder( out );
+ LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( out );
- forkedChannelEncoder.stdErr( "msg", true );
+ encoder.stdErr( "msg", true );
- String expected = ":maven:surefire:std:out:std-err-stream-new-line:normal-run:UTF-8:bXNn";
+ String expected = ":maven-surefire-event:std-err-stream-new-line:normal-run:UTF-8:bXNn";
LineNumberReader printedLines = out.newReader( UTF_8 );
assertThat( printedLines.readLine() )
@@ -1005,11 +1006,11 @@ public class ForkedChannelEncoderTest
public void shouldCountSameNumberOfSystemProperties() throws IOException
{
Stream out = Stream.newStream();
- ForkedChannelEncoder forkedChannelEncoder = new ForkedChannelEncoder( out );
+ LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( out );
Map<String, String> sysProps = ObjectUtils.systemProps();
int expectedSize = sysProps.size();
- forkedChannelEncoder.sendSystemProperties( sysProps );
+ encoder.sendSystemProperties( sysProps );
LineNumberReader printedLines = out.newReader( UTF_8 );
@@ -1017,7 +1018,7 @@ public class ForkedChannelEncoderTest
for ( String line; ( line = printedLines.readLine() ) != null; size++ )
{
assertThat( line )
- .startsWith( ":maven:surefire:std:out:sys-prop:normal-run:UTF-8:" );
+ .startsWith( ":maven-surefire-event:sys-prop:normal-run:UTF-8:" );
}
assertThat( size )
@@ -1029,17 +1030,17 @@ public class ForkedChannelEncoderTest
{
Stream out = Stream.newStream();
- ForkedChannelEncoder forkedChannelEncoder = new ForkedChannelEncoder( out );
+ LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( out );
StackTraceWriter stackTraceWriter = mock( StackTraceWriter.class );
when( stackTraceWriter.getThrowable() ).thenReturn( new SafeThrowable( "1" ) );
when( stackTraceWriter.smartTrimmedStackTrace() ).thenReturn( "2" );
when( stackTraceWriter.writeTraceToString() ).thenReturn( "3" );
when( stackTraceWriter.writeTrimmedTraceToString() ).thenReturn( "4" );
- forkedChannelEncoder.sendExitEvent( stackTraceWriter, false );
+ encoder.sendExitEvent( stackTraceWriter, false );
LineNumberReader printedLines = out.newReader( UTF_8 );
assertThat( printedLines.readLine() )
- .startsWith( ":maven:surefire:std:out:jvm-exit-error:UTF-8:MQ==:Mg==:Mw==" );
+ .startsWith( ":maven-surefire-event:jvm-exit-error:UTF-8:MQ==:Mg==:Mw==" );
}
@Test
@@ -1047,17 +1048,17 @@ public class ForkedChannelEncoderTest
{
Stream out = Stream.newStream();
- ForkedChannelEncoder forkedChannelEncoder = new ForkedChannelEncoder( out );
+ LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( out );
StackTraceWriter stackTraceWriter = mock( StackTraceWriter.class );
when( stackTraceWriter.getThrowable() ).thenReturn( new SafeThrowable( "1" ) );
when( stackTraceWriter.smartTrimmedStackTrace() ).thenReturn( "2" );
when( stackTraceWriter.writeTraceToString() ).thenReturn( "3" );
when( stackTraceWriter.writeTrimmedTraceToString() ).thenReturn( "4" );
- forkedChannelEncoder.sendExitEvent( stackTraceWriter, true );
+ encoder.sendExitEvent( stackTraceWriter, true );
LineNumberReader printedLines = out.newReader( UTF_8 );
assertThat( printedLines.readLine() )
- .startsWith( ":maven:surefire:std:out:jvm-exit-error:UTF-8:MQ==:Mg==:NA==" );
+ .startsWith( ":maven-surefire-event:jvm-exit-error:UTF-8:MQ==:Mg==:NA==" );
}
private static class Stream extends PrintStream
diff --git a/surefire-extensions-api/src/main/java/org/apache/maven/surefire/extensions/ForkNodeFactory.java b/surefire-extensions-api/src/main/java/org/apache/maven/surefire/extensions/ForkNodeFactory.java
index 3e0d6a6..db0e7b8 100644
--- a/surefire-extensions-api/src/main/java/org/apache/maven/surefire/extensions/ForkNodeFactory.java
+++ b/surefire-extensions-api/src/main/java/org/apache/maven/surefire/extensions/ForkNodeFactory.java
@@ -25,7 +25,7 @@ import java.io.IOException;
/**
* @author <a href="mailto:tibordigana@apache.org">Tibor Digana (tibor17)</a>
- * @since 3.0.0-M4
+ * @since 3.0.0-M5
*/
public interface ForkNodeFactory
{
diff --git a/surefire-extensions-spi/src/main/java/org/apache/maven/surefire/spi/MasterProcessChannelDecoderFactory.java b/surefire-extensions-spi/src/main/java/org/apache/maven/surefire/spi/MasterProcessChannelProcessorFactory.java
similarity index 51%
rename from surefire-extensions-spi/src/main/java/org/apache/maven/surefire/spi/MasterProcessChannelDecoderFactory.java
rename to surefire-extensions-spi/src/main/java/org/apache/maven/surefire/spi/MasterProcessChannelProcessorFactory.java
index 5b08d4d..989a52d 100644
--- a/surefire-extensions-spi/src/main/java/org/apache/maven/surefire/spi/MasterProcessChannelDecoderFactory.java
+++ b/surefire-extensions-spi/src/main/java/org/apache/maven/surefire/spi/MasterProcessChannelProcessorFactory.java
@@ -19,22 +19,44 @@ package org.apache.maven.surefire.spi;
* under the License.
*/
-import org.apache.maven.plugin.surefire.log.api.ConsoleLogger;
import org.apache.maven.surefire.providerapi.MasterProcessChannelDecoder;
+import org.apache.maven.surefire.providerapi.MasterProcessChannelEncoder;
+import java.io.Closeable;
import java.io.IOException;
/**
- * The SPI interface, a factory of decoders.
+ * The SPI interface, a factory of an encoder and a decoder.
*/
-public interface MasterProcessChannelDecoderFactory
+public interface MasterProcessChannelProcessorFactory extends Closeable
{
/**
+ * Evaluates the {@code channelConfig}.
+ *
+ * @param channelConfig a connection string used by the fork JVM
+ * @return {@code true} if {@code channelConfig} is applicable and thus this SPI is eligible in the fork
+ */
+ boolean canUse( String channelConfig );
+
+ /**
+ * Open a new connection.
+ *
+ * @param channelConfig e.g. "pipe://3" or "tcp://127.0.0.1:65035"
+ * @throws IOException if cannot connect
+ */
+ void connect( String channelConfig ) throws IOException;
+
+ /**
* Decoder factory method.
*
- * @param channelConfig "pipe:std:in" or "tcp://localhost:65035"
- * @param logger error logger
* @return a new instance of decoder
*/
- MasterProcessChannelDecoder createDecoder( String channelConfig, ConsoleLogger logger ) throws IOException;
+ MasterProcessChannelDecoder createDecoder() throws IOException;
+
+ /**
+ * Encoder factory method.
+ *
+ * @return a new instance of encoder
+ */
+ MasterProcessChannelEncoder createEncoder() throws IOException;
}