diff --git a/core/src/main/java/jenkins/widgets/HistoryPageFilter.java b/core/src/main/java/jenkins/widgets/HistoryPageFilter.java index 517a08e7c8..1cb851f402 100644 --- a/core/src/main/java/jenkins/widgets/HistoryPageFilter.java +++ b/core/src/main/java/jenkins/widgets/HistoryPageFilter.java @@ -27,6 +27,8 @@ import com.google.common.collect.Iterables; import com.google.common.collect.Iterators; import hudson.model.AbstractBuild; import hudson.model.Job; +import hudson.model.ParameterValue; +import hudson.model.ParametersAction; import hudson.model.Queue; import hudson.model.Run; import hudson.widgets.HistoryWidget; @@ -345,8 +347,11 @@ public class HistoryPageFilter { return true; } else if (fitsSearchString(run.getResult())) { return true; - } else if (run instanceof AbstractBuild) { - if (fitsSearchBuild((AbstractBuild) run)) { + } else if (run instanceof AbstractBuild && fitsSearchBuildVariables((AbstractBuild) run)) { + return true; + } else { + ParametersAction parametersAction = run.getAction(ParametersAction.class); + if (parametersAction != null && fitsSearchBuildParameters(parametersAction)) { return true; } } @@ -371,8 +376,9 @@ public class HistoryPageFilter { return false; } - private boolean fitsSearchBuild(AbstractBuild runAsBuild) { + private boolean fitsSearchBuildVariables(AbstractBuild runAsBuild) { Map buildVariables = runAsBuild.getBuildVariables(); + //TODO: Add isSensitive filtering for (Object paramsValues : buildVariables.values()) { if (fitsSearchString(paramsValues)) { return true; @@ -380,4 +386,15 @@ public class HistoryPageFilter { } return false; } + + private boolean fitsSearchBuildParameters(ParametersAction parametersAction) { + List parameters = parametersAction.getParameters(); + //TODO: Add isSensitive filtering + for (ParameterValue parameter : parameters) { + if (fitsSearchString(parameter.getValue())) { + return true; + } + } + return false; + } } diff --git a/core/src/test/java/jenkins/widgets/HistoryPageFilterTest.java b/core/src/test/java/jenkins/widgets/HistoryPageFilterTest.java index 9d77fd6a2d..b8dbd40c27 100644 --- a/core/src/test/java/jenkins/widgets/HistoryPageFilterTest.java +++ b/core/src/test/java/jenkins/widgets/HistoryPageFilterTest.java @@ -29,9 +29,13 @@ import hudson.model.FreeStyleProject; import hudson.model.Job; import hudson.model.MockItem; import hudson.model.ModelObject; +import hudson.model.ParameterValue; +import hudson.model.ParametersAction; import hudson.model.Queue; import hudson.model.Result; import hudson.model.Run; +import hudson.model.StringParameterValue; + import org.junit.Assert; import org.junit.Test; import org.mockito.Mockito; @@ -39,6 +43,7 @@ import org.mockito.Mockito; import java.io.IOException; import java.util.ArrayList; import java.util.Calendar; +import java.util.Collections; import java.util.List; import java.util.Map; @@ -352,15 +357,15 @@ public class HistoryPageFilterTest { } @Test - public void test_search_builds_by_build_params() throws IOException { + public void test_search_builds_by_build_variables() throws IOException { //given HistoryPageFilter historyPageFilter = newPage(5, null, null); //and historyPageFilter.setSearchString("dummyEnv"); //and List runs = new ArrayList<>(); - runs.add(new MockBuild(2, ImmutableMap.of("env", "dummyEnv"))); - runs.add(new MockBuild(1, ImmutableMap.of("env", "otherEnv"))); + runs.add(new MockBuild(2).withBuildVariables(ImmutableMap.of("env", "dummyEnv"))); + runs.add(new MockBuild(1).withBuildVariables(ImmutableMap.of("env", "otherEnv"))); List queueItems = newQueueItems(3, 4); //when @@ -371,7 +376,27 @@ public class HistoryPageFilterTest { Assert.assertEquals(HistoryPageEntry.getEntryId(2), historyPageFilter.runs.get(0).getEntryId()); } - private List newQueueItems(long startId, long endId) { + @Test + public void test_search_builds_by_build_params() throws IOException { + //given + HistoryPageFilter historyPageFilter = newPage(5, null, null); + //and + historyPageFilter.setSearchString("dummyEnv"); + //and + List runs = new ArrayList<>(); + runs.add(new MockBuild(2).withBuildParameters(ImmutableMap.of("env", "dummyEnv"))); + runs.add(new MockBuild(1).withBuildParameters(ImmutableMap.of("env", "otherEnv"))); + List queueItems = newQueueItems(3, 4); + + //when + historyPageFilter.add(runs, queueItems); + + //then + Assert.assertEquals(1, historyPageFilter.runs.size()); + Assert.assertEquals(HistoryPageEntry.getEntryId(2), historyPageFilter.runs.get(0).getEntryId()); + } + + private List newQueueItems(long startId, long endId) { List items = new ArrayList<>(); for (long queueId = startId; queueId <= endId; queueId++) { items.add(new MockItem(queueId)); @@ -460,12 +485,12 @@ public class HistoryPageFilterTest { private static class MockBuild extends Build { private final int buildNumber; - private final Map buildVariables; - public MockBuild(int buildNumber, Map buildVariables) { + private Map buildVariables = Collections.emptyMap(); + + private MockBuild(int buildNumber) { super(Mockito.mock(FreeStyleProject.class), Mockito.mock(Calendar.class)); this.buildNumber = buildNumber; - this.buildVariables = buildVariables; } @Override @@ -477,5 +502,24 @@ public class HistoryPageFilterTest { public Map getBuildVariables() { return buildVariables; } + + MockBuild withBuildVariables(Map buildVariables) { + this.buildVariables = buildVariables; + return this; + } + + MockBuild withBuildParameters(Map buildParametersAsMap) throws IOException { + addAction(new ParametersAction(buildPropertiesMapToParameterValues(buildParametersAsMap), buildParametersAsMap.keySet())); + return this; + } + + //TODO: Rewrite in functional style when Java 8 is available + private List buildPropertiesMapToParameterValues(Map buildParametersAsMap) { + List parameterValues = new ArrayList<>(); + for (Map.Entry parameter : buildParametersAsMap.entrySet()) { + parameterValues.add(new StringParameterValue(parameter.getKey(), parameter.getValue())); + } + return parameterValues; + } } }