Skip to content

Commit e57b346

Browse files
authored
Remove subversion test dep (#135)
1 parent fab3b11 commit e57b346

File tree

5 files changed

+10
-190
lines changed

5 files changed

+10
-190
lines changed

pom.xml

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -194,32 +194,5 @@
194194
<classifier>tests</classifier>
195195
<scope>test</scope>
196196
</dependency>
197-
<dependency>
198-
<groupId>org.jenkins-ci.plugins</groupId>
199-
<artifactId>subversion</artifactId>
200-
<scope>test</scope>
201-
<exclusions>
202-
<exclusion>
203-
<groupId>org.apache.sshd</groupId>
204-
<artifactId>sshd-common</artifactId>
205-
</exclusion>
206-
<exclusion>
207-
<groupId>org.apache.sshd</groupId>
208-
<artifactId>sshd-core</artifactId>
209-
</exclusion>
210-
</exclusions>
211-
</dependency>
212-
<dependency>
213-
<groupId>org.jenkins-ci.plugins</groupId>
214-
<artifactId>subversion</artifactId>
215-
<classifier>tests</classifier>
216-
<scope>test</scope>
217-
</dependency>
218-
<dependency>
219-
<groupId>org.tmatesoft.svnkit</groupId>
220-
<artifactId>svnkit-cli</artifactId>
221-
<version>1.10.10</version>
222-
<scope>test</scope>
223-
</dependency>
224197
</dependencies>
225198
</project>

src/test/java/org/jenkinsci/plugins/workflow/libs/FolderLibrariesTest.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@
4343
import jenkins.model.Jenkins;
4444
import jenkins.plugins.git.GitSCMSource;
4545
import jenkins.plugins.git.GitSampleRepoRule;
46-
import jenkins.scm.impl.subversion.SubversionSCMSource;
4746
import static org.hamcrest.CoreMatchers.*;
4847
import org.jenkinsci.plugins.scriptsecurity.scripts.ScriptApproval;
4948
import org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition;
@@ -74,17 +73,16 @@ public class FolderLibrariesTest {
7473
Folder d = r.jenkins.createProject(Folder.class, "d");
7574
r.configRoundtrip(d);
7675
assertNull(d.getProperties().get(FolderLibraries.class));
77-
LibraryConfiguration foo = new LibraryConfiguration("foo", new SCMSourceRetriever(new SubversionSCMSource("foo", "https://phony.jenkins.io/foo/")));
7876
LibraryConfiguration bar = new LibraryConfiguration("bar", new SCMRetriever(new GitSCM("https://phony.jenkins.io/bar.git")));
7977
bar.setDefaultVersion("master");
8078
bar.setImplicit(true);
8179
bar.setAllowVersionOverride(false);
82-
d.getProperties().add(new FolderLibraries(Arrays.asList(foo, bar)));
80+
d.getProperties().add(new FolderLibraries(Arrays.asList(bar)));
8381
r.configRoundtrip(d);
8482
FolderLibraries prop = d.getProperties().get(FolderLibraries.class);
8583
assertNotNull(prop);
8684
List<LibraryConfiguration> libs = prop.getLibraries();
87-
r.assertEqualDataBoundBeans(Arrays.asList(foo, bar), libs);
85+
r.assertEqualDataBoundBeans(Arrays.asList(bar), libs);
8886
}
8987

9088
@Test public void registration() throws Exception {

src/test/java/org/jenkinsci/plugins/workflow/libs/GlobalLibrariesTest.java

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@
3737
import jenkins.model.Jenkins;
3838
import jenkins.plugins.git.GitSCMSource;
3939
import jenkins.plugins.git.GitSampleRepoRule;
40-
import jenkins.scm.impl.subversion.SubversionSCMSource;
4140
import org.htmlunit.HttpMethod;
4241
import org.htmlunit.WebRequest;
4342
import org.htmlunit.html.HtmlPage;
@@ -108,14 +107,13 @@ static void checkDefaultVersionRestricted(JenkinsRule r, GitSampleRepoRule sampl
108107

109108
static void configRoundtrip(JenkinsRule r, AbstractGlobalLibraries gl, Permission... alicePrivileges) throws Exception {
110109
assertEquals(Collections.emptyList(), gl.getLibraries());
111-
LibraryConfiguration foo = new LibraryConfiguration("foo", new SCMSourceRetriever(new SubversionSCMSource("foo", "https://phony.jenkins.io/foo/")));
112110
LibraryConfiguration bar = new LibraryConfiguration("bar", new SCMSourceRetriever(new GitSCMSource(null, "https://phony.jenkins.io/bar.git", "", "origin", "+refs/heads/*:refs/remotes/origin/*", "*", "", true)));
113111
LibraryCachingConfiguration cachingConfiguration = new LibraryCachingConfiguration(120, "develop", "master stable");
114-
foo.setCachingConfiguration(cachingConfiguration);
112+
bar.setCachingConfiguration(cachingConfiguration);
115113
bar.setDefaultVersion("master");
116114
bar.setImplicit(true);
117115
bar.setAllowVersionOverride(false);
118-
gl.setLibraries(Arrays.asList(foo, bar));
116+
gl.setLibraries(Arrays.asList(bar));
119117
r.jenkins.setSecurityRealm(r.createDummySecurityRealm());
120118
r.jenkins.setAuthorizationStrategy(new MockAuthorizationStrategy().
121119
grant(alicePrivileges).everywhere().to("alice")
@@ -124,16 +122,16 @@ static void configRoundtrip(JenkinsRule r, AbstractGlobalLibraries gl, Permissio
124122
assertThat(configurePage.getWebResponse().getContentAsString(), containsString("https://phony.jenkins.io/bar.git"));
125123
r.submit(configurePage.getFormByName("config")); // JenkinsRule.configRoundtrip expanded to include login
126124
List<LibraryConfiguration> libs = gl.getLibraries();
127-
r.assertEqualDataBoundBeans(Arrays.asList(foo, bar), libs);
125+
r.assertEqualDataBoundBeans(Arrays.asList(bar), libs);
128126
libs = gl.getLibraries();
129-
r.assertEqualDataBoundBeans(Arrays.asList(foo, bar), libs);
130-
boolean noFoo = true;
127+
r.assertEqualDataBoundBeans(Arrays.asList(bar), libs);
128+
boolean noBar = true;
131129
for (LibraryConfiguration lib : libs) {
132-
if ("foo".equals(lib.getName())) {
133-
noFoo = false;
130+
if ("bar".equals(lib.getName())) {
131+
noBar = false;
134132
r.assertEqualDataBoundBeans(lib.getCachingConfiguration(), cachingConfiguration);
135133
}
136134
}
137-
assertFalse("Missing a library called foo (should not happen)", noFoo);
135+
assertFalse("Missing a library called bar (should not happen)", noBar);
138136
}
139137
}

src/test/java/org/jenkinsci/plugins/workflow/libs/LibraryAdderTest.java

Lines changed: 0 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
import hudson.plugins.git.GitSCM;
3434
import hudson.plugins.git.UserRemoteConfig;
3535
import hudson.scm.ChangeLogSet;
36-
import hudson.scm.SubversionSCM;
3736
import hudson.slaves.WorkspaceList;
3837
import java.time.ZonedDateTime;
3938
import java.util.Collection;
@@ -43,8 +42,6 @@
4342
import java.util.Map;
4443
import jenkins.plugins.git.GitSCMSource;
4544
import jenkins.plugins.git.GitSampleRepoRule;
46-
import jenkins.scm.impl.subversion.SubversionSCMSource;
47-
import jenkins.scm.impl.subversion.SubversionSampleRepoRule;
4845
import static org.hamcrest.MatcherAssert.assertThat;
4946
import static org.hamcrest.Matchers.is;
5047
import static org.hamcrest.Matchers.nullValue;
@@ -73,7 +70,6 @@ public class LibraryAdderTest {
7370
@Rule public JenkinsRule r = new JenkinsRule();
7471
@Rule public GitSampleRepoRule sampleRepo = new GitSampleRepoRule();
7572
@Rule public GitSampleRepoRule sampleRepo2 = new GitSampleRepoRule();
76-
@Rule public SubversionSampleRepoRule sampleSvnRepo = new SubversionSampleRepoRule();
7773

7874
@Test public void smokes() throws Exception {
7975
sampleRepo.init();
@@ -121,57 +117,6 @@ public class LibraryAdderTest {
121117
r.assertLogContains("using modified", r.buildAndAssertSuccess(p));
122118
}
123119

124-
@Test public void interpolationSvn() throws Exception {
125-
sampleSvnRepo.init();
126-
sampleSvnRepo.write("src/pkg/Lib.groovy", "package pkg; class Lib {static String CONST = 'initial'}");
127-
sampleSvnRepo.svnkit("add", sampleSvnRepo.wc() + "/src");
128-
sampleSvnRepo.svnkit("commit", "--message=init", sampleSvnRepo.wc());
129-
sampleSvnRepo.svnkit("copy", "--message=tagged", sampleSvnRepo.trunkUrl(), sampleSvnRepo.tagsUrl() + "/initial");
130-
sampleSvnRepo.write("src/pkg/Lib.groovy", "package pkg; class Lib {static String CONST = 'modified'}");
131-
sampleSvnRepo.svnkit("commit", "--message=modified", sampleSvnRepo.wc());
132-
LibraryConfiguration stuff = new LibraryConfiguration("stuff", new SCMRetriever(new SubversionSCM(sampleSvnRepo.prjUrl() + "/${library.stuff.version}")));
133-
stuff.setDefaultVersion("trunk");
134-
stuff.setImplicit(true);
135-
GlobalLibraries.get().setLibraries(Collections.singletonList(stuff));
136-
WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p");
137-
p.setDefinition(new CpsFlowDefinition("@Library('stuff@trunk') import pkg.Lib; echo(/using ${Lib.CONST}/)", true));
138-
r.assertLogContains("using modified", r.buildAndAssertSuccess(p));
139-
p.setDefinition(new CpsFlowDefinition("@Library('stuff@tags/initial') import pkg.Lib; echo(/using ${Lib.CONST}/)", true));
140-
r.assertLogContains("using initial", r.buildAndAssertSuccess(p));
141-
p.setDefinition(new CpsFlowDefinition("@Library('stuff') import pkg.Lib; echo(/using ${Lib.CONST}/)", true));
142-
r.assertLogContains("using modified", r.buildAndAssertSuccess(p));
143-
p.setDefinition(new CpsFlowDefinition("echo(/using ${pkg.Lib.CONST}/)", true));
144-
r.assertLogContains("using modified", r.buildAndAssertSuccess(p));
145-
}
146-
147-
@Test public void properSvn() throws Exception {
148-
sampleSvnRepo.init();
149-
sampleSvnRepo.write("src/pkg/Lib.groovy", "package pkg; class Lib {static String CONST = 'initial'}");
150-
sampleSvnRepo.svnkit("add", sampleSvnRepo.wc() + "/src");
151-
sampleSvnRepo.svnkit("commit", "--message=init", sampleSvnRepo.wc());
152-
long tag = sampleSvnRepo.revision();
153-
sampleSvnRepo.svnkit("copy", "--message=tagged", sampleSvnRepo.trunkUrl(), sampleSvnRepo.tagsUrl() + "/initial");
154-
sampleSvnRepo.write("src/pkg/Lib.groovy", "package pkg; class Lib {static String CONST = 'modified'}");
155-
sampleSvnRepo.svnkit("commit", "--message=modified", sampleSvnRepo.wc());
156-
LibraryConfiguration stuff = new LibraryConfiguration("stuff", new SCMSourceRetriever(new SubversionSCMSource(null, sampleSvnRepo.prjUrl())));
157-
stuff.setDefaultVersion("trunk");
158-
stuff.setImplicit(true);
159-
GlobalLibraries.get().setLibraries(Collections.singletonList(stuff));
160-
WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p");
161-
p.setDefinition(new CpsFlowDefinition("@Library('stuff@trunk') import pkg.Lib; echo(/using ${Lib.CONST}/)", true));
162-
r.assertLogContains("using modified", r.buildAndAssertSuccess(p));
163-
p.setDefinition(new CpsFlowDefinition("@Library('stuff@tags/initial') import pkg.Lib; echo(/using ${Lib.CONST}/)", true));
164-
r.assertLogContains("using initial", r.buildAndAssertSuccess(p));
165-
p.setDefinition(new CpsFlowDefinition("@Library('stuff') import pkg.Lib; echo(/using ${Lib.CONST}/)", true));
166-
r.assertLogContains("using modified", r.buildAndAssertSuccess(p));
167-
p.setDefinition(new CpsFlowDefinition("echo(/using ${pkg.Lib.CONST}/)", true));
168-
r.assertLogContains("using modified", r.buildAndAssertSuccess(p));
169-
// Note that LibraryAdder.parse uses indexOf not lastIndexOf, so we can have an @ inside a revision
170-
// (the converse is that we may not have an @ inside a library name):
171-
p.setDefinition(new CpsFlowDefinition("@Library('stuff@trunk@" + tag + "') import pkg.Lib; echo(/using ${Lib.CONST}/)", true));
172-
r.assertLogContains("using initial", r.buildAndAssertSuccess(p));
173-
}
174-
175120
@Issue("JENKINS-41497")
176121
@Test public void dontIncludeChangesetsOverriden() throws Exception {
177122
sampleRepo.init();

src/test/java/org/jenkinsci/plugins/workflow/libs/SCMSourceRetrieverTest.java

Lines changed: 0 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,9 @@
2424

2525
package org.jenkinsci.plugins.workflow.libs;
2626

27-
import com.cloudbees.hudson.plugins.folder.Folder;
2827
import edu.umd.cs.findbugs.annotations.NonNull;
2928
import hudson.AbortException;
3029
import hudson.FilePath;
31-
import hudson.Functions;
3230
import hudson.model.Item;
3331
import hudson.model.Result;
3432
import hudson.model.TaskListener;
@@ -37,9 +35,6 @@
3735
import hudson.slaves.WorkspaceList;
3836
import java.io.File;
3937
import java.io.IOException;
40-
import java.nio.charset.StandardCharsets;
41-
import java.nio.file.Files;
42-
import java.nio.file.Path;
4338
import java.util.Collections;
4439
import java.util.Iterator;
4540
import java.util.List;
@@ -53,9 +48,6 @@
5348
import jenkins.scm.api.SCMSource;
5449
import jenkins.scm.api.SCMSourceCriteria;
5550
import jenkins.scm.api.SCMSourceDescriptor;
56-
import jenkins.scm.impl.subversion.SubversionSCMSource;
57-
import jenkins.scm.impl.subversion.SubversionSampleRepoRule;
58-
import org.apache.commons.io.FileUtils;
5951
import org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition;
6052
import org.jenkinsci.plugins.workflow.job.WorkflowJob;
6153
import org.jenkinsci.plugins.workflow.job.WorkflowRun;
@@ -85,9 +77,7 @@
8577
import static org.hamcrest.Matchers.arrayWithSize;
8678
import static org.hamcrest.Matchers.equalTo;
8779
import static org.hamcrest.Matchers.matchesPattern;
88-
import static org.hamcrest.Matchers.nullValue;
8980
import static org.jenkinsci.plugins.workflow.libs.SCMBasedRetriever.PROHIBITED_DOUBLE_DOT;
90-
import static org.junit.Assume.assumeFalse;
9181
import org.jvnet.hudson.test.FlagRule;
9282
import org.jvnet.hudson.test.LoggerRule;
9383

@@ -96,7 +86,6 @@ public class SCMSourceRetrieverTest {
9686
@ClassRule public static BuildWatcher buildWatcher = new BuildWatcher();
9787
@Rule public JenkinsRule r = new JenkinsRule();
9888
@Rule public GitSampleRepoRule sampleRepo = new GitSampleRepoRule();
99-
@Rule public SubversionSampleRepoRule sampleRepoSvn = new SubversionSampleRepoRule();
10089
@Rule public FlagRule<Boolean> includeSrcTest = new FlagRule<>(() -> SCMBasedRetriever.INCLUDE_SRC_TEST_IN_LIBRARIES, v -> SCMBasedRetriever.INCLUDE_SRC_TEST_IN_LIBRARIES = v);
10190
@Rule public LoggerRule logging = new LoggerRule().record(SCMBasedRetriever.class, Level.FINE);
10291

@@ -487,87 +476,4 @@ public static class BasicSCMSource extends SCMSource {
487476
r.assertLogNotContains("Excluding src/test/ from checkout", b);
488477
}
489478

490-
@Issue("SECURITY-2441")
491-
@Test public void libraryNamesAreNotUsedAsCheckoutDirectories() throws Exception {
492-
sampleRepo.init();
493-
sampleRepo.write("vars/globalLibVar.groovy", "def call() { echo('global library') }");
494-
sampleRepo.git("add", "vars");
495-
sampleRepo.git("commit", "--message=init");
496-
LibraryConfiguration globalLib = new LibraryConfiguration("library",
497-
new SCMSourceRetriever(new GitSCMSource(null, sampleRepo.toString(), "", "*", "", true)));
498-
globalLib.setDefaultVersion("master");
499-
globalLib.setImplicit(true);
500-
GlobalLibraries.get().setLibraries(Collections.singletonList(globalLib));
501-
// Create a folder library with the same name as the global library so it takes precedence.
502-
sampleRepoSvn.init();
503-
sampleRepoSvn.write("vars/folderLibVar.groovy", "def call() { jenkins.model.Jenkins.get().setSystemMessage('folder library') }");
504-
// Copy .git folder from the Git repo for the global library into the SVN repo for the folder library as data.
505-
FileUtils.copyDirectory(new File(sampleRepo.getRoot(), ".git"), new File(sampleRepoSvn.wc(), ".git"));
506-
sampleRepoSvn.svnkit("add", sampleRepoSvn.wc() + "/vars");
507-
sampleRepoSvn.svnkit("add", sampleRepoSvn.wc() + "/.git");
508-
sampleRepoSvn.svnkit("commit", "--message=init", sampleRepoSvn.wc());
509-
LibraryConfiguration folderLib = new LibraryConfiguration("library",
510-
new SCMSourceRetriever(new SubversionSCMSource(null, sampleRepoSvn.prjUrl())));
511-
folderLib.setDefaultVersion("trunk");
512-
folderLib.setImplicit(true);
513-
Folder f = r.jenkins.createProject(Folder.class, "folder1");
514-
f.getProperties().add(new FolderLibraries(Collections.singletonList(folderLib)));
515-
// Create a job that uses the folder library, which will take precedence over the global library, since they have the same name.
516-
WorkflowJob p = f.createProject(WorkflowJob.class, "p");
517-
p.setDefinition(new CpsFlowDefinition("folderLibVar()", true));
518-
// First build fails as expected since it is not trusted. The folder library is checked out.
519-
WorkflowRun b1 = r.buildAndAssertStatus(Result.FAILURE, p);
520-
r.assertLogContains("Only using first definition of library library", b1);
521-
r.assertLogContains("Scripts not permitted to use staticMethod jenkins.model.Jenkins get", b1);
522-
// Attacker deletes the folder library, then reruns the build.
523-
// The existing checkout of the SVN repo should not be reused as the Git repo for the global library.
524-
f.getProperties().clear();
525-
WorkflowRun b2 = r.buildAndAssertStatus(Result.FAILURE, p);
526-
r.assertLogContains("No such DSL method 'folderLibVar'", b2);
527-
assertThat(r.jenkins.getSystemMessage(), nullValue());
528-
}
529-
530-
@Issue("SECURITY-2463")
531-
@Test public void checkoutDirectoriesAreNotReusedByDifferentScms() throws Exception {
532-
assumeFalse(Functions.isWindows()); // Checkout hook is not cross-platform.
533-
sampleRepo.init();
534-
sampleRepo.write("vars/foo.groovy", "def call() { echo('using global lib') }");
535-
sampleRepo.git("add", "vars");
536-
sampleRepo.git("commit", "--message=init");
537-
LibraryConfiguration globalLib = new LibraryConfiguration("library",
538-
new SCMSourceRetriever(new GitSCMSource(null, sampleRepo.toString(), "", "*", "", true)));
539-
globalLib.setDefaultVersion("master");
540-
globalLib.setImplicit(true);
541-
GlobalLibraries.get().setLibraries(Collections.singletonList(globalLib));
542-
// Create a folder library with the same name as the global library so it takes precedence.
543-
sampleRepoSvn.init();
544-
sampleRepoSvn.write("vars/foo.groovy", "def call() { echo('using folder lib') }");
545-
// Copy .git folder from the Git repo for the global library into the SVN repo for the folder library as data.
546-
File gitDirInSvnRepo = new File(sampleRepoSvn.wc(), ".git");
547-
FileUtils.copyDirectory(new File(sampleRepo.getRoot(), ".git"), gitDirInSvnRepo);
548-
String jenkinsRootDir = r.jenkins.getRootDir().toString();
549-
// Add a Git post-checkout hook to the .git folder in the SVN repo.
550-
Path postCheckoutHook = gitDirInSvnRepo.toPath().resolve("hooks/post-checkout");
551-
// Always create hooks directory for compatibility with https://github.com/jenkinsci/git-plugin/pull/1207.
552-
Files.createDirectories(postCheckoutHook.getParent());
553-
Files.write(postCheckoutHook, ("#!/bin/sh\ntouch '" + jenkinsRootDir + "/hook-executed'\n").getBytes(StandardCharsets.UTF_8));
554-
sampleRepoSvn.svnkit("add", sampleRepoSvn.wc() + "/vars");
555-
sampleRepoSvn.svnkit("add", sampleRepoSvn.wc() + "/.git");
556-
sampleRepoSvn.svnkit("propset", "svn:executable", "ON", sampleRepoSvn.wc() + "/.git/hooks/post-checkout");
557-
sampleRepoSvn.svnkit("commit", "--message=init", sampleRepoSvn.wc());
558-
LibraryConfiguration folderLib = new LibraryConfiguration("library",
559-
new SCMSourceRetriever(new SubversionSCMSource(null, sampleRepoSvn.prjUrl())));
560-
folderLib.setDefaultVersion("trunk");
561-
folderLib.setImplicit(true);
562-
Folder f = r.jenkins.createProject(Folder.class, "folder1");
563-
f.getProperties().add(new FolderLibraries(Collections.singletonList(folderLib)));
564-
// Run the build using the folder library (which uses the SVN repo).
565-
WorkflowJob p = f.createProject(WorkflowJob.class, "p");
566-
p.setDefinition(new CpsFlowDefinition("foo()", true));
567-
r.buildAndAssertSuccess(p);
568-
// Delete the folder library, and rerun the build so the global library is used.
569-
f.getProperties().clear();
570-
WorkflowRun b2 = r.buildAndAssertSuccess(p);
571-
assertFalse("Git checkout should not execute hooks from SVN repo", new File(r.jenkins.getRootDir(), "hook-executed").exists());
572-
}
573479
}

0 commit comments

Comments
 (0)