package org.terracotta.jenkins.plugins.acceleratedbuildnow.it; import static org.hamcrest.Matchers.equalTo; import static org.junit.Assert.assertThat; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import hudson.matrix.MatrixRun; import hudson.matrix.MatrixBuild; import hudson.matrix.MatrixProject; import hudson.model.FreeStyleBuild; import hudson.model.Job; import hudson.model.Result; import hudson.model.FreeStyleProject; import hudson.model.queue.QueueTaskFuture; import java.util.List; import jenkins.model.Jenkins; import org.junit.Test; import org.jvnet.hudson.test.HudsonTestCase; import org.jvnet.hudson.test.SleepBuilder; import org.jvnet.hudson.test.recipes.LocalData; import org.kohsuke.stapler.StaplerRequest; import org.kohsuke.stapler.StaplerResponse; import org.terracotta.jenkins.plugins.acceleratedbuildnow.AcceleratedBuildNowAction; public class CantAbortMatrixBuildTest extends HudsonTestCase { @Test @LocalData public void test_matrix_build() throws Exception { System.out.println("I have : " + Jenkins.getInstance().getNumExecutors() + " executor(s) available"); MatrixProject job1 = Jenkins.getInstance().getAllItems(MatrixProject.class).get(0); assertThat(job1.getName(), equalTo("matrixJob")); job1.getBuildersList().add(new SleepBuilder(3000)); QueueTaskFuture<MatrixBuild> scheduleBuild2 = job1.scheduleBuild2(0); FreeStyleProject acceleratedJob = createFreeStyleProject("acceleratedJob"); acceleratedJob.getBuildersList().add(new SleepBuilder(3000)); AcceleratedBuildNowAction acceleratedBuildNowAction = new AcceleratedBuildNowAction(acceleratedJob); StaplerRequest request = mock(StaplerRequest.class); when(request.getContextPath()).thenReturn(""); StaplerResponse response = mock(StaplerResponse.class); doNothing().when(response).sendRedirect(anyString()); acceleratedBuildNowAction.doBuild(request, response); List<Job> allItems = Jenkins.getInstance().getAllItems(Job.class); acceleratedBuildNowAction.doBuild(request, response); while (!Jenkins.getInstance().getQueue().isEmpty()) { Thread.sleep(1000); System.out.println("Waiting for the queue to empty"); } for (Job job : allItems) { while (job.isBuilding()) { System.out.println("Job " + job.getName() + " is still building !"); Thread.sleep(500); } } MatrixBuild job1LastBuild = job1.getBuilds().getLastBuild(); List<MatrixRun> exactRuns = job1LastBuild.getExactRuns(); assertBuildStatus(Result.SUCCESS, job1LastBuild); assertEquals(1, acceleratedJob.getBuilds().size()); FreeStyleBuild acceleratedJobOnlyBuild = acceleratedJob.getBuilds().getLastBuild(); assertBuildStatus(Result.SUCCESS, acceleratedJobOnlyBuild); // job1LastBuild started before acceleratedJobOnlyBuild assertTrue(job1LastBuild.getStartTimeInMillis() < acceleratedJobOnlyBuild.getStartTimeInMillis()); } }