Skip to content

Commit

Permalink
Include request parameters #3
Browse files Browse the repository at this point in the history
  • Loading branch information
tomasbjerre committed Mar 28, 2017
1 parent dad0d8f commit 3b1626c
Show file tree
Hide file tree
Showing 5 changed files with 70 additions and 24 deletions.
7 changes: 6 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,15 @@
# Generic Webhook Plugin Changelog
Changelog of Generic Webhook Plugin.
## Unreleased
### GitHub [#3](https://github.com/jenkinsci/generic-webhook-trigger-plugin/issues/3) Lacks job selection
**Include request parameters #3**

[83382f8cab9edef](https://github.com/jenkinsci/generic-webhook-trigger-plugin/commit/83382f8cab9edef) Tomas Bjerre *2017-03-28 18:07:07*

### No issue
**doc**

[8a3d16c88f8c0b7](https://github.com/jenkinsci/generic-webhook-trigger-plugin/commit/8a3d16c88f8c0b7) Tomas Bjerre *2017-03-14 18:13:56*
[dad0d8f3a2d25a3](https://github.com/jenkinsci/generic-webhook-trigger-plugin/commit/dad0d8f3a2d25a3) Tomas Bjerre *2017-03-14 18:14:16*

## 1.4
### No issue
Expand Down
23 changes: 14 additions & 9 deletions src/main/java/org/jenkinsci/plugins/gwt/GenericTrigger.java
Original file line number Diff line number Diff line change
Expand Up @@ -55,25 +55,30 @@ public GenericTrigger(

@Extension public static final GenericDescriptor DESCRIPTOR = new GenericDescriptor();

public void trigger(String postContent) {
public void trigger(Map<String, String[]> parameterMap, String postContent) {
Map<String, String> resolvedVariables =
new VariablesResolver(postContent, genericVariables).getVariables();

List<ParameterValue> parameterList = newArrayList();
for (Entry<String, String> entry : resolvedVariables.entrySet()) {
ParameterValue parameter = new StringParameterValue(entry.getKey(), entry.getValue());
parameterList.add(parameter);
}
ParametersAction parameters = new ParametersAction(parameterList);
new VariablesResolver(parameterMap, postContent, genericVariables).getVariables();

boolean isMatching = isMatching(regexpFilterText, regexpFilterExpression, resolvedVariables);

if (isMatching) {
GenericCause cause = new GenericCause(postContent, resolvedVariables);

ParametersAction parameters = createParameters(resolvedVariables);

job.scheduleBuild2(0, cause, parameters);
}
}

private ParametersAction createParameters(Map<String, String> resolvedVariables) {
List<ParameterValue> parameterList = newArrayList();
for (Entry<String, String> entry : resolvedVariables.entrySet()) {
ParameterValue parameter = new StringParameterValue(entry.getKey(), entry.getValue());
parameterList.add(parameter);
}
return new ParametersAction(parameterList);
}

@VisibleForTesting
boolean isMatching(
String regexpFilterText,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,17 +37,19 @@ public class GenericWebHookRequestReceiver extends CrumbExclusion implements Unp

public HttpResponse doInvoke(StaplerRequest request) {
String postContent = null;
Map<String, String[]> parameterMap = null;
try {
parameterMap = request.getParameterMap();
postContent = IOUtils.toString(request.getInputStream(), UTF_8.name());
} catch (IOException e) {
LOGGER.log(SEVERE, "", e);
}

return doInvoke(postContent);
return doInvoke(parameterMap, postContent);
}

@VisibleForTesting
HttpResponse doInvoke(String postContent) {
HttpResponse doInvoke(Map<String, String[]> parameterMap, String postContent) {
List<GenericTrigger> triggers = JobFinder.findAllJobsWithTrigger();
if (triggers.isEmpty()) {
LOGGER.log(
Expand All @@ -59,7 +61,7 @@ HttpResponse doInvoke(String postContent) {
try {
LOGGER.log(INFO, "Triggering " + trigger.toString());
LOGGER.log(FINE, " with:\n\n" + postContent + "\n\n");
trigger.trigger(postContent);
trigger.trigger(parameterMap, postContent);
triggerResults.put(trigger.toString(), "OK");
} catch (Exception e) {
LOGGER.log(SEVERE, trigger.toString(), e);
Expand Down
24 changes: 21 additions & 3 deletions src/main/java/org/jenkinsci/plugins/gwt/VariablesResolver.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,17 +26,35 @@ public class VariablesResolver {

private List<GenericVariable> genericVariables = Lists.newArrayList();
private final String postContent;
private final Map<String, String[]> parameterMap;

public VariablesResolver(String postContent, List<GenericVariable> genericVariables) {
public VariablesResolver(
Map<String, String[]> parameterMap,
String postContent,
List<GenericVariable> genericVariables) {
this.postContent = postContent;
this.genericVariables = genericVariables;
this.parameterMap = parameterMap;
}

public Map<String, String> getVariables() {
Map<String, String> map = newHashMap();

for (String requestParamName : parameterMap.keySet()) {
String[] values = parameterMap.get(requestParamName);
if (values.length == 1) {
map.put(requestParamName, values[0]);
} else {
for (int i = 0; i < values.length; i++) {
map.put(requestParamName + "_" + i, values[i]);
}
}
}

if (genericVariables == null) {
return newHashMap();
return map;
}
Map<String, String> map = newHashMap();

for (GenericVariable gv : genericVariables) {
Object resolved = resolve(gv);

Expand Down
32 changes: 24 additions & 8 deletions src/test/java/org/jenkinsci/plugins/gwt/VariablesResolverTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import static org.jenkinsci.plugins.gwt.ExpressionType.JSONPath;
import static org.jenkinsci.plugins.gwt.ExpressionType.XPath;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

Expand All @@ -24,13 +25,22 @@ public void testJSONPathGetAllVariable() throws Exception {
List<GenericVariable> genericVariables =
newArrayList( //
new GenericVariable("ids", "$..id", JSONPath, regexpFilter));
Map<String, String[]> parameterMap = new HashMap<>();
String[] values = new String[] {"a", "b"};
parameterMap.put("reqp1", values);
String[] values2 = new String[] {"just one"};
parameterMap.put("reqp2", values2);
Map<String, String> variables =
new VariablesResolver(postContent, genericVariables).getVariables();
new VariablesResolver(parameterMap, postContent, genericVariables).getVariables();

assertThat(variables) //
.containsEntry("ids_0", "28") //
.containsEntry("ids_1", "1") //
.containsEntry("ids_2", "1c3e5deb451353c34264b98c77836012a2106515");
.containsEntry("ids_2", "1c3e5deb451353c34264b98c77836012a2106515") //
.containsEntry("reqp1_0", "a") //
.containsEntry("reqp1_1", "b") //
.containsEntry("reqp2", "just one") //
.hasSize(6);
}

@Test
Expand All @@ -42,8 +52,9 @@ public void testJSONPathGetZeroMatchingVariables() throws Exception {
List<GenericVariable> genericVariables =
newArrayList( //
new GenericVariable("ids", "$..abc", JSONPath, regexpFilter));
Map<String, String[]> parameterMap = new HashMap<>();
Map<String, String> variables =
new VariablesResolver(postContent, genericVariables).getVariables();
new VariablesResolver(parameterMap, postContent, genericVariables).getVariables();

assertThat(variables) //
.isEmpty();
Expand All @@ -58,8 +69,9 @@ public void testJSONPathGetOneVariable() throws Exception {
List<GenericVariable> genericVariables =
newArrayList( //
new GenericVariable("user_name", "$.user.name", JSONPath, regexpFilter));
Map<String, String[]> parameterMap = new HashMap<>();
Map<String, String> variables =
new VariablesResolver(postContent, genericVariables).getVariables();
new VariablesResolver(parameterMap, postContent, genericVariables).getVariables();

assertThat(variables) //
.containsEntry("user_name", "Administrator");
Expand All @@ -75,8 +87,9 @@ public void testJSONPathGetTwoVariables() throws Exception {
newArrayList( //
new GenericVariable("user_name", "$.user.name", JSONPath, "[aA]"), //
new GenericVariable("project_id", "$.project_id", JSONPath, regexpFilter));
Map<String, String[]> parameterMap = new HashMap<>();
Map<String, String> variables =
new VariablesResolver(postContent, genericVariables).getVariables();
new VariablesResolver(parameterMap, postContent, genericVariables).getVariables();

assertThat(variables) //
.containsEntry("user_name", "dministrtor") //
Expand All @@ -92,8 +105,9 @@ public void testXPathGetOneVariable() throws Exception {
List<GenericVariable> genericVariables =
newArrayList( //
new GenericVariable("book", "/bookstore/book[1]/title", XPath, regexpFilter));
Map<String, String[]> parameterMap = new HashMap<>();
Map<String, String> variables =
new VariablesResolver(postContent, genericVariables).getVariables();
new VariablesResolver(parameterMap, postContent, genericVariables).getVariables();

assertThat(variables) //
.containsEntry("book", "Harry Potter");
Expand All @@ -109,8 +123,9 @@ public void testHPathGetTwoVariable() throws Exception {
newArrayList( //
new GenericVariable("book1", "/bookstore/book[1]/title", XPath, "\\s"), //
new GenericVariable("book2", "/bookstore/book[2]/title", XPath, regexpFilter));
Map<String, String[]> parameterMap = new HashMap<>();
Map<String, String> variables =
new VariablesResolver(postContent, genericVariables).getVariables();
new VariablesResolver(parameterMap, postContent, genericVariables).getVariables();

assertThat(variables) //
.containsEntry("book1", "HarryPotter") //
Expand All @@ -125,8 +140,9 @@ public void testXPathGetZeroMatchingVariables() throws Exception {
List<GenericVariable> genericVariables =
newArrayList( //
new GenericVariable("book1", "/bookstore/book[1]/title123", XPath, "[a-z]"));
Map<String, String[]> parameterMap = new HashMap<>();
Map<String, String> variables =
new VariablesResolver(postContent, genericVariables).getVariables();
new VariablesResolver(parameterMap, postContent, genericVariables).getVariables();

assertThat(variables) //
.containsEntry("book1", "");
Expand Down

0 comments on commit 3b1626c

Please sign in to comment.