You are viewing a plain text version of this content. The canonical link for it is here.
Posted to surefire-commits@maven.apache.org by jv...@apache.org on 2005/12/12 07:30:48 UTC
svn commit: r356178 - in
/maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire:
ForkedSurefireRunner.java SurefireBooter.java
Author: jvanzyl
Date: Sun Dec 11 22:30:46 2005
New Revision: 356178
URL: http://svn.apache.org/viewcvs?rev=356178&view=rev
Log:
o bit messy but checking in so that john can give it a whirl
Modified:
maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/ForkedSurefireRunner.java
maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/SurefireBooter.java
Modified: maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/ForkedSurefireRunner.java
URL: http://svn.apache.org/viewcvs/maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/ForkedSurefireRunner.java?rev=356178&r1=356177&r2=356178&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/ForkedSurefireRunner.java (original)
+++ maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/ForkedSurefireRunner.java Sun Dec 11 22:30:46 2005
@@ -17,26 +17,35 @@
*/
import java.io.File;
+import java.io.FileInputStream;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.LinkedHashMap;
+import java.util.Iterator;
import java.util.List;
-import java.util.Map;
+import java.util.Properties;
/**
* This class is executed when SurefireBooter forks surefire JUnit processes
*
- * @author <a href="mailto:andyglick@acm.org">Andy Glick</a>
+ * @author Jason van Zyl
* @version $Id$
*/
public class ForkedSurefireRunner
{
- public static String FORK_ONCE = "once";
+ public static final String FORK_ONCE = "once";
- public static String FORK_PERTEST = "pertest";
+ public static final String FORK_PERTEST = "pertest";
- public static String FORK_NONE = "none";
+ public static final String FORK_NONE = "none";
+
+ public static final String SUREFIRE_PROPERTIES = "surefire.properties";
+
+ public static final String SYSTEM_PROPERTIES = "surefire-system.properties";
+
+ public static final String CLASSLOADER_PROPERTIES = "surefire-classloader.properties";
+
+ static String basedir;
static int TESTS_SUCCEEDED = 0;
@@ -46,34 +55,71 @@
static int OTHER_EXCEPTION = 200;
- private static Class thisClass = ForkedSurefireRunner.class;
-
private ForkedSurefireRunner()
{
super();
}
- /**
- * Constructs a Map from a set of strings of the form <key>=<value>
- *
- * @param args an array of strings composed of name/value pairs
- * @return Map keyed by the names with the respective values
- */
- private static Map getArgMap( String[] args )
+ private static Properties getSurefireProperties()
+ throws Exception
{
- Map argMap = new LinkedHashMap();
+ File f = new File( basedir, SUREFIRE_PROPERTIES );
+
+ f.deleteOnExit();
- for ( int i = 0; i < args.length; i++ )
+ Properties p = new Properties();
+
+ p.load( new FileInputStream( f ) );
+
+ return p;
+ }
+
+ private static void setSystemProperties()
+ throws Exception
+ {
+ File f = new File( basedir, SYSTEM_PROPERTIES );
+
+ f.deleteOnExit();
+
+ if ( !f.exists() )
{
- String[] mapArgs = args[i].split( "=" );
+ return;
+ }
- argMap.put( mapArgs[0], mapArgs[1] );
- System.out.println( "mapArgs[0] = " + mapArgs[0] );
- System.out.println( "mapArgs[1] = " + mapArgs[1] );
+ Properties p = new Properties();
+
+ p.load( new FileInputStream( f ) );
+
+ for ( Iterator i = p.keySet().iterator(); i.hasNext(); )
+ {
+ String key = (String) i.next();
+
+ System.setProperty( key, p.getProperty( key ) );
+ }
+ }
+
+ private static ClassLoader createClassLoader()
+ throws Exception
+ {
+ File f = new File( basedir, CLASSLOADER_PROPERTIES );
+
+ f.deleteOnExit();
+
+ Properties p = new Properties();
+
+ p.load( new FileInputStream( f ) );
+
+ IsolatedClassLoader classLoader = new IsolatedClassLoader( ClassLoader.getSystemClassLoader() );
+
+ for ( Iterator i = p.values().iterator(); i.hasNext(); )
+ {
+ String entry = (String) i.next();
+
+ classLoader.addURL( new File( entry ).toURL() );
}
- return argMap;
+ return classLoader;
}
/**
@@ -87,23 +133,25 @@
public static void main( String[] args )
throws Exception
{
- Map argMap = getArgMap( args );
+ ClassLoader classLoader = createClassLoader();
- ClassLoader surefireClassLoader = thisClass.getClassLoader();
+ setSystemProperties();
- String batteryExecutorName = (String) argMap.get( "batteryExecutorName" );
+ Properties p = getSurefireProperties();
- Class batteryExecutorClass = surefireClassLoader.loadClass( batteryExecutorName );
+ String batteryExecutorName = p.getProperty( "batteryExecutorName" );
+
+ Class batteryExecutorClass = classLoader.loadClass( batteryExecutorName );
Object batteryExecutor = batteryExecutorClass.newInstance();
- String reports = (String) argMap.get( "reportClassNames" );
+ String reports = p.getProperty( "reportClassNames" );
String[] reportClasses = reports.split( "," );
List reportList = Arrays.asList( reportClasses );
- String batteryConfig = (String) argMap.get( "batteryConfig" );
+ String batteryConfig = p.getProperty( "batteryConfig" );
String[] batteryParts = batteryConfig.split( "\\|" );
@@ -111,7 +159,7 @@
Object[] batteryParms;
- String forkMode = (String) argMap.get( "forkMode" );
+ String forkMode = p.getProperty( "forkMode" );
if ( forkMode.equals( FORK_ONCE ) )
{
@@ -166,7 +214,7 @@
batteryHolders.add( new Object[]{batteryClassName, batteryParms} );
- String reportsDirectory = (String) argMap.get( "reportsDirectory" );
+ String reportsDirectory = p.getProperty( "reportsDirectory" );
Method run = batteryExecutorClass.getMethod( "run", new Class[]{List.class, List.class, String.class} );
@@ -190,6 +238,8 @@
}
catch ( Exception e )
{
+ e.printStackTrace();
+
returnCode = OTHER_EXCEPTION;
}
Modified: maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/SurefireBooter.java
URL: http://svn.apache.org/viewcvs/maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/SurefireBooter.java?rev=356178&r1=356177&r2=356178&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/SurefireBooter.java (original)
+++ maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/SurefireBooter.java Sun Dec 11 22:30:46 2005
@@ -25,17 +25,15 @@
import java.io.BufferedReader;
import java.io.File;
+import java.io.FileOutputStream;
import java.io.StringReader;
import java.io.StringWriter;
import java.io.Writer;
import java.lang.reflect.Method;
-import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Properties;
-import java.util.Enumeration;
-import java.util.Arrays;
/**
* @author <a href="mailto:jason@maven.org">Jason van Zyl</a>
@@ -147,8 +145,6 @@
{
boolean result = false;
- System.out.println( ">>>>>>>>> forkMode = " + forkMode );
-
if ( forkMode.equals( ForkedSurefireRunner.FORK_NONE ) )
{
result = runTestsInProcess();
@@ -212,7 +208,9 @@
private boolean runTestsForkOnce()
throws Exception
{
- return fork( getForkOnceArgs() );
+ getForkOnceArgs();
+
+ return fork();
}
private boolean runTestsForkEach()
@@ -226,7 +224,9 @@
{
String testClass = (String) i.next();
- boolean result = fork( getForkPerTestArgs( testClass ) );
+ getForkPerTestArgs( testClass );
+
+ boolean result = fork();
if ( !result )
{
@@ -237,7 +237,7 @@
return noFailures;
}
- private boolean fork( String[] args )
+ private boolean fork()
throws Exception
{
File workingDirectory = new File( "." );
@@ -250,7 +250,13 @@
cli.setExecutable( jvm );
- cli.addArguments( args );
+ cli.createArgument().setValue( "-classpath" );
+
+ cli.createArgument().setValue( surefireBooterJar );
+
+ cli.createArgument().setValue( RUNNER );
+
+ cli.createArgument().setValue( basedir );
System.out.println( Commandline.toString( cli.getCommandline() ) );
@@ -328,67 +334,78 @@
return testClasses;
}
- private String[] getForkOnceArgs()
+ private void getForkOnceArgs()
throws Exception
{
- return getForkArgs( getStringArrayFromBatteries()[0] );
+ getForkArgs( getStringArrayFromBatteries()[0] );
}
- private String[] getForkPerTestArgs( String testClass )
+ private void getForkPerTestArgs( String testClass )
throws Exception
{
- return getForkArgs( SINGLE_TEST_BATTERY + "|" + testClass );
+ getForkArgs( SINGLE_TEST_BATTERY + "|" + testClass );
}
- private String[] getForkArgs( String batteryConfig )
+ private String surefireBooterJar;
+
+ private void getForkArgs( String batteryConfig )
throws Exception
{
String reportClassNames = getListOfStringsAsString( reports, "," );
- String classpathEntries = makeClasspath( classpathUrls );
+ Properties p = new Properties();
- List args = new ArrayList();
+ for ( int i = 0; i < classpathUrls.size(); i++ )
+ {
+ String entry = (String) classpathUrls.get( i );
+
+ // Exclude the surefire booter
+ if ( entry.indexOf( "surefire-booter" ) > 0 )
+ {
+ surefireBooterJar = entry;
+ }
+ else
+ {
+ p.setProperty( Integer.toString( i ), entry );
+ }
+
+ }
- args.add( "-classpath" );
+ FileOutputStream fos = new FileOutputStream( new File( basedir, ForkedSurefireRunner.CLASSLOADER_PROPERTIES ) );
- args.add( classpathEntries );
+ p.store( fos, "classpath entries" );
- // ----------------------------------------------------------------------
- // Add some system propeties
- // ----------------------------------------------------------------------
+ fos.close();
if ( systemProperties != null )
{
- Enumeration propertyKeys = systemProperties.propertyNames();
+ File f = new File( basedir, ForkedSurefireRunner.SYSTEM_PROPERTIES );
- while ( propertyKeys.hasMoreElements() )
- {
- String key = (String) propertyKeys.nextElement();
+ fos = new FileOutputStream( f );
- args.add( "-D" + key + "=" + systemProperties.getProperty( key ) );
- }
+ systemProperties.store( fos, "system properties" );
+
+ fos.close();
}
- args.add( RUNNER );
+ p = new Properties();
- args.add( "reportClassNames=" + reportClassNames );
+ p.setProperty( "reportClassNames", reportClassNames );
- args.add( "reportsDirectory=" + reportsDirectory );
+ p.setProperty( "reportsDirectory", reportsDirectory );
- args.add( "batteryExecutorName=" + BATTERY_EXECUTOR );
+ p.setProperty( "batteryExecutorName", BATTERY_EXECUTOR );
- args.add( "forkMode=" + forkMode );
+ p.setProperty( "forkMode", forkMode );
- args.add( "batteryConfig=" + batteryConfig );
+ p.setProperty( "batteryConfig", batteryConfig );
- String[] s = new String[args.size()];
+ fos = new FileOutputStream( new File( basedir, ForkedSurefireRunner.SUREFIRE_PROPERTIES ) );
- for ( int i = 0; i < s.length; i++ )
- {
- s[i] = (String) args.get( i );
- }
+ p.store( fos, "surefire properties" );
+
+ fos.close();
- return s;
}
public void reset()
@@ -398,22 +415,6 @@
reports.clear();
classpathUrls.clear();
- }
-
- private String makeClasspath( List list )
- {
- StringBuffer files = new StringBuffer();
-
- for ( Iterator i = list.iterator(); i.hasNext(); )
- {
- String classpathElement = (String) i.next();
-
- files.append( classpathElement );
-
- files.append( PS );
- }
-
- return files.toString();
}
private String quotedPathArgument( String value )