Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Merge pull request #18 from fredg02/master
[FIXED JENKINS-12923] Fixed infinite loop, when
  • Loading branch information
fredg02 committed Mar 26, 2012
2 parents 207c7b7 + 0a24f07 commit 50e1130
Show file tree
Hide file tree
Showing 3 changed files with 71 additions and 9 deletions.
Expand Up @@ -65,7 +65,10 @@ protected Future schedule(AbstractBuild<?, ?> build, AbstractProject project, Li
// if we fail to add the item to the queue, wait and retry.
// it also means we have to force quiet period = 0, or else it'll never leave the queue
Future f = project.scheduleBuild2(0, new UpstreamCause((Run) build), list.toArray(new Action[list.size()]));
if (f!=null) return f;
//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
if (f!=null || (f==null && !project.isBuildable())){
return f;
}
Thread.sleep(1000);
}
} else {
Expand Down
Expand Up @@ -104,6 +104,11 @@ public boolean perform(AbstractBuild<?, ?> build, Launcher launcher,
}
//handle blocking configs
for (AbstractProject p : projectList) {
//handle non-buildable projects
if(!p.isBuildable()){
listener.getLogger().println("Skipping " + HyperlinkNote.encodeTo('/'+ p.getUrl(), p.getFullDisplayName()) + ". The project is either disabled or the configuration has not been saved yet.");
continue;
}
for (Future<AbstractBuild> future : futures.get(p)) {
try {
listener.getLogger().println("Waiting for the completion of " + HyperlinkNote.encodeTo('/'+ p.getUrl(), p.getFullDisplayName()));
Expand Down
Expand Up @@ -24,23 +24,20 @@
package hudson.plugins.parameterizedtrigger.test;

import hudson.model.Cause.UserCause;
import hudson.model.ParametersAction;
import hudson.model.Project;
import hudson.model.StringParameterValue;
import hudson.model.Result;
import hudson.plugins.parameterizedtrigger.AbstractBuildParameterFactory;
import hudson.plugins.parameterizedtrigger.AbstractBuildParameters;
import hudson.plugins.parameterizedtrigger.BlockableBuildTriggerConfig;
import hudson.plugins.parameterizedtrigger.BlockingBehaviour;
import hudson.plugins.parameterizedtrigger.BuildTrigger;
import hudson.plugins.parameterizedtrigger.BuildTriggerConfig;
import hudson.plugins.parameterizedtrigger.CurrentBuildParameters;
import hudson.plugins.parameterizedtrigger.ResultCondition;
import hudson.plugins.parameterizedtrigger.CounterBuildParameterFactory;
import hudson.plugins.parameterizedtrigger.TriggerBuilder;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import org.jvnet.hudson.test.HudsonTestCase;
import org.jvnet.hudson.test.CaptureEnvironmentBuilder;
import com.google.common.collect.ImmutableList;

public class TriggerBuilderTest extends HudsonTestCase {

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

public void testConsoleOutputWithCounterParameters() throws Exception{
createFreeStyleProject("project1");
createFreeStyleProject("project2");
createFreeStyleProject("project3");

Project<?,?> triggerProject = createFreeStyleProject();

BlockingBehaviour blockingBehaviour = new BlockingBehaviour(Result.FAILURE, Result.UNSTABLE, Result.FAILURE);
ImmutableList<AbstractBuildParameterFactory> buildParameter = ImmutableList.<AbstractBuildParameterFactory>of(new CounterBuildParameterFactory("0","2","1", "TEST=COUNT$COUNT"));
List<AbstractBuildParameters> emptyList = Collections.<AbstractBuildParameters>emptyList();

BlockableBuildTriggerConfig bBTConfig = new BlockableBuildTriggerConfig("project1, project2, project3", blockingBehaviour, buildParameter, emptyList);

triggerProject.getBuildersList().add(new TriggerBuilder(bBTConfig));

triggerProject.scheduleBuild2(0, new UserCause()).get();

List<String> log = triggerProject.getLastBuild().getLog(20);
for (String string : log) {
System.out.println(string);
}

assertEquals("project1 #1 completed. Result was SUCCESS", log.get(2));
assertEquals("project1 #2 completed. Result was SUCCESS", log.get(4));
assertEquals("project1 #3 completed. Result was SUCCESS", log.get(6));
assertEquals("project2 #1 completed. Result was SUCCESS", log.get(8));
assertEquals("project2 #2 completed. Result was SUCCESS", log.get(10));
assertEquals("project2 #3 completed. Result was SUCCESS", log.get(12));
assertEquals("project3 #1 completed. Result was SUCCESS", log.get(14));
assertEquals("project3 #2 completed. Result was SUCCESS", log.get(16));
assertEquals("project3 #3 completed. Result was SUCCESS", log.get(18));
}


public void testBlockingTriggerWithDisabledProjects() throws Exception {
createFreeStyleProject("project1");
Project p2 = createFreeStyleProject("project2");
p2.disable();
createFreeStyleProject("project3");

Project<?, ?> triggerProject = createFreeStyleProject("projectA");

TriggerBuilder triggerBuilder = new TriggerBuilder(createTriggerConfig("project1, project2, project3"));

triggerProject.getBuildersList().add(triggerBuilder);

triggerProject.scheduleBuild2(0, new UserCause()).get();

List<String> log = triggerProject.getLastBuild().getLog(20);
for (String string : log) {
System.out.println(string);
}
assertEquals("Waiting for the completion of project1", log.get(1));
assertEquals("Skipping project2. The project is either disabled or the configuration has not been saved yet.", log.get(3));
assertEquals("Waiting for the completion of project3", log.get(4));

}
}

0 comments on commit 50e1130

Please sign in to comment.