Skip to content

Commit

Permalink
[FIXED JENKINS-14545] Correct and add testcases for Env variables
Browse files Browse the repository at this point in the history
  • Loading branch information
cjo9900 committed Nov 14, 2012
1 parent 29a9dce commit ac43521
Show file tree
Hide file tree
Showing 3 changed files with 120 additions and 6 deletions.
Expand Up @@ -61,7 +61,7 @@ public String getUrlName() {


public void buildEnvVars(AbstractBuild<?, ?> build, EnvVars env) {
String sanatizedBuildName = buildName.toUpperCase().replaceAll("[^A-Z0-9]+", "_");
String sanatizedBuildName = buildName.replaceAll("[^a-zA-Z0-9]+", "_");
// Note: this will only indicate the last project in the list that is ran
env.put(JOB_NAME_VARIABLE, sanatizedBuildName);
// All Triggered job names
Expand Down
Expand Up @@ -41,12 +41,16 @@
case, the build will be considered as unstable based on the result of the
triggered builds and the value of this option.</li>
</ul>
With this option enabled the builds for the projects triggered are avalible as Env variables for future build steps<br/>
With this option enabled the builds for the projects triggered are available as
Env variables for future build steps<br/>
<ul>
<li><b>LAST_TRIGGERED_JOB_NAME</b>="Last project started"</li>
<li><b>TRIGGERED_JOB_NAMES</b>="Comma seperated list of all triggered projects"</li>
<li><b>TRIGGERED_BUILD_NUMBER_&lt;project name&gt;</b>="Last build number triggered"</li>
<li><b>TRIGGERED_BUILD_NUMBERS_&lt;project name&gt;</b>="Comma seperated list of build numbers triggered"</li>
<li><b>TRIGGERED_JOB_NAMES</b>="Comma separated list of all triggered projects"</li>
<li><b>TRIGGERED_BUILD_NUMBER_&lt;project name&gt;</b>="Last build number
triggered"</li>
<li><b>TRIGGERED_BUILD_NUMBERS_&lt;project name&gt;</b>="Comma separated
list of build numbers triggered"</li>
</ul>
All Project names are converted into upper case and characters not A-Z or 0-9 are replaced by _(multiple characters are condensed into a single _).
All Project names have characters not a-zA-Z or 0-9 replaced by
_(multiple characters are condensed into a single _).
</div>
Expand Up @@ -23,16 +23,22 @@
*/
package hudson.plugins.parameterizedtrigger.test;

import com.google.common.collect.ImmutableList;

import hudson.EnvVars;
import hudson.model.AbstractBuild;
import hudson.model.Cause.UserCause;
import hudson.model.Project;
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.CounterBuildParameterFactory;
import hudson.plugins.parameterizedtrigger.CurrentBuildParameters;
import hudson.plugins.parameterizedtrigger.TriggerBuilder;

import java.util.Collections;
import java.util.Map;
import java.util.ArrayList;
import java.util.List;
Expand Down Expand Up @@ -84,4 +90,108 @@ public void test() throws Exception {
assertThat(envVars, hasEntry("LAST_TRIGGERED_JOB_NAME", "projectB"));
assertThat(envVars, hasEntry("TRIGGERED_BUILD_NUMBER_projectB", Integer.toString(expectedBuildNumber)));
}

public void test_oddchars() throws Exception {
Project<?,?> projectA = createFreeStyleProject("projectA");
List<AbstractBuildParameters> buildParameters = new ArrayList<AbstractBuildParameters>();
buildParameters.add(new CurrentBuildParameters());
BlockingBehaviour neverFail = new BlockingBehaviour("never", "never", "never");

String testName = "odd£()+}{-=~chars-10";
String testNameResult = "odd_chars_10";
BlockableBuildTriggerConfig config = new BlockableBuildTriggerConfig(testName, neverFail, buildParameters);
projectA.getBuildersList().add(new TriggerBuilder(config));

CaptureEnvironmentBuilder builder = new CaptureEnvironmentBuilder();
projectA.getBuildersList().add(builder);

Project projectB = createFreeStyleProject(testName);
projectB.setQuietPeriod(0);
hudson.rebuildDependencyGraph();
// Just to make sure they differ from projectA's build numbers.
projectB.updateNextBuildNumber(3);

int expectedBuildNumber = projectB.getNextBuildNumber();
projectA.scheduleBuild2(0, new UserCause()).get();

EnvVars envVars = builder.getEnvVars();

assertThat(envVars, notNullValue());
assertThat(envVars, hasEntry("LAST_TRIGGERED_JOB_NAME", testNameResult));
assertThat(envVars, hasEntry("TRIGGERED_BUILD_NUMBER_"+testNameResult, Integer.toString(expectedBuildNumber)));

// The below test for expectedBuildNumber is meaningless if the
// value doesn't update, though it should always update.
assertThat(projectB.getNextBuildNumber(), is(not(expectedBuildNumber)));

expectedBuildNumber = projectB.getNextBuildNumber();
projectA.scheduleBuild2(0, new UserCause()).get();
envVars = builder.getEnvVars();

assertThat(envVars, notNullValue());
assertThat(envVars, hasEntry("LAST_TRIGGERED_JOB_NAME", testNameResult));
assertThat(envVars, hasEntry("TRIGGERED_BUILD_NUMBER_"+testNameResult, Integer.toString(expectedBuildNumber)));
}

public void test_multipletriggers() throws Exception {
String testNameResult = "projectB";
String testNameResult2 = "projectC";
int buildsToTest = 3;

Project<?,?> projectA = createFreeStyleProject();
Project projectB = createFreeStyleProject(testNameResult);
Project projectC = createFreeStyleProject(testNameResult2);
projectA.getBuildersList().add(
new TriggerBuilder(
new BlockableBuildTriggerConfig(testNameResult +"," + testNameResult2,
new BlockingBehaviour(Result.FAILURE, Result.UNSTABLE, Result.FAILURE),
ImmutableList.<AbstractBuildParameterFactory>of(new CounterBuildParameterFactory("0",Integer.toString(buildsToTest-1),"1", "TEST=COUNT$COUNT")),
Collections.<AbstractBuildParameters>emptyList())));

CaptureEnvironmentBuilder builder = new CaptureEnvironmentBuilder();
projectA.getBuildersList().add(builder);

projectB.setQuietPeriod(0);
projectB.updateNextBuildNumber(3);

projectC.setQuietPeriod(0);
projectC.updateNextBuildNumber(12);
hudson.rebuildDependencyGraph();

int firstExpectedBuildNumberB = projectB.getNextBuildNumber();
int firstExpectedBuildNumberC = projectC.getNextBuildNumber();

projectA.scheduleBuild2(0, new UserCause()).get();
waitUntilNoActivity();

assertEquals(buildsToTest, projectB.getBuilds().size());
assertEquals(buildsToTest, projectC.getBuilds().size());

int lastBuildNumberB = firstExpectedBuildNumberB + (buildsToTest-1);
int lastBuildNumberC = firstExpectedBuildNumberC + (buildsToTest-1);

String allBuildNumbersB = Integer.toString(firstExpectedBuildNumberB);
while(firstExpectedBuildNumberB < lastBuildNumberB) {
firstExpectedBuildNumberB++;
allBuildNumbersB += "," + firstExpectedBuildNumberB;
}
String allBuildNumbersC = Integer.toString(firstExpectedBuildNumberC);
while(firstExpectedBuildNumberC < lastBuildNumberC) {
firstExpectedBuildNumberC++;
allBuildNumbersC += "," + firstExpectedBuildNumberC;
}

EnvVars envVars = builder.getEnvVars();

assertThat(envVars, notNullValue());
assertThat(envVars, hasEntry("LAST_TRIGGERED_JOB_NAME", testNameResult2));
assertThat(envVars, hasEntry("TRIGGERED_BUILD_NUMBER_"+testNameResult, Integer.toString(lastBuildNumberB)));
assertThat(envVars, hasEntry("TRIGGERED_BUILD_NUMBER_"+testNameResult2, Integer.toString(lastBuildNumberC)));

assertThat(envVars, hasEntry("TRIGGERED_JOB_NAMES", testNameResult + "," + testNameResult2));

assertThat(envVars, hasEntry("TRIGGERED_BUILD_NUMBERS_"+testNameResult, allBuildNumbersB));
assertThat(envVars, hasEntry("TRIGGERED_BUILD_NUMBERS_"+testNameResult2, allBuildNumbersC));

}
}

0 comments on commit ac43521

Please sign in to comment.