Skip to content

Commit 0a24f07

Browse files
committedMar 25, 2012
[FIXED JENKINS-12923] Fixed infinite loop, when
"Block until the triggered projects finish their builds" option is used and triggered projects are disabled. Also added test cases.
1 parent 207c7b7 commit 0a24f07

File tree

3 files changed

+71
-9
lines changed

3 files changed

+71
-9
lines changed
 

‎src/main/java/hudson/plugins/parameterizedtrigger/BlockableBuildTriggerConfig.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,10 @@ protected Future schedule(AbstractBuild<?, ?> build, AbstractProject project, Li
6565
// if we fail to add the item to the queue, wait and retry.
6666
// it also means we have to force quiet period = 0, or else it'll never leave the queue
6767
Future f = project.scheduleBuild2(0, new UpstreamCause((Run) build), list.toArray(new Action[list.size()]));
68-
if (f!=null) return f;
68+
//when a project is disabled or the configuration is not yet saved f will always be null and we'ure caught in a loop, therefore we need to check for it
69+
if (f!=null || (f==null && !project.isBuildable())){
70+
return f;
71+
}
6972
Thread.sleep(1000);
7073
}
7174
} else {

‎src/main/java/hudson/plugins/parameterizedtrigger/TriggerBuilder.java

+5
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,11 @@ public boolean perform(AbstractBuild<?, ?> build, Launcher launcher,
104104
}
105105
//handle blocking configs
106106
for (AbstractProject p : projectList) {
107+
//handle non-buildable projects
108+
if(!p.isBuildable()){
109+
listener.getLogger().println("Skipping " + HyperlinkNote.encodeTo('/'+ p.getUrl(), p.getFullDisplayName()) + ". The project is either disabled or the configuration has not been saved yet.");
110+
continue;
111+
}
107112
for (Future<AbstractBuild> future : futures.get(p)) {
108113
try {
109114
listener.getLogger().println("Waiting for the completion of " + HyperlinkNote.encodeTo('/'+ p.getUrl(), p.getFullDisplayName()));

‎src/test/java/hudson/plugins/parameterizedtrigger/test/TriggerBuilderTest.java

+62-8
Original file line numberDiff line numberDiff line change
@@ -24,23 +24,20 @@
2424
package hudson.plugins.parameterizedtrigger.test;
2525

2626
import hudson.model.Cause.UserCause;
27-
import hudson.model.ParametersAction;
2827
import hudson.model.Project;
29-
import hudson.model.StringParameterValue;
28+
import hudson.model.Result;
29+
import hudson.plugins.parameterizedtrigger.AbstractBuildParameterFactory;
3030
import hudson.plugins.parameterizedtrigger.AbstractBuildParameters;
3131
import hudson.plugins.parameterizedtrigger.BlockableBuildTriggerConfig;
3232
import hudson.plugins.parameterizedtrigger.BlockingBehaviour;
33-
import hudson.plugins.parameterizedtrigger.BuildTrigger;
34-
import hudson.plugins.parameterizedtrigger.BuildTriggerConfig;
35-
import hudson.plugins.parameterizedtrigger.CurrentBuildParameters;
36-
import hudson.plugins.parameterizedtrigger.ResultCondition;
33+
import hudson.plugins.parameterizedtrigger.CounterBuildParameterFactory;
3734
import hudson.plugins.parameterizedtrigger.TriggerBuilder;
3835

39-
import java.util.ArrayList;
36+
import java.util.Collections;
4037
import java.util.List;
4138

4239
import org.jvnet.hudson.test.HudsonTestCase;
43-
import org.jvnet.hudson.test.CaptureEnvironmentBuilder;
40+
import com.google.common.collect.ImmutableList;
4441

4542
public class TriggerBuilderTest extends HudsonTestCase {
4643

@@ -126,4 +123,61 @@ public void testNonBlockingTrigger() throws Exception {
126123
assertEquals("Triggering projects: project1, project2, project3", log.get(1));
127124
}
128125

126+
public void testConsoleOutputWithCounterParameters() throws Exception{
127+
createFreeStyleProject("project1");
128+
createFreeStyleProject("project2");
129+
createFreeStyleProject("project3");
130+
131+
Project<?,?> triggerProject = createFreeStyleProject();
132+
133+
BlockingBehaviour blockingBehaviour = new BlockingBehaviour(Result.FAILURE, Result.UNSTABLE, Result.FAILURE);
134+
ImmutableList<AbstractBuildParameterFactory> buildParameter = ImmutableList.<AbstractBuildParameterFactory>of(new CounterBuildParameterFactory("0","2","1", "TEST=COUNT$COUNT"));
135+
List<AbstractBuildParameters> emptyList = Collections.<AbstractBuildParameters>emptyList();
136+
137+
BlockableBuildTriggerConfig bBTConfig = new BlockableBuildTriggerConfig("project1, project2, project3", blockingBehaviour, buildParameter, emptyList);
138+
139+
triggerProject.getBuildersList().add(new TriggerBuilder(bBTConfig));
140+
141+
triggerProject.scheduleBuild2(0, new UserCause()).get();
142+
143+
List<String> log = triggerProject.getLastBuild().getLog(20);
144+
for (String string : log) {
145+
System.out.println(string);
146+
}
147+
148+
assertEquals("project1 #1 completed. Result was SUCCESS", log.get(2));
149+
assertEquals("project1 #2 completed. Result was SUCCESS", log.get(4));
150+
assertEquals("project1 #3 completed. Result was SUCCESS", log.get(6));
151+
assertEquals("project2 #1 completed. Result was SUCCESS", log.get(8));
152+
assertEquals("project2 #2 completed. Result was SUCCESS", log.get(10));
153+
assertEquals("project2 #3 completed. Result was SUCCESS", log.get(12));
154+
assertEquals("project3 #1 completed. Result was SUCCESS", log.get(14));
155+
assertEquals("project3 #2 completed. Result was SUCCESS", log.get(16));
156+
assertEquals("project3 #3 completed. Result was SUCCESS", log.get(18));
157+
}
158+
159+
160+
public void testBlockingTriggerWithDisabledProjects() throws Exception {
161+
createFreeStyleProject("project1");
162+
Project p2 = createFreeStyleProject("project2");
163+
p2.disable();
164+
createFreeStyleProject("project3");
165+
166+
Project<?, ?> triggerProject = createFreeStyleProject("projectA");
167+
168+
TriggerBuilder triggerBuilder = new TriggerBuilder(createTriggerConfig("project1, project2, project3"));
169+
170+
triggerProject.getBuildersList().add(triggerBuilder);
171+
172+
triggerProject.scheduleBuild2(0, new UserCause()).get();
173+
174+
List<String> log = triggerProject.getLastBuild().getLog(20);
175+
for (String string : log) {
176+
System.out.println(string);
177+
}
178+
assertEquals("Waiting for the completion of project1", log.get(1));
179+
assertEquals("Skipping project2. The project is either disabled or the configuration has not been saved yet.", log.get(3));
180+
assertEquals("Waiting for the completion of project3", log.get(4));
181+
182+
}
129183
}

0 commit comments

Comments
 (0)
Please sign in to comment.