|
24 | 24 |
|
25 | 25 | package org.jenkinsci.plugins.workflow.libs;
|
26 | 26 |
|
| 27 | +import hudson.AbortException; |
27 | 28 | import hudson.FilePath;
|
| 29 | +import hudson.model.Item; |
28 | 30 | import hudson.model.Result;
|
| 31 | +import hudson.model.TaskListener; |
| 32 | +import hudson.scm.ChangeLogSet; |
| 33 | +import hudson.scm.SCM; |
29 | 34 | import hudson.slaves.WorkspaceList;
|
30 |
| - |
31 |
| -import java.util.List; |
32 |
| -import java.util.Iterator; |
| 35 | +import java.io.IOException; |
33 | 36 | import java.util.Collections;
|
| 37 | +import java.util.Iterator; |
| 38 | +import java.util.List; |
34 | 39 | import jenkins.plugins.git.GitSCMSource;
|
35 | 40 | import jenkins.plugins.git.GitSampleRepoRule;
|
| 41 | +import jenkins.scm.api.SCMHead; |
| 42 | +import jenkins.scm.api.SCMHeadEvent; |
| 43 | +import jenkins.scm.api.SCMHeadObserver; |
| 44 | +import jenkins.scm.api.SCMRevision; |
36 | 45 | import jenkins.scm.api.SCMSource;
|
| 46 | +import jenkins.scm.api.SCMSourceCriteria; |
| 47 | +import jenkins.scm.api.SCMSourceDescriptor; |
37 | 48 | import org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition;
|
38 | 49 | import org.jenkinsci.plugins.workflow.job.WorkflowJob;
|
39 | 50 | import org.jenkinsci.plugins.workflow.job.WorkflowRun;
|
40 |
| -import hudson.scm.ChangeLogSet; |
41 |
| -import org.junit.ClassRule; |
42 |
| -import org.junit.Test; |
43 | 51 | import static org.junit.Assert.*;
|
| 52 | +import org.junit.ClassRule; |
44 | 53 | import org.junit.Rule;
|
| 54 | +import org.junit.Test; |
45 | 55 | import org.jvnet.hudson.test.BuildWatcher;
|
46 | 56 | import org.jvnet.hudson.test.Issue;
|
47 | 57 | import org.jvnet.hudson.test.JenkinsRule;
|
| 58 | +import org.jvnet.hudson.test.SingleFileSCM; |
| 59 | +import org.jvnet.hudson.test.TestExtension; |
48 | 60 |
|
49 | 61 | public class SCMSourceRetrieverTest {
|
50 | 62 |
|
@@ -133,6 +145,48 @@ public class SCMSourceRetrieverTest {
|
133 | 145 | }
|
134 | 146 | }
|
135 | 147 |
|
| 148 | + @Issue("JENKINS-43802") |
| 149 | + @Test public void owner() throws Exception { |
| 150 | + GlobalLibraries.get().setLibraries(Collections.singletonList( |
| 151 | + new LibraryConfiguration("test", new SCMSourceRetriever(new NeedsOwnerSCMSource())))); |
| 152 | + WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p"); |
| 153 | + p.setDefinition(new CpsFlowDefinition("@Library('test@abc123') import libVersion; echo(/loaded lib #${libVersion()}/)", true)); |
| 154 | + WorkflowRun b = r.buildAndAssertSuccess(p); |
| 155 | + r.assertLogContains("loaded lib #abc123", b); |
| 156 | + r.assertLogContains("Running in retrieve from p", b); |
| 157 | + } |
| 158 | + public static final class NeedsOwnerSCMSource extends SCMSource { |
| 159 | + @Override protected SCMRevision retrieve(String version, TaskListener listener, Item context) throws IOException, InterruptedException { |
| 160 | + if (context == null) { |
| 161 | + throw new AbortException("No context in retrieve!"); |
| 162 | + } else { |
| 163 | + listener.getLogger().println("Running in retrieve from " + context.getFullName()); |
| 164 | + } |
| 165 | + return new DummySCMRevision(version, new SCMHead("trunk")); |
| 166 | + } |
| 167 | + @Override public SCM build(SCMHead head, SCMRevision revision) { |
| 168 | + String version = ((DummySCMRevision) revision).version; |
| 169 | + return new SingleFileSCM("vars/libVersion.groovy", ("def call() {'" + version + "'}").getBytes()); |
| 170 | + } |
| 171 | + private static final class DummySCMRevision extends SCMRevision { |
| 172 | + private final String version; |
| 173 | + DummySCMRevision(String version, SCMHead head) { |
| 174 | + super(head); |
| 175 | + this.version = version; |
| 176 | + } |
| 177 | + @Override public boolean equals(Object obj) { |
| 178 | + return obj instanceof DummySCMRevision && version.equals(((DummySCMRevision) obj).version); |
| 179 | + } |
| 180 | + @Override public int hashCode() { |
| 181 | + return version.hashCode(); |
| 182 | + } |
| 183 | + } |
| 184 | + @Override protected void retrieve(SCMSourceCriteria criteria, SCMHeadObserver observer, SCMHeadEvent<?> event, TaskListener listener) throws IOException, InterruptedException { |
| 185 | + throw new IOException("not implemented"); |
| 186 | + } |
| 187 | + @TestExtension("owner") public static final class DescriptorImpl extends SCMSourceDescriptor {} |
| 188 | + } |
| 189 | + |
136 | 190 | @Test public void retry() throws Exception {
|
137 | 191 | WorkflowRun b = prepareRetryTests(new FailingSCMSource());
|
138 | 192 | r.assertLogContains("Failing 'checkout' on purpose!", b);
|
|
0 commit comments