public TopLevelItem createProject(TopLevelItemDescriptor type, String name) throws IOException { return createProject(type, name, true); }
public TopLevelItem createProject(TopLevelItemDescriptor type, String name) throws IOException { return createProject(type, name, true); }
public <T extends TopLevelItem> T createProject(Class<T> type, String name) throws IOException { return type.cast(createProject((TopLevelItemDescriptor) Jenkins.get().getDescriptor(type), name)); }
public <T extends TopLevelItem> T createProject(Class<T> type, String name) throws IOException { return type.cast(createProject((TopLevelItemDescriptor) Jenkins.getActiveInstance().getDescriptor(type), name)); }
@Issue("JENKINS-34939") @Test public void delete() throws Exception { Folder d1 = r.jenkins.createProject(Folder.class, "d1"); d1.createProject(FreeStyleProject.class, "p1"); d1.createProject(FreeStyleProject.class, "p2"); d1.createProject(Folder.class, "d2").createProject(FreeStyleProject.class, "p4"); d1.delete(); assertEquals("AbstractFolder.items is sorted by name so we can predict deletion order", "{d1=[d1], d1/d2=[d1, d1/d2, d1/p1, d1/p2], d1/d2/p4=[d1, d1/d2, d1/d2/p4, d1/p1, d1/p2], d1/p1=[d1, d1/p1, d1/p2], d1/p2=[d1, d1/p2]}", DeleteListener.whatRemainedWhenDeleted.toString()); } @TestExtension("delete") public static class DeleteListener extends ItemListener {
private WorkflowJob createWorkflowJob(Folder folder) throws IOException { if (folder == null) { return j.createProject(WorkflowJob.class); } else { return folder.createProject(WorkflowJob.class, "test" + (folder.getItems().size() + 1)); } }
@Test public void search() throws Exception { FreeStyleProject topJob = r.jenkins.createProject(FreeStyleProject.class, "top job"); Folder f1 = r.jenkins.createProject(Folder.class, "f1"); FreeStyleProject middleJob = f1.createProject(FreeStyleProject.class, "middle job"); Folder f2 = f1.createProject(Folder.class, "f2"); FreeStyleProject bottomJob = f2.createProject(FreeStyleProject.class, "bottom job"); List<SearchItem> items = new ArrayList<SearchItem>(); f1.getSearchIndex().suggest("job", items); assertEquals(new HashSet<SearchItem>(Arrays.asList(middleJob, bottomJob)), new HashSet<SearchItem>(items)); }
/** * When copying a folder, its contents need to be recursively copied. */ @Test public void copy() throws Exception { Folder f = createFolder(); FreeStyleProject c1 = f.createProject(FreeStyleProject.class, "child1"); Folder c2 = f.createProject(Folder.class, "nested"); FreeStyleProject c21 = c2.createProject(FreeStyleProject.class,"child2"); Folder f2 = r.jenkins.copy(f, "fcopy"); assertTrue(f2.getItem("child1") instanceof FreeStyleProject); Folder n = (Folder)f2.getItem("nested"); assertTrue(n.getItem("child2") instanceof FreeStyleProject); }
@Test public void getDestinationsMovingAParentFolderInToTheTree() throws Exception { Folder d1 = r.jenkins.createProject(Folder.class, "d1"); Folder d11 = d1.createProject(Folder.class, "d2"); Folder d12 = d11.createProject(Folder.class, "d3"); Folder d4 = r.jenkins.createProject(Folder.class, "d4"); assertEquals(Arrays.asList(r.jenkins, d4), new StandardHandler().validDestinations(d1)); assertNotEquals(Arrays.asList(d11, d12), new StandardHandler().validDestinations(d1)); }
@Test public void getDestinationsUsingItemsWithSameName() throws Exception { Folder d1 = r.jenkins.createProject(Folder.class, "d1"); Folder d11 = d1.createProject(Folder.class, "d11"); FreeStyleProject j = d1.createProject(FreeStyleProject.class, "j"); Folder d2 = r.jenkins.createProject(Folder.class, "d2"); FreeStyleProject g = d2.createProject(FreeStyleProject.class, "j"); Folder d3 = r.jenkins.createProject(Folder.class, "d3"); Folder d31 = d3.createProject(Folder.class, "d11"); assertEquals(Arrays.asList(r.jenkins, d1, d11, d3, d31), new StandardHandler().validDestinations(j)); assertEquals(Arrays.asList(r.jenkins, d1, d2, d31), new StandardHandler().validDestinations(d11)); assertNotEquals(d2, new StandardHandler().validDestinations(j)); assertNotEquals(Arrays.asList(d11, d3), new StandardHandler().validDestinations(d11)); }
@Test public void getDestinationsUsingSubfolders() throws Exception { Folder d1 = r.jenkins.createProject(Folder.class, "d1"); Folder d11 = d1.createProject(Folder.class, "d11"); FreeStyleProject j = d1.createProject(FreeStyleProject.class, "j"); Folder d2 = r.jenkins.createProject(Folder.class, "d2"); Folder d3 = r.jenkins.createProject(Folder.class, "d3"); Folder d31 = d3.createProject(Folder.class, "d31"); assertEquals(Arrays.asList(r.jenkins, d1, d11, d2, d3, d31), new StandardHandler().validDestinations(j)); assertEquals(Arrays.asList(r.jenkins, d1, d2, d3, d31), new StandardHandler().validDestinations(d11)); assertNotEquals(d11, new StandardHandler().validDestinations(d11)); }
/** * This is more of a test of the core, but make sure the triggers resolve between ourselves. */ @Test public void trigger() throws Exception { Folder f = createFolder(); FreeStyleProject a = f.createProject(FreeStyleProject.class, "a"); FreeStyleProject b = f.createProject(FreeStyleProject.class, "b"); a.getPublishersList().add(new BuildTrigger("b",false)); FreeStyleBuild a1 = r.assertBuildStatusSuccess(a.scheduleBuild2(0)); for (int i=0; i<10 && b.getLastBuild()==null; i++) { Thread.sleep(100); } // make sue that a build of B happens }
/** * Makes sure the child can be deleted. */ @Test public void deleteChild() throws Exception { Folder f = createFolder(); FreeStyleProject child = f.createProject(FreeStyleProject.class, "foo"); assertEquals(1,f.getItems().size()); child.delete(); assertEquals(0,f.getItems().size()); }
@Test public void getDestinationsUsingItemsWithSameNameOnRootContext() throws Exception { FreeStyleProject j = r.jenkins.createProject(FreeStyleProject.class, "j"); Folder d1 = r.jenkins.createProject(Folder.class, "d1"); Folder d11 = d1.createProject(Folder.class, "d11"); Folder d2 = r.jenkins.createProject(Folder.class, "d2"); FreeStyleProject g = d2.createProject(FreeStyleProject.class, "j"); Folder d3 = r.jenkins.createProject(Folder.class, "d3"); Folder d31 = d3.createProject(Folder.class, "d11"); assertEquals(Arrays.asList(r.jenkins, d1, d11, d3, d31), new StandardHandler().validDestinations(j)); assertEquals(Arrays.asList(r.jenkins, d1, d2, d31), new StandardHandler().validDestinations(d11)); assertNotEquals(d2, new StandardHandler().validDestinations(j)); assertNotEquals(d3, new StandardHandler().validDestinations(d11)); }
@Test public void given_folderCredential_when_builtAsSystem_then_credentialFound() throws Exception { Folder f = createFolder(); CredentialsStore folderStore = getFolderStore(f); folderStore.addCredentials(Domain.global(), new UsernamePasswordCredentialsImpl(CredentialsScope.GLOBAL, "foo-manchu", "Dr. Fu Manchu", "foo", "manchu")); FreeStyleProject prj = f.createProject(FreeStyleProject.class, "job"); prj.getBuildersList().add(new HasCredentialBuilder("foo-manchu")); r.buildAndAssertSuccess(prj); }
@Issue("JENKINS-52164") @Test public void renameLinksShouldBeValid() throws Exception { FreeStyleProject project1 = r.createFreeStyleProject(); Folder folder1 = createFolder(); FreeStyleProject project2 = folder1.createProject(FreeStyleProject.class, "project2"); HtmlAnchor anchor = findRenameAnchor(project1); anchor.click(); anchor = findRenameAnchor(project2); anchor.click(); anchor = findRenameAnchor(folder1); // Throws ElementNotFoundException before JENKINS-52164 fix anchor.click(); }
@Test public void getDestinations() throws Exception { Folder d1 = r.jenkins.createProject(Folder.class, "d1"); // where we start FreeStyleProject j = d1.createProject(FreeStyleProject.class, "j"); final Folder d2 = r.jenkins.createProject(Folder.class, "d2"); // where we could go Folder d3 = r.jenkins.createProject(Folder.class, "d3"); // where we cannot r.jenkins.setSecurityRealm(r.createDummySecurityRealm()); r.jenkins.setAuthorizationStrategy(new MockAuthorizationStrategy(). grant(Jenkins.READ, Item.READ).everywhere().to("joe"). grant(Item.CREATE).onItems(d2).to("joe")); try (ACLContext ctx = ACL.as(User.get("joe"))) { assertEquals(Arrays.asList(d1, d2), new StandardHandler().validDestinations(j)); assertEquals(Arrays.asList(r.jenkins, d2), new StandardHandler().validDestinations(d1)); assertNotEquals(Arrays.asList(r.jenkins, d3), new StandardHandler().validDestinations(j)); assertNotEquals(Arrays.asList(d1, d3), new StandardHandler().validDestinations(d1)); } }
@Test public void grandParent() throws Exception { Folder grandParent = j.createProject(Folder.class); getFolderStore(grandParent).addCredentials(Domain.global(), grandParentCred); grandParent.addProperty(new FolderConfig("parent_docker", "https://parent.registry", grandParentCred.getId())); Folder parent = grandParent.createProject(Folder.class, "testParent"); //Can be static since grandParent should be unique expect("declarativeDockerConfig") .inFolder(parent) .runFromRepo(false) .logContains("Docker Label is: parent_docker", "Registry URL is: https://parent.registry", "Registry Creds ID is: " + grandParentCred.getId()).go(); }
/** * Tests the path resolution of "foo" (relative) vs "/foo" (absolute) */ @Test public void copyJob() throws Exception { /* - foo - folder - foo */ FreeStyleProject top = r.createFreeStyleProject("foo"); top.setDescription("top"); Folder f = createFolder(); FreeStyleProject child = f.createProject(FreeStyleProject.class, "foo"); child.setDescription("child"); JenkinsRule.WebClient wc = r.createWebClient(); // "foo" should copy "child" copyViaHttp(f, wc, "foo", "xyz"); assertEquals("child",((Job)f.getItem("xyz")).getDescription()); // "/foo" should copy "top" copyViaHttp(f, wc, "/foo", "uvw"); assertEquals("top",((Job)f.getItem("uvw")).getDescription()); }
@Test public void grandParentOverride() throws Exception { Folder grandParent = j.createProject(Folder.class); getFolderStore(grandParent).addCredentials(Domain.global(), grandParentCred); grandParent.addProperty(new FolderConfig("parent_docker", "https://parent.registry", grandParentCred.getId())); Folder parent = grandParent.createProject(Folder.class, "testParent"); //Can be static since grandParent should be unique getFolderStore(parent).addCredentials(Domain.global(), folderCred); parent.addProperty(new FolderConfig("folder_docker", "https://folder.registry", folderCred.getId())); expect("declarativeDockerConfig") .inFolder(parent) .runFromRepo(false) .logContains("Docker Label is: folder_docker", "Registry URL is: https://folder.registry", "Registry Creds ID is: " + folderCred.getId()) .logNotContains("Docker Label is: parent_docker", "Registry URL is: https://parent.registry", "Registry Creds ID is: " + grandParentCred.getId()).go(); }