Skip to content

Commit ff614b7

Browse files
authored
Merge pull request #78 from olivergondza/modern-scm-regtest
JENKINS-58964 : Regression tests to ensure important impls are modern
2 parents 3ecb10b + ec29ba5 commit ff614b7

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed

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

+44
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,9 @@
2424

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

27+
import edu.umd.cs.findbugs.annotations.NonNull;
2728
import hudson.AbortException;
29+
import hudson.ExtensionList;
2830
import hudson.FilePath;
2931
import hudson.model.Item;
3032
import hudson.model.Result;
@@ -48,6 +50,12 @@
4850
import org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition;
4951
import org.jenkinsci.plugins.workflow.job.WorkflowJob;
5052
import org.jenkinsci.plugins.workflow.job.WorkflowRun;
53+
54+
import static hudson.ExtensionList.lookupSingleton;
55+
import static org.hamcrest.Matchers.contains;
56+
import static org.hamcrest.Matchers.containsInAnyOrder;
57+
import static org.hamcrest.Matchers.instanceOf;
58+
import static org.hamcrest.Matchers.not;
5159
import static org.junit.Assert.*;
5260
import org.junit.ClassRule;
5361
import org.junit.Rule;
@@ -211,6 +219,42 @@ private WorkflowRun prepareRetryTests(SCMSource scmSource) throws Exception{
211219
r.jenkins.setScmCheckoutRetryCount(1);
212220

213221
return r.assertBuildStatus(Result.FAILURE, p.scheduleBuild2(0));
222+
}
223+
224+
@Test
225+
public void modernAndLegacyImpls() {
226+
SCMSourceRetriever.DescriptorImpl modern = lookupSingleton(SCMSourceRetriever.DescriptorImpl.class);
227+
228+
containsInAnyOrder(modern.getSCMDescriptors(), contains(instanceOf(FakeModernSCM.DescriptorImpl.class)));
229+
containsInAnyOrder(modern.getSCMDescriptors(), contains(instanceOf(FakeAlsoModernSCM.DescriptorImpl.class)));
230+
containsInAnyOrder(modern.getSCMDescriptors(), not(contains(instanceOf(BasicSCMSource.DescriptorImpl.class))));
231+
}
232+
// Implementation of latest and greatest API
233+
public static final class FakeModernSCM extends SCMSource {
234+
@Override protected void retrieve(SCMSourceCriteria c, @NonNull SCMHeadObserver o, SCMHeadEvent<?> e, @NonNull TaskListener l) {}
235+
@Override public @NonNull SCM build(@NonNull SCMHead head, SCMRevision revision) { return null; }
236+
@TestExtension("modernAndLegacyImpls") public static final class DescriptorImpl extends SCMSourceDescriptor {}
214237

238+
@Override
239+
protected SCMRevision retrieve(@NonNull String thingName, @NonNull TaskListener listener, Item context) throws IOException, InterruptedException {
240+
return super.retrieve(thingName, listener, context);
241+
}
242+
}
243+
// Implementation of second latest and second greatest API
244+
public static final class FakeAlsoModernSCM extends SCMSource {
245+
@Override protected void retrieve(SCMSourceCriteria c, @NonNull SCMHeadObserver o, SCMHeadEvent<?> e, @NonNull TaskListener l) {}
246+
@Override public @NonNull SCM build(@NonNull SCMHead head, SCMRevision revision) { return null; }
247+
@TestExtension("modernAndLegacyImpls") public static final class DescriptorImpl extends SCMSourceDescriptor {}
248+
249+
@Override
250+
protected SCMRevision retrieve(@NonNull String thingName, @NonNull TaskListener listener) throws IOException, InterruptedException {
251+
return super.retrieve(thingName, listener);
252+
}
253+
}
254+
// No modern stuff
255+
public static class BasicSCMSource extends SCMSource {
256+
@Override protected void retrieve(SCMSourceCriteria c, @NonNull SCMHeadObserver o, SCMHeadEvent<?> e, @NonNull TaskListener l) {}
257+
@Override public @NonNull SCM build(@NonNull SCMHead head, SCMRevision revision) { return null; }
258+
@TestExtension("modernAndLegacyImpls") public static final class DescriptorImpl extends SCMSourceDescriptor {}
215259
}
216260
}

0 commit comments

Comments
 (0)