Skip to content

Commit 15263a6

Browse files
Fix NPE in ReverseBuildTrigger due to null upstream threshold (#23916)
* Fix NPE in ReverseBuildTrigger due to null upstream threshold (JENKINS-39044) * Use ReverseTrigger constructor that is not deprecated Has the same result as the deprecated constructor that was used before. * Add automated test of JENKINS-39044 If the ReverseTrigger threshold were null, a null pointer exception would be thrown. The config round trip operation resets a null threshold to SUCCESS, so this test reaches inside the job definition and changes the threshold directly. Testing done: * Confirmed that the modified automated test fails when the change to ReverseTrigger is removed. * Confirmed that the modified automated test passes when the change to ReverseTrigger is included. * Link to GitHub issue --------- Co-authored-by: Mark Waite <[email protected]>
1 parent 4df1ecc commit 15263a6

File tree

2 files changed

+9
-4
lines changed

2 files changed

+9
-4
lines changed

core/src/main/java/jenkins/triggers/ReverseBuildTrigger.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ private boolean shouldTrigger(Run upstreamBuild, TaskListener listener) {
166166
return false;
167167
}
168168
Result result = upstreamBuild.getResult();
169-
return result != null && result.isBetterOrEqualTo(threshold);
169+
return result != null && result.isBetterOrEqualTo(threshold != null ? threshold : Result.SUCCESS);
170170
}
171171

172172
@Override public void buildDependencyGraph(final AbstractProject downstream, DependencyGraph graph) {

test/src/test/java/jenkins/triggers/ReverseBuildTriggerTest.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -189,25 +189,30 @@ void upstreamProjectSecurity() throws Exception {
189189
assertEquals(3, downstream.getLastBuild().number);
190190
}
191191

192-
@Issue("JENKINS-29876")
192+
@Issue({"JENKINS-29876", "JENKINS-39044", "https://github.com/jenkinsci/jenkins/issues/17611"})
193193
@Test
194194
void nullJobInTriggerNotCausesNPE() throws Exception {
195195
final FreeStyleProject upstreamJob = r.createFreeStyleProject("upstream");
196196

197197
//job with trigger.job == null
198198
final FreeStyleProject downstreamJob1 = r.createFreeStyleProject("downstream1");
199-
final ReverseBuildTrigger reverseBuildTrigger = new ReverseBuildTrigger("upstream", Result.SUCCESS);
199+
final ReverseBuildTrigger reverseBuildTrigger = new ReverseBuildTrigger("upstream");
200200
downstreamJob1.addTrigger(reverseBuildTrigger);
201201
downstreamJob1.save();
202202

203203
//job with trigger.job != null
204204
final FreeStyleProject downstreamJob2 = r.createFreeStyleProject("downstream2");
205-
final ReverseBuildTrigger reverseBuildTrigger2 = new ReverseBuildTrigger("upstream", Result.SUCCESS);
205+
final ReverseBuildTrigger reverseBuildTrigger2 = new ReverseBuildTrigger("upstream");
206206
downstreamJob2.addTrigger(reverseBuildTrigger2);
207207
downstreamJob2.save();
208208
r.configRoundtrip(downstreamJob2);
209209

210210
r.jenkins.rebuildDependencyGraph();
211+
212+
// JENKINS-39044 - NPE if trigger threshold is null
213+
ReverseBuildTrigger trigger = downstreamJob2.getTrigger(ReverseBuildTrigger.class);
214+
trigger.setThreshold(null);
215+
211216
final FreeStyleBuild build = r.buildAndAssertSuccess(upstreamJob);
212217
r.waitUntilNoActivity();
213218

0 commit comments

Comments
 (0)