Repository: maven-surefire Updated Branches: refs/heads/SUREFIRE-1262 14191e51d -> bac0fb56a
[SUREFIRE-1262] Working example, though still with hardcoded values for IT. testOutputDirectory and packages still need to be resolved. Project: http://git-wip-us.apache.org/repos/asf/maven-surefire/repo Commit: http://git-wip-us.apache.org/repos/asf/maven-surefire/commit/bac0fb56 Tree: http://git-wip-us.apache.org/repos/asf/maven-surefire/tree/bac0fb56 Diff: http://git-wip-us.apache.org/repos/asf/maven-surefire/diff/bac0fb56 Branch: refs/heads/SUREFIRE-1262 Commit: bac0fb56a84bcf6af7b0fb8bd1e15be85378adcd Parents: 14191e5 Author: rfscholte <[email protected]> Authored: Mon Sep 4 22:32:22 2017 +0200 Committer: rfscholte <[email protected]> Committed: Mon Sep 4 22:32:22 2017 +0200 ---------------------------------------------------------------------- .../plugin/surefire/AbstractSurefireMojo.java | 100 ++++++++++--------- .../booterclient/ForkConfiguration.java | 76 ++++++++------ .../booterclient/ForkConfigurationTest.java | 10 +- .../surefire/booter/ClasspathConfiguration.java | 13 ++- 4 files changed, 116 insertions(+), 83 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/bac0fb56/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java ---------------------------------------------------------------------- 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 357c653..abf6bb5 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 @@ -1,6 +1,41 @@ // CHECKSTYLE_OFF: FileLength|RegexpHeader package org.apache.maven.plugin.surefire; +import static java.lang.Thread.currentThread; +import static org.apache.commons.lang3.JavaVersion.JAVA_1_7; +import static org.apache.commons.lang3.SystemUtils.IS_OS_WINDOWS; +import static org.apache.commons.lang3.SystemUtils.isJavaVersionAtLeast; +import static org.apache.maven.shared.utils.StringUtils.capitalizeFirstLetter; +import static org.apache.maven.shared.utils.StringUtils.isEmpty; +import static org.apache.maven.shared.utils.StringUtils.isNotBlank; +import static org.apache.maven.shared.utils.StringUtils.split; +import static org.apache.maven.surefire.suite.RunResult.failure; +import static org.apache.maven.surefire.suite.RunResult.noTestsRun; +import static org.apache.maven.surefire.util.ReflectionUtils.invokeGetter; +import static org.apache.maven.surefire.util.ReflectionUtils.invokeStaticMethod; +import static org.apache.maven.surefire.util.ReflectionUtils.tryLoadClass; + +import java.io.File; +import java.io.IOException; +import java.lang.reflect.Array; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Properties; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; + +import javax.annotation.Nonnull; + /* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file @@ -83,39 +118,6 @@ import org.codehaus.plexus.languages.java.jpms.LocationManager; import org.codehaus.plexus.languages.java.jpms.ResolvePathsRequest; import org.codehaus.plexus.languages.java.jpms.ResolvePathsResult; -import javax.annotation.Nonnull; -import java.io.File; -import java.io.IOException; -import java.lang.reflect.Array; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.HashSet; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Properties; -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; - -import static java.lang.Thread.currentThread; -import static org.apache.commons.lang3.JavaVersion.JAVA_1_7; -import static org.apache.commons.lang3.SystemUtils.IS_OS_WINDOWS; -import static org.apache.commons.lang3.SystemUtils.isJavaVersionAtLeast; -import static org.apache.maven.shared.utils.StringUtils.capitalizeFirstLetter; -import static org.apache.maven.shared.utils.StringUtils.isEmpty; -import static org.apache.maven.shared.utils.StringUtils.isNotBlank; -import static org.apache.maven.shared.utils.StringUtils.split; -import static org.apache.maven.surefire.suite.RunResult.failure; -import static org.apache.maven.surefire.suite.RunResult.noTestsRun; -import static org.apache.maven.surefire.util.ReflectionUtils.invokeGetter; -import static org.apache.maven.surefire.util.ReflectionUtils.invokeStaticMethod; -import static org.apache.maven.surefire.util.ReflectionUtils.tryLoadClass; - /** * Abstract base class for running tests using Surefire. * @@ -1094,7 +1096,7 @@ public abstract class AbstractSurefireMojo createCopyAndReplaceForkNumPlaceholder( effectiveProperties, 1 ).copyToSystemProperties(); InPluginVMSurefireStarter surefireStarter = - createInprocessStarter( provider, classLoaderConfiguration, runOrderParameters ); + createInprocessStarter( provider, classLoaderConfiguration, runOrderParameters, scanResult ); return surefireStarter.runSuitesInProcess( scanResult ); } else @@ -1110,7 +1112,7 @@ public abstract class AbstractSurefireMojo try { forkStarter = createForkStarter( provider, forkConfiguration, classLoaderConfiguration, - runOrderParameters, getConsoleLogger() ); + runOrderParameters, scanResult, getConsoleLogger() ); return forkStarter.run( effectiveProperties, scanResult ); } @@ -1637,7 +1639,8 @@ public abstract class AbstractSurefireMojo } StartupConfiguration createStartupConfiguration( ProviderInfo provider, - ClassLoaderConfiguration classLoaderConfiguration ) + ClassLoaderConfiguration classLoaderConfiguration, + DefaultScanResult scanResult ) throws MojoExecutionException, MojoFailureException { try @@ -1680,9 +1683,12 @@ public abstract class AbstractSurefireMojo Classpath testClasspath = new Classpath( result.getClasspathElements() ); Classpath testModulepath = new Classpath( result.getModulepathElements().keySet() ); + Collection<String> packages = null; + classpathConfiguration = new ClasspathConfiguration( testClasspath, testModulepath, providerClasspath, inprocClassPath, - moduleDescriptor, effectiveIsEnableAssertions(), isChildDelegation() ); + moduleDescriptor, packages, effectiveIsEnableAssertions(), + isChildDelegation() ); getConsoleLogger().debug( testClasspath.getLogMessage( "test-classpath" ) ); getConsoleLogger().debug( testModulepath.getLogMessage( "test-modulepath" ) ); @@ -1966,11 +1972,13 @@ public abstract class AbstractSurefireMojo } private ForkStarter createForkStarter( ProviderInfo provider, ForkConfiguration forkConfiguration, - ClassLoaderConfiguration classLoaderConfiguration, - RunOrderParameters runOrderParameters, ConsoleLogger log ) + ClassLoaderConfiguration classLoaderConfiguration, + RunOrderParameters runOrderParameters, DefaultScanResult scanResult, + ConsoleLogger log ) throws MojoExecutionException, MojoFailureException { - StartupConfiguration startupConfiguration = createStartupConfiguration( provider, classLoaderConfiguration ); + StartupConfiguration startupConfiguration = + createStartupConfiguration( provider, classLoaderConfiguration, scanResult ); String configChecksum = getConfigChecksum(); StartupReportConfiguration startupReportConfiguration = getStartupReportConfiguration( configChecksum ); ProviderConfiguration providerConfiguration = createProviderConfiguration( runOrderParameters ); @@ -1979,16 +1987,18 @@ public abstract class AbstractSurefireMojo } private InPluginVMSurefireStarter createInprocessStarter( ProviderInfo provider, - ClassLoaderConfiguration classLoaderConfiguration, - RunOrderParameters runOrderParameters ) + ClassLoaderConfiguration classLoaderConfiguration, + RunOrderParameters runOrderParameters, + DefaultScanResult scanResult ) throws MojoExecutionException, MojoFailureException { - StartupConfiguration startupConfiguration = createStartupConfiguration( provider, classLoaderConfiguration ); + StartupConfiguration startupConfiguration = + createStartupConfiguration( provider, classLoaderConfiguration, scanResult ); String configChecksum = getConfigChecksum(); StartupReportConfiguration startupReportConfiguration = getStartupReportConfiguration( configChecksum ); ProviderConfiguration providerConfiguration = createProviderConfiguration( runOrderParameters ); - return new InPluginVMSurefireStarter( startupConfiguration, providerConfiguration, - startupReportConfiguration, consoleLogger ); + return new InPluginVMSurefireStarter( startupConfiguration, providerConfiguration, startupReportConfiguration, + consoleLogger ); } protected ForkConfiguration getForkConfiguration() http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/bac0fb56/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/ForkConfiguration.java ---------------------------------------------------------------------- diff --git a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/ForkConfiguration.java b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/ForkConfiguration.java index ce38be4..419c771 100644 --- a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/ForkConfiguration.java +++ b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/ForkConfiguration.java @@ -39,6 +39,7 @@ import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; +import java.util.Collection; import java.util.Collections; import java.util.Iterator; import java.util.List; @@ -155,6 +156,7 @@ public class ForkConfiguration return createCommandLine( classPath, testModulePath != null ? testModulePath.getClassPath() : null, startupConfiguration.getClasspathConfiguration().getModuleDescriptor(), + startupConfiguration.getClasspathConfiguration().getPackages(), startupConfiguration.getClassLoaderConfiguration().isManifestOnlyJarRequestedAndUsable(), startupConfiguration.isShadefire(), startupConfiguration.isProviderMainClass() ? startupConfiguration.getActualClassName() @@ -162,7 +164,8 @@ public class ForkConfiguration } OutputStreamFlushableCommandline createCommandLine( List<String> classPath, List<String> modulePath, - File moduleDescriptor, boolean useJar, boolean shadefire, + File moduleDescriptor, Collection<String> packages, + boolean useJar, boolean shadefire, String providerThatHasMainMethod, int threadNumber ) throws SurefireBooterForkException { @@ -192,7 +195,8 @@ public class ForkConfiguration { try { - File argsFile = createArgsFile( moduleDescriptor, classPath, providerThatHasMainMethod ); + File argsFile = + createArgsFile( moduleDescriptor, modulePath, classPath, packages, providerThatHasMainMethod ); cli.createArg().setValue( "@" + escapeToPlatformPath( argsFile.getAbsolutePath() ) ); } @@ -341,7 +345,8 @@ public class ForkConfiguration } } - private File createArgsFile( File moduleDescriptor, List<String> classPath, String startClassName ) + private File createArgsFile( File moduleDescriptor, List<String> modulePath, List<String> classPath, + Collection<String> packages, String startClassName ) throws IOException { File file = File.createTempFile( "surefireargs", "", tempDirectory ); @@ -358,49 +363,56 @@ public class ForkConfiguration final String ps = System.getProperty( "path.separator" ); writer = new BufferedWriter( new FileWriter( file ) ); - - writer.write( "--module-path" ); - writer.newLine(); - - for ( String cpEntry : classPath ) + + if ( modulePath != null && !modulePath.isEmpty() ) { - writer.append( cpEntry ).append( ps ); + writer.write( "--module-path" ); + writer.newLine(); + + for ( String mp : modulePath ) + { + writer.append( mp ).append( ps ); + } + writer.newLine(); } - writer.newLine(); - + + if ( classPath != null && !classPath.isEmpty() ) + { + writer.write( "--class-path" ); + writer.newLine(); + + for ( String cp : classPath ) + { + writer.append( cp ).append( ps ); + } + writer.newLine(); + } + writer.write( "--patch-module" ); writer.newLine(); - - // @TODO use testClassesDirectory - writer.append( moduleName ).append( '=' ).append( "target/classes" ); + writer.append( moduleName ).append( '=' ).append( "target/test-classes" ); writer.newLine(); + + for ( String pckg : Collections.singletonList( "com.app" ) ) + { + writer.write( "--add-exports" ); + writer.newLine(); + writer.append( moduleName ).append( '/' ).append( pckg ).append( '=' ).append( "ALL-UNNAMED" ); + writer.newLine(); + } writer.write( "--add-modules" ); writer.newLine(); - - writer.write( moduleName ); + writer.append( moduleName ); writer.newLine(); - + writer.write( "--add-reads" ); writer.newLine(); - - writer.append( moduleName ).append( '=' ).append( "surefire.booter" ); + writer.append( moduleName ).append( '=' ).append( "ALL-UNNAMED" ); writer.newLine(); - // foreach package - for ( String pckg : Collections.singletonList( moduleName ) ) - { - writer.write( "--add-exports" ); - writer.newLine(); - - writer.append( moduleName ).append( '/' ).append( pckg ).append( '=' ).append( "surefire.booter" ); - writer.newLine(); - } - - writer.write( "-m" ); + writer.write( startClassName ); writer.newLine(); - - writer.append( "surefire.booter" ).append( '/' ).append( startClassName ); } finally { http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/bac0fb56/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/ForkConfigurationTest.java ---------------------------------------------------------------------- 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 836f198..de1f012 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 @@ -45,7 +45,7 @@ public class ForkConfigurationTest File cpElement = getTempClasspathFile(); Commandline cli = - config.createCommandLine( Collections.singletonList( cpElement.getAbsolutePath() ), null, null, true, false, null, 1 ); + config.createCommandLine( Collections.singletonList( cpElement.getAbsolutePath() ), null, null, null, true, false, null, 1 ); String line = StringUtils.join( cli.getCommandline(), " " ); assertTrue( line.contains( "-jar" ) ); @@ -59,7 +59,7 @@ public class ForkConfigurationTest ForkConfiguration forkConfiguration = getForkConfiguration( "abc\ndef", null ); final Commandline commandLine = - forkConfiguration.createCommandLine( Collections.singletonList( cpElement.getAbsolutePath() ), null, null, false, false, + forkConfiguration.createCommandLine( Collections.singletonList( cpElement.getAbsolutePath() ), null, null, null, false, false, null, 1 ); assertTrue( commandLine.toString().contains( "abc def" ) ); } @@ -76,7 +76,7 @@ public class ForkConfigurationTest File cwd = new File( baseDir, "fork_${surefire.forkNumber}" ); ForkConfiguration config = getForkConfiguration( null, "java", cwd.getCanonicalFile() ); - Commandline commandLine = config.createCommandLine( Collections.<String>emptyList(), null, null, true, false, null, 1 ); + Commandline commandLine = config.createCommandLine( Collections.<String>emptyList(), null, null, null, true, false, null, 1 ); File forkDirectory = new File( baseDir, "fork_1" ); forkDirectory.deleteOnExit(); @@ -101,7 +101,7 @@ public class ForkConfigurationTest try { - config.createCommandLine( Collections.<String>emptyList(), null, null, true, false, null, 1 ); + config.createCommandLine( Collections.<String>emptyList(), null, null, null, true, false, null, 1 ); } catch ( SurefireBooterForkException sbfe ) { @@ -130,7 +130,7 @@ public class ForkConfigurationTest try { - config.createCommandLine( Collections.<String>emptyList(), null, null, true, false, null, 1 ); + config.createCommandLine( Collections.<String>emptyList(), null, null, null, true, false, null, 1 ); } catch ( SurefireBooterForkException sbfe ) { http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/bac0fb56/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ClasspathConfiguration.java ---------------------------------------------------------------------- diff --git a/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ClasspathConfiguration.java b/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ClasspathConfiguration.java index 397955c..74c76b3 100644 --- a/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ClasspathConfiguration.java +++ b/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ClasspathConfiguration.java @@ -20,6 +20,7 @@ package org.apache.maven.surefire.booter; */ import java.io.File; +import java.util.Collection; /** * Represents the classpaths for the BooterConfiguration. @@ -46,6 +47,8 @@ public class ClasspathConfiguration private final Classpath modulepathUrls; private final File moduleDescriptor; + + private final Collection<String> packages; /** * The surefire classpath to use when invoking in-process with the plugin @@ -84,10 +87,12 @@ public class ClasspathConfiguration this.surefireClasspathUrls = surefireClassPathUrls; this.moduleDescriptor = null; this.modulepathUrls = null; + this.packages = null; } public ClasspathConfiguration( Classpath testClasspath, Classpath testModulepath, Classpath surefireClassPathUrls, - Classpath inprocClasspath, File moduleDescriptor, boolean enableAssertions, + Classpath inprocClasspath, File moduleDescriptor, Collection<String> packages, + boolean enableAssertions, boolean childDelegation ) { this.enableAssertions = enableAssertions; @@ -97,6 +102,7 @@ public class ClasspathConfiguration this.modulepathUrls = testModulepath; this.surefireClasspathUrls = surefireClassPathUrls; this.moduleDescriptor = moduleDescriptor; + this.packages = packages; } public ClassLoader createMergedClassLoader() @@ -142,4 +148,9 @@ public class ClasspathConfiguration { return childDelegation; } + + public Collection<String> getPackages() + { + return packages; + } }
