package hudson.maven; import org.jvnet.hudson.test.ExtractResourceSCM; import org.jvnet.hudson.test.HudsonTestCase; /** * @author Andrew Bayer */ public class MavenSnapshotTriggerTest extends HudsonTestCase { /** * Verifies dependency build ordering of SNAPSHOT dependency. * Note - has to build the projects once each first in order to get dependency info. */ public void testSnapshotDependencyBuildTrigger() throws Exception { configureDefaultMaven(); MavenModuleSet projA = createMavenProject("snap-dep-test-up"); projA.setGoals("clean install"); projA.setScm(new ExtractResourceSCM(getClass().getResource("maven-dep-test-A.zip"))); MavenModuleSet projB = createMavenProject("snap-dep-test-down"); projB.setGoals("clean install"); projB.setIgnoreUpstremChanges(false); projB.setQuietPeriod(0); projB.setScm(new ExtractResourceSCM(getClass().getResource("maven-dep-test-B.zip"))); buildAndAssertSuccess(projA); buildAndAssertSuccess(projB); projA.setScm(new ExtractResourceSCM(getClass().getResource("maven-dep-test-A-changed.zip"))); buildAndAssertSuccess(projA); // at this point runB2 should be in the queue, so wait until that completes. waitUntilNoActivity(); assertEquals("Expected most recent build of second project to be #2", 2, projB.getLastBuild().getNumber()); } /** * Verifies dependency build ordering of multiple SNAPSHOT dependencies. * Note - has to build the projects once each first in order to get dependency info. * B depends on A, C depends on A and B. Build order should be A->B->C. */ public void testMixedTransitiveSnapshotTrigger() throws Exception { configureDefaultMaven(); MavenModuleSet projA = createMavenProject("snap-dep-test-up"); projA.setGoals("clean install"); projA.setScm(new ExtractResourceSCM(getClass().getResource("maven-dep-test-A.zip"))); MavenModuleSet projB = createMavenProject("snap-dep-test-mid"); projB.setGoals("clean install"); projB.setIgnoreUpstremChanges(false); projB.setQuietPeriod(0); projB.setScm(new ExtractResourceSCM(getClass().getResource("maven-dep-test-B.zip"))); MavenModuleSet projC = createMavenProject("snap-dep-test-down"); projC.setGoals("clean install"); projC.setIgnoreUpstremChanges(false); projC.setQuietPeriod(0); projC.setScm(new ExtractResourceSCM(getClass().getResource("maven-dep-test-C.zip"))); buildAndAssertSuccess(projA); buildAndAssertSuccess(projB); buildAndAssertSuccess(projC); projA.setScm(new ExtractResourceSCM(getClass().getResource("maven-dep-test-A-changed.zip"))); buildAndAssertSuccess(projA); waitUntilNoActivity(); // wait until dependency build trickles down assertEquals("Expected most recent build of second project to be #2", 2, projB.getLastBuild().getNumber()); assertEquals("Expected most recent build of third project to be #2", 2, projC.getLastBuild().getNumber()); } }