/
UpstreamTest.java
73 lines (60 loc) · 2.47 KB
/
UpstreamTest.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package jenkins.advancedqueue.test;
import java.lang.reflect.Constructor;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.junit.Rule;
import org.junit.Test;
import org.jvnet.hudson.test.JenkinsRule;
import org.jvnet.hudson.test.recipes.LocalData;
import hudson.model.Cause;
import hudson.model.Cause.UpstreamCause;
import hudson.model.Cause.UserIdCause;
import jenkins.advancedqueue.testutil.ExpectedItem;
import jenkins.advancedqueue.testutil.JobHelper;
import jenkins.advancedqueue.testutil.TestRunListener;
public class UpstreamTest {
@Rule
public JenkinsRule j = new JenkinsRule();
private final JobHelper jobHelper = new JobHelper(j);
@Test
@LocalData
public void testOrphanDownstreamJob() throws Exception {
// Job 0 should run with default priority, as upstream build is unknown
TestRunListener.init(new ExpectedItem("Job 0", 5));
jobHelper.scheduleProjects(createUpstreamCause("Job X", 987)).go();
j.waitUntilNoActivity();
TestRunListener.assertStartedItems();
}
@Test
@LocalData
public void testUserJobAndAssociatedDownstreamJob() throws Exception {
// Upstream job should run with high priority (user triggered)
TestRunListener.init(new ExpectedItem("Upstream", 1));
jobHelper.scheduleProject("Upstream", new UserIdCause()).go();
j.waitUntilNoActivity();
// Downstream job 1 should run with priority of upstream job build 1
TestRunListener.init(new ExpectedItem("Downstream1", 1));
jobHelper.scheduleProject("Downstream1", createUpstreamCause("Upstream", 1)).go();
j.waitUntilNoActivity();
// Downstream job 2 should run with priority of upstream job build 2 (not present, i.e. default priority
// should be used)
TestRunListener.init(new ExpectedItem("Downstream2", 5));
jobHelper.scheduleProject("Downstream2", createUpstreamCause("Upstream", 2)).go();
j.waitUntilNoActivity();
TestRunListener.assertStartedItems();
}
private UpstreamCause createUpstreamCause(final String upstreamProject, final int upstreamBuild) throws Exception {
final Class<?> clazz = UpstreamCause.class;
final Constructor<?>[] constructors = clazz.getDeclaredConstructors();
for (final Constructor<?> cons : constructors) {
if (Arrays.equals(cons.getParameterTypes(),
new Class<?>[] { String.class, int.class, String.class, List.class })) {
cons.setAccessible(true);
return (UpstreamCause) cons.newInstance(upstreamProject, upstreamBuild, "url",
Collections.<Cause>emptyList());
}
}
return null;
}
}