/* * Copyright (c) 2013 Cosmin Stejerean, Karl Heinz Marbaise, and contributors. * * Distributed under the MIT license: http://opensource.org/licenses/MIT */ package com.offbytwo.jenkins.integration; import com.offbytwo.jenkins.JenkinsServer; import com.offbytwo.jenkins.model.BuildResult; import com.offbytwo.jenkins.model.BuildWithDetails; import com.offbytwo.jenkins.model.Computer; import com.offbytwo.jenkins.model.Job; import com.offbytwo.jenkins.model.JobWithDetails; import hudson.model.BooleanParameterValue; import hudson.model.Cause; import hudson.model.FreeStyleProject; import hudson.model.ParametersAction; import hudson.model.StringParameterValue; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.jvnet.hudson.test.JenkinsRule; import java.util.Map; import java.util.UUID; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; public class JenkinsServerIT { @Rule public JenkinsRule jenkinsRule = new JenkinsRule(); private static final String JENKINS_MASTER = "master"; private static final String JENKINS_TEST_JOB = "jenkins-client-test"; private JenkinsServer server; @Before public void setUp() throws Exception { jenkinsRule.getInstance().getCrumbIssuer().getCrumb(); jenkinsRule.getInstance().getCrumbIssuer().getCrumbRequestField(); server = new JenkinsServer(jenkinsRule.getURL().toURI()); } @Test public void shouldReturnListOfJobs() throws Exception { jenkinsRule.getInstance().createProject(FreeStyleProject.class, JENKINS_TEST_JOB); assertTrue(server.getJobs().containsKey(JENKINS_TEST_JOB)); } @Test public void shouldReturnBuildsForJob() throws Exception { FreeStyleProject trunk = jenkinsRule.getInstance().createProject(FreeStyleProject.class, JENKINS_TEST_JOB); for (int i = 0; i < 5; i++) trunk.scheduleBuild(0, new Cause.UserIdCause(), new ParametersAction(new StringParameterValue("BUILD NUMBER", "" + i))); while (trunk.isInQueue() || trunk.isBuilding()) { } JobWithDetails job = server.getJobs().get(JENKINS_TEST_JOB).details(); assertEquals(5, job.getBuilds().get(0).getNumber()); } @Test public void shouldReturnBuildStatusForBuild() throws Exception { FreeStyleProject pr = jenkinsRule.getInstance().createProject(FreeStyleProject.class, JENKINS_TEST_JOB); pr.scheduleBuild2(0, new Cause.UserIdCause(), new ParametersAction(new StringParameterValue("REVISION", "foobar"))).get(); JobWithDetails job = server.getJobs().get(JENKINS_TEST_JOB).details(); BuildWithDetails build = job.getBuilds().get(0).details(); assertEquals(BuildResult.SUCCESS, build.getResult()); assertEquals("foobar", build.getParameters().get("REVISION")); } @Test public void shouldSupportBooleanParameters() throws Exception { FreeStyleProject pr = jenkinsRule.getInstance().createProject(FreeStyleProject.class, JENKINS_TEST_JOB); pr.scheduleBuild2(0, new Cause.UserIdCause(), new ParametersAction(new BooleanParameterValue("someValue", true))).get(); JobWithDetails job = server.getJobs().get(JENKINS_TEST_JOB).details(); BuildWithDetails build = job.getBuilds().get(0).details(); assertEquals("true", build.getParameters().get("someValue")); } @Test public void shouldReturnListOfComputers() throws Exception { assertTrue(server.getComputers().containsKey(JENKINS_MASTER)); } @Test public void shouldReturnDetailOfComputer() throws Exception { Map<String, Computer> computers = server.getComputers(); assertTrue(computers.get(JENKINS_MASTER).details().getDisplayName().equals(JENKINS_MASTER)); } @Test public void shouldReturnDetailOfLablel() throws Exception { assertTrue(server.getLabel(JENKINS_MASTER).getName().equals(JENKINS_MASTER)); } // Note this test depends upon the xml in job-template.xml being a valid job // description for the instance of jenkins you are running. @Test public void testGetJobXml() throws Exception { jenkinsRule.getInstance().createProject(FreeStyleProject.class, JENKINS_TEST_JOB); String xmlReturned = server.getJobXml(JENKINS_TEST_JOB); assertTrue(xmlReturned.length() > 0); } @Test public void testGetJobByName() throws Exception { jenkinsRule.getInstance().createProject(FreeStyleProject.class, JENKINS_TEST_JOB); JobWithDetails job = server.getJob(JENKINS_TEST_JOB); assertEquals(JENKINS_TEST_JOB, job.getName()); assertEquals(JENKINS_TEST_JOB, job.getDisplayName()); } @Test public void testGetJobByNameDoesntExist() throws Exception { final String jobName = "imprettysurethereisnojobwiththisname"; JobWithDetails job = server.getJob(jobName); assertEquals(null, job); } @Test public void testCreateJob() throws Exception { final String jobName = "test-job-" + UUID.randomUUID().toString(); jenkinsRule.getInstance().createProject(FreeStyleProject.class, JENKINS_TEST_JOB); String sourceXml = server.getJobXml(JENKINS_TEST_JOB); server.createJob(jobName, sourceXml, true); Map<String, Job> jobs = server.getJobs(); assertTrue(jobs.containsKey(jobName)); JobWithDetails thisJob = jobs.get(jobName).details(); assertNotNull(thisJob); assertTrue(thisJob.getBuilds().size() == 0); } @Test public void shouldBuildAJob() throws Exception { final String jobName = "test-job-" + UUID.randomUUID().toString(); FreeStyleProject project = jenkinsRule.getInstance().createProject(FreeStyleProject.class, jobName); assertTrue(jenkinsRule.getInstance().getJobNames().contains(jobName)); JobWithDetails job = server.getJob(jobName); job.build(true); while (project.isInQueue() || project.isBuilding()) { } job = server.getJob(jobName); assertTrue(job.getBuilds().size() == 1); } @Test public void testUpdateJob() throws Exception { final String description = "test-" + UUID.randomUUID().toString(); FreeStyleProject freeStyleProject = jenkinsRule.getInstance().createProject(FreeStyleProject.class, JENKINS_TEST_JOB); freeStyleProject.setDescription(description); String sourceXml = server.getJobXml(JENKINS_TEST_JOB); String newXml = sourceXml.replaceAll("<description>.*</description>", "<description>" + description + "</description>"); server.updateJob(JENKINS_TEST_JOB, newXml); String confirmXml = server.getJobXml(JENKINS_TEST_JOB); assertTrue(confirmXml.contains(description)); } }