Skip to content

Commit

Permalink
Some more testing
Browse files Browse the repository at this point in the history
  • Loading branch information
patbos committed Nov 22, 2013
1 parent d97fa54 commit 26d3cad
Show file tree
Hide file tree
Showing 5 changed files with 145 additions and 14 deletions.
35 changes: 26 additions & 9 deletions src/main/java/se/diabol/jenkins/pipeline/PipelineFactory.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,21 +18,19 @@
package se.diabol.jenkins.pipeline;

import hudson.ExtensionList;
import hudson.model.AbstractBuild;
import hudson.model.AbstractProject;
import hudson.model.Cause;
import hudson.model.CauseAction;
import hudson.model.Result;
import hudson.model.User;
import hudson.model.*;
import hudson.scm.ChangeLogSet;
import hudson.scm.RepositoryBrowser;
import hudson.tasks.Publisher;
import hudson.tasks.UserAvatarResolver;
import hudson.tasks.test.AggregatedTestResultAction;
import hudson.util.DescribableList;
import hudson.util.RunList;
import jenkins.model.Jenkins;
import se.diabol.jenkins.pipeline.model.*;
import se.diabol.jenkins.pipeline.model.status.Status;
import se.diabol.jenkins.pipeline.model.status.StatusFactory;
import se.diabol.jenkins.pipeline.trigger.ManualTrigger;
import se.diabol.jenkins.pipeline.util.PipelineUtils;
import se.diabol.jenkins.pipeline.util.ProjectUtil;

Expand Down Expand Up @@ -83,9 +81,28 @@ private static Task getPrototypeTask(AbstractProject project) {
String taskName = property != null && !isNullOrEmpty(property.getTaskName())
? property.getTaskName() : project.getDisplayName();
Status status = project.isDisabled() ? disabled() : idle();
return new Task(project.getName(), taskName, null, status, project.getUrl(), false, null);

return new Task(project.getName(), taskName, null, status, project.getUrl(), isManualTrigger(project), null);
}

public static boolean isManualTrigger(AbstractProject<?, ?> project) {
List<AbstractProject> upstreamProjects = project.getUpstreamProjects();
if (upstreamProjects.size() == 1) {
AbstractProject upstreamProject = upstreamProjects.get(0);
DescribableList<Publisher, Descriptor<Publisher>> upstreamPublishersLists = upstreamProject.getPublishersList();
for (Publisher upstreamPub : upstreamPublishersLists) {
if (upstreamPub instanceof ManualTrigger) {
AbstractProject downstreamProject = ((ManualTrigger) upstreamPub).getProject();
if (project.equals(downstreamProject)) {
return true;
}
}
}
}
return false;
}


