package hudson.drools; import java.io.PrintWriter; import java.util.Map; import org.drools.runtime.StatefulKnowledgeSession; import org.jvnet.hudson.test.FailureBuilder; import org.jvnet.hudson.test.HudsonTestCase.WebClient; import com.gargoylesoftware.htmlunit.html.HtmlAnchor; import com.gargoylesoftware.htmlunit.html.HtmlPage; import hudson.model.FreeStyleProject; import hudson.model.Result; import junit.framework.Assert; public class Staging1Test extends DroolsTestCase { private DroolsProject wf; private FreeStyleProject build; private FreeStyleProject test; private boolean deployScriptCalled; @Override protected void setUp() throws Exception { super.setUp(); wf = createProject("staging-1", "staging-1.rf"); build = hudson.createProject(FreeStyleProject.class, "Build"); test = hudson.createProject(FreeStyleProject.class, "Automated Test"); deployScriptCalled = false; DroolsManagement.getInstance().getScripts().add( new Script("DeployStagedRelease", "") { @Override public Map execute(StatefulKnowledgeSession session, PrintWriter output, Map<String, Object> parameters) throws Exception { deployScriptCalled = true; return super.execute(session, output, parameters); } }); } public void testWorkflowWithTestSuccess() throws Exception { wf.scheduleBuild(0); try { assertBuildResult(wf, Result.SUCCESS, 1); assertBuildResult(build, Result.SUCCESS, 1); assertBuildResult(test, Result.SUCCESS, 1); waitForWorkflowComplete(wf, 1); Assert.assertTrue(deployScriptCalled); } finally { // System.out.println(wf.getLastBuild().getLog()); } } public void testWorkflowTestFailureAccepted() throws Exception { test.getBuildersList().add(new FailureBuilder()); wf.scheduleBuild(0); assertBuildResult(wf, Result.SUCCESS, 1); assertBuildResult(build, Result.SUCCESS, 1); assertBuildResult(test, Result.FAILURE, 1); Assert.assertFalse(deployScriptCalled); Assert.assertFalse(wf.getLastBuild().isCompleted()); HtmlPage page = new WebClient().goTo(test.getLastBuild().getUrl()); ((HtmlAnchor) page.getElementById("drools_accept")).click(); Thread.sleep(500); Assert.assertTrue(wf.getLastBuild().isCompleted()); } public void testWorkflowTestFailureRestarted() throws Exception { test.getBuildersList().add(new FailureBuilder()); wf.scheduleBuild(0); try { assertBuildResult(wf, Result.SUCCESS, 1); assertBuildResult(build, Result.SUCCESS, 1); assertBuildResult(test, Result.FAILURE, 1); Assert.assertFalse(deployScriptCalled); Assert.assertFalse(wf.getLastBuild().isCompleted()); // fix build test.getBuildersList().clear(); HtmlPage page = new WebClient().goTo(test.getLastBuild().getUrl()); ((HtmlAnchor) page.getElementById("drools_restart")).click(); System.out.println(test.getBuilds()); assertBuildResult(test, Result.SUCCESS, 2); Assert.assertTrue(deployScriptCalled); Assert.assertTrue(wf.getLastBuild().isCompleted()); } finally { System.out.println(wf.getLastBuild().getLog()); } } }