Fixed ForkMode*IT on mvn 2.2.1 and in other non-embedded modes
Project: http://git-wip-us.apache.org/repos/asf/maven-surefire/repo Commit: http://git-wip-us.apache.org/repos/asf/maven-surefire/commit/4221437c Tree: http://git-wip-us.apache.org/repos/asf/maven-surefire/tree/4221437c Diff: http://git-wip-us.apache.org/repos/asf/maven-surefire/diff/4221437c Branch: refs/heads/master Commit: 4221437cb9a632c7a532bd613dc05e712c1d150d Parents: 2410d01 Author: Andreas Gudian <[email protected]> Authored: Fri Mar 22 22:11:30 2013 +0100 Committer: Andreas Gudian <[email protected]> Committed: Fri Mar 22 22:11:30 2013 +0100 ---------------------------------------------------------------------- .../org/apache/maven/surefire/its/ForkModeIT.java | 91 +++++++++------ .../resources/test-helper-dump-pid-plugin/pom.xml | 62 ++++++++++ .../plugins/surefire/dumppid/DumpPidMojo.java | 70 +++++++++++ 3 files changed, 188 insertions(+), 35 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/4221437c/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/ForkModeIT.java ---------------------------------------------------------------------- diff --git a/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/ForkModeIT.java b/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/ForkModeIT.java index 233a993..061c5a6 100644 --- a/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/ForkModeIT.java +++ b/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/ForkModeIT.java @@ -19,18 +19,21 @@ package org.apache.maven.surefire.its; * under the License. */ -import java.lang.management.ManagementFactory; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.fail; + import java.util.Arrays; import java.util.HashSet; import java.util.Set; -import org.apache.maven.surefire.its.fixture.*; +import org.apache.maven.surefire.its.fixture.OutputValidator; +import org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase; +import org.apache.maven.surefire.its.fixture.SurefireLauncher; +import org.apache.maven.surefire.its.fixture.TestFile; +import org.junit.BeforeClass; import org.junit.Test; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.fail; - /** * Test forkMode * @@ -39,13 +42,23 @@ import static org.junit.Assert.fail; public class ForkModeIT extends SurefireJUnit4IntegrationTestCase { + + private OutputValidator outputValidator; + + @BeforeClass + public static void installDumpPidPlugin() + throws Exception + { + unpack( ForkModeIT.class, "test-helper-dump-pid-plugin", "plugin" ).executeInstall(); + } + @Test public void testForkModeAlways() { String[] pids = doTest( unpack( getProject() ).setForkJvm().forkAlways() ); assertDifferentPids( pids ); - assertEndWith( pids, "_1_1", 3); - assertFalse( "pid 1 is not the same as the main process' pid", pids[0].equals( getMyPID() ) ); + assertEndWith( pids, "_1_1", 3 ); + assertFalse( "pid 1 is not the same as the main process' pid", pids[0].equals( getMainPID() ) ); } @Test @@ -53,8 +66,8 @@ public class ForkModeIT { String[] pids = doTest( unpack( getProject() ).setForkJvm().forkPerTest() ); assertDifferentPids( pids ); - assertEndWith( pids, "_1_1", 3); - assertFalse( "pid 1 is not the same as the main process' pid", pids[0].equals( getMyPID() ) ); + assertEndWith( pids, "_1_1", 3 ); + assertFalse( "pid 1 is not the same as the main process' pid", pids[0].equals( getMainPID() ) ); } @Test @@ -62,8 +75,8 @@ public class ForkModeIT { String[] pids = doTest( unpack( getProject() ).forkNever() ); assertSamePids( pids ); - assertEndWith( pids, "_1_1", 3); - assertEquals( "my pid is equal to pid 1 of the test", getMyPID(), pids[0] ); + assertEndWith( pids, "_1_1", 3 ); + assertEquals( "my pid is equal to pid 1 of the test", getMainPID(), pids[0] ); } @Test @@ -71,8 +84,8 @@ public class ForkModeIT { String[] pids = doTest( unpack( getProject() ).forkMode( "none" ) ); assertSamePids( pids ); - assertEndWith( pids, "_1_1", 3); - assertEquals( "my pid is equal to pid 1 of the test", getMyPID(), pids[0] ); + assertEndWith( pids, "_1_1", 3 ); + assertEquals( "my pid is equal to pid 1 of the test", getMainPID(), pids[0] ); } @Test @@ -80,16 +93,17 @@ public class ForkModeIT { String[] pids = doTest( unpack( getProject() ).setForkJvm().forkOncePerThread().threadCount( 1 ) ); assertSamePids( pids ); - assertEndWith( pids, "_1_1", 3); - assertFalse( "pid 1 is not the same as the main process' pid", pids[0].equals( getMyPID() ) ); + assertEndWith( pids, "_1_1", 3 ); + assertFalse( "pid 1 is not the same as the main process' pid", pids[0].equals( getMainPID() ) ); } @Test public void testForkModeOncePerThreadTwoThreads() { - String[] pids = doTest( unpack( getProject() ).forkOncePerThread().threadCount( 2 ).addGoal( "-DsleepLength=1200" ) ); + String[] pids = + doTest( unpack( getProject() ).forkOncePerThread().threadCount( 2 ).addGoal( "-DsleepLength=1200" ) ); assertDifferentPids( pids, 2 ); - assertFalse( "pid 1 is not the same as the main process' pid", pids[0].equals( getMyPID() ) ); + assertFalse( "pid 1 is not the same as the main process' pid", pids[0].equals( getMainPID() ) ); } @Test @@ -97,8 +111,8 @@ public class ForkModeIT { String[] pids = doTest( unpack( getProject() ).forkCount( 0 ) ); assertSamePids( pids ); - assertEndWith( pids, "_1_1", 3); - assertEquals( "my pid is equal to pid 1 of the test", getMyPID(), pids[0] ); + assertEndWith( pids, "_1_1", 3 ); + assertEquals( "my pid is equal to pid 1 of the test", getMainPID(), pids[0] ); } @Test @@ -106,8 +120,8 @@ public class ForkModeIT { String[] pids = doTest( unpack( getProject() ).setForkJvm().forkCount( 1 ).reuseForks( false ) ); assertDifferentPids( pids ); - assertEndWith( pids, "_1_1", 3); - assertFalse( "pid 1 is not the same as the main process' pid", pids[0].equals( getMyPID() ) ); + assertEndWith( pids, "_1_1", 3 ); + assertFalse( "pid 1 is not the same as the main process' pid", pids[0].equals( getMainPID() ) ); } @Test @@ -115,35 +129,39 @@ public class ForkModeIT { String[] pids = doTest( unpack( getProject() ).setForkJvm().forkCount( 1 ).reuseForks( true ) ); assertSamePids( pids ); - assertEndWith( pids, "_1_1", 3); - assertFalse( "pid 1 is not the same as the main process' pid", pids[0].equals( getMyPID() ) ); + assertEndWith( pids, "_1_1", 3 ); + assertFalse( "pid 1 is not the same as the main process' pid", pids[0].equals( getMainPID() ) ); } @Test public void testForkCountTwoNoReuse() { - String[] pids = doTest( unpack( getProject() ).forkCount( 2 ).reuseForks( false ).addGoal( "-DsleepLength=1200" ) ); + String[] pids = + doTest( unpack( getProject() ).forkCount( 2 ).reuseForks( false ).addGoal( "-DsleepLength=1200" ) ); assertDifferentPids( pids ); - assertFalse( "pid 1 is not the same as the main process' pid", pids[0].equals( getMyPID() ) ); + assertFalse( "pid 1 is not the same as the main process' pid", pids[0].equals( getMainPID() ) ); } @Test public void testForkCountTwoReuse() { - String[] pids = doTest( unpack( getProject() ).forkCount( 2 ).reuseForks( true ).addGoal( "-DsleepLength=1200" ) ); + String[] pids = + doTest( unpack( getProject() ).forkCount( 2 ).reuseForks( true ).addGoal( "-DsleepLength=1200" ) ); assertDifferentPids( pids, 2 ); - assertFalse( "pid 1 is not the same as the main process' pid", pids[0].equals( getMyPID() ) ); + assertFalse( "pid 1 is not the same as the main process' pid", pids[0].equals( getMainPID() ) ); } private void assertEndWith( String[] pids, String suffix, int expectedMatches ) { int matches = 0; - for (String pid : pids) { - if ( pid.endsWith( suffix )) { + for ( String pid : pids ) + { + if ( pid.endsWith( suffix ) ) + { matches++; } } - + assertEquals( "suffix " + suffix + " matched the correct number of pids", expectedMatches, matches ); } @@ -158,12 +176,14 @@ public class ForkModeIT { String[] pids = doTest( unpack( getProject() ).forkOnce() ); assertSamePids( pids ); - assertFalse( "pid 1 is not the same as the main process' pid", pids[0].equals( getMyPID() ) ); + assertFalse( "pid 1 is not the same as the main process' pid", pids[0].equals( getMainPID() ) ); } - private String getMyPID() + private String getMainPID() { - return ManagementFactory.getRuntimeMXBean().getName() + " testValue_1_1"; + final TestFile targetFile = outputValidator.getTargetFile( "maven.pid" ); + String pid = targetFile.slurpFile(); + return pid + " testValue_1_1"; } private void assertSamePids( String[] pids ) @@ -193,7 +213,8 @@ public class ForkModeIT private String[] doTest( SurefireLauncher forkMode ) { forkMode.sysProp( "testProperty", "testValue_${surefire.threadNumber}_${surefire.forkNumber}" ); - final OutputValidator outputValidator = forkMode.debugLogging().executeTest(); + forkMode.addGoal( "org.apache.maven.plugins.surefire:maven-dump-pid-plugin:dump-pid" ); + outputValidator = forkMode.executeTest(); outputValidator.verifyErrorFreeLog().assertTestSuiteResults( 3, 0, 0, 0 ); String[] pids = new String[3]; for ( int i = 1; i <= pids.length; i++ ) http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/4221437c/surefire-integration-tests/src/test/resources/test-helper-dump-pid-plugin/pom.xml ---------------------------------------------------------------------- diff --git a/surefire-integration-tests/src/test/resources/test-helper-dump-pid-plugin/pom.xml b/surefire-integration-tests/src/test/resources/test-helper-dump-pid-plugin/pom.xml new file mode 100644 index 0000000..26af45b --- /dev/null +++ b/surefire-integration-tests/src/test/resources/test-helper-dump-pid-plugin/pom.xml @@ -0,0 +1,62 @@ +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + + <groupId>org.apache.maven.plugins.surefire</groupId> + <artifactId>maven-dump-pid-plugin</artifactId> + <version>0.1</version> + <packaging>maven-plugin</packaging> + + <name>maven-dump-pid-plugin Maven Plugin</name> + <url>http://maven.apache.org</url> + + <properties> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + </properties> + + <dependencies> + <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven-plugin-api</artifactId> + <version>2.0.9</version> + </dependency> + <dependency> + <groupId>org.apache.maven.plugin-tools</groupId> + <artifactId>maven-plugin-annotations</artifactId> + <version>3.2</version> + </dependency> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>3.8.1</version> + <scope>test</scope> + </dependency> + </dependencies> + + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-plugin-plugin</artifactId> + <version>3.2</version> + <configuration> + <!-- see http://jira.codehaus.org/browse/MNG-5346 --> + <skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound> + </configuration> + <executions> + <execution> + <id>mojo-descriptor</id> + <goals> + <goal>descriptor</goal> + </goals> + </execution> + </executions> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-compiler-plugin</artifactId> + <version>2.5.1</version> + </plugin> + </plugins> + </build> +</project> http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/4221437c/surefire-integration-tests/src/test/resources/test-helper-dump-pid-plugin/src/main/java/org/apache/maven/plugins/surefire/dumppid/DumpPidMojo.java ---------------------------------------------------------------------- diff --git a/surefire-integration-tests/src/test/resources/test-helper-dump-pid-plugin/src/main/java/org/apache/maven/plugins/surefire/dumppid/DumpPidMojo.java b/surefire-integration-tests/src/test/resources/test-helper-dump-pid-plugin/src/main/java/org/apache/maven/plugins/surefire/dumppid/DumpPidMojo.java new file mode 100644 index 0000000..035976b --- /dev/null +++ b/surefire-integration-tests/src/test/resources/test-helper-dump-pid-plugin/src/main/java/org/apache/maven/plugins/surefire/dumppid/DumpPidMojo.java @@ -0,0 +1,70 @@ +package org.apache.maven.plugins.surefire.dumppid; + +/* + * Copyright 2001-2005 The Apache Software Foundation. + * + * Licensed 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 java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.lang.management.ManagementFactory; + +import org.apache.maven.plugin.AbstractMojo; +import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.plugins.annotations.LifecyclePhase; +import org.apache.maven.plugins.annotations.Mojo; +import org.apache.maven.plugins.annotations.Parameter; + +/** + * Goal dumps the PID of the maven process + */ +@Mojo( name = "dump-pid", defaultPhase = LifecyclePhase.GENERATE_TEST_RESOURCES ) +public class DumpPidMojo + extends AbstractMojo +{ + + @Parameter( defaultValue = "${project.build.directory}", property = "dumpPid.targetDir" ) + private File targetDir; + + public void execute() + throws MojoExecutionException + { + File target; + try + { + getLog().info( "Dumping PID to " + targetDir ); + + if ( !targetDir.exists() ) + { + targetDir.mkdirs(); + } + + target = new File( targetDir, "maven.pid" ).getCanonicalFile(); + + FileWriter fw = new FileWriter( target ); + String pid = ManagementFactory.getRuntimeMXBean().getName(); + fw.write( pid ); + fw.flush(); + fw.close(); + + getLog().info( "Wrote " + pid + " to " + target ); + + } + catch ( IOException e ) + { + throw new MojoExecutionException( "Unable to create pid file", e ); + } + } +}