/**
* Helper method
*
Expand Down Expand Up @@ -169,7 +186,7 @@ public static List<Pipeline> createPipelineLatest(Pipeline pipeline, int noOfPip
for (Stage stage : pipeline.getStages()) {
List<Task> tasks = new ArrayList<Task>();
for (Task task : stage.getTasks()) {
AbstractProject<?,?> taskProject = getProject(task);
AbstractProject<?, ?> taskProject = getProject(task);
AbstractBuild currentBuild = match(taskProject.getBuilds(), firstBuild);
tasks.add(getTask(task, currentBuild));
}
Expand Down Expand Up @@ -208,7 +225,7 @@ private static Task getTask(Task task, AbstractBuild build) {
AbstractProject project = getProject(task);
Status status = resolveStatus(project, build);
String link = build == null || status.isIdle() || status.isQueued() ? task.getLink() : build.getUrl();
String buildId = build == null || status.isIdle() || status.isQueued() ? null : String.valueOf(build.getNumber());
String buildId = build == null || status.isIdle() || status.isQueued() ? null : String.valueOf(build.getNumber());
return new Task(task.getId(), task.getName(), buildId, status, link, task.isManual(), getTestResult(build));
}

Expand Down
32 changes: 32 additions & 0 deletions src/main/java/se/diabol/jenkins/pipeline/model/ManualStep.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package se.diabol.jenkins.pipeline.model;

import org.kohsuke.stapler.export.Exported;
import org.kohsuke.stapler.export.ExportedBean;

@ExportedBean(defaultVisibility = 100)
public class ManualStep {
private String upstreamProject;
private String upstreamId;
private boolean enabled;

public ManualStep(String upstreamProject, String upstreamId, boolean enabled) {
this.upstreamProject = upstreamProject;
this.upstreamId = upstreamId;
this.enabled = enabled;
}

@Exported
public String getUpstreamProject() {
return upstreamProject;
}

@Exported
public String getUpstreamId() {
return upstreamId;
}

@Exported
public boolean isEnabled() {
return enabled;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -48,11 +48,19 @@ public ManualTrigger(String project) {
triggerConfigs.add(config);
}

public AbstractProject getProject() {
if (triggerConfigs != null && triggerConfigs.size() == 1) {
return triggerConfigs.get(0).getProject();
}
return null;
}

public void trigger(AbstractBuild upstreamBuild, AbstractProject downstream) {
try {
for (ManualTriggerConfig manualTriggerConfig : triggerConfigs) {
if (manualTriggerConfig.getProject().equals(downstream)) {
manualTriggerConfig.perform(upstreamBuild, null, new StreamBuildListener(System.out, Charset.defaultCharset()));
manualTriggerConfig.perform(upstreamBuild, null, new StreamBuildListener(System.out, Charset.defaultCharset()));

}
}
} catch (InterruptedException e) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ public AbstractProject getProject() {
}

protected Future schedule(AbstractBuild<?, ?> build, AbstractProject project, List<Action> list) throws InterruptedException, IOException {
//TODO add who triggered manual step
list.add(new CauseAction(new Cause.UserCause()));
return project.scheduleBuild2(project.getQuietPeriod(),
new Cause.UpstreamCause((Run) build),
list.toArray(new Action[list.size()]));
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,20 @@
package se.diabol.jenkins.pipeline.trigger;

import hudson.model.CauseAction;
import hudson.model.FreeStyleProject;
import hudson.EnvVars;
import hudson.Launcher;
import hudson.model.*;
import hudson.plugins.parameterizedtrigger.AbstractBuildParameters;
import hudson.plugins.parameterizedtrigger.PredefinedBuildParameters;
import hudson.plugins.parameterizedtrigger.ResultCondition;
import hudson.util.StreamTaskListener;
import org.junit.Rule;
import org.junit.Test;
import org.jvnet.hudson.test.JenkinsRule;
import org.jvnet.hudson.test.TestBuilder;
import se.diabol.jenkins.pipeline.PipelineFactory;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import static org.junit.Assert.*;
Expand All @@ -17,7 +26,7 @@ public class ManualTriggerTest {


@Test
public void test1() throws Exception {
public void triggerSimple() throws Exception {
FreeStyleProject a = jenkins.createFreeStyleProject("a");
FreeStyleProject b = jenkins.createFreeStyleProject("b");
ManualTrigger trigger = new ManualTrigger("b");
Expand All @@ -34,12 +43,77 @@ public void test1() throws Exception {

assertNotNull(b.getLastBuild());

//TODO move tests to correct testclass
assertTrue(PipelineFactory.isManualTrigger(b));
assertFalse(PipelineFactory.isManualTrigger(a));


List<CauseAction> causeActions = b.getLastBuild().getActions(CauseAction.class);
assertEquals(2, causeActions.size());
Cause cause1 = causeActions.get(0).getCauses().get(0);
assertTrue(cause1 instanceof Cause.UserCause);
//assertEquals(causeActions.get(0).getCauses().get(0));
}

@Test
public void testParameters() throws Exception {
FreeStyleProject a = jenkins.createFreeStyleProject("a");
FreeStyleProject b = jenkins.createFreeStyleProject("b");
List<AbstractBuildParameters> params = new ArrayList<AbstractBuildParameters>();
params.add(new PredefinedBuildParameters("PARAM1=$BUILD_NUMBER"));

ManualTriggerConfig config = new ManualTriggerConfig("b", ResultCondition.SUCCESS, false, params);
List<ManualTriggerConfig> configs = new ArrayList<ManualTriggerConfig>();
configs.add(config);
ManualTrigger trigger = new ManualTrigger(configs);
a.getPublishersList().add(trigger);


ParameterDefinition parameter = new StringParameterDefinition("PARAM1", "", "");

ParametersDefinitionProperty parameterProperty = new ParametersDefinitionProperty(parameter);

b.addProperty(parameterProperty);

b.getBuildersList().add(new AssertEnvironmentVariable("PARAM1", "1"));

jenkins.getInstance().rebuildDependencyGraph();

jenkins.buildAndAssertSuccess(a);
jenkins.waitUntilNoActivity();
assertNotNull(a.getLastBuild());
assertNull(b.getLastBuild());

trigger.trigger(a.getLastBuild(), b);
jenkins.waitUntilNoActivity();

assertNotNull(b.getLastBuild());



List<CauseAction> causeActions = b.getLastBuild().getActions(CauseAction.class);
assertEquals(2, causeActions.size());

}


private class AssertEnvironmentVariable extends TestBuilder {
private String name;
private String value;

private AssertEnvironmentVariable(String name, String value) {
this.name = name;
this.value = value;
}

public boolean perform(AbstractBuild<?, ?> build, Launcher launcher,
BuildListener listener) throws InterruptedException, IOException {
EnvVars env = build.getEnvironment(new StreamTaskListener(System.out, null));
assertTrue(env.containsKey(name));
assertEquals(value, env.get(name));
return true;
}
}


}

0 comments on commit 26d3cad

Please sign in to comment.