package com.chikli.hudson.plugin.naginator; import hudson.Launcher; import hudson.model.AbstractBuild; import hudson.model.BuildListener; import hudson.model.FreeStyleBuild; import hudson.model.FreeStyleProject; import hudson.model.Result; import hudson.tasks.Builder; import java.io.IOException; import java.io.Serializable; import org.jvnet.hudson.test.HudsonTestCase; import static org.junit.Assert.*; public class NaginatorPublisherTest extends HudsonTestCase { private static final class MyBuilder extends Builder { private final String text; private final Result result; public MyBuilder(String text, Result result) { super(); this.text = text; this.result = result; } @Override public boolean perform(AbstractBuild<?, ?> build, Launcher launcher, BuildListener listener) throws InterruptedException, IOException { listener.getLogger().println(text); build.setResult(result); return true; } } public void testSuccessNoRebuild() throws Exception { assertEquals(null, getDescription("build log", Result.SUCCESS, "foo", false, false)); } public void testUnstableNoRebuild() throws Exception { assertEquals(null, getDescription("build log", Result.SUCCESS, "foo", false, false)); } public void testUnstableWithRebuild() throws Exception { assertEquals("rebuild", getDescription("build log", Result.UNSTABLE, "foo", true, false)); } public void testFailureWithRebuild() throws Exception { assertEquals("rebuild", getDescription("build log", Result.FAILURE, "foo", false, false)); } public void testFailureWithUnstableRebuild() throws Exception { assertEquals("rebuild", getDescription("build log", Result.FAILURE, "foo", true, false)); } public void testFailureWithoutRebuildRegexp() throws Exception { assertEquals(null, getDescription("build log", Result.FAILURE, "foo", false, true)); } public void testFailureWithRebuildRegexp() throws Exception { assertEquals("rebuild", getDescription("build log foo", Result.FAILURE, "foo", false, true)); } public void testUnstableWithoutRebuildRegexp() throws Exception { assertEquals(null, getDescription("build log", Result.UNSTABLE, "foo", true, true)); } public void testUnstableWithRebuildRegexp() throws Exception { assertEquals("rebuild", getDescription("build log foo", Result.UNSTABLE, "foo", true, true)); } private String getDescription(String buildLog, Result result, String regexpForRerun, boolean rerunIfUnstable, boolean checkRegexp) throws Exception { FreeStyleProject project = createFreeStyleProject(); project.getBuildersList().add(new MyBuilder(buildLog, result)); NaginatorPublisher nag = new NaginatorPublisher(regexpForRerun, rerunIfUnstable, checkRegexp); nag.setDebug(true); project.getPublishersList().add(nag); FreeStyleBuild build = project.scheduleBuild2(0).get(); return build.getDescription(); } }