From 042a4cd8a4137b28e881df5fbbf017e9fdd1a1c9 Mon Sep 17 00:00:00 2001 From: Mikko Peltonen Date: Wed, 9 Feb 2011 18:44:51 +0200 Subject: [PATCH] Add test cases for JENKINS-8054 --- .../org/jvnet/hudson/test/HudsonTestCase.java | 36 +++++++++++++++++++ .../hudson/maven/AbortedMavenBuildTest.java | 34 ++++++++++++++++++ .../model/AbortedFreeStyleBuildTest.java | 28 +++++++++++++++ 3 files changed, 98 insertions(+) create mode 100644 test/src/test/java/hudson/maven/AbortedMavenBuildTest.java create mode 100644 test/src/test/java/hudson/model/AbortedFreeStyleBuildTest.java diff --git a/test/src/main/java/org/jvnet/hudson/test/HudsonTestCase.java b/test/src/main/java/org/jvnet/hudson/test/HudsonTestCase.java index 2fba0401a9..3941f29be4 100644 --- a/test/src/main/java/org/jvnet/hudson/test/HudsonTestCase.java +++ b/test/src/main/java/org/jvnet/hudson/test/HudsonTestCase.java @@ -36,6 +36,8 @@ import hudson.security.GroupDetails; import hudson.security.SecurityRealm; import hudson.slaves.ComputerConnector; import hudson.tasks.Builder; +import hudson.tasks.BuildWrapper; +import hudson.tasks.BuildWrapperDescriptor; import hudson.tasks.Publisher; import hudson.tools.ToolProperty; import hudson.remoting.Which; @@ -96,6 +98,7 @@ import javax.servlet.ServletContextEvent; import junit.framework.TestCase; +import net.sf.json.JSONObject; import net.sourceforge.htmlunit.corejs.javascript.Context; import net.sourceforge.htmlunit.corejs.javascript.ContextFactory.Listener; import org.acegisecurity.AuthenticationException; @@ -1689,4 +1692,37 @@ public abstract class HudsonTestCase extends TestCase implements RootAction { // this also prevents tests from falsely advertising Hudson DNSMultiCast.disabled = true; } + + public static class TestBuildWrapper extends BuildWrapper { + public Result buildResultInTearDown; + + @Override + public Environment setUp(AbstractBuild build, Launcher launcher, BuildListener listener) throws IOException, InterruptedException { + return new BuildWrapper.Environment() { + @Override + public boolean tearDown(AbstractBuild build, BuildListener listener) throws IOException, InterruptedException { + buildResultInTearDown = build.getResult(); + return true; + } + }; + } + + @Extension + public static class TestBuildWrapperDescriptor extends BuildWrapperDescriptor { + @Override + public boolean isApplicable(AbstractProject project) { + return true; + } + + @Override + public BuildWrapper newInstance(StaplerRequest req, JSONObject formData) { + throw new UnsupportedOperationException(); + } + + @Override + public String getDisplayName() { + return this.getClass().getName(); + } + } + } } diff --git a/test/src/test/java/hudson/maven/AbortedMavenBuildTest.java b/test/src/test/java/hudson/maven/AbortedMavenBuildTest.java new file mode 100644 index 0000000000..fdae111fdc --- /dev/null +++ b/test/src/test/java/hudson/maven/AbortedMavenBuildTest.java @@ -0,0 +1,34 @@ +package hudson.maven; + +import hudson.Launcher; +import hudson.model.BuildListener; +import hudson.model.Result; +import hudson.model.Run; +import org.jvnet.hudson.test.Bug; +import org.jvnet.hudson.test.ExtractResourceSCM; +import org.jvnet.hudson.test.HudsonTestCase; + +import java.io.IOException; + +public class AbortedMavenBuildTest extends HudsonTestCase { + @Bug(8054) + public void testBuildWrapperSeesAbortedStatus() throws Exception { + configureDefaultMaven(); + MavenModuleSet project = createMavenProject(); + TestBuildWrapper wrapper = new TestBuildWrapper(); + project.getBuildWrappersList().add(wrapper); + project.getReporters().add(new AbortingReporter()); + project.setGoals("clean"); + project.setScm(new ExtractResourceSCM(getClass().getResource("maven-empty-mod.zip"))); + Run build = project.scheduleBuild2(0).get(); + assertEquals(Result.ABORTED, build.getResult()); + assertEquals(Result.ABORTED, wrapper.buildResultInTearDown); + } + + private static class AbortingReporter extends MavenReporter { + @Override + public boolean end(MavenBuild build, Launcher launcher, BuildListener listener) throws InterruptedException, IOException { + throw new InterruptedException(); + } + } +} diff --git a/test/src/test/java/hudson/model/AbortedFreeStyleBuildTest.java b/test/src/test/java/hudson/model/AbortedFreeStyleBuildTest.java new file mode 100644 index 0000000000..49ce5352ba --- /dev/null +++ b/test/src/test/java/hudson/model/AbortedFreeStyleBuildTest.java @@ -0,0 +1,28 @@ +package hudson.model; + +import hudson.Launcher; +import org.jvnet.hudson.test.Bug; +import org.jvnet.hudson.test.HudsonTestCase; +import org.jvnet.hudson.test.TestBuilder; + +import java.io.IOException; + +public class AbortedFreeStyleBuildTest extends HudsonTestCase { + @Bug(8054) + public void testBuildWrapperSeesAbortedStatus() throws Exception { + FreeStyleProject project = createFreeStyleProject(); + TestBuildWrapper wrapper = new TestBuildWrapper(); + project.getBuildWrappersList().add(wrapper); + project.getBuildersList().add(new AbortingBuilder()); + Run build = project.scheduleBuild2(0).get(); + assertEquals(Result.ABORTED, build.getResult()); + assertEquals(Result.ABORTED, wrapper.buildResultInTearDown); + } + + private static class AbortingBuilder extends TestBuilder { + @Override + public boolean perform(AbstractBuild build, Launcher launcher, BuildListener listener) throws InterruptedException, IOException { + throw new InterruptedException(); + } + } +} -- GitLab