提交 6ab4cd64 编写于 作者: K Kohsuke Kawaguchi

Converted to Groovy for simplification

上级 bdfc3f71
...@@ -46,6 +46,7 @@ import jenkins.model.Jenkins; ...@@ -46,6 +46,7 @@ import jenkins.model.Jenkins;
import org.acegisecurity.context.SecurityContext; import org.acegisecurity.context.SecurityContext;
import org.acegisecurity.context.SecurityContextHolder; import org.acegisecurity.context.SecurityContextHolder;
import org.jvnet.hudson.test.HudsonTestCase; import org.jvnet.hudson.test.HudsonTestCase;
import org.jvnet.hudson.test.HudsonTestCase.WebClient;
import org.jvnet.hudson.test.Bug; import org.jvnet.hudson.test.Bug;
import org.jvnet.hudson.test.MemoryAssert; import org.jvnet.hudson.test.MemoryAssert;
import org.jvnet.hudson.test.recipes.PresetData; import org.jvnet.hudson.test.recipes.PresetData;
...@@ -69,30 +70,28 @@ import org.jvnet.hudson.test.MockFolder; ...@@ -69,30 +70,28 @@ import org.jvnet.hudson.test.MockFolder;
*/ */
public class AbstractProjectTest extends HudsonTestCase { public class AbstractProjectTest extends HudsonTestCase {
public void testConfigRoundtrip() throws Exception { public void testConfigRoundtrip() throws Exception {
FreeStyleProject project = createFreeStyleProject(); def project = createFreeStyleProject();
Label l = jenkins.getLabel("foo && bar"); def l = jenkins.getLabel("foo && bar");
project.setAssignedLabel(l); project.assignedLabel = l;
configRoundtrip((Item)project); configRoundtrip((Item) project);
assertEquals(l,project.getAssignedLabel()); assert l == project.getAssignedLabel();
} }
/** /**
* Tests the workspace deletion. * Tests the workspace deletion.
*/ */
public void testWipeWorkspace() throws Exception { public void testWipeWorkspace() throws Exception {
FreeStyleProject project = createFreeStyleProject(); def project = createFreeStyleProject();
project.getBuildersList().add(new Shell("echo hello")); project.buildersList.add(new Shell("echo hello"));
FreeStyleBuild b = project.scheduleBuild2(0).get(); def b = project.scheduleBuild2(0).get();
assertTrue("Workspace should exist by now", assert b.workspace.exists(): "Workspace should exist by now";
b.getWorkspace().exists());
project.doDoWipeOutWorkspace(); project.doDoWipeOutWorkspace();
assertFalse("Workspace should be gone by now", assert !b.workspace.exists(): "Workspace should be gone by now";
b.getWorkspace().exists());
} }
/** /**
...@@ -100,15 +99,15 @@ public class AbstractProjectTest extends HudsonTestCase { ...@@ -100,15 +99,15 @@ public class AbstractProjectTest extends HudsonTestCase {
*/ */
@PresetData(DataSet.NO_ANONYMOUS_READACCESS) @PresetData(DataSet.NO_ANONYMOUS_READACCESS)
public void testWipeWorkspaceProtected() throws Exception { public void testWipeWorkspaceProtected() throws Exception {
FreeStyleProject project = createFreeStyleProject(); def project = createFreeStyleProject();
project.getBuildersList().add(new Shell("echo hello")); project.getBuildersList().add(new Shell("echo hello"));
FreeStyleBuild b = project.scheduleBuild2(0).get(); def b = project.scheduleBuild2(0).get();
assertTrue("Workspace should exist by now",b.getWorkspace().exists()); assert b.getWorkspace().exists(): "Workspace should exist by now";
// make sure that the action link is protected // make sure that the action link is protected
new WebClient().assertFails(project.getUrl() + "doWipeOutWorkspace", HttpURLConnection.HTTP_FORBIDDEN); createWebClient().assertFails(project.getUrl() + "doWipeOutWorkspace", HttpURLConnection.HTTP_FORBIDDEN);
} }
/** /**
...@@ -123,7 +122,7 @@ public class AbstractProjectTest extends HudsonTestCase { ...@@ -123,7 +122,7 @@ public class AbstractProjectTest extends HudsonTestCase {
testWipeWorkspaceProtected(); testWipeWorkspaceProtected();
// there shouldn't be any "wipe out workspace" link for anonymous user // there shouldn't be any "wipe out workspace" link for anonymous user
WebClient webClient = new WebClient(); def webClient = createWebClient();
HtmlPage page = webClient.getPage(jenkins.getItem("test0")); HtmlPage page = webClient.getPage(jenkins.getItem("test0"));
page = (HtmlPage)page.getFirstAnchorByText("Workspace").click(); page = (HtmlPage)page.getFirstAnchorByText("Workspace").click();
...@@ -140,11 +139,11 @@ public class AbstractProjectTest extends HudsonTestCase { ...@@ -140,11 +139,11 @@ public class AbstractProjectTest extends HudsonTestCase {
* Tests the <optionalBlock @field> round trip behavior by using {@link AbstractProject#concurrentBuild} * Tests the <optionalBlock @field> round trip behavior by using {@link AbstractProject#concurrentBuild}
*/ */
public void testOptionalBlockDataBindingRoundtrip() throws Exception { public void testOptionalBlockDataBindingRoundtrip() throws Exception {
FreeStyleProject p = createFreeStyleProject(); def p = createFreeStyleProject();
for( boolean b : new boolean[]{true,false}) { [true,false].each { b ->
p.setConcurrentBuild(b); p.concurrentBuild = b;
submit(new WebClient().getPage(p,"configure").getFormByName("config")); submit(createWebClient().getPage(p,"configure").getFormByName("config"));
assertEquals(b,p.isConcurrentBuild()); assert b==p.isConcurrentBuild();
} }
} }
...@@ -153,20 +152,20 @@ public class AbstractProjectTest extends HudsonTestCase { ...@@ -153,20 +152,20 @@ public class AbstractProjectTest extends HudsonTestCase {
*/ */
@Bug(4423) @Bug(4423)
public void testConfiguringBlockBuildWhenUpstreamBuildingRoundtrip() throws Exception { public void testConfiguringBlockBuildWhenUpstreamBuildingRoundtrip() throws Exception {
FreeStyleProject p = createFreeStyleProject(); def p = createFreeStyleProject();
p.blockBuildWhenUpstreamBuilding = false; p.blockBuildWhenUpstreamBuilding = false;
HtmlForm form = new WebClient().getPage(p, "configure").getFormByName("config"); def form = createWebClient().getPage(p, "configure").getFormByName("config");
HtmlInput input = form.getInputByName("blockBuildWhenUpstreamBuilding"); def input = form.getInputByName("blockBuildWhenUpstreamBuilding");
assertFalse("blockBuildWhenUpstreamBuilding check box is checked.", input.isChecked()); assert !input.isChecked(): "blockBuildWhenUpstreamBuilding check box is checked.";
input.setChecked(true); input.setChecked(true);
submit(form); submit(form);
assertTrue("blockBuildWhenUpstreamBuilding was not updated from configuration form", p.blockBuildWhenUpstreamBuilding); assert p.blockBuildWhenUpstreamBuilding: "blockBuildWhenUpstreamBuilding was not updated from configuration form";
form = new WebClient().getPage(p, "configure").getFormByName("config"); form = createWebClient().getPage(p, "configure").getFormByName("config");
input = form.getInputByName("blockBuildWhenUpstreamBuilding"); input = form.getInputByName("blockBuildWhenUpstreamBuilding");
assertTrue("blockBuildWhenUpstreamBuilding check box is not checked.", input.isChecked()); assert input.isChecked(): "blockBuildWhenUpstreamBuilding check box is not checked.";
} }
/** /**
...@@ -178,9 +177,9 @@ public class AbstractProjectTest extends HudsonTestCase { ...@@ -178,9 +177,9 @@ public class AbstractProjectTest extends HudsonTestCase {
final OneShotEvent sync = new OneShotEvent(); final OneShotEvent sync = new OneShotEvent();
final FreeStyleProject p = createFreeStyleProject(); final FreeStyleProject p = createFreeStyleProject();
FreeStyleBuild b1 = buildAndAssertSuccess(p); def b1 = buildAndAssertSuccess(p);
p.setScm(new NullSCM() { p.scm = new NullSCM() {
@Override @Override
public boolean pollChanges(AbstractProject project, Launcher launcher, FilePath workspace, TaskListener listener) { public boolean pollChanges(AbstractProject project, Launcher launcher, FilePath workspace, TaskListener listener) {
try { try {
...@@ -195,11 +194,11 @@ public class AbstractProjectTest extends HudsonTestCase { ...@@ -195,11 +194,11 @@ public class AbstractProjectTest extends HudsonTestCase {
* Don't write 'this', so that subtypes can be implemented as anonymous class. * Don't write 'this', so that subtypes can be implemented as anonymous class.
*/ */
private Object writeReplace() { return new Object(); } private Object writeReplace() { return new Object(); }
@Override public boolean requiresWorkspaceForPolling() { @Override public boolean requiresWorkspaceForPolling() {
return true; return true;
} }
}); };
Thread t = new Thread() { Thread t = new Thread() {
@Override public void run() { @Override public void run() {
p.pollSCMChanges(StreamTaskListener.fromStdout()); p.pollSCMChanges(StreamTaskListener.fromStdout());
...@@ -207,7 +206,7 @@ public class AbstractProjectTest extends HudsonTestCase { ...@@ -207,7 +206,7 @@ public class AbstractProjectTest extends HudsonTestCase {
}; };
try { try {
t.start(); t.start();
Future<FreeStyleBuild> f = p.scheduleBuild2(0); def f = p.scheduleBuild2(0);
// add a bit of delay to make sure that the blockage is happening // add a bit of delay to make sure that the blockage is happening
Thread.sleep(3000); Thread.sleep(3000);
...@@ -215,10 +214,10 @@ public class AbstractProjectTest extends HudsonTestCase { ...@@ -215,10 +214,10 @@ public class AbstractProjectTest extends HudsonTestCase {
// release the polling // release the polling
sync.signal(); sync.signal();
FreeStyleBuild b2 = assertBuildStatusSuccess(f); def b2 = assertBuildStatusSuccess(f);
// they should have used the same workspace. // they should have used the same workspace.
assertEquals(b1.getWorkspace(), b2.getWorkspace()); assert b1.workspace == b2.workspace;
} finally { } finally {
t.interrupt(); t.interrupt();
} }
...@@ -230,11 +229,11 @@ public class AbstractProjectTest extends HudsonTestCase { ...@@ -230,11 +229,11 @@ public class AbstractProjectTest extends HudsonTestCase {
if (Functions.isWindows()) if (Functions.isWindows())
return; return;
FreeStyleProject job = createFreeStyleProject(); def job = createFreeStyleProject();
job.getBuildersList().add(new Shell("echo \"Build #$BUILD_NUMBER\"\n")); job.buildersList.add(new Shell("echo \"Build #\$BUILD_NUMBER\"\n"));
FreeStyleBuild build = job.scheduleBuild2(0, new Cause.UserCause()).get(); def build = job.scheduleBuild2(0, new Cause.UserCause()).get();
File lastSuccessful = new File(job.getRootDir(), "lastSuccessful"), File lastSuccessful = new File(job.rootDir, "lastSuccessful"),
lastStable = new File(job.getRootDir(), "lastStable"); lastStable = new File(job.rootDir, "lastStable");
// First build creates links // First build creates links
assertSymlinkForBuild(lastSuccessful, 1); assertSymlinkForBuild(lastSuccessful, 1);
assertSymlinkForBuild(lastStable, 1); assertSymlinkForBuild(lastStable, 1);
...@@ -248,18 +247,17 @@ public class AbstractProjectTest extends HudsonTestCase { ...@@ -248,18 +247,17 @@ public class AbstractProjectTest extends HudsonTestCase {
assertSymlinkForBuild(lastStable, 1); assertSymlinkForBuild(lastStable, 1);
// Delete all builds should remove links // Delete all builds should remove links
build.delete(); build.delete();
assertFalse("lastSuccessful link should be removed", lastSuccessful.exists()); assert !lastSuccessful.exists(): "lastSuccessful link should be removed";
assertFalse("lastStable link should be removed", lastStable.exists()); assert !lastStable.exists(): "lastStable link should be removed";
} }
private static void assertSymlinkForBuild(File file, int buildNumber) private static void assertSymlinkForBuild(File file, int buildNumber)
throws IOException, InterruptedException { throws IOException, InterruptedException {
assertTrue("should exist and point to something that exists", file.exists()); assert file.exists(): "should exist and point to something that exists";
assertTrue("should be symlink", Util.isSymlink(file)); assert Util.isSymlink(file): "should be symlink";
String s = FileUtils.readFileToString(new File(file, "log")); String s = FileUtils.readFileToString(new File(file, "log"));
assertTrue("link should point to build #" + buildNumber + ", but link was: " assert s.contains("Build #" + buildNumber + "\n") :
+ Util.resolveSymlink(file, TaskListener.NULL) + "\nand log was:\n" + s, "link should point to build #$buildNumber, but link was: ${Util.resolveSymlink(file, TaskListener.NULL)}\nand log was:\n$s";
s.contains("Build #" + buildNumber + "\n"));
} }
@Bug(2543) @Bug(2543)
...@@ -269,19 +267,19 @@ public class AbstractProjectTest extends HudsonTestCase { ...@@ -269,19 +267,19 @@ public class AbstractProjectTest extends HudsonTestCase {
return; return;
// Links should be updated after post-build actions when final build result is known // Links should be updated after post-build actions when final build result is known
FreeStyleProject job = createFreeStyleProject(); def job = createFreeStyleProject();
job.getBuildersList().add(new Shell("echo \"Build #$BUILD_NUMBER\"\n")); job.buildersList.add(new Shell("echo \"Build #\$BUILD_NUMBER\"\n"));
FreeStyleBuild build = job.scheduleBuild2(0, new Cause.UserCause()).get(); def build = job.scheduleBuild2(0, new Cause.UserCause()).get();
assertEquals(Result.SUCCESS, build.getResult()); assert Result.SUCCESS == build.result;
File lastSuccessful = new File(job.getRootDir(), "lastSuccessful"), File lastSuccessful = new File(job.rootDir, "lastSuccessful"),
lastStable = new File(job.getRootDir(), "lastStable"); lastStable = new File(job.rootDir, "lastStable");
// First build creates links // First build creates links
assertSymlinkForBuild(lastSuccessful, 1); assertSymlinkForBuild(lastSuccessful, 1);
assertSymlinkForBuild(lastStable, 1); assertSymlinkForBuild(lastStable, 1);
// Archive artifacts that don't exist to create failure in post-build action // Archive artifacts that don't exist to create failure in post-build action
job.getPublishersList().add(new ArtifactArchiver("*.foo", "", false, false)); job.publishersList.add(new ArtifactArchiver("*.foo", "", false, false));
build = job.scheduleBuild2(0, new Cause.UserCause()).get(); build = job.scheduleBuild2(0, new Cause.UserCause()).get();
assertEquals(Result.FAILURE, build.getResult()); assert Result.FAILURE == build.getResult();
// Links should not be updated since build failed // Links should not be updated since build failed
assertSymlinkForBuild(lastSuccessful, 1); assertSymlinkForBuild(lastSuccessful, 1);
assertSymlinkForBuild(lastStable, 1); assertSymlinkForBuild(lastStable, 1);
...@@ -291,9 +289,9 @@ public class AbstractProjectTest extends HudsonTestCase { ...@@ -291,9 +289,9 @@ public class AbstractProjectTest extends HudsonTestCase {
public void testGetBuildAfterGC() throws Exception { public void testGetBuildAfterGC() throws Exception {
FreeStyleProject job = createFreeStyleProject(); FreeStyleProject job = createFreeStyleProject();
job.scheduleBuild2(0, new Cause.UserIdCause()).get(); job.scheduleBuild2(0, new Cause.UserIdCause()).get();
jenkins.getQueue().clearLeftItems(); jenkins.queue.clearLeftItems();
MemoryAssert.assertGC(new WeakReference(job.getLastBuild())); MemoryAssert.assertGC(new WeakReference(job.getLastBuild()));
assertTrue(job.getLastBuild() != null); assert job.lastBuild != null;
} }
@Bug(13502) @Bug(13502)
...@@ -323,35 +321,35 @@ public class AbstractProjectTest extends HudsonTestCase { ...@@ -323,35 +321,35 @@ public class AbstractProjectTest extends HudsonTestCase {
User user = User.get("user"); User user = User.get("user");
SecurityContext sc = ACL.impersonate(user.impersonate()); SecurityContext sc = ACL.impersonate(user.impersonate());
try { try {
e.convertUpstreamBuildTrigger(Collections.<AbstractProject>emptySet()); e.convertUpstreamBuildTrigger(Collections.<AbstractProject> emptySet());
} finally { } finally {
SecurityContextHolder.setContext(sc); SecurityContextHolder.setContext(sc);
} }
assertEquals(1, u.getPublishersList().size()); assert 1 == u.getPublishersList().size();
} }
@Bug(17137) @Bug(17137)
public void testExternalBuildDirectorySymlinks() throws Exception { public void testExternalBuildDirectorySymlinks() throws Exception {
// TODO when using JUnit 4 add: Assume.assumeFalse(Functions.isWindows()); // symlinks may not be available // TODO when using JUnit 4 add: Assume.assumeFalse(Functions.isWindows()); // symlinks may not be available
HtmlForm form = new WebClient().goTo("configure").getFormByName("config"); def form = createWebClient().goTo("configure").getFormByName("config");
File builds = createTmpDir(); def builds = createTmpDir();
form.getInputByName("_.rawBuildsDir").setValueAttribute(builds + "/${ITEM_FULL_NAME}"); form.getInputByName("_.rawBuildsDir").valueAttribute = builds.toString() + "/\${ITEM_FULL_NAME}";
submit(form); submit(form);
assertEquals(builds + "/${ITEM_FULL_NAME}", jenkins.getRawBuildsDir()); assert builds.toString() + "/\${ITEM_FULL_NAME}" == jenkins.getRawBuildsDir();
FreeStyleProject p = jenkins.createProject(MockFolder.class, "d").createProject(FreeStyleProject.class, "p"); def p = jenkins.createProject(MockFolder.class, "d").createProject(FreeStyleProject.class, "p");
FreeStyleBuild b1 = p.scheduleBuild2(0).get(); def b1 = p.scheduleBuild2(0).get();
File link = new File(p.getRootDir(), "lastStable"); def link = new File(p.rootDir, "lastStable");
assertTrue(link.exists()); assert link.exists();
assertEquals(b1.getRootDir().getAbsolutePath(), resolveAll(link).getAbsolutePath()); assert b1.rootDir.absolutePath == resolveAll(link).absolutePath;
FreeStyleBuild b2 = p.scheduleBuild2(0).get(); def b2 = p.scheduleBuild2(0).get();
assertTrue(link.exists()); assert link.exists();
assertEquals(b2.getRootDir().getAbsolutePath(), resolveAll(link).getAbsolutePath()); assert b2.rootDir.absolutePath == resolveAll(link).absolutePath;
b2.delete(); b2.delete();
assertTrue(link.exists()); assert link.exists();
assertEquals(b1.getRootDir().getAbsolutePath(), resolveAll(link).getAbsolutePath()); assert b1.rootDir.absolutePath == resolveAll(link).absolutePath;
b1.delete(); b1.delete();
assertFalse(link.exists()); assert !link.exists();
} }
private File resolveAll(File link) throws InterruptedException, IOException { private File resolveAll(File link) throws InterruptedException, IOException {
...@@ -364,45 +362,43 @@ public class AbstractProjectTest extends HudsonTestCase { ...@@ -364,45 +362,43 @@ public class AbstractProjectTest extends HudsonTestCase {
@Bug(17138) @Bug(17138)
public void testExternalBuildDirectoryRenameDelete() throws Exception { public void testExternalBuildDirectoryRenameDelete() throws Exception {
HtmlForm form = new WebClient().goTo("configure").getFormByName("config"); def form = createWebClient().goTo("configure").getFormByName("config");
File builds = createTmpDir(); def builds = createTmpDir();
form.getInputByName("_.rawBuildsDir").setValueAttribute(builds + "/${ITEM_FULL_NAME}"); form.getInputByName("_.rawBuildsDir").setValueAttribute(builds.toString() + "/\${ITEM_FULL_NAME}");
submit(form); submit(form);
assertEquals(builds + "/${ITEM_FULL_NAME}", jenkins.getRawBuildsDir()); assert builds.toString() + "/\${ITEM_FULL_NAME}" == jenkins.rawBuildsDir;
FreeStyleProject p = jenkins.createProject(MockFolder.class, "d").createProject(FreeStyleProject.class, "prj"); def p = jenkins.createProject(MockFolder.class, "d").createProject(FreeStyleProject.class, "prj");
FreeStyleBuild b = p.scheduleBuild2(0).get(); def b = p.scheduleBuild2(0).get();
File oldBuildDir = new File(builds, "d/prj"); def oldBuildDir = new File(builds, "d/prj");
assertEquals(new File(oldBuildDir, b.getId()), b.getRootDir()); assert new File(oldBuildDir, b.id) == b.rootDir;
assertTrue(b.getRootDir().isDirectory()); assert b.getRootDir().isDirectory();
p.renameTo("proj"); p.renameTo("proj");
File newBuildDir = new File(builds, "d/proj"); def newBuildDir = new File(builds, "d/proj");
assertEquals(new File(newBuildDir, b.getId()), b.getRootDir()); assert new File(newBuildDir, b.id) == b.rootDir;
assertTrue(b.getRootDir().isDirectory()); assert b.rootDir.isDirectory();
p.delete(); p.delete();
assertFalse(b.getRootDir().isDirectory()); assert !b.rootDir.isDirectory();
} }
@Bug(17575) @Bug(17575)
public void testDeleteRedirect() throws Exception { public void testDeleteRedirect() throws Exception {
createFreeStyleProject("j1"); createFreeStyleProject("j1");
assertEquals("", deleteRedirectTarget("job/j1")); assert "" == deleteRedirectTarget("job/j1");
createFreeStyleProject("j2"); createFreeStyleProject("j2");
Jenkins.getInstance().addView(new AllView("v1")); Jenkins.getInstance().addView(new AllView("v1"));
assertEquals("view/v1/", deleteRedirectTarget("view/v1/job/j2")); assert "view/v1/" == deleteRedirectTarget("view/v1/job/j2");
MockFolder d = Jenkins.getInstance().createProject(MockFolder.class, "d"); MockFolder d = Jenkins.getInstance().createProject(MockFolder.class, "d");
d.addView(new AllView("v2")); d.addView(new AllView("v2"));
d.createProject(FreeStyleProject.class, "j3"); ["j3","j4","j5"].each { n -> d.createProject(FreeStyleProject.class, n) }
d.createProject(FreeStyleProject.class, "j4"); assert "job/d/" == deleteRedirectTarget("job/d/job/j3");
d.createProject(FreeStyleProject.class, "j5"); assert "job/d/view/v2/" == deleteRedirectTarget("job/d/view/v2/job/j4");
assertEquals("job/d/", deleteRedirectTarget("job/d/job/j3")); assert "view/v1/job/d/" == deleteRedirectTarget("view/v1/job/d/job/j5");
assertEquals("job/d/view/v2/", deleteRedirectTarget("job/d/view/v2/job/j4"));
assertEquals("view/v1/job/d/", deleteRedirectTarget("view/v1/job/d/job/j5"));
} }
private String deleteRedirectTarget(String job) throws Exception { private String deleteRedirectTarget(String job) throws Exception {
WebClient wc = new WebClient(); WebClient wc = createWebClient();
String base = wc.getContextPath(); String base = wc.getContextPath();
String loc = wc.getPage(wc.addCrumb(new WebRequestSettings(new URL(base + job + "/doDelete"), HttpMethod.POST))).getWebResponse().getUrl().toString(); String loc = wc.getPage(wc.addCrumb(new WebRequestSettings(new URL(base + job + "/doDelete"), HttpMethod.POST))).getWebResponse().getUrl().toString();
assertTrue(loc, loc.startsWith(base)); assert loc.startsWith(base): loc;
return loc.substring(base.length()); return loc.substring(base.length());
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册