You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by rf...@apache.org on 2017/09/04 20:32:32 UTC

maven-surefire git commit: [SUREFIRE-1262] Working example, though still with hardcoded values for IT. testOutputDirectory and packages still need to be resolved.

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 <rf...@apache.org>
Authored: Mon Sep 4 22:32:22 2017 +0200
Committer: rfscholte <rf...@apache.org>
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;
+    }
 }