Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Merge pull request #45 from lvotypko/matrix-configuration-parameters
Fix JENKINS-43390.
  • Loading branch information
olivergondza committed Apr 8, 2017
2 parents 2d8aff7 + 82f7444 commit 181d17f
Show file tree
Hide file tree
Showing 3 changed files with 80 additions and 2 deletions.
17 changes: 15 additions & 2 deletions src/main/java/hudson/matrix/MatrixChildParametersAction.java
Expand Up @@ -25,6 +25,7 @@

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

import javax.annotation.Nonnull;
Expand All @@ -49,8 +50,8 @@
*/
@Restricted(NoExternalUse.class)
public class MatrixChildParametersAction extends ParametersAction implements MatrixChildAction {

private final List<ParameterValue> parameters;
private transient List<ParameterValue> parameters;

MatrixChildParametersAction(List<ParameterValue> parameters) {
this.parameters = parameters;
Expand All @@ -61,6 +62,18 @@ public List<ParameterValue> getParameters() {
return parameters;
}

//adding references to parameters from parent build - replacement of saving it persistently and loading as a different object.
public void onLoad(MatrixRun run){
ParametersAction action = run.getParentBuild().getAction(ParametersAction.class);
if (action != null){
parameters = new ArrayList<ParameterValue>(action.getParameters());
}
else{
parameters = Collections.emptyList();
}
}


@Override
public ParameterValue getParameter(String name) {
for (ParameterValue p : parameters) {
Expand Down
11 changes: 11 additions & 0 deletions src/main/java/hudson/matrix/MatrixRun.java
Expand Up @@ -26,6 +26,7 @@
import hudson.EnvVars;
import hudson.FilePath;
import hudson.model.AbstractBuild;
import hudson.model.Action;
import hudson.model.Build;
import hudson.model.Node;
import hudson.slaves.WorkspaceList;
Expand All @@ -37,6 +38,7 @@
import java.io.File;
import java.io.IOException;
import java.util.Calendar;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

Expand Down Expand Up @@ -125,6 +127,15 @@ public Map<String,String> getBuildVariables() {
return r;
}


@Override
protected void onLoad() {
super.onLoad();
for (MatrixChildParametersAction action : this.getActions(MatrixChildParametersAction.class)){
action.onLoad(this);
}
}

/**
* If the parent {@link MatrixBuild} is kept, keep this record too.
*/
Expand Down
54 changes: 54 additions & 0 deletions src/test/java/hudson/matrix/MatrixChildParametersActionTest.java
@@ -0,0 +1,54 @@
package hudson.matrix;

import hudson.model.*;
import hudson.util.FormValidation;
import org.junit.Rule;
import org.junit.Test;
import org.jvnet.hudson.test.JenkinsRule;

import static org.junit.Assert.*;

/**
* Created by lvotypko on 4/4/17.
*/
public class MatrixChildParametersActionTest {

@Rule
public JenkinsRule j = new JenkinsRule();

@Test
public void testLoadingParameters() throws Exception {
MatrixProject project = j.createMatrixProject("project");
StringParameterDefinition def1 = new StringParameterDefinition("definition1", "value1", "description");
StringParameterDefinition def2 = new StringParameterDefinition("definition2", "value2", "description");
ParametersDefinitionProperty prop = new ParametersDefinitionProperty(def1,def2);
project.addProperty(prop);
AxisList axes = new AxisList(
new Axis("a","axis1","axis2"));
project.setAxes(axes);
project.save();
j.buildAndAssertSuccess(project);
MatrixBuild build = project.getLastBuild();
assertEquals("Two configuration should have been build.",2, build.getRuns().size());
checkReferencesForParameters(build);

//reloading
j.jenkins.reload();
project = j.jenkins.getItemByFullName("project", MatrixProject.class);
build = project.getLastBuild();
checkReferencesForParameters(build);
}

private void checkReferencesForParameters(MatrixBuild build) {
ParametersAction action = build.getAction(ParametersAction.class);
ParameterValue definition1 = action.getParameter("definition1");
ParameterValue definition2 = action.getParameter("definition2");
for(MatrixRun run : build.getExactRuns()){
ParametersAction matrichChildParameters = build.getAction(ParametersAction.class);
ParameterValue definition1Child = run.getAction(ParametersAction.class).getParameter("definition1");
ParameterValue definition2Child = run.getAction(ParametersAction.class).getParameter("definition2");
assertSame("Parameters shoud be references to parameters of parent build.", definition1Child, definition1);
assertSame("Parameters shoud be references to parameters of parent build.", definition2Child, definition2);
}
}
}

0 comments on commit 181d17f

Please sign in to comment.