package org.terracotta.jenkins.plugins.acceleratedbuildnow.it;
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.model.FreeStyleBuild;
import hudson.model.Result;
import hudson.model.FreeStyleProject;
import hudson.model.Job;
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 NominalTest extends HudsonTestCase {
@Test
@LocalData
public void test_start_job1_then_accelerated_built_job_should_cancel_job1_start_itself_and_reschedule_job1()
throws Exception {
System.out.println("I have : " + Jenkins.getInstance().getNumExecutors() + " executor(s) available");
FreeStyleProject job1 = createFreeStyleProject("job1");
job1.getBuildersList().add(new SleepBuilder(3000));
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());
List<Job> allItems = Jenkins.getInstance().getAllItems(Job.class);
acceleratedBuildNowAction.doBuild(request, response);
for (Job job : allItems) {
while (job.isBuilding()) {
System.out.println("Job " + job.getName() + " is still building !");
Thread.sleep(500);
}
}
FreeStyleBuild job1firstBuild = job1.getBuilds().getFirstBuild();
assertBuildStatus(Result.ABORTED, job1firstBuild);
FreeStyleBuild job1lastBuild = job1.getBuilds().getLastBuild();
assertBuildStatus(Result.SUCCESS, job1lastBuild);
assertEquals(1, acceleratedJob.getBuilds().size());
FreeStyleBuild acceleratedJobOnlyBuild = acceleratedJob.getBuilds().getLastBuild();
assertBuildStatus(Result.SUCCESS, acceleratedJobOnlyBuild);
// job1firstBuild started before acceleratedJobOnlyBuild that started before job1lastBuild
assertTrue(job1firstBuild.getStartTimeInMillis() < acceleratedJobOnlyBuild.getStartTimeInMillis());
assertTrue(acceleratedJobOnlyBuild.getStartTimeInMillis() < job1lastBuild.getStartTimeInMillis());
}
}