blob: 4f07b0626d79a665b7e36907b0f8046a8d792a4e [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010, 2013 Markus Knittig and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Markus Knittig - initial API and implementation
* Tasktop Technologies - improvements
*******************************************************************************/
package org.eclipse.mylyn.hudson.tests.client;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.Callable;
import junit.framework.TestCase;
import org.eclipse.mylyn.commons.sdk.util.CommonTestUtil.PrivilegeLevel;
import org.eclipse.mylyn.hudson.tests.support.HudsonFixture;
import org.eclipse.mylyn.hudson.tests.support.HudsonHarness;
import org.eclipse.mylyn.hudson.tests.support.HudsonTestUtil;
import org.eclipse.mylyn.internal.hudson.core.client.HudsonException;
import org.eclipse.mylyn.internal.hudson.core.client.HudsonResourceNotFoundException;
import org.eclipse.mylyn.internal.hudson.core.client.HudsonServerInfo;
import org.eclipse.mylyn.internal.hudson.core.client.RestfulHudsonClient;
import org.eclipse.mylyn.internal.hudson.core.client.RestfulHudsonClient.BuildId;
import org.eclipse.mylyn.internal.hudson.model.HudsonModelBallColor;
import org.eclipse.mylyn.internal.hudson.model.HudsonModelBuild;
import org.eclipse.mylyn.internal.hudson.model.HudsonModelJob;
/**
* Test cases for {@link RestfulHudsonClient}.
*
* @author Markus Knittig
* @author Steffen Pingel
*/
public class HudsonClientTest extends TestCase {
private HudsonHarness harness;
@Override
protected void setUp() throws Exception {
harness = HudsonFixture.current().createHarness();
}
@Override
protected void tearDown() throws Exception {
harness.dispose();
}
public void testValidateValidUrl() throws Exception {
// standard connect
RestfulHudsonClient client = harness.connect(PrivilegeLevel.ANONYMOUS);
HudsonServerInfo info = client.validate(null);
assertEquals(harness.getFixture().getType(), info.getType());
}
public void testValidateValidUrlAuthenticate() throws Exception {
if (!HudsonFixture.current().canAuthenticate()) {
// ignore
return;
}
// standard connect
RestfulHudsonClient client = harness.connect();
HudsonServerInfo info = client.validate(null);
assertEquals(harness.getFixture().getType(), info.getType());
}
public void testValidateExpiredCookie() throws Exception {
if (!HudsonFixture.current().canAuthenticate()) {
// ignore
return;
}
RestfulHudsonClient client = harness.connect();
client.validate(null);
// clear cookies
client.reset();
// TODO try an operation that requires authentication
HudsonServerInfo info = client.validate(null);
assertEquals(harness.getFixture().getType(), info.getType());
}
public void testGetJobs() throws Exception {
RestfulHudsonClient client = harness.connect(PrivilegeLevel.ANONYMOUS);
harness.ensureHasRun(harness.getPlanFailing());
harness.ensureHasRun(harness.getPlanSucceeding());
List<HudsonModelJob> jobs = client.getJobs(null, null);
HudsonTestUtil.assertContains(jobs, harness.getPlanFailing());
HudsonTestUtil.assertContains(jobs, harness.getPlanSucceeding());
HudsonTestUtil.assertHealthReport(jobs);
}
public void testGetJobsWithWhitespaces() throws Exception {
harness.ensureHasRun(harness.getPlanWhitespace());
final RestfulHudsonClient client = harness.connect(PrivilegeLevel.ANONYMOUS);
List<HudsonModelJob> jobs = client.getJobs(Collections.singletonList(harness.getPlanWhitespace()), null);
assertEquals(1, jobs.size());
HudsonModelJob job = jobs.get(0);
assertEquals(harness.getSuccessColor(), job.getColor());
HudsonModelBuild build = client.getBuild(job, job.getLastBuild(), null);
assertNotNull(build);
}
public void testGetJobDisabled() throws Exception {
RestfulHudsonClient client = harness.connect(PrivilegeLevel.ANONYMOUS);
List<HudsonModelJob> jobs = client.getJobs(Collections.singletonList(harness.getPlanDisabled()), null);
assertEquals(1, jobs.size());
HudsonModelJob job = jobs.get(0);
assertEquals(HudsonModelBallColor.DISABLED, job.getColor());
try {
HudsonModelBuild build = client.getBuild(job, BuildId.LAST.getBuild(), null);
fail("Expected HudsonResourceNotFoundException, since " + harness.getPlanDisabled()
+ " was never built, got: " + build);
} catch (HudsonResourceNotFoundException e) {
// expected
}
}
public void testGetJobGit() throws Exception {
harness.ensureHasRun(harness.getPlanGit());
RestfulHudsonClient client = harness.connect(PrivilegeLevel.ANONYMOUS);
List<HudsonModelJob> jobs = client.getJobs(Collections.singletonList(harness.getPlanGit()), null);
assertEquals(1, jobs.size());
HudsonModelJob job = jobs.get(0);
HudsonModelBuild build = client.getBuild(job, BuildId.LAST.getBuild(), null);
assertNotNull(build.getAction());
}
public void testRunBuildFailing() throws Exception {
if (!HudsonFixture.current().canAuthenticate()) {
// ignore
return;
}
final String jobName = harness.getPlanFailing();
RestfulHudsonClient client = harness.connect();
ensureHasRunOnce(client, jobName, HudsonModelBallColor.RED);
client.runBuild(harness.getJob(jobName), null, null);
HudsonTestUtil.poll(new Callable<Object>() {
public Object call() throws Exception {
assertEquals(HudsonModelBallColor.RED_ANIME, harness.getJob(jobName).getColor());
return null;
}
});
}
private void ensureHasRunOnce(RestfulHudsonClient client, final String jobName,
final HudsonModelBallColor expectedColor) throws Exception {
if (!expectedColor.equals(harness.getJob(jobName).getColor())) {
client.runBuild(harness.getJob(jobName), null, null);
HudsonTestUtil.poll(new Callable<Object>() {
public Object call() throws Exception {
assertEquals(expectedColor, harness.getJob(jobName).getColor());
return null;
}
});
}
}
public void testRunBuildSucceeding() throws Exception {
if (!HudsonFixture.current().canAuthenticate()) {
// ignore
return;
}
final String jobName = harness.getPlanSucceeding();
RestfulHudsonClient client = harness.connect();
ensureHasRunOnce(client, jobName, harness.getSuccessAnimeColor());
client.runBuild(harness.getJob(jobName), null, null);
HudsonTestUtil.poll(new Callable<Object>() {
public Object call() throws Exception {
assertEquals(harness.getSuccessAnimeColor(), harness.getJob(jobName).getColor());
return null;
}
});
}
public void testRunBuildGuest() throws Exception {
final String jobName = harness.getPlanSucceeding();
RestfulHudsonClient client = harness.connect(PrivilegeLevel.GUEST);
try {
client.runBuild(harness.getJob(jobName), null, null);
fail("Expected HudsonException");
} catch (HudsonException expected) {
// ignore
}
}
}