package hudson.drools; import hudson.model.FreeStyleProject; import hudson.model.Result; import java.io.PrintWriter; import java.util.Map; import junit.framework.Assert; import org.drools.runtime.StatefulKnowledgeSession; import org.jvnet.hudson.test.FailureBuilder; import com.gargoylesoftware.htmlunit.html.HtmlAnchor; import com.gargoylesoftware.htmlunit.html.HtmlButton; import com.gargoylesoftware.htmlunit.html.HtmlCheckBoxInput; import com.gargoylesoftware.htmlunit.html.HtmlForm; import com.gargoylesoftware.htmlunit.html.HtmlPage; public class Staging3Test extends DroolsTestCase { private DroolsProject wf; private FreeStyleProject build; private FreeStyleProject test; private FreeStyleProject test2; private boolean deployScriptCalled; @Override protected void setUp() throws Exception { super.setUp(); wf = createProject("staging-3", "staging-3.rf"); build = hudson.createProject(FreeStyleProject.class, "Build"); test = hudson.createProject(FreeStyleProject.class, "Automated Test"); test2 = hudson.createProject(FreeStyleProject.class, "Another 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); assertBuildResult(test2, Result.SUCCESS, 1); waitForWorkflowComplete(wf, 1); Assert.assertTrue(deployScriptCalled); } finally { System.out.println(wf.getLastBuild().getLog()); } } public void testWorkflowManualOverride() throws Exception { test2.getBuildersList().add(new FailureBuilder()); wf.scheduleBuild(0); try { assertBuildResult(wf, Result.SUCCESS, 1); assertBuildResult(build, Result.SUCCESS, 1); assertBuildResult(test, Result.SUCCESS, 1); assertBuildResult(test2, Result.FAILURE, 1); Assert.assertFalse(deployScriptCalled); Assert.assertFalse(wf.getLastBuild().isCompleted()); Assert.assertEquals(1, wf.getLastBuild().getHumanTasks().size()); HumanTask humanTask = wf.getLastBuild().getHumanTasks().get(0); HtmlPage page = new WebClient().goTo(wf.getLastBuild().getUrl()); HtmlForm form = page.getFormByName("drools-humanTask-" + humanTask.getWorkItemId()); ((HtmlCheckBoxInput) form.getInputByName("value")).setChecked(true); form.submit((HtmlButton) form.getFirstByXPath("//button")); Thread.sleep(500); Assert.assertTrue(deployScriptCalled); Assert.assertTrue(wf.getLastBuild().isCompleted()); } finally { System.out.println(wf.getLastBuild().getLog()); } } public void testWorkflowNoManualOverride() throws Exception { test2.getBuildersList().add(new FailureBuilder()); wf.scheduleBuild(0); try { assertBuildResult(wf, Result.SUCCESS, 1); assertBuildResult(build, Result.SUCCESS, 1); assertBuildResult(test, Result.SUCCESS, 1); assertBuildResult(test2, Result.FAILURE, 1); Assert.assertFalse(deployScriptCalled); Assert.assertFalse(wf.getLastBuild().isCompleted()); Assert.assertEquals(1, wf.getLastBuild().getHumanTasks().size()); HumanTask humanTask = wf.getLastBuild().getHumanTasks().get(0); HtmlPage page = new WebClient().goTo(wf.getLastBuild().getUrl()); HtmlForm form = page.getFormByName("drools-humanTask-" + humanTask.getWorkItemId()); form.submit((HtmlButton) form.getFirstByXPath("//button")); Thread.sleep(500); Assert.assertFalse(deployScriptCalled); Assert.assertTrue(wf.getLastBuild().isCompleted()); } finally { System.out.println(wf.getLastBuild().getLog()); } } }