package hudson.plugins.fitnesse; import hudson.FilePath; import hudson.model.FreeStyleBuild; import hudson.model.FreeStyleProject; import hudson.model.Result; import hudson.plugins.fitnesse.NativePageCounts.Counts; import hudson.tasks.Shell; import java.io.File; import java.util.HashMap; import java.util.Map; import junit.framework.Assert; import org.jvnet.hudson.test.HudsonTestCase; public class HudsonDependentTest extends HudsonTestCase { public void testOwnerOfParentResultsShouldBeOwnerOfChildResults() throws Exception { FitnesseResults parent = new FitnesseResults((Counts)null); FitnesseResults child = new FitnesseResults((Counts)null); parent.setOwner(new FreeStyleBuild(createFreeStyleProject(getName()))); parent.addDetail(child); Assert.assertSame(parent.getOwner(), child.getOwner()); } public void testBuildStartingFitnesseWithAbsoluteAndRelativePaths() throws Exception { FreeStyleProject project = createFreeStyleProject(getName()); project.getBuildersList().clear(); project.getPublishersList().clear(); String resultsFile = "fitnesse-results.xml"; Map<String, String> options = new HashMap<String, String>(); options.put(FitnesseBuilder.START_FITNESSE, Boolean.TRUE.toString()); options.put(FitnesseBuilder.PATH_TO_JAR, getTestResourceFitnesseJar()); options.put(FitnesseBuilder.PATH_TO_ROOT, getTestResourceFitNesseRoot()); options.put(FitnesseBuilder.FITNESSE_PORT, "8081"); options.put(FitnesseBuilder.TARGET_PAGE, "HudsonPlugin.SuiteAll"); options.put(FitnesseBuilder.TARGET_IS_SUITE, Boolean.TRUE.toString()); options.put(FitnesseBuilder.PATH_TO_RESULTS, resultsFile); FitnesseBuilder builder = new FitnesseBuilder(options); project.getBuildersList().add(builder); FitnesseResultsRecorder fitnesseResultsRecorder = new FitnesseResultsRecorder(resultsFile); project.getPublishersList().add(fitnesseResultsRecorder); //AbsolutePath build FreeStyleBuild build = project.scheduleBuild2(0).get(); Assert.assertTrue(build.getLogFile().getAbsolutePath(), !Result.FAILURE.equals(build.getResult())); FitnesseResultsAction resultsAction = build.getAction(FitnesseResultsAction.class); assertExpectedResults(resultsAction); FitnesseProjectAction projectAction = (FitnesseProjectAction) fitnesseResultsRecorder.getProjectActions(project).toArray()[0]; Assert.assertSame(resultsAction, projectAction.getLatestResults()); Assert.assertFalse(projectAction.getTrend().historyAvailable()); project.getBuildersList().clear(); project.getPublishersList().clear(); resultsFile = "fitnesse-results2.xml"; project.getBuildersList().add(new Shell("cp " + builder.getFitnessePathToJar() + " " + build.getWorkspace().getRemote())); project.getBuildersList().add(new Shell("cp -r " + builder.getFitnessePathToRoot() + " " + build.getWorkspace().getRemote())); options.put(FitnesseBuilder.PATH_TO_JAR, "fitnesse.jar"); options.put(FitnesseBuilder.PATH_TO_ROOT, "FitNesseRoot"); options.put(FitnesseBuilder.PATH_TO_RESULTS, resultsFile); project.getBuildersList().add(builder); fitnesseResultsRecorder = new FitnesseResultsRecorder(resultsFile); project.getPublishersList().add(fitnesseResultsRecorder); //RelativePath build build = project.scheduleBuild2(0).get(); Assert.assertTrue(build.getLogFile().getAbsolutePath(), !Result.FAILURE.equals(build.getResult())); resultsAction = build.getAction(FitnesseResultsAction.class); assertExpectedResults(resultsAction); projectAction = (FitnesseProjectAction) fitnesseResultsRecorder.getProjectActions(project).toArray()[0]; Assert.assertSame(resultsAction, projectAction.getLatestResults()); Assert.assertTrue(projectAction.getTrend().historyAvailable()); } private String getTestResourceFitnesseJar() { return new File(new File(System.getProperty("user.dir")), "target/test-classes/fitnesse.jar").getAbsolutePath(); } private String getTestResourceFitNesseRoot() { return new File(new File(System.getProperty("user.dir")), "target/test-classes/FitNesseRoot").getAbsolutePath(); } private void assertExpectedResults(FitnesseResultsAction resultsAction) { Assert.assertEquals("passed", 1, resultsAction.getResult().getPassCount()); Assert.assertEquals("failed", 1, resultsAction.getResult().getFailCount()); Assert.assertEquals("ignored", 1, resultsAction.getResult().getIgnoredCount()); Assert.assertEquals("exceptions", 1, resultsAction.getResult().getExceptionCount()); } public void testBuildForStartedFitnesse() throws Exception { File workingDir = new File(getTestResourceFitNesseRoot()).getParentFile(); String[] commands = new String[] {"java", "-jar", getTestResourceFitnesseJar(), "-d", workingDir.getPath(), "-r", "FitNesseRoot", "-p", "8082"}; Process process = new ProcessBuilder(commands).directory(workingDir).start(); Thread.sleep(1500); try { FreeStyleProject project = createFreeStyleProject(getName()); project.getBuildersList().clear(); project.getPublishersList().clear(); String resultsFile = "fitnesse-results3.xml"; Map<String, String> options = new HashMap<String, String>(); options.put(FitnesseBuilder.START_FITNESSE, Boolean.FALSE.toString()); options.put(FitnesseBuilder.FITNESSE_HOST, "localhost"); options.put(FitnesseBuilder.FITNESSE_PORT, "8082"); options.put(FitnesseBuilder.TARGET_PAGE, "HudsonPlugin.SuiteAll"); options.put(FitnesseBuilder.TARGET_IS_SUITE, Boolean.TRUE.toString()); options.put(FitnesseBuilder.PATH_TO_RESULTS, resultsFile); FitnesseBuilder builder = new FitnesseBuilder(options); project.getBuildersList().add(builder); project.getPublishersList().add(new FitnesseResultsRecorder(resultsFile)); FreeStyleBuild build = project.scheduleBuild2(0).get(); Assert.assertTrue(build.getLogFile().getAbsolutePath(), !Result.FAILURE.equals(build.getResult())); FitnesseResultsAction resultsAction = build.getAction(FitnesseResultsAction.class); assertExpectedResults(resultsAction); } finally { process.destroy(); } } public void testBuildStartingFitnesseAndExplodingTheJarFile() throws Exception { FreeStyleProject project = createFreeStyleProject(getName()); project.getBuildersList().clear(); project.getPublishersList().clear(); String resultsFile = "fitnesse-results4.xml"; project.getBuildersList().add(new Shell("echo")); // only want this to get workspace FreeStyleBuild build = project.scheduleBuild2(0).get(); FilePath workspace = build.getWorkspace(); Map<String, String> options = new HashMap<String, String>(); options.put(FitnesseBuilder.START_FITNESSE, Boolean.TRUE.toString()); options.put(FitnesseBuilder.PATH_TO_JAR, workspace.child("fitnesse.jar").getRemote()); options.put(FitnesseBuilder.PATH_TO_ROOT, workspace.getRemote()); options.put(FitnesseBuilder.FITNESSE_PORT, "8083"); options.put(FitnesseBuilder.TARGET_PAGE, "FitNesse.SuiteAcceptanceTests.SuiteFixtureTests.SuiteColumnFixtureSpec.TestMissingMethod"); options.put(FitnesseBuilder.TARGET_IS_SUITE, Boolean.FALSE.toString()); options.put(FitnesseBuilder.PATH_TO_RESULTS, resultsFile); FitnesseBuilder builder = new FitnesseBuilder(options); project.getBuildersList().clear(); project.getPublishersList().clear(); project.getBuildersList().add(new Shell("cp " + getTestResourceFitnesseJar() + " " + workspace.getRemote())); project.getBuildersList().add(builder); project.getPublishersList().add(new FitnesseResultsRecorder(resultsFile)); build = project.scheduleBuild2(0).get(); Assert.assertTrue(build.getLogFile().getAbsolutePath(), !Result.FAILURE.equals(build.getResult())); FitnesseResultsAction resultsAction = build.getAction(FitnesseResultsAction.class); Assert.assertTrue(resultsAction.getResult().getPassCount() > 0); Assert.assertEquals(0, resultsAction.getResult().getFailCount()); } }