From 3f2ab68b248a8104053227b074221937f7ab3176 Mon Sep 17 00:00:00 2001 From: Olivier Lamy Date: Thu, 13 Jan 2011 15:27:34 +0100 Subject: [PATCH] [HUDSON-8415] M2 and M3 builds behave differently when tests fail --- .../maven/reporters/SurefireArchiver.java | 43 ++++++++++++--- .../maven/MavenBuildSurefireFailedTest.java | 52 ++++++++++++++++++ .../maven/maven-multimodule-unit-failure.zip | Bin 0 -> 7771 bytes 3 files changed, 86 insertions(+), 9 deletions(-) create mode 100755 test/src/test/java/hudson/maven/MavenBuildSurefireFailedTest.java create mode 100755 test/src/test/resources/hudson/maven/maven-multimodule-unit-failure.zip diff --git a/maven-plugin/src/main/java/hudson/maven/reporters/SurefireArchiver.java b/maven-plugin/src/main/java/hudson/maven/reporters/SurefireArchiver.java index 9f2076d865..41808da9d9 100644 --- a/maven-plugin/src/main/java/hudson/maven/reporters/SurefireArchiver.java +++ b/maven-plugin/src/main/java/hudson/maven/reporters/SurefireArchiver.java @@ -23,8 +23,8 @@ */ package hudson.maven.reporters; -import hudson.Util; import hudson.Extension; +import hudson.Util; import hudson.maven.Maven3Builder; import hudson.maven.MavenBuild; import hudson.maven.MavenBuildProxy; @@ -40,12 +40,6 @@ import hudson.model.BuildListener; import hudson.model.Result; import hudson.tasks.junit.TestResult; import hudson.tasks.test.TestResultProjectAction; -import org.apache.maven.plugin.MojoFailureException; -import org.apache.maven.project.MavenProject; -import org.apache.tools.ant.DirectoryScanner; -import org.apache.tools.ant.types.FileSet; -import org.codehaus.plexus.component.configurator.ComponentConfigurationException; -import org.codehaus.plexus.configuration.xml.XmlPlexusConfiguration; import java.io.File; import java.io.IOException; @@ -54,6 +48,16 @@ import java.util.Collections; import java.util.List; import java.util.ListIterator; +import org.apache.commons.lang.StringUtils; +import org.apache.maven.artifact.versioning.ComparableVersion; +import org.apache.maven.plugin.MojoFailureException; +import org.apache.maven.project.MavenProject; +import org.apache.tools.ant.DirectoryScanner; +import org.apache.tools.ant.types.FileSet; +import org.codehaus.plexus.component.configurator.ComponentConfigurationException; +import org.codehaus.plexus.configuration.xml.XmlPlexusConfiguration; +import org.codehaus.plexus.util.xml.Xpp3Dom; + /** * Records the surefire test result. * @author Kohsuke Kawaguchi @@ -68,8 +72,21 @@ public class SurefireArchiver extends MavenReporter { // so that we can record this as yellow. // note that because of the way Maven works, just updating system property at this point is too late XmlPlexusConfiguration c = (XmlPlexusConfiguration) mojo.configuration.getChild("testFailureIgnore"); - if(c!=null && c.getValue().equals("${maven.test.failure.ignore}") && System.getProperty("maven.test.failure.ignore")==null) - c.setValue("true"); + if(c!=null && c.getValue().equals("${maven.test.failure.ignore}") && System.getProperty("maven.test.failure.ignore")==null) { + if (maven3orLater( build.getMavenBuildInformation().getMavenVersion() )) { + String fieldName = "testFailureIgnore"; + if (mojo.mojoExecution.getConfiguration().getChild( fieldName ) != null) { + mojo.mojoExecution.getConfiguration().getChild( fieldName ).setValue( Boolean.TRUE.toString() ); + } else { + Xpp3Dom child = new Xpp3Dom( fieldName ); + child.setValue( Boolean.TRUE.toString() ); + mojo.mojoExecution.getConfiguration().addChild( child ); + } + + } else { + c.setValue(Boolean.TRUE.toString()); + } + } } } return true; @@ -212,6 +229,14 @@ public class SurefireArchiver extends MavenReporter { return true; } + + public boolean maven3orLater(String mavenVersion) { + // null or empty so false ! + if (StringUtils.isBlank( mavenVersion )) { + return false; + } + return new ComparableVersion (mavenVersion).compareTo( new ComparableVersion ("3.0") ) >= 0; + } @Extension public static final class DescriptorImpl extends MavenReporterDescriptor { diff --git a/test/src/test/java/hudson/maven/MavenBuildSurefireFailedTest.java b/test/src/test/java/hudson/maven/MavenBuildSurefireFailedTest.java new file mode 100755 index 0000000000..00e9132211 --- /dev/null +++ b/test/src/test/java/hudson/maven/MavenBuildSurefireFailedTest.java @@ -0,0 +1,52 @@ +package hudson.maven; + +import hudson.model.Result; +import hudson.tasks.Maven.MavenInstallation; + +import org.jvnet.hudson.test.Bug; +import org.jvnet.hudson.test.ExtractResourceSCM; +import org.jvnet.hudson.test.HudsonTestCase; + +/** + * @author Olivier Lamy + */ +public class MavenBuildSurefireFailedTest extends HudsonTestCase { + + @Bug(8415) + public void testMaven2Unstable() throws Exception { + configureDefaultMaven(); + MavenModuleSet m = createMavenProject(); + m.setGoals( "test" ); + m.setScm(new ExtractResourceSCM(getClass().getResource("maven-multimodule-unit-failure.zip"))); + assertBuildStatus(Result.UNSTABLE, m.scheduleBuild2(0).get()); + } + + @Bug(8415) + public void testMaven2Failed() throws Exception { + configureDefaultMaven(); + MavenModuleSet m = createMavenProject(); + m.setGoals( "test -Dmaven.test.failure.ignore=false" ); + m.setScm(new ExtractResourceSCM(getClass().getResource("maven-multimodule-unit-failure.zip"))); + assertBuildStatus(Result.FAILURE, m.scheduleBuild2(0).get()); + } + + @Bug(8415) + public void testMaven3Unstable() throws Exception { + MavenModuleSet m = createMavenProject(); + m.setMaven( configureMaven3().getName() ); + m.setGoals( "test" ); + m.setScm(new ExtractResourceSCM(getClass().getResource("maven-multimodule-unit-failure.zip"))); + assertBuildStatus(Result.UNSTABLE, m.scheduleBuild2(0).get()); + } + + @Bug(8415) + public void testMaven3Failed() throws Exception { + MavenModuleSet m = createMavenProject(); + m.setMaven( configureMaven3().getName() ); + m.setGoals( "test -Dmaven.test.failure.ignore=false" ); + m.setScm(new ExtractResourceSCM(getClass().getResource("maven-multimodule-unit-failure.zip"))); + assertBuildStatus(Result.FAILURE, m.scheduleBuild2(0).get()); + } + + +} diff --git a/test/src/test/resources/hudson/maven/maven-multimodule-unit-failure.zip b/test/src/test/resources/hudson/maven/maven-multimodule-unit-failure.zip new file mode 100755 index 0000000000000000000000000000000000000000..9d1d6207d4c281f9b172363ec1f6fee976695590 GIT binary patch literal 7771 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 AG5`Po literal 0 HcmV?d00001 -- GitLab