From d6d034f665cbc6357ec7ed5b7e0acd1209b5284f Mon Sep 17 00:00:00 2001 From: Tomas Bjerre Date: Thu, 17 Oct 2024 16:48:49 +0200 Subject: [PATCH] chore: formatting with spotless --- pom.xml | 454 +++++---- .../jenkinsci/plugins/gwt/ExpressionType.java | 4 +- .../org/jenkinsci/plugins/gwt/FoundJob.java | 24 +- .../jenkinsci/plugins/gwt/GenericCause.java | 92 +- .../plugins/gwt/GenericHeaderVariable.java | 55 +- .../plugins/gwt/GenericRequestVariable.java | 55 +- .../plugins/gwt/GenericResponse.java | 17 +- .../jenkinsci/plugins/gwt/GenericTrigger.java | 535 ++++++----- .../plugins/gwt/GenericTriggerResults.java | 90 +- .../plugins/gwt/GenericVariable.java | 153 +-- .../gwt/GenericWebHookRequestReceiver.java | 398 ++++---- .../GenericWebhookEnvironmentContributor.java | 63 +- .../plugins/gwt/GenericWebhookResponse.java | 30 +- .../plugins/gwt/ParameterActionUtil.java | 115 ++- .../org/jenkinsci/plugins/gwt/Renderer.java | 117 ++- .../plugins/gwt/global/CredentialsHelper.java | 92 +- .../plugins/gwt/global/Whitelist.java | 86 +- .../gwt/global/WhitelistAlgorithm.java | 30 +- .../plugins/gwt/global/WhitelistItem.java | 174 ++-- .../gwt/jobfinder/GenericTriggerFinder.java | 21 +- .../plugins/gwt/jobfinder/JobFinder.java | 150 ++- .../gwt/jobfinder/JobFinderImpersonater.java | 169 ++-- .../plugins/gwt/resolvers/FlattenerUtils.java | 20 +- .../plugins/gwt/resolvers/JsonFlattener.java | 91 +- .../PostContentParameterResolver.java | 163 ++-- .../gwt/resolvers/RequestHeaderResolver.java | 70 +- .../resolvers/RequestParameterResolver.java | 70 +- .../gwt/resolvers/VariablesResolver.java | 94 +- .../plugins/gwt/resolvers/XmlFlattener.java | 124 ++- .../plugins/gwt/whitelist/HMACVerifier.java | 133 ++- .../plugins/gwt/whitelist/HostVerifier.java | 97 +- .../gwt/whitelist/WhitelistException.java | 8 +- .../plugins/gwt/whitelist/WhitelistHost.java | 245 +++-- .../gwt/whitelist/WhitelistVerifier.java | 103 +- .../plugins/gwt/ArrayEnumeration.java | 30 +- .../plugins/gwt/GenericCauseTest.java | 41 +- .../gwt/GenericTriggerResultsTest.java | 68 +- .../plugins/gwt/GenericTriggerTest.java | 44 +- .../GenericWebHookRequestReceiverTest.java | 487 +++++----- .../plugins/gwt/ParameterActionUtilTest.java | 214 ++--- .../jenkinsci/plugins/gwt/RendererTest.java | 360 ++++--- .../gwt/VariablesResolverHeaderTest.java | 378 ++++---- .../gwt/VariablesResolverJsonPathTest.java | 848 ++++++++--------- ...VariablesResolverRequestParameterTest.java | 166 ++-- .../gwt/VariablesResolverXPathTest.java | 880 +++++++++--------- .../plugins/gwt/bdd/FeatureState.java | 209 +++-- .../plugins/gwt/bdd/GenericFilterPojo.java | 28 +- .../plugins/gwt/bdd/GenericVariablePojo.java | 106 +-- .../gwt/bdd/GenericVariablesResolvedPojo.java | 28 +- .../jenkinsci/plugins/gwt/bdd/Stepdefs.java | 326 ++++--- .../plugins/gwt/jobfinder/JobFinderTest.java | 241 +++-- .../gwt/whitelist/HMACVerifierTest.java | 227 +++-- .../gwt/whitelist/WhitelistVerifierTest.java | 542 +++++------ 53 files changed, 4588 insertions(+), 4777 deletions(-) diff --git a/pom.xml b/pom.xml index 1c0eb8eb..62170d03 100644 --- a/pom.xml +++ b/pom.xml @@ -1,232 +1,222 @@ - - 4.0.0 - - org.jenkins-ci.plugins - plugin - 4.74 - - - - 2.414.3 - false - true - 2.2.0 - 2.2.0 - - - generic-webhook-trigger - 2.2.5-SNAPSHOT - Generic Webhook Trigger Plugin - Can receive any HTTP request, extract any values from JSON or XML and trigger a job with those values available as variables. Works with GitHub, GitLab, Bitbucket, Jira and many more. - https://github.com/jenkinsci/generic-webhook-trigger-plugin - hpi - - - - MIT License - http://opensource.org/licenses/MIT - - - - - - tomasbjerre - Tomas Bjerre - tomas.bjerre85@gmail.com - - - - - GitHub - https://github.com/jenkinsci/generic-webhook-trigger-plugin - - - - - maven.jenkins-ci.org - jenkinsci-releases - https://repo.jenkins-ci.org/releases - - - maven.jenkins-ci.org - jenkinsci-snapshots - https://repo.jenkins-ci.org/snapshots - - - - - scm:git:ssh://github.com:jenkinsci/generic-webhook-trigger-plugin.git - scm:git:git@github.com:jenkinsci/generic-webhook-trigger-plugin.git - https://github.com/jenkinsci/generic-webhook-trigger-plugin - generic-webhook-trigger-1.86.1 - - - - - repo.jenkins-ci.org - https://repo.jenkins-ci.org/public/ - - - - - - repo.jenkins-ci.org - https://repo.jenkins-ci.org/public/ - - - - - - - org.apache.maven.plugins - maven-surefire-plugin - - - org.apache.maven.plugins - maven-eclipse-plugin - - true - true - - - - se.bjurr.gitchangelog - git-changelog-maven-plugin - ${changelog} - - -([^-]+?)$ - ^\[maven-release-plugin\].* - - - - com.coveo - fmt-maven-plugin - 2.9 - - - - format - - - - - - se.bjurr.violations - violations-maven-plugin - ${violations.version} - - - verify - - violations - - - INFO - VERBOSE - 0 - true - - - - FINDBUGS - Spotbugs - . - .*/spotbugsXml\.xml$ - - - - - - - - - - - src/main/resources - true - - - - - src/test/resources - - - - - - - - io.jenkins.tools.bom - bom-2.414.x - 2982.vdce2153031a_0 - import - pom - - - - - - - org.jenkins-ci.plugins - plain-credentials - - - io.jenkins.plugins - json-path-api - - - io.jenkins.plugins - gson-api - - - org.jenkins-ci.plugins - structs - - - org.jenkins-ci.plugins - credentials - - - com.github.jgonian - commons-ip-math - 1.32 - - - com.googlecode.owasp-java-html-sanitizer - owasp-java-html-sanitizer - 20240325.1 - - - com.google.guava - guava - - - - - - org.mockito - mockito-core - test - - - org.assertj - assertj-core - 3.26.3 - test - - - - - io.cucumber - cucumber-java - 7.20.1 - test - - - io.cucumber - cucumber-junit - 7.20.1 - test - - - \ No newline at end of file + + + 4.0.0 + + org.jenkins-ci.plugins + plugin + 4.74 + + + generic-webhook-trigger + 2.2.5-SNAPSHOT + hpi + Generic Webhook Trigger Plugin + Can receive any HTTP request, extract any values from JSON or XML and trigger a job with those values available as variables. Works with GitHub, GitLab, Bitbucket, Jira and many more. + https://github.com/jenkinsci/generic-webhook-trigger-plugin + + + + MIT License + http://opensource.org/licenses/MIT + + + + + + tomasbjerre + Tomas Bjerre + tomas.bjerre85@gmail.com + + + + + scm:git:ssh://github.com:jenkinsci/generic-webhook-trigger-plugin.git + scm:git:git@github.com:jenkinsci/generic-webhook-trigger-plugin.git + generic-webhook-trigger-1.86.1 + https://github.com/jenkinsci/generic-webhook-trigger-plugin + + + + GitHub + https://github.com/jenkinsci/generic-webhook-trigger-plugin + + + + + maven.jenkins-ci.org + jenkinsci-releases + https://repo.jenkins-ci.org/releases + + + maven.jenkins-ci.org + jenkinsci-snapshots + https://repo.jenkins-ci.org/snapshots + + + + + 2.414.3 + false + true + 2.2.0 + 2.2.0 + false + + + + + + io.jenkins.tools.bom + bom-2.414.x + 2982.vdce2153031a_0 + pom + import + + + + + + + com.github.jgonian + commons-ip-math + 1.32 + + + com.googlecode.owasp-java-html-sanitizer + owasp-java-html-sanitizer + 20240325.1 + + + com.google.guava + guava + + + + + io.jenkins.plugins + gson-api + + + io.jenkins.plugins + json-path-api + + + org.jenkins-ci.plugins + credentials + + + org.jenkins-ci.plugins + plain-credentials + + + org.jenkins-ci.plugins + structs + + + + + io.cucumber + cucumber-java + 7.20.1 + test + + + io.cucumber + cucumber-junit + 7.20.1 + test + + + org.assertj + assertj-core + 3.26.3 + test + + + + org.mockito + mockito-core + test + + + + + + repo.jenkins-ci.org + https://repo.jenkins-ci.org/public/ + + + + + + repo.jenkins-ci.org + https://repo.jenkins-ci.org/public/ + + + + + + + true + src/main/resources + + + + + src/test/resources + + + + + org.apache.maven.plugins + maven-surefire-plugin + + + org.apache.maven.plugins + maven-eclipse-plugin + + true + true + + + + se.bjurr.gitchangelog + git-changelog-maven-plugin + ${changelog} + + -([^-]+?)$ + ^\[maven-release-plugin\].* + + + + se.bjurr.violations + violations-maven-plugin + ${violations.version} + + + + violations + + verify + + INFO + VERBOSE + 0 + true + + + + FINDBUGS + Spotbugs + . + .*/spotbugsXml\.xml$ + + + + + + + + + + diff --git a/src/main/java/org/jenkinsci/plugins/gwt/ExpressionType.java b/src/main/java/org/jenkinsci/plugins/gwt/ExpressionType.java index 82229e78..774586d1 100644 --- a/src/main/java/org/jenkinsci/plugins/gwt/ExpressionType.java +++ b/src/main/java/org/jenkinsci/plugins/gwt/ExpressionType.java @@ -1,6 +1,6 @@ package org.jenkinsci.plugins.gwt; public enum ExpressionType { - XPath, - JSONPath; + XPath, + JSONPath; } diff --git a/src/main/java/org/jenkinsci/plugins/gwt/FoundJob.java b/src/main/java/org/jenkinsci/plugins/gwt/FoundJob.java index cc291767..08b9da28 100644 --- a/src/main/java/org/jenkinsci/plugins/gwt/FoundJob.java +++ b/src/main/java/org/jenkinsci/plugins/gwt/FoundJob.java @@ -2,19 +2,19 @@ public class FoundJob { - private final String fullName; - private final GenericTrigger genericTrigger; + private final String fullName; + private final GenericTrigger genericTrigger; - public FoundJob(String fullName, GenericTrigger genericTrigger) { - this.fullName = fullName; - this.genericTrigger = genericTrigger; - } + public FoundJob(String fullName, GenericTrigger genericTrigger) { + this.fullName = fullName; + this.genericTrigger = genericTrigger; + } - public GenericTrigger getGenericTrigger() { - return genericTrigger; - } + public GenericTrigger getGenericTrigger() { + return genericTrigger; + } - public String getFullName() { - return fullName; - } + public String getFullName() { + return fullName; + } } diff --git a/src/main/java/org/jenkinsci/plugins/gwt/GenericCause.java b/src/main/java/org/jenkinsci/plugins/gwt/GenericCause.java index 952b0a2f..b8a4ece1 100644 --- a/src/main/java/org/jenkinsci/plugins/gwt/GenericCause.java +++ b/src/main/java/org/jenkinsci/plugins/gwt/GenericCause.java @@ -9,60 +9,60 @@ public class GenericCause extends Cause { - private final Map resolvedVariables; - private final String postContent; - private final boolean printContributedVariables; - private final boolean printPostContent; - /** Used at runtime to only print once. */ - private boolean postContentPrinted; + private final Map resolvedVariables; + private final String postContent; + private final boolean printContributedVariables; + private final boolean printPostContent; + /** Used at runtime to only print once. */ + private boolean postContentPrinted; - private final String cause; + private final String cause; - public GenericCause( - final String postContent, - final Map resolvedVariables, - final boolean printContributedVariables, - final boolean printPostContent, - final String cause) { - this.postContent = postContent; - this.resolvedVariables = resolvedVariables; - this.printContributedVariables = printContributedVariables; - this.printPostContent = printPostContent; - this.postContentPrinted = false; - if (!isNullOrEmpty(cause)) { - this.cause = cause; - } else { - this.cause = "Generic Cause"; + public GenericCause( + final String postContent, + final Map resolvedVariables, + final boolean printContributedVariables, + final boolean printPostContent, + final String cause) { + this.postContent = postContent; + this.resolvedVariables = resolvedVariables; + this.printContributedVariables = printContributedVariables; + this.printPostContent = printPostContent; + this.postContentPrinted = false; + if (!isNullOrEmpty(cause)) { + this.cause = cause; + } else { + this.cause = "Generic Cause"; + } } - } - public boolean isPrintContributedVariables() { - return printContributedVariables; - } + public boolean isPrintContributedVariables() { + return printContributedVariables; + } - public boolean isPrintPostContent() { - return printPostContent; - } + public boolean isPrintPostContent() { + return printPostContent; + } - public void setPostContentPrinted(boolean postContentPrinted) { - this.postContentPrinted = postContentPrinted; - } + public void setPostContentPrinted(boolean postContentPrinted) { + this.postContentPrinted = postContentPrinted; + } - public boolean isPostContentPrinted() { - return postContentPrinted; - } + public boolean isPostContentPrinted() { + return postContentPrinted; + } - public Map getResolvedVariables() { - return resolvedVariables; - } + public Map getResolvedVariables() { + return resolvedVariables; + } - public String getPostContent() { - return postContent; - } + public String getPostContent() { + return postContent; + } - @Override - public String getShortDescription() { - PolicyFactory policy = Sanitizers.FORMATTING.and(Sanitizers.LINKS); - return policy.sanitize(cause); - } + @Override + public String getShortDescription() { + PolicyFactory policy = Sanitizers.FORMATTING.and(Sanitizers.LINKS); + return policy.sanitize(cause); + } } diff --git a/src/main/java/org/jenkinsci/plugins/gwt/GenericHeaderVariable.java b/src/main/java/org/jenkinsci/plugins/gwt/GenericHeaderVariable.java index 5fb37929..f4ae8ded 100644 --- a/src/main/java/org/jenkinsci/plugins/gwt/GenericHeaderVariable.java +++ b/src/main/java/org/jenkinsci/plugins/gwt/GenericHeaderVariable.java @@ -9,38 +9,39 @@ public class GenericHeaderVariable extends AbstractDescribableImpl { - @Extension public static final DescriptorImpl DESCRIPTOR = new DescriptorImpl(); - - public static class DescriptorImpl extends Descriptor { - @Override - public String getDisplayName() { - return ""; + @Extension + public static final DescriptorImpl DESCRIPTOR = new DescriptorImpl(); + + public static class DescriptorImpl extends Descriptor { + @Override + public String getDisplayName() { + return ""; + } } - } - private final String key; - private final String regexpFilter; + private final String key; + private final String regexpFilter; - @DataBoundConstructor - public GenericHeaderVariable(String key, String regexpFilter) { - this.key = checkNotNull(key, "Variable name"); - this.regexpFilter = regexpFilter; - } + @DataBoundConstructor + public GenericHeaderVariable(String key, String regexpFilter) { + this.key = checkNotNull(key, "Variable name"); + this.regexpFilter = regexpFilter; + } - public String getKey() { - return key; - } + public String getKey() { + return key; + } - public String getRegexpFilter() { - return regexpFilter; - } + public String getRegexpFilter() { + return regexpFilter; + } - public String getHeaderName() { - return key; - } + public String getHeaderName() { + return key; + } - @Override - public String toString() { - return "GenericHeaderVariable [key=" + key + ", regexpFilter=" + regexpFilter + "]"; - } + @Override + public String toString() { + return "GenericHeaderVariable [key=" + key + ", regexpFilter=" + regexpFilter + "]"; + } } diff --git a/src/main/java/org/jenkinsci/plugins/gwt/GenericRequestVariable.java b/src/main/java/org/jenkinsci/plugins/gwt/GenericRequestVariable.java index ccbc25ff..ab6e0b4d 100644 --- a/src/main/java/org/jenkinsci/plugins/gwt/GenericRequestVariable.java +++ b/src/main/java/org/jenkinsci/plugins/gwt/GenericRequestVariable.java @@ -9,38 +9,39 @@ public class GenericRequestVariable extends AbstractDescribableImpl { - @Extension public static final DescriptorImpl DESCRIPTOR = new DescriptorImpl(); - - public static class DescriptorImpl extends Descriptor { - @Override - public String getDisplayName() { - return ""; + @Extension + public static final DescriptorImpl DESCRIPTOR = new DescriptorImpl(); + + public static class DescriptorImpl extends Descriptor { + @Override + public String getDisplayName() { + return ""; + } } - } - private final String key; - private final String regexpFilter; + private final String key; + private final String regexpFilter; - @DataBoundConstructor - public GenericRequestVariable(String key, String regexpFilter) { - this.key = checkNotNull(key, "Variable name"); - this.regexpFilter = regexpFilter; - } + @DataBoundConstructor + public GenericRequestVariable(String key, String regexpFilter) { + this.key = checkNotNull(key, "Variable name"); + this.regexpFilter = regexpFilter; + } - public String getRegexpFilter() { - return regexpFilter; - } + public String getRegexpFilter() { + return regexpFilter; + } - public String getKey() { - return key; - } + public String getKey() { + return key; + } - public String getParameterName() { - return key; - } + public String getParameterName() { + return key; + } - @Override - public String toString() { - return "GenericRequestVariable [key=" + key + ", regexpFilter=" + regexpFilter + "]"; - } + @Override + public String toString() { + return "GenericRequestVariable [key=" + key + ", regexpFilter=" + regexpFilter + "]"; + } } diff --git a/src/main/java/org/jenkinsci/plugins/gwt/GenericResponse.java b/src/main/java/org/jenkinsci/plugins/gwt/GenericResponse.java index 23c56243..80d2c25e 100644 --- a/src/main/java/org/jenkinsci/plugins/gwt/GenericResponse.java +++ b/src/main/java/org/jenkinsci/plugins/gwt/GenericResponse.java @@ -7,14 +7,13 @@ public class GenericResponse { - static HttpResponse jsonResponse( - final int httpStatusCode, final String message, final Map jobs) { - final GenericWebhookResponse genericResponse = new GenericWebhookResponse(message, jobs); - return new JsonHttpResponse(JSONObject.fromObject(genericResponse), httpStatusCode); - } + static HttpResponse jsonResponse(final int httpStatusCode, final String message, final Map jobs) { + final GenericWebhookResponse genericResponse = new GenericWebhookResponse(message, jobs); + return new JsonHttpResponse(JSONObject.fromObject(genericResponse), httpStatusCode); + } - static HttpResponse jsonResponse(final int httpStatusCode, final String message) { - final GenericWebhookResponse genericResponse = new GenericWebhookResponse(message); - return new JsonHttpResponse(JSONObject.fromObject(genericResponse), httpStatusCode); - } + static HttpResponse jsonResponse(final int httpStatusCode, final String message) { + final GenericWebhookResponse genericResponse = new GenericWebhookResponse(message); + return new JsonHttpResponse(JSONObject.fromObject(genericResponse), httpStatusCode); + } } diff --git a/src/main/java/org/jenkinsci/plugins/gwt/GenericTrigger.java b/src/main/java/org/jenkinsci/plugins/gwt/GenericTrigger.java index 73c00a7f..9524765e 100644 --- a/src/main/java/org/jenkinsci/plugins/gwt/GenericTrigger.java +++ b/src/main/java/org/jenkinsci/plugins/gwt/GenericTrigger.java @@ -18,7 +18,6 @@ import hudson.util.ListBoxModel; import java.util.List; import java.util.Map; -import jenkins.model.ParameterizedJobMixIn; import org.jenkinsci.Symbol; import org.jenkinsci.plugins.gwt.global.CredentialsHelper; import org.jenkinsci.plugins.gwt.resolvers.VariablesResolver; @@ -29,281 +28,269 @@ public class GenericTrigger extends Trigger> { - public static final String HEADER_DRY_RUN = "gwt-dry-run"; - - private List genericVariables = newArrayList(); - private String regexpFilterText; - private String regexpFilterExpression; - private List genericRequestVariables = newArrayList(); - private List genericHeaderVariables = newArrayList(); - private boolean printPostContent; - private boolean printContributedVariables; - private String causeString; - private String token; - private String tokenCredentialId; - private boolean silentResponse; - private boolean overrideQuietPeriod; - private boolean shouldNotFlattern; - private boolean allowSeveralTriggersPerBuild; - - @Symbol("GenericTrigger") - public static class GenericDescriptor extends TriggerDescriptor { + public static final String HEADER_DRY_RUN = "gwt-dry-run"; + + private List genericVariables = newArrayList(); + private String regexpFilterText; + private String regexpFilterExpression; + private List genericRequestVariables = newArrayList(); + private List genericHeaderVariables = newArrayList(); + private boolean printPostContent; + private boolean printContributedVariables; + private String causeString; + private String token; + private String tokenCredentialId; + private boolean silentResponse; + private boolean overrideQuietPeriod; + private boolean shouldNotFlattern; + private boolean allowSeveralTriggersPerBuild; + + @Symbol("GenericTrigger") + public static class GenericDescriptor extends TriggerDescriptor { + + @Override + public boolean isApplicable(final Item item) { + return Job.class.isAssignableFrom(item.getClass()); + } - @Override - public boolean isApplicable(final Item item) { - return Job.class.isAssignableFrom(item.getClass()); + @Override + public String getDisplayName() { + return "Generic Webhook Trigger"; + } + + public ListBoxModel doFillTokenCredentialIdItems( + @AncestorInPath final Item item, @QueryParameter final String credentialsId) { + return CredentialsHelper.doFillCredentialsIdItems(item, credentialsId); + } + + public FormValidation doCheckTokenCredentialIdItems(@QueryParameter final String value) { + return CredentialsHelper.doCheckFillCredentialsId(value); + } } - @Override - public String getDisplayName() { - return "Generic Webhook Trigger"; - } - - public ListBoxModel doFillTokenCredentialIdItems( - @AncestorInPath final Item item, @QueryParameter final String credentialsId) { - return CredentialsHelper.doFillCredentialsIdItems(item, credentialsId); - } - - public FormValidation doCheckTokenCredentialIdItems(@QueryParameter final String value) { - return CredentialsHelper.doCheckFillCredentialsId(value); - } - } - - @DataBoundConstructor - public GenericTrigger( - final List genericVariables, - final List genericRequestVariables, - final List genericHeaderVariables) { - this.genericVariables = genericVariables; - this.genericRequestVariables = genericRequestVariables; - this.genericHeaderVariables = genericHeaderVariables; - } - - @DataBoundSetter - public void setRegexpFilterText(final String regexpFilterText) { - this.regexpFilterText = regexpFilterText; - } - - @DataBoundSetter - public void setRegexpFilterExpression(final String regexpFilterExpression) { - this.regexpFilterExpression = regexpFilterExpression; - } - - @DataBoundSetter - public void setCauseString(final String causeString) { - this.causeString = causeString; - } - - public String getCauseString() { - return this.causeString; - } - - @DataBoundSetter - public void setPrintContributedVariables(final boolean printContributedVariables) { - this.printContributedVariables = printContributedVariables; - } - - @DataBoundSetter - public void setPrintPostContent(final boolean printPostContent) { - this.printPostContent = printPostContent; - } - - @DataBoundSetter - public void setSilentResponse(final boolean silentResponse) { - this.silentResponse = silentResponse; - } - - @DataBoundSetter - public void setOverrideQuietPeriod(final boolean overrideQuietPeriod) { - this.overrideQuietPeriod = overrideQuietPeriod; - } - - public boolean getOverrideQuietPeriod() { - return this.overrideQuietPeriod; - } - - /** @deprecated use {@link #setShouldNotFlatten} */ - @Deprecated - @DataBoundSetter - public void setShouldNotFlattern(final boolean shouldNotFlattern) { - this.shouldNotFlattern = shouldNotFlattern; - } - - /** @deprecated use {@link #isShouldNotFlatten} */ - @Deprecated - public boolean isShouldNotFlattern() { - return this.shouldNotFlattern; - } - - @DataBoundSetter - public void setShouldNotFlatten(final boolean shouldNotFlatten) { - this.shouldNotFlattern = shouldNotFlatten; - } - - public boolean isShouldNotFlatten() { - return this.shouldNotFlattern; - } - - public boolean isSilentResponse() { - return this.silentResponse; - } - - public boolean isPrintContributedVariables() { - return this.printContributedVariables; - } - - public boolean isPrintPostContent() { - return this.printPostContent; - } - - @DataBoundSetter - public void setToken(final String token) { - this.token = token; - } - - public String getToken() { - return this.token; - } - - @DataBoundSetter - public void setTokenCredentialId(final String tokenCredentialId) { - this.tokenCredentialId = tokenCredentialId; - } - - public String getTokenCredentialId() { - return this.tokenCredentialId; - } - - @DataBoundSetter - public void setAllowSeveralTriggersPerBuild(final boolean allowSeveralTriggersPerBuild) { - this.allowSeveralTriggersPerBuild = allowSeveralTriggersPerBuild; - } - - public boolean getAllowSeveralTriggersPerBuild() { - return this.allowSeveralTriggersPerBuild; - } - - @Extension public static final GenericDescriptor DESCRIPTOR = new GenericDescriptor(); - - @SuppressWarnings("static-access") - @SuppressFBWarnings({"RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "NP_NULL_ON_SOME_PATH"}) - public GenericTriggerResults trigger( - final Map> headers, - final Map parameterMap, - final String postContent, - final int quietPeriod) { - final Map resolvedVariables = - new VariablesResolver( - headers, - parameterMap, - postContent, - this.genericVariables, - this.genericRequestVariables, - this.genericHeaderVariables, - this.shouldNotFlattern) - .getVariables(); - - final String renderedRegexpFilterText = renderText(this.regexpFilterText, resolvedVariables); - final boolean isMatching = isMatching(renderedRegexpFilterText, this.regexpFilterExpression); - - String url = null; - long id = 0; - boolean triggered = false; - if (isMatching) { - final String cause = renderText(this.causeString, resolvedVariables); - final GenericCause genericCause = - new GenericCause( - postContent, - resolvedVariables, - this.printContributedVariables, - this.printPostContent, - cause); - final ParametersDefinitionProperty parametersDefinitionProperty = - this.job.getProperty(ParametersDefinitionProperty.class); - final ParametersAction parameters = - createParameterAction( - parametersDefinitionProperty, resolvedVariables, this.allowSeveralTriggersPerBuild); - if (isDryRun(headers)) { - url = this.job.getAbsoluteUrl(); - triggered = true; - } else { - final hudson.model.Queue.Item item = - this.retrieveScheduleJob(this.job) // - .scheduleBuild2(this.job, quietPeriod, new CauseAction(genericCause), parameters); - if (item != null) { - url = item.getUrl(); - id = item.getId(); - triggered = true; + @DataBoundConstructor + public GenericTrigger( + final List genericVariables, + final List genericRequestVariables, + final List genericHeaderVariables) { + this.genericVariables = genericVariables; + this.genericRequestVariables = genericRequestVariables; + this.genericHeaderVariables = genericHeaderVariables; + } + + @DataBoundSetter + public void setRegexpFilterText(final String regexpFilterText) { + this.regexpFilterText = regexpFilterText; + } + + @DataBoundSetter + public void setRegexpFilterExpression(final String regexpFilterExpression) { + this.regexpFilterExpression = regexpFilterExpression; + } + + @DataBoundSetter + public void setCauseString(final String causeString) { + this.causeString = causeString; + } + + public String getCauseString() { + return this.causeString; + } + + @DataBoundSetter + public void setPrintContributedVariables(final boolean printContributedVariables) { + this.printContributedVariables = printContributedVariables; + } + + @DataBoundSetter + public void setPrintPostContent(final boolean printPostContent) { + this.printPostContent = printPostContent; + } + + @DataBoundSetter + public void setSilentResponse(final boolean silentResponse) { + this.silentResponse = silentResponse; + } + + @DataBoundSetter + public void setOverrideQuietPeriod(final boolean overrideQuietPeriod) { + this.overrideQuietPeriod = overrideQuietPeriod; + } + + public boolean getOverrideQuietPeriod() { + return this.overrideQuietPeriod; + } + + /** @deprecated use {@link #setShouldNotFlatten} */ + @Deprecated + @DataBoundSetter + public void setShouldNotFlattern(final boolean shouldNotFlattern) { + this.shouldNotFlattern = shouldNotFlattern; + } + + /** @deprecated use {@link #isShouldNotFlatten} */ + @Deprecated + public boolean isShouldNotFlattern() { + return this.shouldNotFlattern; + } + + @DataBoundSetter + public void setShouldNotFlatten(final boolean shouldNotFlatten) { + this.shouldNotFlattern = shouldNotFlatten; + } + + public boolean isShouldNotFlatten() { + return this.shouldNotFlattern; + } + + public boolean isSilentResponse() { + return this.silentResponse; + } + + public boolean isPrintContributedVariables() { + return this.printContributedVariables; + } + + public boolean isPrintPostContent() { + return this.printPostContent; + } + + @DataBoundSetter + public void setToken(final String token) { + this.token = token; + } + + public String getToken() { + return this.token; + } + + @DataBoundSetter + public void setTokenCredentialId(final String tokenCredentialId) { + this.tokenCredentialId = tokenCredentialId; + } + + public String getTokenCredentialId() { + return this.tokenCredentialId; + } + + @DataBoundSetter + public void setAllowSeveralTriggersPerBuild(final boolean allowSeveralTriggersPerBuild) { + this.allowSeveralTriggersPerBuild = allowSeveralTriggersPerBuild; + } + + public boolean getAllowSeveralTriggersPerBuild() { + return this.allowSeveralTriggersPerBuild; + } + + @Extension + public static final GenericDescriptor DESCRIPTOR = new GenericDescriptor(); + + @SuppressWarnings("static-access") + @SuppressFBWarnings({"RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "NP_NULL_ON_SOME_PATH"}) + public GenericTriggerResults trigger( + final Map> headers, + final Map parameterMap, + final String postContent, + final int quietPeriod) { + final Map resolvedVariables = new VariablesResolver( + headers, + parameterMap, + postContent, + this.genericVariables, + this.genericRequestVariables, + this.genericHeaderVariables, + this.shouldNotFlattern) + .getVariables(); + + final String renderedRegexpFilterText = renderText(this.regexpFilterText, resolvedVariables); + final boolean isMatching = isMatching(renderedRegexpFilterText, this.regexpFilterExpression); + + String url = null; + long id = 0; + boolean triggered = false; + if (isMatching) { + final String cause = renderText(this.causeString, resolvedVariables); + final GenericCause genericCause = new GenericCause( + postContent, resolvedVariables, this.printContributedVariables, this.printPostContent, cause); + final ParametersDefinitionProperty parametersDefinitionProperty = + this.job.getProperty(ParametersDefinitionProperty.class); + final ParametersAction parameters = createParameterAction( + parametersDefinitionProperty, resolvedVariables, this.allowSeveralTriggersPerBuild); + if (isDryRun(headers)) { + url = this.job.getAbsoluteUrl(); + triggered = true; + } else { + final hudson.model.Queue.Item item = this.retrieveScheduleJob(this.job) // + .scheduleBuild2(this.job, quietPeriod, new CauseAction(genericCause), parameters); + if (item != null) { + url = item.getUrl(); + id = item.getId(); + triggered = true; + } + } + } + return new GenericTriggerResults( + url, id, triggered, resolvedVariables, renderedRegexpFilterText, this.regexpFilterExpression); + } + + static boolean isDryRun(final Map> headers) { + if (headers == null) { + return false; } - } - } - return new GenericTriggerResults( - url, - id, - triggered, - resolvedVariables, - renderedRegexpFilterText, - this.regexpFilterExpression); - } - - static boolean isDryRun(final Map> headers) { - if (headers == null) { - return false; - } - final List dryRunHeaders = headers.get(HEADER_DRY_RUN); - if (dryRunHeaders == null) { - return false; - } - for (final String dryRunHeader : dryRunHeaders) { - if (dryRunHeader.equalsIgnoreCase("true")) { - return true; - } - } - return false; - } - - @SuppressWarnings("rawtypes") - private ParameterizedJobMixIn retrieveScheduleJob(final Job job) { - return new ParameterizedJobMixIn() { - @Override - protected Job asJob() { - return job; - } - }; - } - - public List getGenericVariables() { - return this.genericVariables; - } - - public String getRegexpFilterExpression() { - return this.regexpFilterExpression; - } - - public List getGenericRequestVariables() { - return this.genericRequestVariables; - } - - public List getGenericHeaderVariables() { - return this.genericHeaderVariables; - } - - public String getRegexpFilterText() { - return this.regexpFilterText; - } - - @Override - public String toString() { - return "GenericTrigger [genericVariables=" - + this.genericVariables - + ", regexpFilterText=" - + this.regexpFilterText - + ", regexpFilterExpression=" - + this.regexpFilterExpression - + ", genericRequestVariables=" - + this.genericRequestVariables - + ", genericHeaderVariables=" - + this.genericHeaderVariables - + "]"; - } + final List dryRunHeaders = headers.get(HEADER_DRY_RUN); + if (dryRunHeaders == null) { + return false; + } + for (final String dryRunHeader : dryRunHeaders) { + if (dryRunHeader.equalsIgnoreCase("true")) { + return true; + } + } + return false; + } + + @SuppressWarnings("rawtypes") + private ParameterizedJobMixIn retrieveScheduleJob(final Job job) { + return new ParameterizedJobMixIn() { + @Override + protected Job asJob() { + return job; + } + }; + } + + public List getGenericVariables() { + return this.genericVariables; + } + + public String getRegexpFilterExpression() { + return this.regexpFilterExpression; + } + + public List getGenericRequestVariables() { + return this.genericRequestVariables; + } + + public List getGenericHeaderVariables() { + return this.genericHeaderVariables; + } + + public String getRegexpFilterText() { + return this.regexpFilterText; + } + + @Override + public String toString() { + return "GenericTrigger [genericVariables=" + + this.genericVariables + + ", regexpFilterText=" + + this.regexpFilterText + + ", regexpFilterExpression=" + + this.regexpFilterExpression + + ", genericRequestVariables=" + + this.genericRequestVariables + + ", genericHeaderVariables=" + + this.genericHeaderVariables + + "]"; + } } diff --git a/src/main/java/org/jenkinsci/plugins/gwt/GenericTriggerResults.java b/src/main/java/org/jenkinsci/plugins/gwt/GenericTriggerResults.java index ec8ac8e0..f7bf7d6f 100644 --- a/src/main/java/org/jenkinsci/plugins/gwt/GenericTriggerResults.java +++ b/src/main/java/org/jenkinsci/plugins/gwt/GenericTriggerResults.java @@ -4,49 +4,49 @@ public class GenericTriggerResults { - private final Map resolvedVariables; - private final String regexpFilterText; - private final String regexpFilterExpression; - private final String url; - private final long id; - private final boolean triggered; - - public GenericTriggerResults( - final String url, - final long id, - final boolean triggered, - final Map resolvedVariables, - final String regexpFilterText, - final String regexpFilterExpression) { - this.url = url; - this.id = id; - this.triggered = triggered; - this.resolvedVariables = resolvedVariables; - this.regexpFilterText = regexpFilterText; - this.regexpFilterExpression = regexpFilterExpression; - } - - public boolean isTriggered() { - return this.triggered; - } - - public long getId() { - return this.id; - } - - public String getUrl() { - return this.url; - } - - public String getRegexpFilterExpression() { - return this.regexpFilterExpression; - } - - public String getRegexpFilterText() { - return this.regexpFilterText; - } - - public Map getResolvedVariables() { - return this.resolvedVariables; - } + private final Map resolvedVariables; + private final String regexpFilterText; + private final String regexpFilterExpression; + private final String url; + private final long id; + private final boolean triggered; + + public GenericTriggerResults( + final String url, + final long id, + final boolean triggered, + final Map resolvedVariables, + final String regexpFilterText, + final String regexpFilterExpression) { + this.url = url; + this.id = id; + this.triggered = triggered; + this.resolvedVariables = resolvedVariables; + this.regexpFilterText = regexpFilterText; + this.regexpFilterExpression = regexpFilterExpression; + } + + public boolean isTriggered() { + return this.triggered; + } + + public long getId() { + return this.id; + } + + public String getUrl() { + return this.url; + } + + public String getRegexpFilterExpression() { + return this.regexpFilterExpression; + } + + public String getRegexpFilterText() { + return this.regexpFilterText; + } + + public Map getResolvedVariables() { + return this.resolvedVariables; + } } diff --git a/src/main/java/org/jenkinsci/plugins/gwt/GenericVariable.java b/src/main/java/org/jenkinsci/plugins/gwt/GenericVariable.java index b1d14361..fd208c0d 100644 --- a/src/main/java/org/jenkinsci/plugins/gwt/GenericVariable.java +++ b/src/main/java/org/jenkinsci/plugins/gwt/GenericVariable.java @@ -11,83 +11,84 @@ public class GenericVariable extends AbstractDescribableImpl { - @Extension public static final DescriptorImpl DESCRIPTOR = new DescriptorImpl(); + @Extension + public static final DescriptorImpl DESCRIPTOR = new DescriptorImpl(); + + public static class DescriptorImpl extends Descriptor { + @Override + public String getDisplayName() { + return ""; + } + } - public static class DescriptorImpl extends Descriptor { - @Override - public String getDisplayName() { - return ""; + private ExpressionType expressionType; + private final String key; + private final String value; + private String regexpFilter; + private String defaultValue; + + @DataBoundConstructor + public GenericVariable(String key, String value) { + this.key = checkNotNull(key, "Variable name"); + this.value = checkNotNull(value, "Variable expression"); + } + + @DataBoundSetter + public void setDefaultValue(String defaultValue) { + this.defaultValue = defaultValue; + } + + public String getDefaultValue() { + return defaultValue; + } + + @DataBoundSetter + public void setExpressionType(ExpressionType expressionType) { + this.expressionType = expressionType; + } + + @DataBoundSetter + public void setRegexpFilter(String regexpFilter) { + this.regexpFilter = regexpFilter; + } + + public String getRegexpFilter() { + return regexpFilter; } - } - - private ExpressionType expressionType; - private final String key; - private final String value; - private String regexpFilter; - private String defaultValue; - - @DataBoundConstructor - public GenericVariable(String key, String value) { - this.key = checkNotNull(key, "Variable name"); - this.value = checkNotNull(value, "Variable expression"); - } - - @DataBoundSetter - public void setDefaultValue(String defaultValue) { - this.defaultValue = defaultValue; - } - - public String getDefaultValue() { - return defaultValue; - } - - @DataBoundSetter - public void setExpressionType(ExpressionType expressionType) { - this.expressionType = expressionType; - } - - @DataBoundSetter - public void setRegexpFilter(String regexpFilter) { - this.regexpFilter = regexpFilter; - } - - public String getRegexpFilter() { - return regexpFilter; - } - - public ExpressionType getExpressionType() { - if (expressionType == null) { - return JSONPath; + + public ExpressionType getExpressionType() { + if (expressionType == null) { + return JSONPath; + } + return expressionType; + } + + public String getKey() { + return key; + } + + public String getVariableName() { + return key; + } + + public String getValue() { + return value; + } + + public String getExpression() { + return value; + } + + @Override + public String toString() { + return "GenericVariable [expressionType=" + + expressionType + + ", key=" + + key + + ", value=" + + value + + ", regexpFilter=" + + regexpFilter + + "]"; } - return expressionType; - } - - public String getKey() { - return key; - } - - public String getVariableName() { - return key; - } - - public String getValue() { - return value; - } - - public String getExpression() { - return value; - } - - @Override - public String toString() { - return "GenericVariable [expressionType=" - + expressionType - + ", key=" - + key - + ", value=" - + value - + ", regexpFilter=" - + regexpFilter - + "]"; - } } diff --git a/src/main/java/org/jenkinsci/plugins/gwt/GenericWebHookRequestReceiver.java b/src/main/java/org/jenkinsci/plugins/gwt/GenericWebHookRequestReceiver.java index 9211aed3..b9f0cb7b 100644 --- a/src/main/java/org/jenkinsci/plugins/gwt/GenericWebHookRequestReceiver.java +++ b/src/main/java/org/jenkinsci/plugins/gwt/GenericWebHookRequestReceiver.java @@ -38,241 +38,233 @@ @Extension public class GenericWebHookRequestReceiver extends CrumbExclusion implements UnprotectedRootAction { - private static final String TOKEN_PARAM = "token"; + private static final String TOKEN_PARAM = "token"; - /** A value of -1 will make sure the quiet period of the job will be used. */ - private static final int RESPECT_JOBS_QUIET_PERIOD = -1; - - private static Gson GSON = - new GsonBuilder() // - .setPrettyPrinting() // - .create(); - private static final String FORM_URLENCODED = "application/x-www-form-urlencoded"; + /** A value of -1 will make sure the quiet period of the job will be used. */ + private static final int RESPECT_JOBS_QUIET_PERIOD = -1; - private static final String NO_JOBS_MSG = - "Did not find any jobs with " + GenericTrigger.class.getSimpleName() + " configured!\n"; - private static final String NO_JOBS_HOW_TO_USE_TOKEN = - "If you are using a token, you need to pass it like ...trigger/invoke?token=TOKENHERE\n"; - private static final String NO_JOBS_HOW_TO_AUTH = - "If you are not using a token, you need to authenticate like http://user:passsword@example.org/generic-webhook...\n"; - private static final String NO_JOBS_MSG_TOKEN = "A token was supplied.\n"; - private static final String NO_JOBS_MSG_NO_TOKEN = "No token was supplied.\n"; - private static final String URL_NAME = "generic-webhook-trigger"; - private static final Logger LOGGER = - Logger.getLogger(GenericWebHookRequestReceiver.class.getName()); + private static Gson GSON = new GsonBuilder() // + .setPrettyPrinting() // + .create(); + private static final String FORM_URLENCODED = "application/x-www-form-urlencoded"; - public HttpResponse doInvoke(final StaplerRequest request) { - if (request.getMethod().equals("OPTIONS")) { - LOGGER.log(INFO, "Ignoring OPTIONS"); - return HttpResponses.ok(); - } + private static final String NO_JOBS_MSG = + "Did not find any jobs with " + GenericTrigger.class.getSimpleName() + " configured!\n"; + private static final String NO_JOBS_HOW_TO_USE_TOKEN = + "If you are using a token, you need to pass it like ...trigger/invoke?token=TOKENHERE\n"; + private static final String NO_JOBS_HOW_TO_AUTH = + "If you are not using a token, you need to authenticate like http://user:passsword@example.org/generic-webhook...\n"; + private static final String NO_JOBS_MSG_TOKEN = "A token was supplied.\n"; + private static final String NO_JOBS_MSG_NO_TOKEN = "No token was supplied.\n"; + private static final String URL_NAME = "generic-webhook-trigger"; + private static final Logger LOGGER = Logger.getLogger(GenericWebHookRequestReceiver.class.getName()); - String postContent = null; - Map parameterMap = null; - Map> headers = null; + public HttpResponse doInvoke(final StaplerRequest request) { + if (request.getMethod().equals("OPTIONS")) { + LOGGER.log(INFO, "Ignoring OPTIONS"); + return HttpResponses.ok(); + } - try { - headers = this.getHeaders(request); - parameterMap = request.getParameterMap(); + String postContent = null; + Map parameterMap = null; + Map> headers = null; - postContent = this.getPostContentAsJson(request); - } catch (final IOException e) { - LOGGER.log(SEVERE, "", e); - return jsonResponse(500, "Unable to read inputstream: " + e.getMessage()); - } + try { + headers = this.getHeaders(request); + parameterMap = request.getParameterMap(); - try { - WhitelistVerifier.verifyWhitelist(request.getRemoteAddr(), headers, postContent); - } catch (final WhitelistException e) { - return jsonResponse( - 403, - "Sender, " - + request.getRemoteHost() - + ", with headers " - + headers - + " did not pass whitelist.\n" - + e.getMessage()); - } + postContent = this.getPostContentAsJson(request); + } catch (final IOException e) { + LOGGER.log(SEVERE, "", e); + return jsonResponse(500, "Unable to read inputstream: " + e.getMessage()); + } - final String givenToken = this.getGivenToken(headers, parameterMap); - return this.doInvoke(headers, parameterMap, postContent, givenToken); - } + try { + WhitelistVerifier.verifyWhitelist(request.getRemoteAddr(), headers, postContent); + } catch (final WhitelistException e) { + return jsonResponse( + 403, + "Sender, " + + request.getRemoteHost() + + ", with headers " + + headers + + " did not pass whitelist.\n" + + e.getMessage()); + } - private String getPostContentAsJson(final StaplerRequest request) throws IOException { - final String contentType = request.getContentType(); - if (contentType != null && contentType.contains(FORM_URLENCODED)) { - final Map data = new HashMap<>(request.getParameterMap()); - if (data.containsKey(TOKEN_PARAM)) { - data.remove(TOKEN_PARAM); - } - return GSON.toJson(data); + final String givenToken = this.getGivenToken(headers, parameterMap); + return this.doInvoke(headers, parameterMap, postContent, givenToken); } - final ServletInputStream inputStream = request.getInputStream(); - return IOUtils.toString(inputStream, UTF_8.name()); - } - @VisibleForTesting - String getGivenToken( - final Map> headers, final Map parameterMap) { - if (parameterMap.containsKey(TOKEN_PARAM)) { - return parameterMap.get(TOKEN_PARAM)[0]; - } - if (headers.containsKey(TOKEN_PARAM)) { - return headers.get(TOKEN_PARAM).get(0); - } - if (headers.containsKey("authorization")) { - for (final String candidateValue : headers.get("authorization")) { - if (candidateValue.startsWith("Bearer ")) { - return candidateValue.substring(7); + private String getPostContentAsJson(final StaplerRequest request) throws IOException { + final String contentType = request.getContentType(); + if (contentType != null && contentType.contains(FORM_URLENCODED)) { + final Map data = new HashMap<>(request.getParameterMap()); + if (data.containsKey(TOKEN_PARAM)) { + data.remove(TOKEN_PARAM); + } + return GSON.toJson(data); } - } - } - if (headers.containsKey("x-gitlab-token")) { - return headers.get("x-gitlab-token").get(0); + final ServletInputStream inputStream = request.getInputStream(); + return IOUtils.toString(inputStream, UTF_8.name()); } - return null; - } - @VisibleForTesting - int getGivenQuietPeriod( - final Map> headers, final Map parameterMap) { - if (parameterMap.containsKey("jobQuietPeriod")) { - try { - return Integer.parseInt(parameterMap.get("jobQuietPeriod")[0]); - } catch (final Exception e) { - return RESPECT_JOBS_QUIET_PERIOD; - } + @VisibleForTesting + String getGivenToken(final Map> headers, final Map parameterMap) { + if (parameterMap.containsKey(TOKEN_PARAM)) { + return parameterMap.get(TOKEN_PARAM)[0]; + } + if (headers.containsKey(TOKEN_PARAM)) { + return headers.get(TOKEN_PARAM).get(0); + } + if (headers.containsKey("authorization")) { + for (final String candidateValue : headers.get("authorization")) { + if (candidateValue.startsWith("Bearer ")) { + return candidateValue.substring(7); + } + } + } + if (headers.containsKey("x-gitlab-token")) { + return headers.get("x-gitlab-token").get(0); + } + return null; } - if (headers.containsKey("jobQuietPeriod")) { - try { - return Integer.parseInt(headers.get("jobQuietPeriod").get(0)); - } catch (final Exception e) { + + @VisibleForTesting + int getGivenQuietPeriod(final Map> headers, final Map parameterMap) { + if (parameterMap.containsKey("jobQuietPeriod")) { + try { + return Integer.parseInt(parameterMap.get("jobQuietPeriod")[0]); + } catch (final Exception e) { + return RESPECT_JOBS_QUIET_PERIOD; + } + } + if (headers.containsKey("jobQuietPeriod")) { + try { + return Integer.parseInt(headers.get("jobQuietPeriod").get(0)); + } catch (final Exception e) { + return RESPECT_JOBS_QUIET_PERIOD; + } + } + + /** A value of -1 will make sure the quiet period of the job will be used. */ return RESPECT_JOBS_QUIET_PERIOD; - } } - /** A value of -1 will make sure the quiet period of the job will be used. */ - return RESPECT_JOBS_QUIET_PERIOD; - } - - @VisibleForTesting - Map> getHeaders(final StaplerRequest request) { - final Map> headers = new HashMap<>(); - final Enumeration headersEnumeration = request.getHeaderNames(); - while (headersEnumeration.hasMoreElements()) { - final String headerName = headersEnumeration.nextElement(); - headers.put(headerName.toLowerCase(), Collections.list(request.getHeaders(headerName))); + @VisibleForTesting + Map> getHeaders(final StaplerRequest request) { + final Map> headers = new HashMap<>(); + final Enumeration headersEnumeration = request.getHeaderNames(); + while (headersEnumeration.hasMoreElements()) { + final String headerName = headersEnumeration.nextElement(); + headers.put(headerName.toLowerCase(), Collections.list(request.getHeaders(headerName))); + } + return headers; } - return headers; - } - @VisibleForTesting - HttpResponse doInvoke( - final Map> headers, - final Map parameterMap, - final String postContent, - final String givenToken) { + @VisibleForTesting + HttpResponse doInvoke( + final Map> headers, + final Map parameterMap, + final String postContent, + final String givenToken) { - final List foundJobs = JobFinder.findAllJobsWithTrigger(givenToken); - final Map triggerResultsMap = new HashMap<>(); - boolean allSilent = true; - boolean errors = false; - for (final FoundJob foundJob : foundJobs) { - try { - LOGGER.log(FINE, "Triggering " + foundJob.getFullName()); - LOGGER.log(FINE, " with:\n\n" + postContent + "\n\n"); - final GenericTrigger genericTrigger = foundJob.getGenericTrigger(); + final List foundJobs = JobFinder.findAllJobsWithTrigger(givenToken); + final Map triggerResultsMap = new HashMap<>(); + boolean allSilent = true; + boolean errors = false; + for (final FoundJob foundJob : foundJobs) { + try { + LOGGER.log(FINE, "Triggering " + foundJob.getFullName()); + LOGGER.log(FINE, " with:\n\n" + postContent + "\n\n"); + final GenericTrigger genericTrigger = foundJob.getGenericTrigger(); - int quietPeriod = RESPECT_JOBS_QUIET_PERIOD; - if (genericTrigger.getOverrideQuietPeriod()) { - quietPeriod = this.getGivenQuietPeriod(headers, parameterMap); - } + int quietPeriod = RESPECT_JOBS_QUIET_PERIOD; + if (genericTrigger.getOverrideQuietPeriod()) { + quietPeriod = this.getGivenQuietPeriod(headers, parameterMap); + } - final GenericTriggerResults triggerResults = - genericTrigger.trigger(headers, parameterMap, postContent, quietPeriod); - if (!genericTrigger.isSilentResponse()) { - allSilent = false; - triggerResultsMap.put(foundJob.getFullName(), triggerResults); + final GenericTriggerResults triggerResults = + genericTrigger.trigger(headers, parameterMap, postContent, quietPeriod); + if (!genericTrigger.isSilentResponse()) { + allSilent = false; + triggerResultsMap.put(foundJob.getFullName(), triggerResults); + } + } catch (final Throwable t) { + LOGGER.log(SEVERE, foundJob.getFullName(), t); + final String msg = this.createMessageFromException(t); + triggerResultsMap.put(foundJob.getFullName(), msg); + errors = true; + } + } + if (allSilent && foundJobs.size() > 0) { + return ok(); + } + if (errors) { + return jsonResponse(500, "There were errors when triggering jobs.", triggerResultsMap); + } else { + if (foundJobs.isEmpty()) { + final String msg = construct404Message(givenToken); + LOGGER.log(Level.FINE, msg); + return jsonResponse(404, msg); + } else { + return jsonResponse(200, "Triggered jobs.", triggerResultsMap); + } } - } catch (final Throwable t) { - LOGGER.log(SEVERE, foundJob.getFullName(), t); - final String msg = this.createMessageFromException(t); - triggerResultsMap.put(foundJob.getFullName(), msg); - errors = true; - } - } - if (allSilent && foundJobs.size() > 0) { - return ok(); - } - if (errors) { - return jsonResponse(500, "There were errors when triggering jobs.", triggerResultsMap); - } else { - if (foundJobs.isEmpty()) { - final String msg = construct404Message(givenToken); - LOGGER.log(Level.FINE, msg); - return jsonResponse(404, msg); - } else { - return jsonResponse(200, "Triggered jobs.", triggerResultsMap); - } } - } - static String construct404Message(final String givenToken) { - String msg = NO_JOBS_MSG; - final boolean noTokenGiven = Strings.isNullOrEmpty(givenToken); - if (noTokenGiven) { - msg += NO_JOBS_MSG_NO_TOKEN; - msg += NO_JOBS_HOW_TO_USE_TOKEN; - msg += NO_JOBS_HOW_TO_AUTH; - } else { - msg += NO_JOBS_MSG_TOKEN; + static String construct404Message(final String givenToken) { + String msg = NO_JOBS_MSG; + final boolean noTokenGiven = Strings.isNullOrEmpty(givenToken); + if (noTokenGiven) { + msg += NO_JOBS_MSG_NO_TOKEN; + msg += NO_JOBS_HOW_TO_USE_TOKEN; + msg += NO_JOBS_HOW_TO_AUTH; + } else { + msg += NO_JOBS_MSG_TOKEN; + } + return msg; } - return msg; - } - String createMessageFromException(final Throwable t) { - String stacktraceInfo = ""; - if (t.getStackTrace().length > 0) { - stacktraceInfo = - "Thrown in: " - + t.getStackTrace()[0].getClassName() - + ":" - + t.getStackTrace()[0].getLineNumber(); + String createMessageFromException(final Throwable t) { + String stacktraceInfo = ""; + if (t.getStackTrace().length > 0) { + stacktraceInfo = + "Thrown in: " + t.getStackTrace()[0].getClassName() + ":" + t.getStackTrace()[0].getLineNumber(); + } + final String msg = "Exception occurred (" + + t.getClass() + + ": " + + t.getMessage() + + "), full stack trace in Jenkins server log. " + + stacktraceInfo; + return msg; } - final String msg = - "Exception occurred (" - + t.getClass() - + ": " - + t.getMessage() - + "), full stack trace in Jenkins server log. " - + stacktraceInfo; - return msg; - } - @Override - public String getIconFileName() { - return null; - } + @Override + public String getIconFileName() { + return null; + } - @Override - public String getDisplayName() { - return null; - } + @Override + public String getDisplayName() { + return null; + } - @Override - public String getUrlName() { - return URL_NAME; - } + @Override + public String getUrlName() { + return URL_NAME; + } - @Override - public boolean process( - final HttpServletRequest request, final HttpServletResponse response, final FilterChain chain) - throws IOException, ServletException { - final String pathInfo = request.getPathInfo(); - if (pathInfo != null && pathInfo.startsWith("/" + URL_NAME + "/")) { - chain.doFilter(request, response); - return true; + @Override + public boolean process( + final HttpServletRequest request, final HttpServletResponse response, final FilterChain chain) + throws IOException, ServletException { + final String pathInfo = request.getPathInfo(); + if (pathInfo != null && pathInfo.startsWith("/" + URL_NAME + "/")) { + chain.doFilter(request, response); + return true; + } + return false; } - return false; - } } diff --git a/src/main/java/org/jenkinsci/plugins/gwt/GenericWebhookEnvironmentContributor.java b/src/main/java/org/jenkinsci/plugins/gwt/GenericWebhookEnvironmentContributor.java index 236f0c87..14ac7772 100644 --- a/src/main/java/org/jenkinsci/plugins/gwt/GenericWebhookEnvironmentContributor.java +++ b/src/main/java/org/jenkinsci/plugins/gwt/GenericWebhookEnvironmentContributor.java @@ -12,38 +12,37 @@ @Extension public class GenericWebhookEnvironmentContributor extends EnvironmentContributor { - @SuppressWarnings("unchecked") - @Override - public void buildEnvironmentFor( - @SuppressWarnings("rawtypes") @NonNull final Run r, - @NonNull final EnvVars envs, - @NonNull final TaskListener listener) - throws IOException, InterruptedException { - final GenericCause cause = (GenericCause) r.getCause(GenericCause.class); - if (cause != null) { - final boolean shouldLog = - (cause.isPrintContributedVariables() || cause.isPrintPostContent()) - && !cause.isPostContentPrinted(); - if (shouldLog) { - cause.setPostContentPrinted(true); - } - if (shouldLog && cause.isPrintPostContent()) { - listener.getLogger().println(" Received:\n\n" + cause.getPostContent() + "\n\n"); - } - final Map resolvedVariables = cause.getResolvedVariables(); - if (shouldLog && cause.isPrintContributedVariables()) { - listener.getLogger().println("Contributing variables:\n"); - } - for (final String variable : resolvedVariables.keySet()) { - final String resolved = cause.getResolvedVariables().get(variable); - if (shouldLog && cause.isPrintContributedVariables()) { - listener.getLogger().println(" " + variable + " = " + resolved); + @SuppressWarnings("unchecked") + @Override + public void buildEnvironmentFor( + @SuppressWarnings("rawtypes") @NonNull final Run r, + @NonNull final EnvVars envs, + @NonNull final TaskListener listener) + throws IOException, InterruptedException { + final GenericCause cause = (GenericCause) r.getCause(GenericCause.class); + if (cause != null) { + final boolean shouldLog = (cause.isPrintContributedVariables() || cause.isPrintPostContent()) + && !cause.isPostContentPrinted(); + if (shouldLog) { + cause.setPostContentPrinted(true); + } + if (shouldLog && cause.isPrintPostContent()) { + listener.getLogger().println(" Received:\n\n" + cause.getPostContent() + "\n\n"); + } + final Map resolvedVariables = cause.getResolvedVariables(); + if (shouldLog && cause.isPrintContributedVariables()) { + listener.getLogger().println("Contributing variables:\n"); + } + for (final String variable : resolvedVariables.keySet()) { + final String resolved = cause.getResolvedVariables().get(variable); + if (shouldLog && cause.isPrintContributedVariables()) { + listener.getLogger().println(" " + variable + " = " + resolved); + } + envs.override(variable, resolved); + } + if (shouldLog && cause.isPrintContributedVariables()) { + listener.getLogger().println("\n"); + } } - envs.override(variable, resolved); - } - if (shouldLog && cause.isPrintContributedVariables()) { - listener.getLogger().println("\n"); - } } - } } diff --git a/src/main/java/org/jenkinsci/plugins/gwt/GenericWebhookResponse.java b/src/main/java/org/jenkinsci/plugins/gwt/GenericWebhookResponse.java index 50b82643..36d00cd3 100644 --- a/src/main/java/org/jenkinsci/plugins/gwt/GenericWebhookResponse.java +++ b/src/main/java/org/jenkinsci/plugins/gwt/GenericWebhookResponse.java @@ -4,23 +4,23 @@ public class GenericWebhookResponse { - private final String message; - private Map jobs; + private final String message; + private Map jobs; - public GenericWebhookResponse(final String message) { - this.message = message; - } + public GenericWebhookResponse(final String message) { + this.message = message; + } - public GenericWebhookResponse(final String message, final Map jobs) { - this.message = message; - this.jobs = jobs; - } + public GenericWebhookResponse(final String message, final Map jobs) { + this.message = message; + this.jobs = jobs; + } - public String getMessage() { - return message; - } + public String getMessage() { + return message; + } - public Map getJobs() { - return jobs; - } + public Map getJobs() { + return jobs; + } } diff --git a/src/main/java/org/jenkinsci/plugins/gwt/ParameterActionUtil.java b/src/main/java/org/jenkinsci/plugins/gwt/ParameterActionUtil.java index e1c93efb..7ea9b6f9 100644 --- a/src/main/java/org/jenkinsci/plugins/gwt/ParameterActionUtil.java +++ b/src/main/java/org/jenkinsci/plugins/gwt/ParameterActionUtil.java @@ -16,70 +16,69 @@ public class ParameterActionUtil { - public static ParametersAction createParameterAction( - final ParametersDefinitionProperty parametersDefinitionProperty, - final Map resolvedVariables, - final boolean allowSeveralTriggersPerBuild) { - final List parameterList = - getParametersWithRespectToDefaultValues(parametersDefinitionProperty, resolvedVariables); - final boolean triggerOneBuildPerInvocation = !allowSeveralTriggersPerBuild; - if (triggerOneBuildPerInvocation) { - parameterList.add( - new StringParameterValue( - "jenkins-generic-webhook-trigger-plugin_uuid", UUID.randomUUID().toString(), null)); + public static ParametersAction createParameterAction( + final ParametersDefinitionProperty parametersDefinitionProperty, + final Map resolvedVariables, + final boolean allowSeveralTriggersPerBuild) { + final List parameterList = + getParametersWithRespectToDefaultValues(parametersDefinitionProperty, resolvedVariables); + final boolean triggerOneBuildPerInvocation = !allowSeveralTriggersPerBuild; + if (triggerOneBuildPerInvocation) { + parameterList.add(new StringParameterValue( + "jenkins-generic-webhook-trigger-plugin_uuid", + UUID.randomUUID().toString(), + null)); + } + return new ParametersAction(parameterList); } - return new ParametersAction(parameterList); - } - /** To keep any default values set there. */ - static List getParametersWithRespectToDefaultValues( - final ParametersDefinitionProperty parametersDefinitionProperty, - final Map resolvedVariables) { - final List parameterList = newArrayList(); - if (parametersDefinitionProperty != null) { - for (final ParameterDefinition parameterDefinition : - parametersDefinitionProperty.getParameterDefinitions()) { - final String paramName = parameterDefinition.getName(); - final ParameterValue defaultParameterValue = parameterDefinition.getDefaultParameterValue(); - if (defaultParameterValue != null) { - final ParameterValue parameterValue = - getParameterValue( - resolvedVariables, parameterDefinition, paramName, defaultParameterValue); - parameterList.add(parameterValue); + /** To keep any default values set there. */ + static List getParametersWithRespectToDefaultValues( + final ParametersDefinitionProperty parametersDefinitionProperty, + final Map resolvedVariables) { + final List parameterList = newArrayList(); + if (parametersDefinitionProperty != null) { + for (final ParameterDefinition parameterDefinition : + parametersDefinitionProperty.getParameterDefinitions()) { + final String paramName = parameterDefinition.getName(); + final ParameterValue defaultParameterValue = parameterDefinition.getDefaultParameterValue(); + if (defaultParameterValue != null) { + final ParameterValue parameterValue = + getParameterValue(resolvedVariables, parameterDefinition, paramName, defaultParameterValue); + parameterList.add(parameterValue); + } + } } - } + return parameterList; } - return parameterList; - } - private static ParameterValue getParameterValue( - final Map resolvedVariables, - final ParameterDefinition parameterDefinition, - final String paramName, - final ParameterValue defaultParameterValue) { - final String stringValue = getStringValue(resolvedVariables, paramName, defaultParameterValue); - if (defaultParameterValue.getValue() instanceof Boolean) { - return new BooleanParameterValue( - paramName, Boolean.parseBoolean(stringValue), parameterDefinition.getDescription()); - } - if (defaultParameterValue instanceof CredentialsParameterValue) { - return new CredentialsParameterValue( - paramName, stringValue, parameterDefinition.getDescription()); + private static ParameterValue getParameterValue( + final Map resolvedVariables, + final ParameterDefinition parameterDefinition, + final String paramName, + final ParameterValue defaultParameterValue) { + final String stringValue = getStringValue(resolvedVariables, paramName, defaultParameterValue); + if (defaultParameterValue.getValue() instanceof Boolean) { + return new BooleanParameterValue( + paramName, Boolean.parseBoolean(stringValue), parameterDefinition.getDescription()); + } + if (defaultParameterValue instanceof CredentialsParameterValue) { + return new CredentialsParameterValue(paramName, stringValue, parameterDefinition.getDescription()); + } + return new StringParameterValue(paramName, stringValue, parameterDefinition.getDescription()); } - return new StringParameterValue(paramName, stringValue, parameterDefinition.getDescription()); - } - private static String getStringValue( - final Map resolvedVariables, - final String param, - final ParameterValue defaultParameterValue) { - if (!isNullOrEmpty(resolvedVariables.get(param))) { - return resolvedVariables.get(param); - } - final Object value = defaultParameterValue.getValue(); - if (value == null) { - return ""; + private static String getStringValue( + final Map resolvedVariables, + final String param, + final ParameterValue defaultParameterValue) { + if (!isNullOrEmpty(resolvedVariables.get(param))) { + return resolvedVariables.get(param); + } + final Object value = defaultParameterValue.getValue(); + if (value == null) { + return ""; + } + return value.toString(); } - return value.toString(); - } } diff --git a/src/main/java/org/jenkinsci/plugins/gwt/Renderer.java b/src/main/java/org/jenkinsci/plugins/gwt/Renderer.java index 03e0cea8..2b96db23 100644 --- a/src/main/java/org/jenkinsci/plugins/gwt/Renderer.java +++ b/src/main/java/org/jenkinsci/plugins/gwt/Renderer.java @@ -15,76 +15,67 @@ import java.util.logging.Logger; public class Renderer { - private static Logger LOGGER = Logger.getLogger(Renderer.class.getName()); + private static Logger LOGGER = Logger.getLogger(Renderer.class.getName()); - @VisibleForTesting - public static boolean isMatching( - final String renderedRegexpFilterText, final String regexpFilterExpression) { - final boolean noFilterConfigured = - isNullOrEmpty(renderedRegexpFilterText) && isNullOrEmpty(regexpFilterExpression); - if (noFilterConfigured) { - return true; + @VisibleForTesting + public static boolean isMatching(final String renderedRegexpFilterText, final String regexpFilterExpression) { + final boolean noFilterConfigured = + isNullOrEmpty(renderedRegexpFilterText) && isNullOrEmpty(regexpFilterExpression); + if (noFilterConfigured) { + return true; + } + final boolean isMatching = compile(nullToEmpty(regexpFilterExpression)) // + .matcher(nullToEmpty(renderedRegexpFilterText)) // + .find(); + if (!isMatching) { + LOGGER.log( + FINE, + "Not triggering \"" + + regexpFilterExpression + + "\" not matching \"" + + renderedRegexpFilterText + + "\"."); + } + return isMatching; } - final boolean isMatching = - compile(nullToEmpty(regexpFilterExpression)) // - .matcher(nullToEmpty(renderedRegexpFilterText)) // - .find(); - if (!isMatching) { - LOGGER.log( - FINE, - "Not triggering \"" - + regexpFilterExpression - + "\" not matching \"" - + renderedRegexpFilterText - + "\"."); - } - return isMatching; - } - @VisibleForTesting - public static String renderText( - String regexpFilterText, final Map resolvedVariables) { - if (isNullOrEmpty(regexpFilterText)) { - return ""; - } - final List variables = getVariablesInResolveOrder(resolvedVariables.keySet()); - for (final String variable : variables) { - regexpFilterText = - replaceKey(regexpFilterText, resolvedVariables.get(variable), "$" + variable); - regexpFilterText = - replaceKey(regexpFilterText, resolvedVariables.get(variable), "${" + variable + "}"); + @VisibleForTesting + public static String renderText(String regexpFilterText, final Map resolvedVariables) { + if (isNullOrEmpty(regexpFilterText)) { + return ""; + } + final List variables = getVariablesInResolveOrder(resolvedVariables.keySet()); + for (final String variable : variables) { + regexpFilterText = replaceKey(regexpFilterText, resolvedVariables.get(variable), "$" + variable); + regexpFilterText = replaceKey(regexpFilterText, resolvedVariables.get(variable), "${" + variable + "}"); + } + return regexpFilterText; } - return regexpFilterText; - } - private static String replaceKey( - String regexpFilterText, final String resolvedVariable, final String key) { - try { - regexpFilterText = - regexpFilterText // - .replace(key, resolvedVariable); - } catch (final IllegalArgumentException e) { - throw new RuntimeException("Tried to replace " + key + " with " + resolvedVariable, e); + private static String replaceKey(String regexpFilterText, final String resolvedVariable, final String key) { + try { + regexpFilterText = regexpFilterText // + .replace(key, resolvedVariable); + } catch (final IllegalArgumentException e) { + throw new RuntimeException("Tried to replace " + key + " with " + resolvedVariable, e); + } + return regexpFilterText; } - return regexpFilterText; - } - @VisibleForTesting - static List getVariablesInResolveOrder(final Set unsorted) { - final List variables = new ArrayList<>(unsorted); - Collections.sort( - variables, - new Comparator() { - @Override - public int compare(final String o1, final String o2) { - if (o1.length() == o2.length()) { - return o1.compareTo(o2); - } else if (o1.length() > o2.length()) { - return -1; + @VisibleForTesting + static List getVariablesInResolveOrder(final Set unsorted) { + final List variables = new ArrayList<>(unsorted); + Collections.sort(variables, new Comparator() { + @Override + public int compare(final String o1, final String o2) { + if (o1.length() == o2.length()) { + return o1.compareTo(o2); + } else if (o1.length() > o2.length()) { + return -1; + } + return 1; } - return 1; - } }); - return variables; - } + return variables; + } } diff --git a/src/main/java/org/jenkinsci/plugins/gwt/global/CredentialsHelper.java b/src/main/java/org/jenkinsci/plugins/gwt/global/CredentialsHelper.java index eb23b49b..795fb57e 100644 --- a/src/main/java/org/jenkinsci/plugins/gwt/global/CredentialsHelper.java +++ b/src/main/java/org/jenkinsci/plugins/gwt/global/CredentialsHelper.java @@ -25,58 +25,54 @@ public class CredentialsHelper { - @SuppressFBWarnings("NP_NULL_PARAM_DEREF") - public static ListBoxModel doFillCredentialsIdItems(final Item item, final String credentialsId) { - final StandardListBoxModel result = new StandardListBoxModel(); - if (item == null) { - if (!Jenkins.getInstance().hasPermission(Jenkins.ADMINISTER)) { - return result.includeCurrentValue(credentialsId); - } - } else { - if (!item.hasPermission(Item.EXTENDED_READ) - && !item.hasPermission(CredentialsProvider.USE_ITEM)) { - return result.includeCurrentValue(credentialsId); - } + @SuppressFBWarnings("NP_NULL_PARAM_DEREF") + public static ListBoxModel doFillCredentialsIdItems(final Item item, final String credentialsId) { + final StandardListBoxModel result = new StandardListBoxModel(); + if (item == null) { + if (!Jenkins.getInstance().hasPermission(Jenkins.ADMINISTER)) { + return result.includeCurrentValue(credentialsId); + } + } else { + if (!item.hasPermission(Item.EXTENDED_READ) && !item.hasPermission(CredentialsProvider.USE_ITEM)) { + return result.includeCurrentValue(credentialsId); + } + } + return result // + .includeEmptyValue() // + .includeMatchingAs( + item instanceof Queue.Task ? Tasks.getAuthenticationOf((Queue.Task) item) : ACL.SYSTEM, + item, + StringCredentials.class, + new ArrayList(), + CredentialsMatchers.anyOf(CredentialsMatchers.instanceOf(StringCredentials.class))) + .includeCurrentValue(credentialsId); } - return result // - .includeEmptyValue() // - .includeMatchingAs( - item instanceof Queue.Task ? Tasks.getAuthenticationOf((Queue.Task) item) : ACL.SYSTEM, - item, - StringCredentials.class, - new ArrayList(), - CredentialsMatchers.anyOf(CredentialsMatchers.instanceOf(StringCredentials.class))) - .includeCurrentValue(credentialsId); - } - public static FormValidation doCheckFillCredentialsId(final String credentialsId) { - if (isNullOrEmpty(credentialsId)) { - return FormValidation.ok(); + public static FormValidation doCheckFillCredentialsId(final String credentialsId) { + if (isNullOrEmpty(credentialsId)) { + return FormValidation.ok(); + } + if (!findCredentials(credentialsId).isPresent()) { + return FormValidation.error("Cannot find currently selected credentials"); + } + return FormValidation.ok(); } - if (!findCredentials(credentialsId).isPresent()) { - return FormValidation.error("Cannot find currently selected credentials"); - } - return FormValidation.ok(); - } - public static Optional findCredentials(final String credentialsId) { - return findCredentials(credentialsId, null); - } + public static Optional findCredentials(final String credentialsId) { + return findCredentials(credentialsId, null); + } - public static Optional findCredentials( - final String credentialsId, final Item item) { - if (isNullOrEmpty(credentialsId)) { - return absent(); + public static Optional findCredentials(final String credentialsId, final Item item) { + if (isNullOrEmpty(credentialsId)) { + return absent(); + } + final Authentication authentication = null; + final ArrayList domainRequirements = new ArrayList<>(); + final List lookupCredentials = CredentialsProvider.lookupCredentials( + StringCredentials.class, item, authentication, domainRequirements); + final CredentialsMatcher allOf = CredentialsMatchers.allOf( + CredentialsMatchers.withId(credentialsId), + CredentialsMatchers.anyOf(CredentialsMatchers.instanceOf(StringCredentials.class))); + return fromNullable(CredentialsMatchers.firstOrNull(lookupCredentials, allOf)); } - final Authentication authentication = null; - final ArrayList domainRequirements = new ArrayList<>(); - final List lookupCredentials = - CredentialsProvider.lookupCredentials( - StringCredentials.class, item, authentication, domainRequirements); - final CredentialsMatcher allOf = - CredentialsMatchers.allOf( - CredentialsMatchers.withId(credentialsId), - CredentialsMatchers.anyOf(CredentialsMatchers.instanceOf(StringCredentials.class))); - return fromNullable(CredentialsMatchers.firstOrNull(lookupCredentials, allOf)); - } } diff --git a/src/main/java/org/jenkinsci/plugins/gwt/global/Whitelist.java b/src/main/java/org/jenkinsci/plugins/gwt/global/Whitelist.java index ad69392c..dfba9f40 100644 --- a/src/main/java/org/jenkinsci/plugins/gwt/global/Whitelist.java +++ b/src/main/java/org/jenkinsci/plugins/gwt/global/Whitelist.java @@ -13,47 +13,47 @@ @Extension public class Whitelist extends GlobalConfiguration implements Serializable { - private static final long serialVersionUID = -2832851253933848205L; - - public static Whitelist get() { - return GlobalConfiguration.all().get(Whitelist.class); - } - - private boolean enabled; - private List whitelistItems = new ArrayList<>(); - - @VisibleForTesting - public Whitelist(final boolean enabled, final List whitelistItems) { - this.enabled = enabled; - this.whitelistItems = whitelistItems; - } - - public Whitelist() { - load(); - } - - @Override - public boolean configure(final StaplerRequest req, final JSONObject json) throws FormException { - req.bindJSON(this, json); - save(); - return true; - } - - @DataBoundSetter - public void setEnabled(final boolean enabled) { - this.enabled = enabled; - } - - public boolean isEnabled() { - return enabled; - } - - @DataBoundSetter - public void setWhitelistItems(final List whitelistItems) { - this.whitelistItems = whitelistItems; - } - - public List getWhitelistItems() { - return whitelistItems; - } + private static final long serialVersionUID = -2832851253933848205L; + + public static Whitelist get() { + return GlobalConfiguration.all().get(Whitelist.class); + } + + private boolean enabled; + private List whitelistItems = new ArrayList<>(); + + @VisibleForTesting + public Whitelist(final boolean enabled, final List whitelistItems) { + this.enabled = enabled; + this.whitelistItems = whitelistItems; + } + + public Whitelist() { + load(); + } + + @Override + public boolean configure(final StaplerRequest req, final JSONObject json) throws FormException { + req.bindJSON(this, json); + save(); + return true; + } + + @DataBoundSetter + public void setEnabled(final boolean enabled) { + this.enabled = enabled; + } + + public boolean isEnabled() { + return enabled; + } + + @DataBoundSetter + public void setWhitelistItems(final List whitelistItems) { + this.whitelistItems = whitelistItems; + } + + public List getWhitelistItems() { + return whitelistItems; + } } diff --git a/src/main/java/org/jenkinsci/plugins/gwt/global/WhitelistAlgorithm.java b/src/main/java/org/jenkinsci/plugins/gwt/global/WhitelistAlgorithm.java index 3ed127dd..f29e976f 100644 --- a/src/main/java/org/jenkinsci/plugins/gwt/global/WhitelistAlgorithm.java +++ b/src/main/java/org/jenkinsci/plugins/gwt/global/WhitelistAlgorithm.java @@ -1,23 +1,23 @@ package org.jenkinsci.plugins.gwt.global; public enum WhitelistAlgorithm { - HMAC_MD5("HmacMD5", "md5"), - HMAC_SHA1("HmacSHA1", "sha1"), - HMAC_SHA256("HmacSHA256", "sha256"); + HMAC_MD5("HmacMD5", "md5"), + HMAC_SHA1("HmacSHA1", "sha1"), + HMAC_SHA256("HmacSHA256", "sha256"); - private String fullName; - private String algorithm; + private String fullName; + private String algorithm; - WhitelistAlgorithm(final String fullName, final String algorithm) { - this.fullName = fullName; - this.algorithm = algorithm; - } + WhitelistAlgorithm(final String fullName, final String algorithm) { + this.fullName = fullName; + this.algorithm = algorithm; + } - public String getFullName() { - return this.fullName; - } + public String getFullName() { + return this.fullName; + } - public String getAlgorithm() { - return this.algorithm; - } + public String getAlgorithm() { + return this.algorithm; + } } diff --git a/src/main/java/org/jenkinsci/plugins/gwt/global/WhitelistItem.java b/src/main/java/org/jenkinsci/plugins/gwt/global/WhitelistItem.java index c9dc3a7e..acf6c4f3 100644 --- a/src/main/java/org/jenkinsci/plugins/gwt/global/WhitelistItem.java +++ b/src/main/java/org/jenkinsci/plugins/gwt/global/WhitelistItem.java @@ -17,101 +17,101 @@ public class WhitelistItem extends AbstractDescribableImpl implements Serializable { - private static final long serialVersionUID = 1176246137502450635L; - private String host; - private boolean hmacEnabled; - private String hmacHeader; - private String hmacCredentialId; - private String hmacAlgorithm; - - public WhitelistItem() {} - - @DataBoundConstructor - public WhitelistItem(final String host) { - this.host = host; - } - - public String getHost() { - if (this.host == null) { - return null; + private static final long serialVersionUID = 1176246137502450635L; + private String host; + private boolean hmacEnabled; + private String hmacHeader; + private String hmacCredentialId; + private String hmacAlgorithm; + + public WhitelistItem() {} + + @DataBoundConstructor + public WhitelistItem(final String host) { + this.host = host; } - return this.host.trim(); - } - - public String getHmacAlgorithm() { - return this.hmacAlgorithm; - } - - @DataBoundSetter - public void setHmacAlgorithm(final String hmacAlgorithm) { - this.hmacAlgorithm = hmacAlgorithm; - } - - public String getHmacCredentialId() { - return this.hmacCredentialId; - } - - @DataBoundSetter - public void setHmacCredentialId(final String hmacCredentialId) { - this.hmacCredentialId = hmacCredentialId; - } - - public boolean isHmacEnabled() { - return this.hmacEnabled; - } - - @DataBoundSetter - public void setHmacEnabled(final boolean hmacEnabled) { - this.hmacEnabled = hmacEnabled; - } - - public String getHmacHeader() { - return this.hmacHeader; - } - - @DataBoundSetter - public void setHmacHeader(final String hmacHeader) { - this.hmacHeader = hmacHeader; - } - - @Extension - public static class DescriptorImpl extends Descriptor { - @NonNull - @Override - public String getDisplayName() { - return "Whitelist item"; + + public String getHost() { + if (this.host == null) { + return null; + } + return this.host.trim(); + } + + public String getHmacAlgorithm() { + return this.hmacAlgorithm; + } + + @DataBoundSetter + public void setHmacAlgorithm(final String hmacAlgorithm) { + this.hmacAlgorithm = hmacAlgorithm; + } + + public String getHmacCredentialId() { + return this.hmacCredentialId; + } + + @DataBoundSetter + public void setHmacCredentialId(final String hmacCredentialId) { + this.hmacCredentialId = hmacCredentialId; + } + + public boolean isHmacEnabled() { + return this.hmacEnabled; } - public ListBoxModel doFillHmacAlgorithmItems() { - final ListBoxModel listBoxModel = new ListBoxModel(); - for (final WhitelistAlgorithm a : WhitelistAlgorithm.values()) { - listBoxModel.add(a.getFullName()); - } - return listBoxModel; + @DataBoundSetter + public void setHmacEnabled(final boolean hmacEnabled) { + this.hmacEnabled = hmacEnabled; } - public ListBoxModel doFillHmacCredentialIdItems( - @AncestorInPath final Item item, @QueryParameter final String credentialsId) { - return CredentialsHelper.doFillCredentialsIdItems(item, credentialsId); + public String getHmacHeader() { + return this.hmacHeader; } - public FormValidation doCheckHmacCredentialIdItems(@QueryParameter final String value) { - return CredentialsHelper.doCheckFillCredentialsId(value); + @DataBoundSetter + public void setHmacHeader(final String hmacHeader) { + this.hmacHeader = hmacHeader; } - /** - * See: https://wiki.jenkins.io/display/JENKINS/Form+Validation - * - * @param value - * @return FormValidation - */ - public FormValidation doCheckHost(@QueryParameter final String value) { - try { - new WhitelistHost(value); - return FormValidation.ok(); - } catch (final WhitelistException e) { - return FormValidation.error(e.getMessage()); - } + @Extension + public static class DescriptorImpl extends Descriptor { + @NonNull + @Override + public String getDisplayName() { + return "Whitelist item"; + } + + public ListBoxModel doFillHmacAlgorithmItems() { + final ListBoxModel listBoxModel = new ListBoxModel(); + for (final WhitelistAlgorithm a : WhitelistAlgorithm.values()) { + listBoxModel.add(a.getFullName()); + } + return listBoxModel; + } + + public ListBoxModel doFillHmacCredentialIdItems( + @AncestorInPath final Item item, @QueryParameter final String credentialsId) { + return CredentialsHelper.doFillCredentialsIdItems(item, credentialsId); + } + + public FormValidation doCheckHmacCredentialIdItems(@QueryParameter final String value) { + return CredentialsHelper.doCheckFillCredentialsId(value); + } + + /** + * See: https://wiki.jenkins.io/display/JENKINS/Form+Validation + * + * @param value + * @return FormValidation + */ + public FormValidation doCheckHost(@QueryParameter final String value) { + try { + new WhitelistHost(value); + return FormValidation.ok(); + } catch (final WhitelistException e) { + return FormValidation.error(e.getMessage()); + } + } } - } } diff --git a/src/main/java/org/jenkinsci/plugins/gwt/jobfinder/GenericTriggerFinder.java b/src/main/java/org/jenkinsci/plugins/gwt/jobfinder/GenericTriggerFinder.java index 72357be0..80b17068 100644 --- a/src/main/java/org/jenkinsci/plugins/gwt/jobfinder/GenericTriggerFinder.java +++ b/src/main/java/org/jenkinsci/plugins/gwt/jobfinder/GenericTriggerFinder.java @@ -6,16 +6,15 @@ import org.jenkinsci.plugins.gwt.GenericTrigger; public class GenericTriggerFinder { - public static GenericTrigger findGenericTrigger( - final Map> triggers) { - if (triggers == null) { - return null; + public static GenericTrigger findGenericTrigger(final Map> triggers) { + if (triggers == null) { + return null; + } + for (final Trigger candidate : triggers.values()) { + if (candidate instanceof GenericTrigger) { + return (GenericTrigger) candidate; + } + } + return null; } - for (final Trigger candidate : triggers.values()) { - if (candidate instanceof GenericTrigger) { - return (GenericTrigger) candidate; - } - } - return null; - } } diff --git a/src/main/java/org/jenkinsci/plugins/gwt/jobfinder/JobFinder.java b/src/main/java/org/jenkinsci/plugins/gwt/jobfinder/JobFinder.java index 0fe177ee..baec5fe0 100644 --- a/src/main/java/org/jenkinsci/plugins/gwt/jobfinder/JobFinder.java +++ b/src/main/java/org/jenkinsci/plugins/gwt/jobfinder/JobFinder.java @@ -18,100 +18,84 @@ public final class JobFinder { - private static Logger LOG = Logger.getLogger(JobFinder.class.getName()); + private static Logger LOG = Logger.getLogger(JobFinder.class.getName()); - private JobFinder() {} + private JobFinder() {} - private static JobFinderImpersonater jobFinderImpersonater = new JobFinderImpersonater(); + private static JobFinderImpersonater jobFinderImpersonater = new JobFinderImpersonater(); - @VisibleForTesting - static void setJobFinderImpersonater(final JobFinderImpersonater jobFinderImpersonater) { - JobFinder.jobFinderImpersonater = jobFinderImpersonater; - } + @VisibleForTesting + static void setJobFinderImpersonater(final JobFinderImpersonater jobFinderImpersonater) { + JobFinder.jobFinderImpersonater = jobFinderImpersonater; + } - public static List findAllJobsWithTrigger(final String givenToken) { + public static List findAllJobsWithTrigger(final String givenToken) { - final List found = new ArrayList<>(); + final List found = new ArrayList<>(); - final boolean impersonate = !isNullOrEmpty(givenToken); - final List candidateProjects = - jobFinderImpersonater.getAllParameterizedJobs(impersonate); - for (final ParameterizedJob candidateJob : candidateProjects) { - final GenericTrigger genericTriggerOpt = - GenericTriggerFinder.findGenericTrigger(candidateJob.getTriggers()); - if (genericTriggerOpt != null) { - final String configuredToken = - determineTokenValue( - candidateJob, - genericTriggerOpt.getToken(), - genericTriggerOpt.getTokenCredentialId()); - final boolean authenticationTokenMatches = - authenticationTokenMatches(givenToken, configuredToken); - if (authenticationTokenMatches) { - final FoundJob foundJob = new FoundJob(candidateJob.getFullName(), genericTriggerOpt); - found.add(foundJob); + final boolean impersonate = !isNullOrEmpty(givenToken); + final List candidateProjects = jobFinderImpersonater.getAllParameterizedJobs(impersonate); + for (final ParameterizedJob candidateJob : candidateProjects) { + final GenericTrigger genericTriggerOpt = + GenericTriggerFinder.findGenericTrigger(candidateJob.getTriggers()); + if (genericTriggerOpt != null) { + final String configuredToken = determineTokenValue( + candidateJob, genericTriggerOpt.getToken(), genericTriggerOpt.getTokenCredentialId()); + final boolean authenticationTokenMatches = authenticationTokenMatches(givenToken, configuredToken); + if (authenticationTokenMatches) { + final FoundJob foundJob = new FoundJob(candidateJob.getFullName(), genericTriggerOpt); + found.add(foundJob); + } + } } - } - } - - return found; - } - private static String determineTokenValue( - final Item item, final String token, final String tokenCredentialsId) { - if (isNullOrEmpty(tokenCredentialsId)) { - LOG.log(Level.FINE, "Found no credential configured in " + item.getFullDisplayName()); - return token; + return found; } - if (!isNullOrEmpty(tokenCredentialsId) && !isNullOrEmpty(token)) { - LOG.log( - Level.WARNING, - "The job " - + item.getFullDisplayName() - + " is configured with both static token and token from credential " - + tokenCredentialsId - + "."); - } - final Optional credentialsOpt = - org.jenkinsci.plugins.gwt.global.CredentialsHelper.findCredentials( - tokenCredentialsId, item); - if (credentialsOpt.isPresent()) { - LOG.log( - Level.FINE, - "Found credential from " - + tokenCredentialsId - + " configured in " - + item.getFullDisplayName()); - return credentialsOpt.get().getSecret().getPlainText(); - } - LOG.log( - Level.SEVERE, - "Cannot find credential (" - + tokenCredentialsId - + ") configured in " - + item.getFullDisplayName()); - return token; - } - private static boolean authenticationTokenMatches( - final String givenToken, final String configuredToken) { - final boolean noTokenGiven = isNullOrEmpty(givenToken); - final boolean noTokenConfigured = isNullOrEmpty(configuredToken); - return authenticationTokenMatchesGeneric(configuredToken, givenToken) - || noTokenGiven && noTokenConfigured; - } + private static String determineTokenValue(final Item item, final String token, final String tokenCredentialsId) { + if (isNullOrEmpty(tokenCredentialsId)) { + LOG.log(Level.FINE, "Found no credential configured in " + item.getFullDisplayName()); + return token; + } + if (!isNullOrEmpty(tokenCredentialsId) && !isNullOrEmpty(token)) { + LOG.log( + Level.WARNING, + "The job " + + item.getFullDisplayName() + + " is configured with both static token and token from credential " + + tokenCredentialsId + + "."); + } + final Optional credentialsOpt = + org.jenkinsci.plugins.gwt.global.CredentialsHelper.findCredentials(tokenCredentialsId, item); + if (credentialsOpt.isPresent()) { + LOG.log( + Level.FINE, + "Found credential from " + tokenCredentialsId + " configured in " + item.getFullDisplayName()); + return credentialsOpt.get().getSecret().getPlainText(); + } + LOG.log( + Level.SEVERE, + "Cannot find credential (" + tokenCredentialsId + ") configured in " + item.getFullDisplayName()); + return token; + } - /** This is the token configured in this plugin. */ - private static boolean authenticationTokenMatchesGeneric( - final String configuredToken, final String givenToken) { - final boolean jobHasConfiguredToken = !isNullOrEmpty(configuredToken); - final boolean tokenWasGiven = !isNullOrEmpty(givenToken); - if (jobHasConfiguredToken && tokenWasGiven) { - return isEqual(configuredToken.getBytes(UTF_8), givenToken.getBytes(UTF_8)); + private static boolean authenticationTokenMatches(final String givenToken, final String configuredToken) { + final boolean noTokenGiven = isNullOrEmpty(givenToken); + final boolean noTokenConfigured = isNullOrEmpty(configuredToken); + return authenticationTokenMatchesGeneric(configuredToken, givenToken) || noTokenGiven && noTokenConfigured; } - if (!jobHasConfiguredToken && !tokenWasGiven) { - return true; + + /** This is the token configured in this plugin. */ + private static boolean authenticationTokenMatchesGeneric(final String configuredToken, final String givenToken) { + final boolean jobHasConfiguredToken = !isNullOrEmpty(configuredToken); + final boolean tokenWasGiven = !isNullOrEmpty(givenToken); + if (jobHasConfiguredToken && tokenWasGiven) { + return isEqual(configuredToken.getBytes(UTF_8), givenToken.getBytes(UTF_8)); + } + if (!jobHasConfiguredToken && !tokenWasGiven) { + return true; + } + return false; } - return false; - } } diff --git a/src/main/java/org/jenkinsci/plugins/gwt/jobfinder/JobFinderImpersonater.java b/src/main/java/org/jenkinsci/plugins/gwt/jobfinder/JobFinderImpersonater.java index acab161f..146b7ce8 100644 --- a/src/main/java/org/jenkinsci/plugins/gwt/jobfinder/JobFinderImpersonater.java +++ b/src/main/java/org/jenkinsci/plugins/gwt/jobfinder/JobFinderImpersonater.java @@ -20,105 +20,104 @@ import org.acegisecurity.context.SecurityContextHolder; public class JobFinderImpersonater { - private static Logger LOGGER = Logger.getLogger(JobFinderImpersonater.class.getName()); - private static final Map JOBS_WITH_GWT = new ConcurrentHashMap<>(); + private static Logger LOGGER = Logger.getLogger(JobFinderImpersonater.class.getName()); + private static final Map JOBS_WITH_GWT = new ConcurrentHashMap<>(); - @Extension - public static class JobItemListener extends ItemListener { - @Override - public void onLoaded() { - for (final ParameterizedJob job : doGetAllParameterizedJobs(true)) { - JobFinderImpersonater.putJob(job); - } - LOGGER.info("Loaded " + JOBS_WITH_GWT.size() + " jobs in cache"); - } + @Extension + public static class JobItemListener extends ItemListener { + @Override + public void onLoaded() { + for (final ParameterizedJob job : doGetAllParameterizedJobs(true)) { + JobFinderImpersonater.putJob(job); + } + LOGGER.info("Loaded " + JOBS_WITH_GWT.size() + " jobs in cache"); + } - @Override - public void onUpdated(final Item job) { - JobFinderImpersonater.putJob(job); - } + @Override + public void onUpdated(final Item job) { + JobFinderImpersonater.putJob(job); + } - @Override - public void onCreated(final Item job) { - JobFinderImpersonater.putJob(job); - } + @Override + public void onCreated(final Item job) { + JobFinderImpersonater.putJob(job); + } - @Override - public void onDeleted(final Item job) { - JobFinderImpersonater.deleteJob(job); - } + @Override + public void onDeleted(final Item job) { + JobFinderImpersonater.deleteJob(job); + } - @Override - public void onCopied(final Item src, final Item job) { - JobFinderImpersonater.putJob(job); - } + @Override + public void onCopied(final Item src, final Item job) { + JobFinderImpersonater.putJob(job); + } - @Override - public void onLocationChanged( - final Item item, final String oldFullName, final String newFullName) { - JOBS_WITH_GWT.remove(oldFullName); - JobFinderImpersonater.putJob(item); + @Override + public void onLocationChanged(final Item item, final String oldFullName, final String newFullName) { + JOBS_WITH_GWT.remove(oldFullName); + JobFinderImpersonater.putJob(item); + } } - } - @Extension - public static class JobItemSaveListener extends SaveableListener { - @Override - public void onChange(final Saveable o, final XmlFile file) { - if (o instanceof ParameterizedJob) { - final ParameterizedJob job = (ParameterizedJob) o; - LOGGER.finest("Saving " + job.getFullName()); - JobFinderImpersonater.putJob(job); - } + @Extension + public static class JobItemSaveListener extends SaveableListener { + @Override + public void onChange(final Saveable o, final XmlFile file) { + if (o instanceof ParameterizedJob) { + final ParameterizedJob job = (ParameterizedJob) o; + LOGGER.finest("Saving " + job.getFullName()); + JobFinderImpersonater.putJob(job); + } + } } - } - public List getAllParameterizedJobs(final boolean impersonate) { - if (LOGGER.isLoggable(Level.FINEST)) { - LOGGER.finest("There are " + this.JOBS_WITH_GWT.size() + " jobs in cache:"); - final TreeSet sortedSet = new TreeSet<>(this.JOBS_WITH_GWT.keySet()); - for (final String job : sortedSet) { - LOGGER.finest(" " + job); - } - } - if (impersonate) { - LOGGER.log(Level.FINE, "Using the cache"); - return new ArrayList<>(this.JOBS_WITH_GWT.values()); + public List getAllParameterizedJobs(final boolean impersonate) { + if (LOGGER.isLoggable(Level.FINEST)) { + LOGGER.finest("There are " + this.JOBS_WITH_GWT.size() + " jobs in cache:"); + final TreeSet sortedSet = new TreeSet<>(this.JOBS_WITH_GWT.keySet()); + for (final String job : sortedSet) { + LOGGER.finest(" " + job); + } + } + if (impersonate) { + LOGGER.log(Level.FINE, "Using the cache"); + return new ArrayList<>(this.JOBS_WITH_GWT.values()); + } + LOGGER.log( + Level.FINE, + "Not using the cache because jobs are not retreieved with impersonation SYSTEM. " + + "SYSTEM is only impersonated when using a token." + + " If SYSTEM is not impersonated, only jobs available for the currently authenticated user is found."); + return doGetAllParameterizedJobs(impersonate); } - LOGGER.log( - Level.FINE, - "Not using the cache because jobs are not retreieved with impersonation SYSTEM. " - + "SYSTEM is only impersonated when using a token." - + " If SYSTEM is not impersonated, only jobs available for the currently authenticated user is found."); - return doGetAllParameterizedJobs(impersonate); - } - private static List doGetAllParameterizedJobs(final boolean impersonate) { - SecurityContext orig = null; - try { - if (impersonate) { - orig = ACL.impersonate(ACL.SYSTEM); - } - return Jenkins.getInstance().getAllItems(ParameterizedJob.class); - } finally { - if (impersonate) { - SecurityContextHolder.setContext(orig); - } + private static List doGetAllParameterizedJobs(final boolean impersonate) { + SecurityContext orig = null; + try { + if (impersonate) { + orig = ACL.impersonate(ACL.SYSTEM); + } + return Jenkins.getInstance().getAllItems(ParameterizedJob.class); + } finally { + if (impersonate) { + SecurityContextHolder.setContext(orig); + } + } } - } - private static void putJob(final Item job) { - if (job instanceof ParameterizedJob) { - final ParameterizedJob parameterizedJob = (ParameterizedJob) job; - final boolean hasGenericTrigger = - GenericTriggerFinder.findGenericTrigger(parameterizedJob.getTriggers()) != null; - if (hasGenericTrigger) { - JOBS_WITH_GWT.put(parameterizedJob.getFullName(), parameterizedJob); - } + private static void putJob(final Item job) { + if (job instanceof ParameterizedJob) { + final ParameterizedJob parameterizedJob = (ParameterizedJob) job; + final boolean hasGenericTrigger = + GenericTriggerFinder.findGenericTrigger(parameterizedJob.getTriggers()) != null; + if (hasGenericTrigger) { + JOBS_WITH_GWT.put(parameterizedJob.getFullName(), parameterizedJob); + } + } } - } - private static void deleteJob(final Item job) { - JOBS_WITH_GWT.remove(job.getFullName()); - } + private static void deleteJob(final Item job) { + JOBS_WITH_GWT.remove(job.getFullName()); + } } diff --git a/src/main/java/org/jenkinsci/plugins/gwt/resolvers/FlattenerUtils.java b/src/main/java/org/jenkinsci/plugins/gwt/resolvers/FlattenerUtils.java index be941b9d..0542b01e 100644 --- a/src/main/java/org/jenkinsci/plugins/gwt/resolvers/FlattenerUtils.java +++ b/src/main/java/org/jenkinsci/plugins/gwt/resolvers/FlattenerUtils.java @@ -4,16 +4,16 @@ public class FlattenerUtils { - public static String filter(String string, String regexpFilter) { - if (string == null || regexpFilter == null || regexpFilter.isEmpty()) { - return string; + public static String filter(String string, String regexpFilter) { + if (string == null || regexpFilter == null || regexpFilter.isEmpty()) { + return string; + } + return string.replaceAll(regexpFilter, ""); } - return string.replaceAll(regexpFilter, ""); - } - public static String toVariableName(String variableName) { - return checkNotNull(variableName, "variable name must be set") // - .replaceAll("\\s", "_") // - .replaceAll("-", "_"); - } + public static String toVariableName(String variableName) { + return checkNotNull(variableName, "variable name must be set") // + .replaceAll("\\s", "_") // + .replaceAll("-", "_"); + } } diff --git a/src/main/java/org/jenkinsci/plugins/gwt/resolvers/JsonFlattener.java b/src/main/java/org/jenkinsci/plugins/gwt/resolvers/JsonFlattener.java index 863baa50..5d15bbb7 100644 --- a/src/main/java/org/jenkinsci/plugins/gwt/resolvers/JsonFlattener.java +++ b/src/main/java/org/jenkinsci/plugins/gwt/resolvers/JsonFlattener.java @@ -11,59 +11,56 @@ import java.util.Map.Entry; public class JsonFlattener { - private static Gson GSON = - new GsonBuilder() // - .serializeNulls() // - .create(); + private static Gson GSON = new GsonBuilder() // + .serializeNulls() // + .create(); - public JsonFlattener() {} + public JsonFlattener() {} - public Map flattenJson( - final String key, final String regexFilter, final Object resolved) { - final Map resolvedVariables = newHashMap(); - this.doFlattenJson(key, regexFilter, resolved, resolvedVariables); + public Map flattenJson(final String key, final String regexFilter, final Object resolved) { + final Map resolvedVariables = newHashMap(); + this.doFlattenJson(key, regexFilter, resolved, resolvedVariables); - if (resolved != null && !(resolved instanceof String)) { - final String variableName = toVariableName(key); - resolvedVariables.put( - variableName, filter(JsonFlattener.GSON.toJson(resolved).toString(), regexFilter)); - } + if (resolved != null && !(resolved instanceof String)) { + final String variableName = toVariableName(key); + resolvedVariables.put( + variableName, filter(JsonFlattener.GSON.toJson(resolved).toString(), regexFilter)); + } - return resolvedVariables; - } + return resolvedVariables; + } - @SuppressWarnings("unchecked") - private void doFlattenJson( - final String key, - final String regexFilter, - final Object resolved, - final Map resolvedVariables) { - if (resolved instanceof List) { - int i = 0; - for (final Object o : (List) resolved) { - this.doFlattenJson(key + "_" + i, regexFilter, o, resolvedVariables); - i++; - } - } else if (resolved instanceof Map) { - for (final Entry entry : ((Map) resolved).entrySet()) { - this.doFlattenJson( - key + "_" + entry.getKey(), regexFilter, entry.getValue(), resolvedVariables); - } - } else if (resolved != null) { - final String variableName = toVariableName(key); - JsonFlattener.putVariable(resolvedVariables, variableName, resolved, regexFilter); + @SuppressWarnings("unchecked") + private void doFlattenJson( + final String key, + final String regexFilter, + final Object resolved, + final Map resolvedVariables) { + if (resolved instanceof List) { + int i = 0; + for (final Object o : (List) resolved) { + this.doFlattenJson(key + "_" + i, regexFilter, o, resolvedVariables); + i++; + } + } else if (resolved instanceof Map) { + for (final Entry entry : ((Map) resolved).entrySet()) { + this.doFlattenJson(key + "_" + entry.getKey(), regexFilter, entry.getValue(), resolvedVariables); + } + } else if (resolved != null) { + final String variableName = toVariableName(key); + JsonFlattener.putVariable(resolvedVariables, variableName, resolved, regexFilter); + } } - } - public static void putVariable( - final Map resolvedVariables, - final String variableName, - final Object variableValue, - final String regexFilter) { - String string = variableValue.toString(); - if (!(variableValue instanceof String)) { - string = JsonFlattener.GSON.toJson(variableValue).toString(); + public static void putVariable( + final Map resolvedVariables, + final String variableName, + final Object variableValue, + final String regexFilter) { + String string = variableValue.toString(); + if (!(variableValue instanceof String)) { + string = JsonFlattener.GSON.toJson(variableValue).toString(); + } + resolvedVariables.put(variableName, filter(string, regexFilter)); } - resolvedVariables.put(variableName, filter(string, regexFilter)); - } } diff --git a/src/main/java/org/jenkinsci/plugins/gwt/resolvers/PostContentParameterResolver.java b/src/main/java/org/jenkinsci/plugins/gwt/resolvers/PostContentParameterResolver.java index 7ecf497d..4f36f5f3 100644 --- a/src/main/java/org/jenkinsci/plugins/gwt/resolvers/PostContentParameterResolver.java +++ b/src/main/java/org/jenkinsci/plugins/gwt/resolvers/PostContentParameterResolver.java @@ -26,98 +26,95 @@ import org.xml.sax.InputSource; public class PostContentParameterResolver { - private static final Logger LOGGER = Logger.getLogger(VariablesResolver.class.getName()); + private static final Logger LOGGER = Logger.getLogger(VariablesResolver.class.getName()); - private final XmlFlattener xmlFlattener = new XmlFlattener(); - private final JsonFlattener jsonFlattener = new JsonFlattener(); + private final XmlFlattener xmlFlattener = new XmlFlattener(); + private final JsonFlattener jsonFlattener = new JsonFlattener(); - public PostContentParameterResolver() {} + public PostContentParameterResolver() {} - public Map getPostContentParameters( - final List configuredGenericVariables, - final String incomingPostContent, - final boolean shouldNotFlatten) { - final Map resolvedVariables = newHashMap(); - if (configuredGenericVariables != null) { - for (final GenericVariable gv : configuredGenericVariables) { - final Map resolvedMap = - this.resolve(incomingPostContent, gv, shouldNotFlatten); - final boolean notResolved = - resolvedMap.isEmpty() - || resolvedMap.containsKey(gv.getVariableName()) - && resolvedMap.get(gv.getVariableName()).isEmpty(); - if (notResolved && gv.getDefaultValue() != null) { - resolvedMap.put(gv.getVariableName(), gv.getDefaultValue()); + public Map getPostContentParameters( + final List configuredGenericVariables, + final String incomingPostContent, + final boolean shouldNotFlatten) { + final Map resolvedVariables = newHashMap(); + if (configuredGenericVariables != null) { + for (final GenericVariable gv : configuredGenericVariables) { + final Map resolvedMap = this.resolve(incomingPostContent, gv, shouldNotFlatten); + final boolean notResolved = resolvedMap.isEmpty() + || resolvedMap.containsKey(gv.getVariableName()) + && resolvedMap.get(gv.getVariableName()).isEmpty(); + if (notResolved && gv.getDefaultValue() != null) { + resolvedMap.put(gv.getVariableName(), gv.getDefaultValue()); + } + resolvedVariables.putAll(resolvedMap); + } } - resolvedVariables.putAll(resolvedMap); - } + return resolvedVariables; } - return resolvedVariables; - } - private Map resolve( - final String incomingPostContent, final GenericVariable gv, final boolean shouldNotFlatten) { - try { - if (!isNullOrEmpty(incomingPostContent) - && gv != null - && gv.getExpression() != null - && !gv.getExpression().isEmpty()) { - if (gv.getExpressionType() == JSONPath) { - return this.resolveJsonPath(incomingPostContent, gv, shouldNotFlatten); - } else if (gv.getExpressionType() == XPath) { - return this.resolveXPath(incomingPostContent, gv); - } else { - throw new IllegalStateException("Not recognizing " + gv.getExpressionType()); + private Map resolve( + final String incomingPostContent, final GenericVariable gv, final boolean shouldNotFlatten) { + try { + if (!isNullOrEmpty(incomingPostContent) + && gv != null + && gv.getExpression() != null + && !gv.getExpression().isEmpty()) { + if (gv.getExpressionType() == JSONPath) { + return this.resolveJsonPath(incomingPostContent, gv, shouldNotFlatten); + } else if (gv.getExpressionType() == XPath) { + return this.resolveXPath(incomingPostContent, gv); + } else { + throw new IllegalStateException("Not recognizing " + gv.getExpressionType()); + } + } + } catch (final Throwable e) { + LOGGER.log( + INFO, + "Unable to resolve " + + gv.getVariableName() + + " with " + + gv.getExpressionType() + + " " + + gv.getExpression() + + " in\n" + + incomingPostContent, + e); } - } - } catch (final Throwable e) { - LOGGER.log( - INFO, - "Unable to resolve " - + gv.getVariableName() - + " with " - + gv.getExpressionType() - + " " - + gv.getExpression() - + " in\n" - + incomingPostContent, - e); + return new HashMap<>(); } - return new HashMap<>(); - } - private Map resolveJsonPath( - final String incomingPostContent, final GenericVariable gv, final boolean shouldNotFlatten) { - try { - final Object resolved = JsonPath.read(incomingPostContent, gv.getExpression()); - Map flattened = new HashMap<>(); - if (shouldNotFlatten) { - JsonFlattener.putVariable(flattened, gv.getVariableName(), resolved, gv.getRegexpFilter()); - } else { - flattened = - this.jsonFlattener.flattenJson(gv.getVariableName(), gv.getRegexpFilter(), resolved); - } - if (gv.getExpression().trim().equals("$")) { - flattened.put(gv.getVariableName(), incomingPostContent); - } - return flattened; - } catch (final PathNotFoundException e) { - return new HashMap<>(); + private Map resolveJsonPath( + final String incomingPostContent, final GenericVariable gv, final boolean shouldNotFlatten) { + try { + final Object resolved = JsonPath.read(incomingPostContent, gv.getExpression()); + Map flattened = new HashMap<>(); + if (shouldNotFlatten) { + JsonFlattener.putVariable(flattened, gv.getVariableName(), resolved, gv.getRegexpFilter()); + } else { + flattened = this.jsonFlattener.flattenJson(gv.getVariableName(), gv.getRegexpFilter(), resolved); + } + if (gv.getExpression().trim().equals("$")) { + flattened.put(gv.getVariableName(), incomingPostContent); + } + return flattened; + } catch (final PathNotFoundException e) { + return new HashMap<>(); + } } - } - private Map resolveXPath( - final String incomingPostContent, final GenericVariable gv) throws Exception { - final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); - final DocumentBuilder builder = factory.newDocumentBuilder(); - final InputSource inputSource = - new InputSource(new ByteArrayInputStream(incomingPostContent.getBytes(Charsets.UTF_8))); - final Document doc = builder.parse(inputSource); - final XPathFactory xPathfactory = XPathFactory.newInstance(); - final XPath xpath = xPathfactory.newXPath(); - final XPathExpression expr = xpath.compile(gv.getExpression()); - final Object resolved = expr.evaluate(doc, XPathConstants.NODESET); - return this.xmlFlattener.flattenXmlNode(gv, (NodeList) resolved); - } + private Map resolveXPath(final String incomingPostContent, final GenericVariable gv) + throws Exception { + final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); + final DocumentBuilder builder = factory.newDocumentBuilder(); + final InputSource inputSource = + new InputSource(new ByteArrayInputStream(incomingPostContent.getBytes(Charsets.UTF_8))); + final Document doc = builder.parse(inputSource); + final XPathFactory xPathfactory = XPathFactory.newInstance(); + final XPath xpath = xPathfactory.newXPath(); + final XPathExpression expr = xpath.compile(gv.getExpression()); + final Object resolved = expr.evaluate(doc, XPathConstants.NODESET); + return this.xmlFlattener.flattenXmlNode(gv, (NodeList) resolved); + } } diff --git a/src/main/java/org/jenkinsci/plugins/gwt/resolvers/RequestHeaderResolver.java b/src/main/java/org/jenkinsci/plugins/gwt/resolvers/RequestHeaderResolver.java index b56dfc92..c6ba8f80 100644 --- a/src/main/java/org/jenkinsci/plugins/gwt/resolvers/RequestHeaderResolver.java +++ b/src/main/java/org/jenkinsci/plugins/gwt/resolvers/RequestHeaderResolver.java @@ -13,44 +13,44 @@ import org.jenkinsci.plugins.gwt.GenericHeaderVariable; public class RequestHeaderResolver { - public RequestHeaderResolver() {} + public RequestHeaderResolver() {} - public Map getRequestHeaders( - final List configuredGenericHeaderVariables, - final Map> incomingHeaders) { - final Map found = new HashMap<>(); - for (final Entry> headersEntry : incomingHeaders.entrySet()) { - final String headerName = headersEntry.getKey(); - final Optional configuredVariable = - findConfiguredVariable(configuredGenericHeaderVariables, headerName); - if (!configuredVariable.isPresent()) { - continue; - } - final List headers = headersEntry.getValue(); - int i = 0; - for (final String headerValue : headers) { - final String regexpFilter = configuredVariable.get().getRegexpFilter(); - final String filteredValue = filter(headerValue, regexpFilter); - found.put(toVariableName(headerName).toLowerCase() + "_" + i, filteredValue); - final boolean firstValue = i == 0; - if (firstValue) { - // Users will probably expect this variable for parameters that are never a list - found.put(toVariableName(headerName).toLowerCase(), filteredValue); + public Map getRequestHeaders( + final List configuredGenericHeaderVariables, + final Map> incomingHeaders) { + final Map found = new HashMap<>(); + for (final Entry> headersEntry : incomingHeaders.entrySet()) { + final String headerName = headersEntry.getKey(); + final Optional configuredVariable = + findConfiguredVariable(configuredGenericHeaderVariables, headerName); + if (!configuredVariable.isPresent()) { + continue; + } + final List headers = headersEntry.getValue(); + int i = 0; + for (final String headerValue : headers) { + final String regexpFilter = configuredVariable.get().getRegexpFilter(); + final String filteredValue = filter(headerValue, regexpFilter); + found.put(toVariableName(headerName).toLowerCase() + "_" + i, filteredValue); + final boolean firstValue = i == 0; + if (firstValue) { + // Users will probably expect this variable for parameters that are never a list + found.put(toVariableName(headerName).toLowerCase(), filteredValue); + } + i++; + } + incomingHeaders.put(headerName, headers); } - i++; - } - incomingHeaders.put(headerName, headers); + return found; } - return found; - } - private Optional findConfiguredVariable( - final List configuredGenericHeaderVariables, final String headerName) { - for (final GenericHeaderVariable ghv : configuredGenericHeaderVariables) { - if (ghv.getHeaderName().equalsIgnoreCase(headerName)) { - return of(ghv); - } + private Optional findConfiguredVariable( + final List configuredGenericHeaderVariables, final String headerName) { + for (final GenericHeaderVariable ghv : configuredGenericHeaderVariables) { + if (ghv.getHeaderName().equalsIgnoreCase(headerName)) { + return of(ghv); + } + } + return absent(); } - return absent(); - } } diff --git a/src/main/java/org/jenkinsci/plugins/gwt/resolvers/RequestParameterResolver.java b/src/main/java/org/jenkinsci/plugins/gwt/resolvers/RequestParameterResolver.java index 0beded9e..ab369452 100644 --- a/src/main/java/org/jenkinsci/plugins/gwt/resolvers/RequestParameterResolver.java +++ b/src/main/java/org/jenkinsci/plugins/gwt/resolvers/RequestParameterResolver.java @@ -12,45 +12,45 @@ import org.jenkinsci.plugins.gwt.GenericRequestVariable; public class RequestParameterResolver { - public RequestParameterResolver() {} + public RequestParameterResolver() {} - public Map getRequestParameters( - List configuredGenericRequestVariables, - Map incomingParameterMap) { - final Map resolvedVariables = newHashMap(); - if (incomingParameterMap != null) { - for (final Entry paramenterMapEntry : incomingParameterMap.entrySet()) { - final String requestParamName = paramenterMapEntry.getKey(); - final Optional configuredVariable = - findConfiguredVariable(configuredGenericRequestVariables, requestParamName); - if (!configuredVariable.isPresent()) { - continue; + public Map getRequestParameters( + List configuredGenericRequestVariables, + Map incomingParameterMap) { + final Map resolvedVariables = newHashMap(); + if (incomingParameterMap != null) { + for (final Entry paramenterMapEntry : incomingParameterMap.entrySet()) { + final String requestParamName = paramenterMapEntry.getKey(); + final Optional configuredVariable = + findConfiguredVariable(configuredGenericRequestVariables, requestParamName); + if (!configuredVariable.isPresent()) { + continue; + } + final String[] values = paramenterMapEntry.getValue(); + for (int i = 0; i < values.length; i++) { + final String filteredValue = + filter(values[i], configuredVariable.get().getRegexpFilter()); + resolvedVariables.put(toVariableName(requestParamName) + "_" + i, filteredValue); + final boolean firstAndOnlyValue = i == 0 && values.length == 1; + if (firstAndOnlyValue) { + // Users will probably expect this variable for parameters that are never a list + resolvedVariables.put(toVariableName(requestParamName), filteredValue); + } + } + } } - final String[] values = paramenterMapEntry.getValue(); - for (int i = 0; i < values.length; i++) { - final String filteredValue = - filter(values[i], configuredVariable.get().getRegexpFilter()); - resolvedVariables.put(toVariableName(requestParamName) + "_" + i, filteredValue); - final boolean firstAndOnlyValue = i == 0 && values.length == 1; - if (firstAndOnlyValue) { - // Users will probably expect this variable for parameters that are never a list - resolvedVariables.put(toVariableName(requestParamName), filteredValue); - } - } - } + return resolvedVariables; } - return resolvedVariables; - } - private Optional findConfiguredVariable( - List genericRequestVariables, String requestParamName) { - if (genericRequestVariables != null) { - for (final GenericRequestVariable v : genericRequestVariables) { - if (v.getParameterName().equals(requestParamName)) { - return Optional.of(v); + private Optional findConfiguredVariable( + List genericRequestVariables, String requestParamName) { + if (genericRequestVariables != null) { + for (final GenericRequestVariable v : genericRequestVariables) { + if (v.getParameterName().equals(requestParamName)) { + return Optional.of(v); + } + } } - } + return absent(); } - return absent(); - } } diff --git a/src/main/java/org/jenkinsci/plugins/gwt/resolvers/VariablesResolver.java b/src/main/java/org/jenkinsci/plugins/gwt/resolvers/VariablesResolver.java index 15b31f82..6e40bd62 100644 --- a/src/main/java/org/jenkinsci/plugins/gwt/resolvers/VariablesResolver.java +++ b/src/main/java/org/jenkinsci/plugins/gwt/resolvers/VariablesResolver.java @@ -10,58 +10,52 @@ import org.jenkinsci.plugins.gwt.GenericVariable; public class VariablesResolver { - private List configuredGenericVariables = new ArrayList<>(); - private final List configuredGenericRequestVariables; - private final String incomingPostContent; - private final Map incomingParameterMap; - private final RequestParameterResolver requestParameterResolver = new RequestParameterResolver(); - private final RequestHeaderResolver requestHeaderResolver = new RequestHeaderResolver(); - private final PostContentParameterResolver postContentParameterResolver = - new PostContentParameterResolver(); - private final List configuredGenericHeaderVariables; - private final Map> incomingHeaders; - private final boolean shouldNotFlatten; + private List configuredGenericVariables = new ArrayList<>(); + private final List configuredGenericRequestVariables; + private final String incomingPostContent; + private final Map incomingParameterMap; + private final RequestParameterResolver requestParameterResolver = new RequestParameterResolver(); + private final RequestHeaderResolver requestHeaderResolver = new RequestHeaderResolver(); + private final PostContentParameterResolver postContentParameterResolver = new PostContentParameterResolver(); + private final List configuredGenericHeaderVariables; + private final Map> incomingHeaders; + private final boolean shouldNotFlatten; - public VariablesResolver( - final Map> incomingHeaders, - final Map incomingParameterMap, - final String incomingPostContent, - final List configuredGenericVariables, - final List configuredGenericRequestVariables, - final List configuredGenericHeaderVariables, - final boolean shouldNotFlatten) { - this.incomingPostContent = this.firstNotNull(incomingPostContent, ""); - this.configuredGenericVariables = - this.firstNotNull(configuredGenericVariables, new ArrayList()); - this.incomingParameterMap = - this.firstNotNull(incomingParameterMap, new HashMap()); - this.configuredGenericRequestVariables = - this.firstNotNull( - configuredGenericRequestVariables, new ArrayList()); - this.configuredGenericHeaderVariables = - this.firstNotNull(configuredGenericHeaderVariables, new ArrayList()); - this.incomingHeaders = incomingHeaders; - this.shouldNotFlatten = shouldNotFlatten; - } + public VariablesResolver( + final Map> incomingHeaders, + final Map incomingParameterMap, + final String incomingPostContent, + final List configuredGenericVariables, + final List configuredGenericRequestVariables, + final List configuredGenericHeaderVariables, + final boolean shouldNotFlatten) { + this.incomingPostContent = this.firstNotNull(incomingPostContent, ""); + this.configuredGenericVariables = + this.firstNotNull(configuredGenericVariables, new ArrayList()); + this.incomingParameterMap = this.firstNotNull(incomingParameterMap, new HashMap()); + this.configuredGenericRequestVariables = + this.firstNotNull(configuredGenericRequestVariables, new ArrayList()); + this.configuredGenericHeaderVariables = + this.firstNotNull(configuredGenericHeaderVariables, new ArrayList()); + this.incomingHeaders = incomingHeaders; + this.shouldNotFlatten = shouldNotFlatten; + } - private T firstNotNull(final T o1, final T o2) { - if (o1 != null) { - return o1; + private T firstNotNull(final T o1, final T o2) { + if (o1 != null) { + return o1; + } + return o2; } - return o2; - } - public Map getVariables() { - final Map resolvedVariables = new TreeMap<>(); - resolvedVariables.putAll( - this.requestHeaderResolver.getRequestHeaders( - this.configuredGenericHeaderVariables, this.incomingHeaders)); - resolvedVariables.putAll( - this.requestParameterResolver.getRequestParameters( - this.configuredGenericRequestVariables, this.incomingParameterMap)); - resolvedVariables.putAll( - this.postContentParameterResolver.getPostContentParameters( - this.configuredGenericVariables, this.incomingPostContent, this.shouldNotFlatten)); - return resolvedVariables; - } + public Map getVariables() { + final Map resolvedVariables = new TreeMap<>(); + resolvedVariables.putAll(this.requestHeaderResolver.getRequestHeaders( + this.configuredGenericHeaderVariables, this.incomingHeaders)); + resolvedVariables.putAll(this.requestParameterResolver.getRequestParameters( + this.configuredGenericRequestVariables, this.incomingParameterMap)); + resolvedVariables.putAll(this.postContentParameterResolver.getPostContentParameters( + this.configuredGenericVariables, this.incomingPostContent, this.shouldNotFlatten)); + return resolvedVariables; + } } diff --git a/src/main/java/org/jenkinsci/plugins/gwt/resolvers/XmlFlattener.java b/src/main/java/org/jenkinsci/plugins/gwt/resolvers/XmlFlattener.java index 46657a2d..19e81219 100644 --- a/src/main/java/org/jenkinsci/plugins/gwt/resolvers/XmlFlattener.java +++ b/src/main/java/org/jenkinsci/plugins/gwt/resolvers/XmlFlattener.java @@ -19,80 +19,72 @@ import org.w3c.dom.NodeList; public class XmlFlattener { - public XmlFlattener() {} + public XmlFlattener() {} - public Map flattenXmlNode(final GenericVariable gv, final NodeList nodeList) - throws Exception { - final Map resolvedVariables = newHashMap(); - if (nodeList.getLength() > 0) { - final boolean singleElementInNodeList = nodeList.getLength() == 1 ? true : false; - resolvedVariables.put(gv.getVariableName(), toXmlString(nodeList.item(0))); - for (int i = 0; i < nodeList.getLength(); i++) { - resolvedVariables.putAll( - flattenXmlNode( - gv.getVariableName(), - gv.getRegexpFilter(), - nodeList.item(i), - i, - singleElementInNodeList)); - } - } else { - resolvedVariables.put(gv.getVariableName(), ""); + public Map flattenXmlNode(final GenericVariable gv, final NodeList nodeList) throws Exception { + final Map resolvedVariables = newHashMap(); + if (nodeList.getLength() > 0) { + final boolean singleElementInNodeList = nodeList.getLength() == 1 ? true : false; + resolvedVariables.put(gv.getVariableName(), toXmlString(nodeList.item(0))); + for (int i = 0; i < nodeList.getLength(); i++) { + resolvedVariables.putAll(flattenXmlNode( + gv.getVariableName(), gv.getRegexpFilter(), nodeList.item(i), i, singleElementInNodeList)); + } + } else { + resolvedVariables.put(gv.getVariableName(), ""); + } + return resolvedVariables; } - return resolvedVariables; - } - private String toXmlString(final Node elem) throws Exception { - final StringWriter buf = new StringWriter(); - final Transformer xform = TransformerFactory.newInstance().newTransformer(); - xform.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); - xform.setOutputProperty(OutputKeys.INDENT, "yes"); - xform.transform(new DOMSource(elem), new StreamResult(buf)); - return buf.toString(); - } + private String toXmlString(final Node elem) throws Exception { + final StringWriter buf = new StringWriter(); + final Transformer xform = TransformerFactory.newInstance().newTransformer(); + xform.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); + xform.setOutputProperty(OutputKeys.INDENT, "yes"); + xform.transform(new DOMSource(elem), new StreamResult(buf)); + return buf.toString(); + } - private Map flattenXmlNode( - final String parentKey, - final String regexFilter, - final Node node, - final int level, - final boolean fromRootLevel) { - final Map resolvedVariables = newHashMap(); - if (isXmlLeafNode(node)) { - final String noWhitespaces = toVariableName(parentKey); - resolvedVariables.put(noWhitespaces, filter(node.getTextContent(), regexFilter)); - } else { - for (int i = 0; i < node.getChildNodes().getLength(); i++) { - final Node childNode = node.getChildNodes().item(i); - final String childKey = - expandKey(parentKey, level, fromRootLevel) + "_" + childNode.getNodeName(); - if (isXmlLeafNode(childNode)) { - final String variableName = toVariableName(childKey); - resolvedVariables.put(variableName, filter(childNode.getTextContent(), regexFilter)); + private Map flattenXmlNode( + final String parentKey, + final String regexFilter, + final Node node, + final int level, + final boolean fromRootLevel) { + final Map resolvedVariables = newHashMap(); + if (isXmlLeafNode(node)) { + final String noWhitespaces = toVariableName(parentKey); + resolvedVariables.put(noWhitespaces, filter(node.getTextContent(), regexFilter)); } else { - // leafnode and text inside leafnode are 2 nodes, so /2 to - // keep counter in line - final int leafNodeLevel = i / 2; - resolvedVariables.putAll( - flattenXmlNode(childKey, regexFilter, childNode, leafNodeLevel, false)); + for (int i = 0; i < node.getChildNodes().getLength(); i++) { + final Node childNode = node.getChildNodes().item(i); + final String childKey = expandKey(parentKey, level, fromRootLevel) + "_" + childNode.getNodeName(); + if (isXmlLeafNode(childNode)) { + final String variableName = toVariableName(childKey); + resolvedVariables.put(variableName, filter(childNode.getTextContent(), regexFilter)); + } else { + // leafnode and text inside leafnode are 2 nodes, so /2 to + // keep counter in line + final int leafNodeLevel = i / 2; + resolvedVariables.putAll(flattenXmlNode(childKey, regexFilter, childNode, leafNodeLevel, false)); + } + } } - } + return resolvedVariables; } - return resolvedVariables; - } - private boolean isXmlLeafNode(final Node node) { - return node != null - && (node.getNodeType() == ELEMENT_NODE || node.getNodeType() == ATTRIBUTE_NODE) - && node.getChildNodes().getLength() == 1 - && node.getFirstChild().getNodeType() == TEXT_NODE; - } + private boolean isXmlLeafNode(final Node node) { + return node != null + && (node.getNodeType() == ELEMENT_NODE || node.getNodeType() == ATTRIBUTE_NODE) + && node.getChildNodes().getLength() == 1 + && node.getFirstChild().getNodeType() == TEXT_NODE; + } - private String expandKey(final String key, final int level, final boolean fromRootLevel) { - if (fromRootLevel) { - return key; - } else { - return key + "_" + level; + private String expandKey(final String key, final int level, final boolean fromRootLevel) { + if (fromRootLevel) { + return key; + } else { + return key + "_" + level; + } } - } } diff --git a/src/main/java/org/jenkinsci/plugins/gwt/whitelist/HMACVerifier.java b/src/main/java/org/jenkinsci/plugins/gwt/whitelist/HMACVerifier.java index e16da16d..1aa9f208 100644 --- a/src/main/java/org/jenkinsci/plugins/gwt/whitelist/HMACVerifier.java +++ b/src/main/java/org/jenkinsci/plugins/gwt/whitelist/HMACVerifier.java @@ -15,81 +15,78 @@ public class HMACVerifier { - public static void hmacVerify( - final Map> headers, - final String postContent, - final String hmacHeader, - final String hmacSecret, - final String algorithm) - throws WhitelistException { - final String headerValue = getHeaderValue(hmacHeader, headers); - final byte[] calculateHmacBytes = getCalculatedHmac(postContent, hmacSecret, algorithm); - final String calculateHmacAsString = Base64.getEncoder().encodeToString(calculateHmacBytes); - final String calculateHmacAsHex = bytesToHex(calculateHmacBytes); - final String calculateHmacAsHexAndBase64 = - new String(Base64.getEncoder().encode(calculateHmacAsHex.getBytes(UTF_8)), UTF_8); + public static void hmacVerify( + final Map> headers, + final String postContent, + final String hmacHeader, + final String hmacSecret, + final String algorithm) + throws WhitelistException { + final String headerValue = getHeaderValue(hmacHeader, headers); + final byte[] calculateHmacBytes = getCalculatedHmac(postContent, hmacSecret, algorithm); + final String calculateHmacAsString = Base64.getEncoder().encodeToString(calculateHmacBytes); + final String calculateHmacAsHex = bytesToHex(calculateHmacBytes); + final String calculateHmacAsHexAndBase64 = + new String(Base64.getEncoder().encode(calculateHmacAsHex.getBytes(UTF_8)), UTF_8); - if (!headerValue.equalsIgnoreCase(calculateHmacAsHex) - && !headerValue.equalsIgnoreCase(calculateHmacAsHexAndBase64) - && !headerValue.equalsIgnoreCase(calculateHmacAsString)) { - throw new WhitelistException( - "HMAC verification failed with \"" - + hmacHeader - + "\" as \"" - + headerValue - + "\" and algorithm " - + algorithm); + if (!headerValue.equalsIgnoreCase(calculateHmacAsHex) + && !headerValue.equalsIgnoreCase(calculateHmacAsHexAndBase64) + && !headerValue.equalsIgnoreCase(calculateHmacAsString)) { + throw new WhitelistException("HMAC verification failed with \"" + + hmacHeader + + "\" as \"" + + headerValue + + "\" and algorithm " + + algorithm); + } } - } - private static byte[] getCalculatedHmac( - final String postContent, final String hmacSecret, final String algorithm) { - try { - final byte[] byteKey = hmacSecret.getBytes(UTF_8.name()); - final Mac mac = Mac.getInstance(algorithm); - final SecretKeySpec keySpec = new SecretKeySpec(byteKey, algorithm); - mac.init(keySpec); - return mac.doFinal(postContent.getBytes(UTF_8)); - } catch (UnsupportedEncodingException | NoSuchAlgorithmException | InvalidKeyException e) { - throw new RuntimeException(e); + private static byte[] getCalculatedHmac(final String postContent, final String hmacSecret, final String algorithm) { + try { + final byte[] byteKey = hmacSecret.getBytes(UTF_8.name()); + final Mac mac = Mac.getInstance(algorithm); + final SecretKeySpec keySpec = new SecretKeySpec(byteKey, algorithm); + mac.init(keySpec); + return mac.doFinal(postContent.getBytes(UTF_8)); + } catch (UnsupportedEncodingException | NoSuchAlgorithmException | InvalidKeyException e) { + throw new RuntimeException(e); + } } - } - private static String bytesToHex(final byte[] bytes) { - final char[] hexArray = "0123456789ABCDEF".toCharArray(); - final char[] hexChars = new char[bytes.length * 2]; - for (int j = 0; j < bytes.length; j++) { - final int v = bytes[j] & 0xFF; - hexChars[j * 2] = hexArray[v >>> 4]; - hexChars[j * 2 + 1] = hexArray[v & 0x0F]; + private static String bytesToHex(final byte[] bytes) { + final char[] hexArray = "0123456789ABCDEF".toCharArray(); + final char[] hexChars = new char[bytes.length * 2]; + for (int j = 0; j < bytes.length; j++) { + final int v = bytes[j] & 0xFF; + hexChars[j * 2] = hexArray[v >>> 4]; + hexChars[j * 2 + 1] = hexArray[v & 0x0F]; + } + return new String(hexChars); } - return new String(hexChars); - } - private static String getHeaderValue( - final String hmacHeader, final Map> headers) throws WhitelistException { - for (final Entry> ck : headers.entrySet()) { - final boolean sameHeader = ck.getKey().equalsIgnoreCase(hmacHeader); - final boolean oneValue = ck.getValue().size() == 1; - if (sameHeader && oneValue) { - final String value = ck.getValue().get(0); - for (final WhitelistAlgorithm algorithm : WhitelistAlgorithm.values()) { - final String startString = algorithm.getAlgorithm() + "="; - if (value.startsWith(startString)) { - // To handle X-Hub-Signature: sha256=87e3e7... - return value.substring(startString.length()); - } - final String startStringHmac = "HMAC "; - if (value.startsWith(startStringHmac)) { - // To handle teams signature authorization: HMAC - // w2g2swwmrsvRLZ5W68LfjaLrSR4fN0ErKGyfTPbLrBs= - return value.substring(startStringHmac.length()).trim(); - } + private static String getHeaderValue(final String hmacHeader, final Map> headers) + throws WhitelistException { + for (final Entry> ck : headers.entrySet()) { + final boolean sameHeader = ck.getKey().equalsIgnoreCase(hmacHeader); + final boolean oneValue = ck.getValue().size() == 1; + if (sameHeader && oneValue) { + final String value = ck.getValue().get(0); + for (final WhitelistAlgorithm algorithm : WhitelistAlgorithm.values()) { + final String startString = algorithm.getAlgorithm() + "="; + if (value.startsWith(startString)) { + // To handle X-Hub-Signature: sha256=87e3e7... + return value.substring(startString.length()); + } + final String startStringHmac = "HMAC "; + if (value.startsWith(startStringHmac)) { + // To handle teams signature authorization: HMAC + // w2g2swwmrsvRLZ5W68LfjaLrSR4fN0ErKGyfTPbLrBs= + return value.substring(startStringHmac.length()).trim(); + } + } + return value; + } } - return value; - } + throw new WhitelistException("Was unable to find header with name \"" + hmacHeader + "\" among " + headers); } - throw new WhitelistException( - "Was unable to find header with name \"" + hmacHeader + "\" among " + headers); - } } diff --git a/src/main/java/org/jenkinsci/plugins/gwt/whitelist/HostVerifier.java b/src/main/java/org/jenkinsci/plugins/gwt/whitelist/HostVerifier.java index dc3e4462..00b1f03e 100644 --- a/src/main/java/org/jenkinsci/plugins/gwt/whitelist/HostVerifier.java +++ b/src/main/java/org/jenkinsci/plugins/gwt/whitelist/HostVerifier.java @@ -5,62 +5,55 @@ public class HostVerifier { - static boolean whitelistVerified( - final WhitelistHost remoteHost, final WhitelistHost whitelistHost) throws WhitelistException { - if (whitelistHost.getWhitelistHost().equalsIgnoreCase(remoteHost.getWhitelistHost())) { - return true; - } + static boolean whitelistVerified(final WhitelistHost remoteHost, final WhitelistHost whitelistHost) + throws WhitelistException { + if (whitelistHost.getWhitelistHost().equalsIgnoreCase(remoteHost.getWhitelistHost())) { + return true; + } - switch (whitelistHost.getHostType()) { - case ANY: - return true; - case CIDR: - return verifyCidr(remoteHost, whitelistHost); - case STATIC: - return verifyStatic(remoteHost, whitelistHost); - default: - throw new WhitelistException( - "Did not identify type of " + whitelistHost.getWhitelistHost()); + switch (whitelistHost.getHostType()) { + case ANY: + return true; + case CIDR: + return verifyCidr(remoteHost, whitelistHost); + case STATIC: + return verifyStatic(remoteHost, whitelistHost); + default: + throw new WhitelistException("Did not identify type of " + whitelistHost.getWhitelistHost()); + } } - } - private static boolean verifyStatic( - final WhitelistHost remoteHost, final WhitelistHost whitelistHost) throws WhitelistException { - if (whitelistHost.getStaticIpv4() != null && remoteHost.getStaticIpv4() != null) { - if (whitelistHost.getStaticIpv4().equals(remoteHost.getStaticIpv4())) { - return true; - } - throw new WhitelistException( - remoteHost.getWhitelistHost() + " did not match statically defined Ipv4."); - } else if (whitelistHost.getStaticIpv6() != null && remoteHost.getStaticIpv6() != null) { - if (whitelistHost.getStaticIpv6().equals(remoteHost.getStaticIpv6())) { - return true; - } - throw new WhitelistException( - remoteHost.getWhitelistHost() + " did not match statically defined Ipv6."); + private static boolean verifyStatic(final WhitelistHost remoteHost, final WhitelistHost whitelistHost) + throws WhitelistException { + if (whitelistHost.getStaticIpv4() != null && remoteHost.getStaticIpv4() != null) { + if (whitelistHost.getStaticIpv4().equals(remoteHost.getStaticIpv4())) { + return true; + } + throw new WhitelistException(remoteHost.getWhitelistHost() + " did not match statically defined Ipv4."); + } else if (whitelistHost.getStaticIpv6() != null && remoteHost.getStaticIpv6() != null) { + if (whitelistHost.getStaticIpv6().equals(remoteHost.getStaticIpv6())) { + return true; + } + throw new WhitelistException(remoteHost.getWhitelistHost() + " did not match statically defined Ipv6."); + } + throw new WhitelistException( + remoteHost.getWhitelistHost() + " is not of same IP version as statically defined IP."); } - throw new WhitelistException( - remoteHost.getWhitelistHost() + " is not of same IP version as statically defined IP."); - } - private static boolean verifyCidr( - final WhitelistHost remoteHost, final WhitelistHost whitelistHost) throws WhitelistException { - if (whitelistHost.getRangeIpv4() != null && remoteHost.getStaticIpv4() != null) { - if (whitelistHost - .getRangeIpv4() - .overlaps(Ipv4Range.parse(remoteHost.getWhitelistHost() + "/32"))) { - return true; - } - throw new WhitelistException(remoteHost.getWhitelistHost() + " did not match Ipv4 range."); - } else if (whitelistHost.getRangeIpv6() != null && remoteHost.getStaticIpv6() != null) { - if (whitelistHost - .getRangeIpv6() - .overlaps(Ipv6Range.parse(remoteHost.getWhitelistHost() + "/128"))) { - return true; - } - throw new WhitelistException(remoteHost.getWhitelistHost() + " did not match Ipv6 range."); + private static boolean verifyCidr(final WhitelistHost remoteHost, final WhitelistHost whitelistHost) + throws WhitelistException { + if (whitelistHost.getRangeIpv4() != null && remoteHost.getStaticIpv4() != null) { + if (whitelistHost.getRangeIpv4().overlaps(Ipv4Range.parse(remoteHost.getWhitelistHost() + "/32"))) { + return true; + } + throw new WhitelistException(remoteHost.getWhitelistHost() + " did not match Ipv4 range."); + } else if (whitelistHost.getRangeIpv6() != null && remoteHost.getStaticIpv6() != null) { + if (whitelistHost.getRangeIpv6().overlaps(Ipv6Range.parse(remoteHost.getWhitelistHost() + "/128"))) { + return true; + } + throw new WhitelistException(remoteHost.getWhitelistHost() + " did not match Ipv6 range."); + } + throw new WhitelistException( + remoteHost.getWhitelistHost() + " is not of same IP version as statically defined IP."); } - throw new WhitelistException( - remoteHost.getWhitelistHost() + " is not of same IP version as statically defined IP."); - } } diff --git a/src/main/java/org/jenkinsci/plugins/gwt/whitelist/WhitelistException.java b/src/main/java/org/jenkinsci/plugins/gwt/whitelist/WhitelistException.java index acee9646..ad81a74a 100644 --- a/src/main/java/org/jenkinsci/plugins/gwt/whitelist/WhitelistException.java +++ b/src/main/java/org/jenkinsci/plugins/gwt/whitelist/WhitelistException.java @@ -2,9 +2,9 @@ public class WhitelistException extends Exception { - private static final long serialVersionUID = -3821871257758501700L; + private static final long serialVersionUID = -3821871257758501700L; - public WhitelistException(final String string) { - super(string); - } + public WhitelistException(final String string) { + super(string); + } } diff --git a/src/main/java/org/jenkinsci/plugins/gwt/whitelist/WhitelistHost.java b/src/main/java/org/jenkinsci/plugins/gwt/whitelist/WhitelistHost.java index aa1831c9..911b6e79 100644 --- a/src/main/java/org/jenkinsci/plugins/gwt/whitelist/WhitelistHost.java +++ b/src/main/java/org/jenkinsci/plugins/gwt/whitelist/WhitelistHost.java @@ -8,141 +8,140 @@ public class WhitelistHost { - public static enum HOST_TYPE { - CIDR, - STATIC, - ANY; - } - - private HOST_TYPE hostType; - private String whitelistHost; - private String rangeLeftValue; - private String rangeRightValue; - private Ipv4 staticIpv4; - private Ipv6 staticIpv6; - private Ipv6Range rangeIpv6; - private Ipv4Range rangeIpv4; - - public WhitelistHost(final String string) throws WhitelistException { - if (string == null || string.trim().isEmpty()) { - this.hostType = HOST_TYPE.ANY; - this.whitelistHost = ""; - return; - } - this.hostType = HOST_TYPE.STATIC; - this.whitelistHost = string.trim(); - - String[] hostParts = whitelistHost.split("/"); - - boolean isCidrRange = false; - if (hostParts.length == 2) { - hostType = HOST_TYPE.CIDR; - } else { - hostParts = whitelistHost.split("-"); - if (hostParts.length == 2) { - isCidrRange = true; - hostType = HOST_TYPE.CIDR; - } + public static enum HOST_TYPE { + CIDR, + STATIC, + ANY; } - if (hostType == HOST_TYPE.CIDR) { - int leftValueLength; - try { - leftValueLength = InetAddresses.forString(hostParts[0]).getAddress().length; - } catch (final IllegalArgumentException e) { - throw new WhitelistException(whitelistHost + " is not an Ipv4 string literal."); - } - if (leftValueLength == 4) { - try { - this.rangeIpv4 = Ipv4Range.parse(whitelistHost); - } catch (final IllegalArgumentException e) { - throw new WhitelistException(whitelistHost + " cannot be parsed as Ipv4 string literal."); - } - } else if (leftValueLength == 16) { - try { - this.rangeIpv6 = Ipv6Range.parse(whitelistHost); - } catch (final IllegalArgumentException e) { - throw new WhitelistException(whitelistHost + " cannot be parsed as Ipv6 string literal."); - } - } - - if (isCidrRange) { - final String leftValue = hostParts[0]; - final String rightValue = hostParts[1]; - - try { - InetAddresses.isInetAddress(leftValue); - this.rangeLeftValue = leftValue; - } catch (final IllegalArgumentException e) { - throw new WhitelistException( - "Left part of range, " + leftValue + ", is not an IP string literal."); - } - try { - InetAddresses.isInetAddress(rightValue); - this.rangeRightValue = rightValue; - } catch (final IllegalArgumentException e) { - throw new WhitelistException( - "Right part of range, " + rightValue + ", is not an IP string literal."); + private HOST_TYPE hostType; + private String whitelistHost; + private String rangeLeftValue; + private String rangeRightValue; + private Ipv4 staticIpv4; + private Ipv6 staticIpv6; + private Ipv6Range rangeIpv6; + private Ipv4Range rangeIpv4; + + public WhitelistHost(final String string) throws WhitelistException { + if (string == null || string.trim().isEmpty()) { + this.hostType = HOST_TYPE.ANY; + this.whitelistHost = ""; + return; } - } - } else if (hostType == HOST_TYPE.STATIC) { - int valueLength = -1; - try { - valueLength = InetAddresses.forString(hostParts[0]).getAddress().length; - } catch (final IllegalArgumentException e) { - throw new WhitelistException(whitelistHost + " is not a valid IP string literal."); - } - if (valueLength == 4) { - try { - this.staticIpv4 = Ipv4.parse(whitelistHost); - } catch (final IllegalArgumentException e) { - throw new WhitelistException( - whitelistHost + " is not a valid Ipv4 string literal. " + e.getMessage()); + this.hostType = HOST_TYPE.STATIC; + this.whitelistHost = string.trim(); + + String[] hostParts = whitelistHost.split("/"); + + boolean isCidrRange = false; + if (hostParts.length == 2) { + hostType = HOST_TYPE.CIDR; + } else { + hostParts = whitelistHost.split("-"); + if (hostParts.length == 2) { + isCidrRange = true; + hostType = HOST_TYPE.CIDR; + } } - } else if (valueLength == 16) { - try { - this.staticIpv6 = Ipv6.parse(whitelistHost); - } catch (final IllegalArgumentException e) { - throw new WhitelistException( - whitelistHost + " is not a valid Ipv6 string literal. " + e.getMessage()); - } - } - if (!InetAddresses.isInetAddress(whitelistHost)) { - throw new WhitelistException(whitelistHost + " is not a valid IP string literal."); - } + if (hostType == HOST_TYPE.CIDR) { + int leftValueLength; + try { + leftValueLength = InetAddresses.forString(hostParts[0]).getAddress().length; + } catch (final IllegalArgumentException e) { + throw new WhitelistException(whitelistHost + " is not an Ipv4 string literal."); + } + if (leftValueLength == 4) { + try { + this.rangeIpv4 = Ipv4Range.parse(whitelistHost); + } catch (final IllegalArgumentException e) { + throw new WhitelistException(whitelistHost + " cannot be parsed as Ipv4 string literal."); + } + } else if (leftValueLength == 16) { + try { + this.rangeIpv6 = Ipv6Range.parse(whitelistHost); + } catch (final IllegalArgumentException e) { + throw new WhitelistException(whitelistHost + " cannot be parsed as Ipv6 string literal."); + } + } + + if (isCidrRange) { + final String leftValue = hostParts[0]; + final String rightValue = hostParts[1]; + + try { + InetAddresses.isInetAddress(leftValue); + this.rangeLeftValue = leftValue; + } catch (final IllegalArgumentException e) { + throw new WhitelistException("Left part of range, " + leftValue + ", is not an IP string literal."); + } + try { + InetAddresses.isInetAddress(rightValue); + this.rangeRightValue = rightValue; + } catch (final IllegalArgumentException e) { + throw new WhitelistException( + "Right part of range, " + rightValue + ", is not an IP string literal."); + } + } + } else if (hostType == HOST_TYPE.STATIC) { + int valueLength = -1; + try { + valueLength = InetAddresses.forString(hostParts[0]).getAddress().length; + } catch (final IllegalArgumentException e) { + throw new WhitelistException(whitelistHost + " is not a valid IP string literal."); + } + if (valueLength == 4) { + try { + this.staticIpv4 = Ipv4.parse(whitelistHost); + } catch (final IllegalArgumentException e) { + throw new WhitelistException( + whitelistHost + " is not a valid Ipv4 string literal. " + e.getMessage()); + } + } else if (valueLength == 16) { + try { + this.staticIpv6 = Ipv6.parse(whitelistHost); + } catch (final IllegalArgumentException e) { + throw new WhitelistException( + whitelistHost + " is not a valid Ipv6 string literal. " + e.getMessage()); + } + } + + if (!InetAddresses.isInetAddress(whitelistHost)) { + throw new WhitelistException(whitelistHost + " is not a valid IP string literal."); + } + } } - } - public HOST_TYPE getHostType() { - return hostType; - } + public HOST_TYPE getHostType() { + return hostType; + } - public String getWhitelistHost() { - return whitelistHost; - } + public String getWhitelistHost() { + return whitelistHost; + } - public Ipv4Range getRangeIpv4() { - return rangeIpv4; - } + public Ipv4Range getRangeIpv4() { + return rangeIpv4; + } - public Ipv6Range getRangeIpv6() { - return rangeIpv6; - } + public Ipv6Range getRangeIpv6() { + return rangeIpv6; + } - public String getRangeLeftValue() { - return rangeLeftValue; - } + public String getRangeLeftValue() { + return rangeLeftValue; + } - public String getRangeRightValue() { - return rangeRightValue; - } + public String getRangeRightValue() { + return rangeRightValue; + } - public Ipv4 getStaticIpv4() { - return staticIpv4; - } + public Ipv4 getStaticIpv4() { + return staticIpv4; + } - public Ipv6 getStaticIpv6() { - return staticIpv6; - } + public Ipv6 getStaticIpv6() { + return staticIpv6; + } } diff --git a/src/main/java/org/jenkinsci/plugins/gwt/whitelist/WhitelistVerifier.java b/src/main/java/org/jenkinsci/plugins/gwt/whitelist/WhitelistVerifier.java index 88aa55a8..5d42eea4 100644 --- a/src/main/java/org/jenkinsci/plugins/gwt/whitelist/WhitelistVerifier.java +++ b/src/main/java/org/jenkinsci/plugins/gwt/whitelist/WhitelistVerifier.java @@ -12,63 +12,62 @@ public class WhitelistVerifier { - public static void verifyWhitelist( - final String remoteHost, final Map> headers, final String postContent) - throws WhitelistException { - final Whitelist whitelist = Whitelist.get(); - doVerifyWhitelist(remoteHost, headers, postContent, whitelist); - } - - static void doVerifyWhitelist( - final String remoteHost, - final Map> headers, - final String postContent, - final Whitelist whitelist) - throws WhitelistException { - if (whitelist.getWhitelistItems().isEmpty() || !whitelist.isEnabled()) { - return; + public static void verifyWhitelist( + final String remoteHost, final Map> headers, final String postContent) + throws WhitelistException { + final Whitelist whitelist = Whitelist.get(); + doVerifyWhitelist(remoteHost, headers, postContent, whitelist); } - final StringBuilder messages = new StringBuilder(); - int i = 0; - for (final WhitelistItem whitelistItem : whitelist.getWhitelistItems()) { - i++; - try { - whitelistVerify(remoteHost, whitelistItem, headers, postContent); - return; - } catch (final WhitelistException e) { - messages.append(i + ") " + e.getMessage() + "\n"); - } + + static void doVerifyWhitelist( + final String remoteHost, + final Map> headers, + final String postContent, + final Whitelist whitelist) + throws WhitelistException { + if (whitelist.getWhitelistItems().isEmpty() || !whitelist.isEnabled()) { + return; + } + final StringBuilder messages = new StringBuilder(); + int i = 0; + for (final WhitelistItem whitelistItem : whitelist.getWhitelistItems()) { + i++; + try { + whitelistVerify(remoteHost, whitelistItem, headers, postContent); + return; + } catch (final WhitelistException e) { + messages.append(i + ") " + e.getMessage() + "\n"); + } + } + final String messagesString = messages.toString(); + throw new WhitelistException("Did not find a matching whitelisted host:\n" + messagesString); } - final String messagesString = messages.toString(); - throw new WhitelistException("Did not find a matching whitelisted host:\n" + messagesString); - } - static void whitelistVerify( - final String remoteHost, - final WhitelistItem whitelistItem, - final Map> headers, - final String postContent) - throws WhitelistException { + static void whitelistVerify( + final String remoteHost, + final WhitelistItem whitelistItem, + final Map> headers, + final String postContent) + throws WhitelistException { - WhitelistHost whitelistHost = new WhitelistHost(whitelistItem.getHost()); + WhitelistHost whitelistHost = new WhitelistHost(whitelistItem.getHost()); - if (HostVerifier.whitelistVerified(new WhitelistHost(remoteHost), whitelistHost)) { - if (whitelistItem.isHmacEnabled()) { - final Optional hmacKeyOpt = - CredentialsHelper.findCredentials(whitelistItem.getHmacCredentialId()); - if (!hmacKeyOpt.isPresent()) { - throw new WhitelistException( - "Was unable to find secret text credential " + whitelistItem.getHmacCredentialId()); + if (HostVerifier.whitelistVerified(new WhitelistHost(remoteHost), whitelistHost)) { + if (whitelistItem.isHmacEnabled()) { + final Optional hmacKeyOpt = + CredentialsHelper.findCredentials(whitelistItem.getHmacCredentialId()); + if (!hmacKeyOpt.isPresent()) { + throw new WhitelistException( + "Was unable to find secret text credential " + whitelistItem.getHmacCredentialId()); + } + final String hmacHeader = whitelistItem.getHmacHeader(); + final String hmacKey = hmacKeyOpt.get().getSecret().getPlainText(); + final String hmacAlgorithm = whitelistItem.getHmacAlgorithm(); + hmacVerify(headers, postContent, hmacHeader, hmacKey, hmacAlgorithm); + return; + } + return; } - final String hmacHeader = whitelistItem.getHmacHeader(); - final String hmacKey = hmacKeyOpt.get().getSecret().getPlainText(); - final String hmacAlgorithm = whitelistItem.getHmacAlgorithm(); - hmacVerify(headers, postContent, hmacHeader, hmacKey, hmacAlgorithm); - return; - } - return; + throw new WhitelistException("Sending host \"" + remoteHost + "\" was not matched by whitelist."); } - throw new WhitelistException( - "Sending host \"" + remoteHost + "\" was not matched by whitelist."); - } } diff --git a/src/test/java/org/jenkinsci/plugins/gwt/ArrayEnumeration.java b/src/test/java/org/jenkinsci/plugins/gwt/ArrayEnumeration.java index 6e17779d..43e491df 100644 --- a/src/test/java/org/jenkinsci/plugins/gwt/ArrayEnumeration.java +++ b/src/test/java/org/jenkinsci/plugins/gwt/ArrayEnumeration.java @@ -5,24 +5,24 @@ public class ArrayEnumeration implements Enumeration { - private final String[] array; + private final String[] array; - private int index; + private int index; - public ArrayEnumeration(final String[] array) { - this.array = array; - } + public ArrayEnumeration(final String[] array) { + this.array = array; + } - @Override - public boolean hasMoreElements() { - return index < array.length; - } + @Override + public boolean hasMoreElements() { + return index < array.length; + } - @Override - public String nextElement() { - if (index < array.length) { - return array[index++]; + @Override + public String nextElement() { + if (index < array.length) { + return array[index++]; + } + throw new NoSuchElementException(); } - throw new NoSuchElementException(); - } } diff --git a/src/test/java/org/jenkinsci/plugins/gwt/GenericCauseTest.java b/src/test/java/org/jenkinsci/plugins/gwt/GenericCauseTest.java index 2e957fef..0d47a612 100644 --- a/src/test/java/org/jenkinsci/plugins/gwt/GenericCauseTest.java +++ b/src/test/java/org/jenkinsci/plugins/gwt/GenericCauseTest.java @@ -6,33 +6,22 @@ public class GenericCauseTest { - @Test - public void sanitizeCauseString_link() { - final String actual = - new GenericCause( - null, - null, - false, - false, - "Triggered by: PR 1") - .getShortDescription(); + @Test + public void sanitizeCauseString_link() { + final String actual = new GenericCause( + null, null, false, false, "Triggered by: PR 1") + .getShortDescription(); - assertThat(actual) - .isEqualTo( - "Triggered by: PR 1"); - } + assertThat(actual) + .isEqualTo("Triggered by: PR 1"); + } - @Test - public void sanitizeCauseString_script() { - final String actual = - new GenericCause( - null, - null, - false, - false, - "Triggered by: PR 1
") - .getShortDescription(); + @Test + public void sanitizeCauseString_script() { + final String actual = new GenericCause( + null, null, false, false, "Triggered by: PR 1
") + .getShortDescription(); - assertThat(actual).isEqualTo("Triggered by: PR 1"); - } + assertThat(actual).isEqualTo("Triggered by: PR 1"); + } } diff --git a/src/test/java/org/jenkinsci/plugins/gwt/GenericTriggerResultsTest.java b/src/test/java/org/jenkinsci/plugins/gwt/GenericTriggerResultsTest.java index 6e11f0e4..352da99a 100644 --- a/src/test/java/org/jenkinsci/plugins/gwt/GenericTriggerResultsTest.java +++ b/src/test/java/org/jenkinsci/plugins/gwt/GenericTriggerResultsTest.java @@ -6,39 +6,37 @@ import org.junit.Test; public class GenericTriggerResultsTest { - @Test - public void testNull() { - final String url = null; - final long id = 0; - final boolean triggered = false; - final Map resolvedVariables = null; - final String regexpFilterText = null; - final String regexpFilterExpression = null; - - final GenericTriggerResults sut = - new GenericTriggerResults( - url, id, triggered, resolvedVariables, regexpFilterText, regexpFilterExpression); - - assertThat(sut) // - .isNotNull(); - } - - @Test - public void testNullApi() { - final String url = null; - final long id = 2L; - final boolean triggered = false; - final Map resolvedVariables = null; - final String regexpFilterText = null; - final String regexpFilterExpression = null; - - final GenericTriggerResults sut = - new GenericTriggerResults( - url, id, triggered, resolvedVariables, regexpFilterText, regexpFilterExpression); - - assertThat(sut) // - .isNotNull(); - assertThat(sut.getId()) // - .isEqualTo(2L); - } + @Test + public void testNull() { + final String url = null; + final long id = 0; + final boolean triggered = false; + final Map resolvedVariables = null; + final String regexpFilterText = null; + final String regexpFilterExpression = null; + + final GenericTriggerResults sut = new GenericTriggerResults( + url, id, triggered, resolvedVariables, regexpFilterText, regexpFilterExpression); + + assertThat(sut) // + .isNotNull(); + } + + @Test + public void testNullApi() { + final String url = null; + final long id = 2L; + final boolean triggered = false; + final Map resolvedVariables = null; + final String regexpFilterText = null; + final String regexpFilterExpression = null; + + final GenericTriggerResults sut = new GenericTriggerResults( + url, id, triggered, resolvedVariables, regexpFilterText, regexpFilterExpression); + + assertThat(sut) // + .isNotNull(); + assertThat(sut.getId()) // + .isEqualTo(2L); + } } diff --git a/src/test/java/org/jenkinsci/plugins/gwt/GenericTriggerTest.java b/src/test/java/org/jenkinsci/plugins/gwt/GenericTriggerTest.java index 68b3b24d..fde46ce7 100644 --- a/src/test/java/org/jenkinsci/plugins/gwt/GenericTriggerTest.java +++ b/src/test/java/org/jenkinsci/plugins/gwt/GenericTriggerTest.java @@ -11,33 +11,33 @@ class GenericTriggerTest { - @Test - void testDryRun() { - assertThat(GenericTrigger.isDryRun(null)).isFalse(); + @Test + void testDryRun() { + assertThat(GenericTrigger.isDryRun(null)).isFalse(); - final Map> headers = new TreeMap>(); - assertThat(GenericTrigger.isDryRun(headers)).isFalse(); + final Map> headers = new TreeMap>(); + assertThat(GenericTrigger.isDryRun(headers)).isFalse(); - headers.put("whatever", null); - assertThat(GenericTrigger.isDryRun(headers)).isFalse(); + headers.put("whatever", null); + assertThat(GenericTrigger.isDryRun(headers)).isFalse(); - final List headerValues = Arrays.asList("true"); - headers.put("whatever", headerValues); - assertThat(GenericTrigger.isDryRun(headers)).isFalse(); + final List headerValues = Arrays.asList("true"); + headers.put("whatever", headerValues); + assertThat(GenericTrigger.isDryRun(headers)).isFalse(); - headers.put(HEADER_DRY_RUN, null); - assertThat(GenericTrigger.isDryRun(headers)).isFalse(); + headers.put(HEADER_DRY_RUN, null); + assertThat(GenericTrigger.isDryRun(headers)).isFalse(); - List dryRunHeaderValues = Arrays.asList("false"); - headers.put(HEADER_DRY_RUN, dryRunHeaderValues); - assertThat(GenericTrigger.isDryRun(headers)).isFalse(); + List dryRunHeaderValues = Arrays.asList("false"); + headers.put(HEADER_DRY_RUN, dryRunHeaderValues); + assertThat(GenericTrigger.isDryRun(headers)).isFalse(); - dryRunHeaderValues = Arrays.asList("x"); - headers.put(HEADER_DRY_RUN, dryRunHeaderValues); - assertThat(GenericTrigger.isDryRun(headers)).isFalse(); + dryRunHeaderValues = Arrays.asList("x"); + headers.put(HEADER_DRY_RUN, dryRunHeaderValues); + assertThat(GenericTrigger.isDryRun(headers)).isFalse(); - dryRunHeaderValues = Arrays.asList("true"); - headers.put(HEADER_DRY_RUN, dryRunHeaderValues); - assertThat(GenericTrigger.isDryRun(headers)).isTrue(); - } + dryRunHeaderValues = Arrays.asList("true"); + headers.put(HEADER_DRY_RUN, dryRunHeaderValues); + assertThat(GenericTrigger.isDryRun(headers)).isTrue(); + } } diff --git a/src/test/java/org/jenkinsci/plugins/gwt/GenericWebHookRequestReceiverTest.java b/src/test/java/org/jenkinsci/plugins/gwt/GenericWebHookRequestReceiverTest.java index ed309186..060c4e2d 100644 --- a/src/test/java/org/jenkinsci/plugins/gwt/GenericWebHookRequestReceiverTest.java +++ b/src/test/java/org/jenkinsci/plugins/gwt/GenericWebHookRequestReceiverTest.java @@ -15,251 +15,244 @@ public class GenericWebHookRequestReceiverTest { - @Test - public void testThatNoTokenGivesNull() { - final GenericWebHookRequestReceiver sut = new GenericWebHookRequestReceiver(); - final Map> headers = newHashMap(); - final Map parameterMap = newHashMap(); - - final String actual = sut.getGivenToken(headers, parameterMap); - - assertThat(actual) // - .isNull(); - } - - @Test - public void testThatNoQuietPeriodGivesNegOne() { - final GenericWebHookRequestReceiver sut = new GenericWebHookRequestReceiver(); - final Map> headers = newHashMap(); - final Map parameterMap = newHashMap(); - - final int actual = sut.getGivenQuietPeriod(headers, parameterMap); - - assertThat(actual) // - .isEqualTo(-1); - } - - @Test - public void testThatParameterTokenGivesThatToken() { - final GenericWebHookRequestReceiver sut = new GenericWebHookRequestReceiver(); - final Map> headers = newHashMap(); - final Map parameterMap = - of( // - "token", new String[] {"tokenParam"}); - - final String actual = sut.getGivenToken(headers, parameterMap); - - assertThat(actual) // - .isEqualTo("tokenParam"); - } - - @Test - public void testThatParameterQuietPeriodGivesThatQueitPeriod() { - final GenericWebHookRequestReceiver sut = new GenericWebHookRequestReceiver(); - final Map> headers = newHashMap(); - final Map parameterMap = - of( // - "jobQuietPeriod", new String[] {"1"}); - - final int actual = sut.getGivenQuietPeriod(headers, parameterMap); - - assertThat(actual) // - .isEqualTo(1); - } - - @Test - public void testThatHeaderTokenGivesThatToken() { - final GenericWebHookRequestReceiver sut = new GenericWebHookRequestReceiver(); - final Map> headers = - of( // - "token", (List) newArrayList("tokenHeader")); - final Map parameterMap = newHashMap(); - - final String actual = sut.getGivenToken(headers, parameterMap); - - assertThat(actual) // - .isEqualTo("tokenHeader"); - } - - @Test - public void testThatGitLabTokenHeaderTokenGivesThatToken() { - final GenericWebHookRequestReceiver sut = new GenericWebHookRequestReceiver(); - final Map> headers = - of( // - "x-gitlab-token", (List) newArrayList("gitlabtoken")); - final Map parameterMap = newHashMap(); - - final String actual = sut.getGivenToken(headers, parameterMap); - - assertThat(actual) // - .isEqualTo("gitlabtoken"); - } - - @Test - public void testThatHeaderQuietPeriodGivesThatQueitPeriod() { - final GenericWebHookRequestReceiver sut = new GenericWebHookRequestReceiver(); - final Map> headers = - of( // - "jobQuietPeriod", (List) newArrayList("1")); - final Map parameterMap = newHashMap(); - - final int actual = sut.getGivenQuietPeriod(headers, parameterMap); - - assertThat(actual) // - .isEqualTo(1); - } - - @Test - public void testThatNonsensicalQuietPeriodGivesNegOne() { - final GenericWebHookRequestReceiver sut = new GenericWebHookRequestReceiver(); - final Map> headers = newHashMap(); - final Map parameterMap = - of( // - "jobQuietPeriod", new String[] {"fooBar"}); - - final int actual = sut.getGivenQuietPeriod(headers, parameterMap); - - assertThat(actual) // - .isEqualTo(-1); - } - - @Test - public void testThatHeaderAuthorizationBearerTokenGivesThatToken() { - final GenericWebHookRequestReceiver sut = new GenericWebHookRequestReceiver(); - final Map> headers = - of( // - "authorization", (List) newArrayList("Bearer baererTokenValue")); - final Map parameterMap = newHashMap(); - - final String actual = sut.getGivenToken(headers, parameterMap); - - assertThat(actual) // - .isEqualTo("baererTokenValue"); - } - - @Test - public void testThatHeadersCanBeTransformedToList() { - final GenericWebHookRequestReceiver sut = new GenericWebHookRequestReceiver(); - - final StaplerRequest request = mock(StaplerRequest.class); - when(request.getHeaderNames()) // - .thenReturn( // - new ArrayEnumeration(new String[] {"headerName1"})); - when(request.getHeaders("headerName1")) // - .thenReturn( // - new ArrayEnumeration(new String[] {"headerValue1"})); - - final Map> actual = sut.getHeaders(request); - - final Map> expected = new HashMap<>(); - expected.put("headername1", newArrayList("headerValue1")); - - assertThat(actual) // - .isEqualTo(expected); - } - - @Test - public void testThatHeadersCanBeTransformedToListSeveralValues() { - final GenericWebHookRequestReceiver sut = new GenericWebHookRequestReceiver(); - - final StaplerRequest request = mock(StaplerRequest.class); - when(request.getHeaderNames()) // - .thenReturn( // - new ArrayEnumeration(new String[] {"headerName1"})); - when(request.getHeaders("headerName1")) // - .thenReturn( // - new ArrayEnumeration(new String[] {"headerValue1", "headerValue2"})); - - final Map> actual = sut.getHeaders(request); - - final Map> expected = new HashMap<>(); - expected.put("headername1", newArrayList("headerValue1", "headerValue2")); - - assertThat(actual) // - .isEqualTo(expected); - } - - @Test - public void testThatHeadersCanBeTransformedToListSeveralNames() { - final GenericWebHookRequestReceiver sut = new GenericWebHookRequestReceiver(); - - final StaplerRequest request = mock(StaplerRequest.class); - when(request.getHeaderNames()) // - .thenReturn( // - new ArrayEnumeration(new String[] {"headerName1", "headerName2"})); - when(request.getHeaders("headerName1")) // - .thenReturn( // - new ArrayEnumeration(new String[] {"headerValue1"})); - when(request.getHeaders("headerName2")) // - .thenReturn( // - new ArrayEnumeration(new String[] {"headerValue2"})); - - final Map> actual = sut.getHeaders(request); - - final Map> expected = new HashMap<>(); - expected.put("headername1", newArrayList("headerValue1")); - expected.put("headername2", newArrayList("headerValue2")); - - assertThat(actual) // - .isEqualTo(expected); - } - - @Test - public void testThatMessageIsCreatedFromExceptionWithNoStacktrace() { - final GenericWebHookRequestReceiver sut = new GenericWebHookRequestReceiver(); - - final Throwable t = new IndexOutOfBoundsException(); - final StackTraceElement[] stackTrace = new StackTraceElement[0]; - t.setStackTrace(stackTrace); - final String actual = sut.createMessageFromException(t); - - assertThat(actual) // - .isEqualTo( - "Exception occurred (class java.lang.IndexOutOfBoundsException: null), full stack trace in Jenkins server log. "); - } - - @Test - public void testThatMessageIsCreatedFromExceptionWithStacktrace() { - final GenericWebHookRequestReceiver sut = new GenericWebHookRequestReceiver(); - - final Throwable t = new IndexOutOfBoundsException(); - final String actual = sut.createMessageFromException(t); - - assertThat(actual) // - .startsWith( - "Exception occurred (class java.lang.IndexOutOfBoundsException: null), full stack trace in Jenkins server log. Thrown in: org.jenkinsci.plugins.gwt.GenericWebHookRequestReceiverTest:"); - } - - @Test - public void test404MessageNoToken_empty() { - final String actual = GenericWebHookRequestReceiver.construct404Message(null); - - assertThat(actual) - .isEqualToIgnoringWhitespace( - "Did not find any jobs with GenericTrigger configured!\n" - + "No token was supplied.\n" - + "If you are using a token, you need to pass it like ...trigger/invoke?token=TOKENHERE\n" - + "If you are not using a token, you need to authenticate like http://user:passsword@example.org/generic-webhook...\n"); - } - - @Test - public void test404MessageNoToken_null() { - final String actual = GenericWebHookRequestReceiver.construct404Message(null); - - assertThat(actual) - .isEqualToIgnoringWhitespace( - "Did not find any jobs with GenericTrigger configured!\n" - + "No token was supplied.\n" - + "If you are using a token, you need to pass it like ...trigger/invoke?token=TOKENHERE\n" - + "If you are not using a token, you need to authenticate like http://user:passsword@example.org/generic-webhook...\n"); - } - - @Test - public void test404MessageNoToken_given() { - final String actual = GenericWebHookRequestReceiver.construct404Message("something"); - - assertThat(actual) - .isEqualToIgnoringWhitespace( - "Did not find any jobs with GenericTrigger configured!\n" + "A token was supplied."); - } + @Test + public void testThatNoTokenGivesNull() { + final GenericWebHookRequestReceiver sut = new GenericWebHookRequestReceiver(); + final Map> headers = newHashMap(); + final Map parameterMap = newHashMap(); + + final String actual = sut.getGivenToken(headers, parameterMap); + + assertThat(actual) // + .isNull(); + } + + @Test + public void testThatNoQuietPeriodGivesNegOne() { + final GenericWebHookRequestReceiver sut = new GenericWebHookRequestReceiver(); + final Map> headers = newHashMap(); + final Map parameterMap = newHashMap(); + + final int actual = sut.getGivenQuietPeriod(headers, parameterMap); + + assertThat(actual) // + .isEqualTo(-1); + } + + @Test + public void testThatParameterTokenGivesThatToken() { + final GenericWebHookRequestReceiver sut = new GenericWebHookRequestReceiver(); + final Map> headers = newHashMap(); + final Map parameterMap = of( // + "token", new String[] {"tokenParam"}); + + final String actual = sut.getGivenToken(headers, parameterMap); + + assertThat(actual) // + .isEqualTo("tokenParam"); + } + + @Test + public void testThatParameterQuietPeriodGivesThatQueitPeriod() { + final GenericWebHookRequestReceiver sut = new GenericWebHookRequestReceiver(); + final Map> headers = newHashMap(); + final Map parameterMap = of( // + "jobQuietPeriod", new String[] {"1"}); + + final int actual = sut.getGivenQuietPeriod(headers, parameterMap); + + assertThat(actual) // + .isEqualTo(1); + } + + @Test + public void testThatHeaderTokenGivesThatToken() { + final GenericWebHookRequestReceiver sut = new GenericWebHookRequestReceiver(); + final Map> headers = of( // + "token", (List) newArrayList("tokenHeader")); + final Map parameterMap = newHashMap(); + + final String actual = sut.getGivenToken(headers, parameterMap); + + assertThat(actual) // + .isEqualTo("tokenHeader"); + } + + @Test + public void testThatGitLabTokenHeaderTokenGivesThatToken() { + final GenericWebHookRequestReceiver sut = new GenericWebHookRequestReceiver(); + final Map> headers = of( // + "x-gitlab-token", (List) newArrayList("gitlabtoken")); + final Map parameterMap = newHashMap(); + + final String actual = sut.getGivenToken(headers, parameterMap); + + assertThat(actual) // + .isEqualTo("gitlabtoken"); + } + + @Test + public void testThatHeaderQuietPeriodGivesThatQueitPeriod() { + final GenericWebHookRequestReceiver sut = new GenericWebHookRequestReceiver(); + final Map> headers = of( // + "jobQuietPeriod", (List) newArrayList("1")); + final Map parameterMap = newHashMap(); + + final int actual = sut.getGivenQuietPeriod(headers, parameterMap); + + assertThat(actual) // + .isEqualTo(1); + } + + @Test + public void testThatNonsensicalQuietPeriodGivesNegOne() { + final GenericWebHookRequestReceiver sut = new GenericWebHookRequestReceiver(); + final Map> headers = newHashMap(); + final Map parameterMap = of( // + "jobQuietPeriod", new String[] {"fooBar"}); + + final int actual = sut.getGivenQuietPeriod(headers, parameterMap); + + assertThat(actual) // + .isEqualTo(-1); + } + + @Test + public void testThatHeaderAuthorizationBearerTokenGivesThatToken() { + final GenericWebHookRequestReceiver sut = new GenericWebHookRequestReceiver(); + final Map> headers = of( // + "authorization", (List) newArrayList("Bearer baererTokenValue")); + final Map parameterMap = newHashMap(); + + final String actual = sut.getGivenToken(headers, parameterMap); + + assertThat(actual) // + .isEqualTo("baererTokenValue"); + } + + @Test + public void testThatHeadersCanBeTransformedToList() { + final GenericWebHookRequestReceiver sut = new GenericWebHookRequestReceiver(); + + final StaplerRequest request = mock(StaplerRequest.class); + when(request.getHeaderNames()) // + .thenReturn( // + new ArrayEnumeration(new String[] {"headerName1"})); + when(request.getHeaders("headerName1")) // + .thenReturn( // + new ArrayEnumeration(new String[] {"headerValue1"})); + + final Map> actual = sut.getHeaders(request); + + final Map> expected = new HashMap<>(); + expected.put("headername1", newArrayList("headerValue1")); + + assertThat(actual) // + .isEqualTo(expected); + } + + @Test + public void testThatHeadersCanBeTransformedToListSeveralValues() { + final GenericWebHookRequestReceiver sut = new GenericWebHookRequestReceiver(); + + final StaplerRequest request = mock(StaplerRequest.class); + when(request.getHeaderNames()) // + .thenReturn( // + new ArrayEnumeration(new String[] {"headerName1"})); + when(request.getHeaders("headerName1")) // + .thenReturn( // + new ArrayEnumeration(new String[] {"headerValue1", "headerValue2"})); + + final Map> actual = sut.getHeaders(request); + + final Map> expected = new HashMap<>(); + expected.put("headername1", newArrayList("headerValue1", "headerValue2")); + + assertThat(actual) // + .isEqualTo(expected); + } + + @Test + public void testThatHeadersCanBeTransformedToListSeveralNames() { + final GenericWebHookRequestReceiver sut = new GenericWebHookRequestReceiver(); + + final StaplerRequest request = mock(StaplerRequest.class); + when(request.getHeaderNames()) // + .thenReturn( // + new ArrayEnumeration(new String[] {"headerName1", "headerName2"})); + when(request.getHeaders("headerName1")) // + .thenReturn( // + new ArrayEnumeration(new String[] {"headerValue1"})); + when(request.getHeaders("headerName2")) // + .thenReturn( // + new ArrayEnumeration(new String[] {"headerValue2"})); + + final Map> actual = sut.getHeaders(request); + + final Map> expected = new HashMap<>(); + expected.put("headername1", newArrayList("headerValue1")); + expected.put("headername2", newArrayList("headerValue2")); + + assertThat(actual) // + .isEqualTo(expected); + } + + @Test + public void testThatMessageIsCreatedFromExceptionWithNoStacktrace() { + final GenericWebHookRequestReceiver sut = new GenericWebHookRequestReceiver(); + + final Throwable t = new IndexOutOfBoundsException(); + final StackTraceElement[] stackTrace = new StackTraceElement[0]; + t.setStackTrace(stackTrace); + final String actual = sut.createMessageFromException(t); + + assertThat(actual) // + .isEqualTo( + "Exception occurred (class java.lang.IndexOutOfBoundsException: null), full stack trace in Jenkins server log. "); + } + + @Test + public void testThatMessageIsCreatedFromExceptionWithStacktrace() { + final GenericWebHookRequestReceiver sut = new GenericWebHookRequestReceiver(); + + final Throwable t = new IndexOutOfBoundsException(); + final String actual = sut.createMessageFromException(t); + + assertThat(actual) // + .startsWith( + "Exception occurred (class java.lang.IndexOutOfBoundsException: null), full stack trace in Jenkins server log. Thrown in: org.jenkinsci.plugins.gwt.GenericWebHookRequestReceiverTest:"); + } + + @Test + public void test404MessageNoToken_empty() { + final String actual = GenericWebHookRequestReceiver.construct404Message(null); + + assertThat(actual) + .isEqualToIgnoringWhitespace( + "Did not find any jobs with GenericTrigger configured!\n" + + "No token was supplied.\n" + + "If you are using a token, you need to pass it like ...trigger/invoke?token=TOKENHERE\n" + + "If you are not using a token, you need to authenticate like http://user:passsword@example.org/generic-webhook...\n"); + } + + @Test + public void test404MessageNoToken_null() { + final String actual = GenericWebHookRequestReceiver.construct404Message(null); + + assertThat(actual) + .isEqualToIgnoringWhitespace( + "Did not find any jobs with GenericTrigger configured!\n" + + "No token was supplied.\n" + + "If you are using a token, you need to pass it like ...trigger/invoke?token=TOKENHERE\n" + + "If you are not using a token, you need to authenticate like http://user:passsword@example.org/generic-webhook...\n"); + } + + @Test + public void test404MessageNoToken_given() { + final String actual = GenericWebHookRequestReceiver.construct404Message("something"); + + assertThat(actual) + .isEqualToIgnoringWhitespace( + "Did not find any jobs with GenericTrigger configured!\n" + "A token was supplied."); + } } diff --git a/src/test/java/org/jenkinsci/plugins/gwt/ParameterActionUtilTest.java b/src/test/java/org/jenkinsci/plugins/gwt/ParameterActionUtilTest.java index 0f142049..ab1c0732 100644 --- a/src/test/java/org/jenkinsci/plugins/gwt/ParameterActionUtilTest.java +++ b/src/test/java/org/jenkinsci/plugins/gwt/ParameterActionUtilTest.java @@ -14,119 +14,103 @@ public class ParameterActionUtilTest { - @Test - public void testThatStringKeepsItsDefaultValueWhenNoParameterSupplied() { - final ParametersDefinitionProperty parametersDefinitionProperty = - new ParametersDefinitionProperty( - new StringParameterDefinition("name", "the default value") // - ); - final Map resolvedVariables = - ImmutableMap.builder() // - .build(); - - final ParametersAction actual = - createParameterAction(parametersDefinitionProperty, resolvedVariables, true); - - assertThat(actual) // - .hasSize(1); - assertThat(actual.getAllParameters().get(0).getValue()) // - .isEqualTo("the default value"); - } - - @Test - public void testThatStringDoesNotKeepItsDefaultValueWhenParameterSupplied() { - final ParametersDefinitionProperty parametersDefinitionProperty = - new ParametersDefinitionProperty( - new StringParameterDefinition("name", "the default value") // - ); - final Map resolvedVariables = - ImmutableMap.of( // - "name", "this is supplied"); - - final ParametersAction actual = - createParameterAction(parametersDefinitionProperty, resolvedVariables, true); - - assertThat(actual) // - .hasSize(1); - assertThat(actual.getAllParameters().get(0).getValue()) // - .isEqualTo("this is supplied"); - } - - @Test - public void testThatBooleanKeepsItsDefaultValueWhenNoParameterSupplied() { - final ParametersDefinitionProperty parametersDefinitionProperty = - new ParametersDefinitionProperty( - new BooleanParameterDefinition("name", true, null) // - ); - final Map resolvedVariables = - ImmutableMap.builder() // - .build(); - - final ParametersAction actual = - createParameterAction(parametersDefinitionProperty, resolvedVariables, true); - - assertThat(actual) // - .hasSize(1); - assertThat(actual.getAllParameters().get(0).getValue()) // - .isEqualTo(true); - } - - @Test - public void testThatBooleanDoesNotKeepItsDefaultValueWhenParameterSuppliedAndFalseIsFalse() { - final ParametersDefinitionProperty parametersDefinitionProperty = - new ParametersDefinitionProperty( - new BooleanParameterDefinition("name", true, null) // - ); - final Map resolvedVariables = - ImmutableMap.of( // - "name", "false"); - - final ParametersAction actual = - createParameterAction(parametersDefinitionProperty, resolvedVariables, true); - - assertThat(actual) // - .hasSize(1); - assertThat(actual.getAllParameters().get(0).getValue()) // - .isEqualTo(false); - } - - @Test - public void testThatBooleanDoesNotKeepItsDefaultValueWhenParameterSuppliedAndTrueIsTrue() { - final ParametersDefinitionProperty parametersDefinitionProperty = - new ParametersDefinitionProperty( - new BooleanParameterDefinition("name", true, null) // - ); - final Map resolvedVariables = - ImmutableMap.of( // - "name", "true"); - - final ParametersAction actual = - createParameterAction(parametersDefinitionProperty, resolvedVariables, true); - - assertThat(actual) // - .hasSize(1); - assertThat(actual.getAllParameters().get(0).getValue()) // - .isEqualTo(true); - } - - @Test - public void testThatUniqueParameterIsAddedWhenallowSeveralTriggersPerBuildFalse() { - final ParametersDefinitionProperty parametersDefinitionProperty = - new ParametersDefinitionProperty(); - final Map resolvedVariables = new HashMap<>(); - - final ParametersAction actualWithTrue = - createParameterAction(parametersDefinitionProperty, resolvedVariables, true); - - assertThat(actualWithTrue) // - .hasSize(0); - - final ParametersAction actualWithFalse = - createParameterAction(parametersDefinitionProperty, resolvedVariables, false); - - assertThat(actualWithFalse) // - .hasSize(1); - assertThat(actualWithFalse.getAllParameters().get(0).getValue()) // - .isNotNull(); - } + @Test + public void testThatStringKeepsItsDefaultValueWhenNoParameterSupplied() { + final ParametersDefinitionProperty parametersDefinitionProperty = new ParametersDefinitionProperty( + new StringParameterDefinition("name", "the default value") // + ); + final Map resolvedVariables = ImmutableMap.builder() // + .build(); + + final ParametersAction actual = createParameterAction(parametersDefinitionProperty, resolvedVariables, true); + + assertThat(actual) // + .hasSize(1); + assertThat(actual.getAllParameters().get(0).getValue()) // + .isEqualTo("the default value"); + } + + @Test + public void testThatStringDoesNotKeepItsDefaultValueWhenParameterSupplied() { + final ParametersDefinitionProperty parametersDefinitionProperty = new ParametersDefinitionProperty( + new StringParameterDefinition("name", "the default value") // + ); + final Map resolvedVariables = ImmutableMap.of( // + "name", "this is supplied"); + + final ParametersAction actual = createParameterAction(parametersDefinitionProperty, resolvedVariables, true); + + assertThat(actual) // + .hasSize(1); + assertThat(actual.getAllParameters().get(0).getValue()) // + .isEqualTo("this is supplied"); + } + + @Test + public void testThatBooleanKeepsItsDefaultValueWhenNoParameterSupplied() { + final ParametersDefinitionProperty parametersDefinitionProperty = new ParametersDefinitionProperty( + new BooleanParameterDefinition("name", true, null) // + ); + final Map resolvedVariables = ImmutableMap.builder() // + .build(); + + final ParametersAction actual = createParameterAction(parametersDefinitionProperty, resolvedVariables, true); + + assertThat(actual) // + .hasSize(1); + assertThat(actual.getAllParameters().get(0).getValue()) // + .isEqualTo(true); + } + + @Test + public void testThatBooleanDoesNotKeepItsDefaultValueWhenParameterSuppliedAndFalseIsFalse() { + final ParametersDefinitionProperty parametersDefinitionProperty = new ParametersDefinitionProperty( + new BooleanParameterDefinition("name", true, null) // + ); + final Map resolvedVariables = ImmutableMap.of( // + "name", "false"); + + final ParametersAction actual = createParameterAction(parametersDefinitionProperty, resolvedVariables, true); + + assertThat(actual) // + .hasSize(1); + assertThat(actual.getAllParameters().get(0).getValue()) // + .isEqualTo(false); + } + + @Test + public void testThatBooleanDoesNotKeepItsDefaultValueWhenParameterSuppliedAndTrueIsTrue() { + final ParametersDefinitionProperty parametersDefinitionProperty = new ParametersDefinitionProperty( + new BooleanParameterDefinition("name", true, null) // + ); + final Map resolvedVariables = ImmutableMap.of( // + "name", "true"); + + final ParametersAction actual = createParameterAction(parametersDefinitionProperty, resolvedVariables, true); + + assertThat(actual) // + .hasSize(1); + assertThat(actual.getAllParameters().get(0).getValue()) // + .isEqualTo(true); + } + + @Test + public void testThatUniqueParameterIsAddedWhenallowSeveralTriggersPerBuildFalse() { + final ParametersDefinitionProperty parametersDefinitionProperty = new ParametersDefinitionProperty(); + final Map resolvedVariables = new HashMap<>(); + + final ParametersAction actualWithTrue = + createParameterAction(parametersDefinitionProperty, resolvedVariables, true); + + assertThat(actualWithTrue) // + .hasSize(0); + + final ParametersAction actualWithFalse = + createParameterAction(parametersDefinitionProperty, resolvedVariables, false); + + assertThat(actualWithFalse) // + .hasSize(1); + assertThat(actualWithFalse.getAllParameters().get(0).getValue()) // + .isNotNull(); + } } diff --git a/src/test/java/org/jenkinsci/plugins/gwt/RendererTest.java b/src/test/java/org/jenkinsci/plugins/gwt/RendererTest.java index a8e25604..49666c9b 100644 --- a/src/test/java/org/jenkinsci/plugins/gwt/RendererTest.java +++ b/src/test/java/org/jenkinsci/plugins/gwt/RendererTest.java @@ -14,185 +14,183 @@ import org.junit.Test; public class RendererTest { - private String regexpFilterText = null; - private String regexpFilterExpression = null; - private Map resolvedVariables; - - @Before - public void before() { - resolvedVariables = newHashMap(); - resolvedVariables.put("key1", "resolved1"); - resolvedVariables.put("key2", "resolved2"); - } - - @Test - public void testThatIsMatchingAcceptsEverythingIfNoFilter() { - final boolean actual = isMatching(regexpFilterText, regexpFilterExpression); - - assertThat(actual) // - .isTrue(); - } - - @Test - public void testThatEmptyTextIsNotMatched() { - final boolean actual = isMatching("", "^feature"); - - assertThat(actual) // - .isFalse(); - } - - @Test - public void testThatEmptyExprButNotEmptyTextIsNotMatched() { - assertThat(isMatching(null, "^feature")) // - .isFalse(); - assertThat(isMatching("", "^feature")) // - .isFalse(); - } - - @Test - public void testThatEmptyExprAndEmptyTextIsMatched() { - assertThat(isMatching(null, "")) // - .isTrue(); - assertThat(isMatching("", null)) // - .isTrue(); - assertThat(isMatching(null, null)) // - .isTrue(); - assertThat(isMatching("", "")) // - .isTrue(); - } - - @Test - public void testThatIsMatchingWorksWithNewlines() { - regexpFilterText = "firstsecondthird"; - regexpFilterExpression = "^(?!.*(second)).*"; - final boolean actual = isMatching(regexpFilterText, regexpFilterExpression); - - assertThat(actual) // - .isFalse(); - } - - @Test - public void testThatIsMatchingWorksDevelopCorrectUser() { - regexpFilterText = "refs/heads/develop tomabje"; - regexpFilterExpression = "^refs/heads/develop ((?!jenkins))"; - final boolean actual = isMatching(regexpFilterText, regexpFilterExpression); - - assertThat(actual) // - .isTrue(); - } - - @Test - public void testThatIsMatchingWorksDevelopNotCorrectUser() { - regexpFilterText = "refs/heads/develop jenkins"; - regexpFilterExpression = "^refs/heads/develop ((?!jenkins))"; - final boolean actual = isMatching(regexpFilterText, regexpFilterExpression); - - assertThat(actual) // - .isFalse(); - } - - @Test - public void testThatIsMatchingAcceptsIfMatching() { - regexpFilterText = "$key1"; - regexpFilterExpression = "resolved1"; - - final boolean actual = - isMatching(renderText(regexpFilterText, resolvedVariables), regexpFilterExpression); - - assertThat(actual) // - .isTrue(); - } - - @Test - public void testThatExactValueOfSingleVariableCanBeMatched() { - resolvedVariables = new TreeMap<>(); - resolvedVariables.put("PR_TO_BRANCH", "master"); - - final String text = "$PR_TO_BRANCH"; - - final String actualRendered = renderText(text, resolvedVariables); - assertThat(actualRendered) // - .isEqualTo("master"); - - regexpFilterExpression = "^master$"; - final boolean actual = isMatching(actualRendered, regexpFilterExpression); - assertThat(actual) // - .isTrue(); - } - - @Test - public void testThatVariablesAreResolvedWithLongestVariableFirst() { - resolvedVariables = new TreeMap<>(); - resolvedVariables.put("key1", "resolved1"); - resolvedVariables.put("key2", "resolved2only"); - resolvedVariables.put("key2andthensome", "resolved2andmore"); - - final String text = "$key1 $key2 $key2andthensome $key2"; - final String actual = renderText(text, resolvedVariables); - - assertThat(actual) // - .isEqualTo("resolved1 resolved2only resolved2andmore resolved2only"); - } - - @Test - public void testThatExceptionNotThrownWithBadResolvedVariable() { - resolvedVariables = new TreeMap<>(); - resolvedVariables.put("key1", "resolved1"); - resolvedVariables.put("key2", "resolved2($this)"); - - final String text = "$key1 $key2"; - final String actual = renderText(text, resolvedVariables); - - assertThat(actual) // - .isEqualTo("resolved1 resolved2($this)"); - } - - @Test - public void testThatVariablesCanUseBrackets() { - resolvedVariables = new TreeMap<>(); - resolvedVariables.put("key1", "resolved1"); - resolvedVariables.put("key2", "resolved2only"); - resolvedVariables.put("key2andthensome", "resolved2andmore"); - - final String text = "${key1} $key2 ${key2andthensome} $key2"; - final String actual = renderText(text, resolvedVariables); - - assertThat(actual) // - .isEqualTo("resolved1 resolved2only resolved2andmore resolved2only"); - } - - @Test - public void testThatVariablesAreResolvedInOrder() { - final List actual = - getVariablesInResolveOrder( - newHashSet( // - "var1", // - "var2", // - "var2andmore", // - "var31", // - "var3a", // - "var3b" // - )); - - assertThat(actual) // - .containsExactly( // - "var2andmore", // - "var31", // - "var3a", // - "var3b", // - "var1", // - "var2" // - ); - } - - @Test - public void testThatIsMatchingRejectsIfNotMatching() { - - regexpFilterText = "resolved2"; - regexpFilterExpression = "$key1"; - final boolean actual = isMatching(regexpFilterText, regexpFilterExpression); - - assertThat(actual) // - .isFalse(); - } + private String regexpFilterText = null; + private String regexpFilterExpression = null; + private Map resolvedVariables; + + @Before + public void before() { + resolvedVariables = newHashMap(); + resolvedVariables.put("key1", "resolved1"); + resolvedVariables.put("key2", "resolved2"); + } + + @Test + public void testThatIsMatchingAcceptsEverythingIfNoFilter() { + final boolean actual = isMatching(regexpFilterText, regexpFilterExpression); + + assertThat(actual) // + .isTrue(); + } + + @Test + public void testThatEmptyTextIsNotMatched() { + final boolean actual = isMatching("", "^feature"); + + assertThat(actual) // + .isFalse(); + } + + @Test + public void testThatEmptyExprButNotEmptyTextIsNotMatched() { + assertThat(isMatching(null, "^feature")) // + .isFalse(); + assertThat(isMatching("", "^feature")) // + .isFalse(); + } + + @Test + public void testThatEmptyExprAndEmptyTextIsMatched() { + assertThat(isMatching(null, "")) // + .isTrue(); + assertThat(isMatching("", null)) // + .isTrue(); + assertThat(isMatching(null, null)) // + .isTrue(); + assertThat(isMatching("", "")) // + .isTrue(); + } + + @Test + public void testThatIsMatchingWorksWithNewlines() { + regexpFilterText = "firstsecondthird"; + regexpFilterExpression = "^(?!.*(second)).*"; + final boolean actual = isMatching(regexpFilterText, regexpFilterExpression); + + assertThat(actual) // + .isFalse(); + } + + @Test + public void testThatIsMatchingWorksDevelopCorrectUser() { + regexpFilterText = "refs/heads/develop tomabje"; + regexpFilterExpression = "^refs/heads/develop ((?!jenkins))"; + final boolean actual = isMatching(regexpFilterText, regexpFilterExpression); + + assertThat(actual) // + .isTrue(); + } + + @Test + public void testThatIsMatchingWorksDevelopNotCorrectUser() { + regexpFilterText = "refs/heads/develop jenkins"; + regexpFilterExpression = "^refs/heads/develop ((?!jenkins))"; + final boolean actual = isMatching(regexpFilterText, regexpFilterExpression); + + assertThat(actual) // + .isFalse(); + } + + @Test + public void testThatIsMatchingAcceptsIfMatching() { + regexpFilterText = "$key1"; + regexpFilterExpression = "resolved1"; + + final boolean actual = isMatching(renderText(regexpFilterText, resolvedVariables), regexpFilterExpression); + + assertThat(actual) // + .isTrue(); + } + + @Test + public void testThatExactValueOfSingleVariableCanBeMatched() { + resolvedVariables = new TreeMap<>(); + resolvedVariables.put("PR_TO_BRANCH", "master"); + + final String text = "$PR_TO_BRANCH"; + + final String actualRendered = renderText(text, resolvedVariables); + assertThat(actualRendered) // + .isEqualTo("master"); + + regexpFilterExpression = "^master$"; + final boolean actual = isMatching(actualRendered, regexpFilterExpression); + assertThat(actual) // + .isTrue(); + } + + @Test + public void testThatVariablesAreResolvedWithLongestVariableFirst() { + resolvedVariables = new TreeMap<>(); + resolvedVariables.put("key1", "resolved1"); + resolvedVariables.put("key2", "resolved2only"); + resolvedVariables.put("key2andthensome", "resolved2andmore"); + + final String text = "$key1 $key2 $key2andthensome $key2"; + final String actual = renderText(text, resolvedVariables); + + assertThat(actual) // + .isEqualTo("resolved1 resolved2only resolved2andmore resolved2only"); + } + + @Test + public void testThatExceptionNotThrownWithBadResolvedVariable() { + resolvedVariables = new TreeMap<>(); + resolvedVariables.put("key1", "resolved1"); + resolvedVariables.put("key2", "resolved2($this)"); + + final String text = "$key1 $key2"; + final String actual = renderText(text, resolvedVariables); + + assertThat(actual) // + .isEqualTo("resolved1 resolved2($this)"); + } + + @Test + public void testThatVariablesCanUseBrackets() { + resolvedVariables = new TreeMap<>(); + resolvedVariables.put("key1", "resolved1"); + resolvedVariables.put("key2", "resolved2only"); + resolvedVariables.put("key2andthensome", "resolved2andmore"); + + final String text = "${key1} $key2 ${key2andthensome} $key2"; + final String actual = renderText(text, resolvedVariables); + + assertThat(actual) // + .isEqualTo("resolved1 resolved2only resolved2andmore resolved2only"); + } + + @Test + public void testThatVariablesAreResolvedInOrder() { + final List actual = getVariablesInResolveOrder( + newHashSet( // + "var1", // + "var2", // + "var2andmore", // + "var31", // + "var3a", // + "var3b" // + )); + + assertThat(actual) // + .containsExactly( // + "var2andmore", // + "var31", // + "var3a", // + "var3b", // + "var1", // + "var2" // + ); + } + + @Test + public void testThatIsMatchingRejectsIfNotMatching() { + + regexpFilterText = "resolved2"; + regexpFilterExpression = "$key1"; + final boolean actual = isMatching(regexpFilterText, regexpFilterExpression); + + assertThat(actual) // + .isFalse(); + } } diff --git a/src/test/java/org/jenkinsci/plugins/gwt/VariablesResolverHeaderTest.java b/src/test/java/org/jenkinsci/plugins/gwt/VariablesResolverHeaderTest.java index 7dc3e0db..ba407595 100644 --- a/src/test/java/org/jenkinsci/plugins/gwt/VariablesResolverHeaderTest.java +++ b/src/test/java/org/jenkinsci/plugins/gwt/VariablesResolverHeaderTest.java @@ -12,196 +12,190 @@ public class VariablesResolverHeaderTest { - @Test - public void testHeadersAndRequestParameters() throws Exception { - final String postContent = null; - - final List genericVariables = newArrayList(); - - final Map parameterMap = new HashMap<>(); - final List genericRequestVariables = new ArrayList<>(); - genericRequestVariables.add(new GenericRequestVariable("reqp1", "[^0-9]")); - genericRequestVariables.add(new GenericRequestVariable("reqp3", "[^a-z]")); - genericRequestVariables.add(new GenericRequestVariable("reqp4", "")); - - final Map> headers = new HashMap<>(); - headers.put("someparam", newArrayList("some value")); - headers.put("anotherparam", newArrayList("another value", "even more")); - headers.put("content-type", newArrayList("application/json")); - headers.put("param_not_mapped", newArrayList("do not include")); - final List genericHeaderVariables = new ArrayList<>(); - genericHeaderVariables.add(new GenericHeaderVariable("someparam", "")); - genericHeaderVariables.add(new GenericHeaderVariable("anotherparam", "[^e]")); - genericHeaderVariables.add(new GenericHeaderVariable("content-type", "")); - final boolean shouldNotFlatten = false; - final Map variables = - new VariablesResolver( - headers, - parameterMap, - postContent, - genericVariables, - genericRequestVariables, - genericHeaderVariables, - shouldNotFlatten) - .getVariables(); - - assertThat(variables) // - .containsEntry("someparam", "some value") // - .containsEntry("someparam_0", "some value") // - .containsEntry("anotherparam", "ee") // - .containsEntry("anotherparam_0", "ee") // - .containsEntry("anotherparam_1", "eee") // - .containsEntry("content_type", "application/json") // - .hasSize(7); - } - - @Test - public void testHeaders() throws Exception { - final String postContent = null; - - final List genericVariables = newArrayList(); - - final Map parameterMap = new HashMap<>(); - final List genericRequestVariables = new ArrayList<>(); - - final Map> headers = new HashMap<>(); - headers.put("Someparam", newArrayList("some value")); - headers.put("anotherparam", newArrayList("another value", "even more")); - headers.put("content-Type", newArrayList("application/json")); - headers.put("param_not_mapped", newArrayList("do not include")); - - final List genericHeaderVariables = new ArrayList<>(); - genericHeaderVariables.add(new GenericHeaderVariable("someparam", "")); - genericHeaderVariables.add(new GenericHeaderVariable("anotherparam", "[^e]")); - genericHeaderVariables.add(new GenericHeaderVariable("content-type", "")); - final boolean shouldNotFlatten = false; - final Map variables = - new VariablesResolver( - headers, - parameterMap, - postContent, - genericVariables, - genericRequestVariables, - genericHeaderVariables, - shouldNotFlatten) - .getVariables(); - - assertThat(variables) // - .containsEntry("someparam", "some value") // - .containsEntry("someparam_0", "some value") // - .containsEntry("anotherparam", "ee") // - .containsEntry("anotherparam_0", "ee") // - .containsEntry("anotherparam_1", "eee") // - .containsEntry("content_type", "application/json") // - .hasSize(7); - } - - @Test - public void testHeaderResolvesToNull() throws Exception { - final String postContent = null; - - final List genericVariables = newArrayList(); - - final Map parameterMap = new HashMap<>(); - final List genericRequestVariables = new ArrayList<>(); - - final Map> headers = new HashMap<>(); - headers.put("someparam", newArrayList("some value")); - - final List genericHeaderVariables = new ArrayList<>(); - genericHeaderVariables.add(new GenericHeaderVariable("someparam", null)); - final boolean shouldNotFlatten = false; - final Map variables = - new VariablesResolver( - headers, - parameterMap, - postContent, - genericVariables, - genericRequestVariables, - genericHeaderVariables, - shouldNotFlatten) - .getVariables(); - - assertThat(variables) // - .containsEntry("someparam", "some value") // - .hasSize(2); - } - - @Test - public void testHeaderResolvesCanBeReused() throws Exception { - final String postContent = null; - - final List genericVariables = newArrayList(); - - final Map parameterMap = new HashMap<>(); - final List genericRequestVariables = new ArrayList<>(); - - final Map> headers = new HashMap<>(); - headers.put("someparam", newArrayList("some value")); - - final List genericHeaderVariables = new ArrayList<>(); - genericHeaderVariables.add(new GenericHeaderVariable("someparam", null)); - final boolean shouldNotFlatten = false; - Map variables = - new VariablesResolver( - headers, - parameterMap, - postContent, - genericVariables, - genericRequestVariables, - genericHeaderVariables, - shouldNotFlatten) - .getVariables(); - - assertThat(variables) // - .containsEntry("someparam", "some value") // - .hasSize(2); - - variables = - new VariablesResolver( - headers, - parameterMap, - postContent, - genericVariables, - genericRequestVariables, - genericHeaderVariables, - shouldNotFlatten) - .getVariables(); - - assertThat(variables) // - .containsEntry("someparam", "some value") // - .hasSize(2); - } - - @Test - public void testHeadersButNoneConfigured() throws Exception { - final String postContent = null; - - final List genericVariables = newArrayList(); - - final Map parameterMap = new HashMap<>(); - final List genericRequestVariables = new ArrayList<>(); - - final Map> headers = new HashMap<>(); - headers.put("someparam", newArrayList("some value")); - headers.put("anotherparam", newArrayList("another value", "even more")); - headers.put("content-type", newArrayList("application/json")); - headers.put("param_not_mapped", newArrayList("do not include")); - - final List genericHeaderVariables = new ArrayList<>(); - final boolean shouldNotFlatten = false; - final Map variables = - new VariablesResolver( - headers, - parameterMap, - postContent, - genericVariables, - genericRequestVariables, - genericHeaderVariables, - shouldNotFlatten) - .getVariables(); - - assertThat(variables) // - .hasSize(0); - } + @Test + public void testHeadersAndRequestParameters() throws Exception { + final String postContent = null; + + final List genericVariables = newArrayList(); + + final Map parameterMap = new HashMap<>(); + final List genericRequestVariables = new ArrayList<>(); + genericRequestVariables.add(new GenericRequestVariable("reqp1", "[^0-9]")); + genericRequestVariables.add(new GenericRequestVariable("reqp3", "[^a-z]")); + genericRequestVariables.add(new GenericRequestVariable("reqp4", "")); + + final Map> headers = new HashMap<>(); + headers.put("someparam", newArrayList("some value")); + headers.put("anotherparam", newArrayList("another value", "even more")); + headers.put("content-type", newArrayList("application/json")); + headers.put("param_not_mapped", newArrayList("do not include")); + final List genericHeaderVariables = new ArrayList<>(); + genericHeaderVariables.add(new GenericHeaderVariable("someparam", "")); + genericHeaderVariables.add(new GenericHeaderVariable("anotherparam", "[^e]")); + genericHeaderVariables.add(new GenericHeaderVariable("content-type", "")); + final boolean shouldNotFlatten = false; + final Map variables = new VariablesResolver( + headers, + parameterMap, + postContent, + genericVariables, + genericRequestVariables, + genericHeaderVariables, + shouldNotFlatten) + .getVariables(); + + assertThat(variables) // + .containsEntry("someparam", "some value") // + .containsEntry("someparam_0", "some value") // + .containsEntry("anotherparam", "ee") // + .containsEntry("anotherparam_0", "ee") // + .containsEntry("anotherparam_1", "eee") // + .containsEntry("content_type", "application/json") // + .hasSize(7); + } + + @Test + public void testHeaders() throws Exception { + final String postContent = null; + + final List genericVariables = newArrayList(); + + final Map parameterMap = new HashMap<>(); + final List genericRequestVariables = new ArrayList<>(); + + final Map> headers = new HashMap<>(); + headers.put("Someparam", newArrayList("some value")); + headers.put("anotherparam", newArrayList("another value", "even more")); + headers.put("content-Type", newArrayList("application/json")); + headers.put("param_not_mapped", newArrayList("do not include")); + + final List genericHeaderVariables = new ArrayList<>(); + genericHeaderVariables.add(new GenericHeaderVariable("someparam", "")); + genericHeaderVariables.add(new GenericHeaderVariable("anotherparam", "[^e]")); + genericHeaderVariables.add(new GenericHeaderVariable("content-type", "")); + final boolean shouldNotFlatten = false; + final Map variables = new VariablesResolver( + headers, + parameterMap, + postContent, + genericVariables, + genericRequestVariables, + genericHeaderVariables, + shouldNotFlatten) + .getVariables(); + + assertThat(variables) // + .containsEntry("someparam", "some value") // + .containsEntry("someparam_0", "some value") // + .containsEntry("anotherparam", "ee") // + .containsEntry("anotherparam_0", "ee") // + .containsEntry("anotherparam_1", "eee") // + .containsEntry("content_type", "application/json") // + .hasSize(7); + } + + @Test + public void testHeaderResolvesToNull() throws Exception { + final String postContent = null; + + final List genericVariables = newArrayList(); + + final Map parameterMap = new HashMap<>(); + final List genericRequestVariables = new ArrayList<>(); + + final Map> headers = new HashMap<>(); + headers.put("someparam", newArrayList("some value")); + + final List genericHeaderVariables = new ArrayList<>(); + genericHeaderVariables.add(new GenericHeaderVariable("someparam", null)); + final boolean shouldNotFlatten = false; + final Map variables = new VariablesResolver( + headers, + parameterMap, + postContent, + genericVariables, + genericRequestVariables, + genericHeaderVariables, + shouldNotFlatten) + .getVariables(); + + assertThat(variables) // + .containsEntry("someparam", "some value") // + .hasSize(2); + } + + @Test + public void testHeaderResolvesCanBeReused() throws Exception { + final String postContent = null; + + final List genericVariables = newArrayList(); + + final Map parameterMap = new HashMap<>(); + final List genericRequestVariables = new ArrayList<>(); + + final Map> headers = new HashMap<>(); + headers.put("someparam", newArrayList("some value")); + + final List genericHeaderVariables = new ArrayList<>(); + genericHeaderVariables.add(new GenericHeaderVariable("someparam", null)); + final boolean shouldNotFlatten = false; + Map variables = new VariablesResolver( + headers, + parameterMap, + postContent, + genericVariables, + genericRequestVariables, + genericHeaderVariables, + shouldNotFlatten) + .getVariables(); + + assertThat(variables) // + .containsEntry("someparam", "some value") // + .hasSize(2); + + variables = new VariablesResolver( + headers, + parameterMap, + postContent, + genericVariables, + genericRequestVariables, + genericHeaderVariables, + shouldNotFlatten) + .getVariables(); + + assertThat(variables) // + .containsEntry("someparam", "some value") // + .hasSize(2); + } + + @Test + public void testHeadersButNoneConfigured() throws Exception { + final String postContent = null; + + final List genericVariables = newArrayList(); + + final Map parameterMap = new HashMap<>(); + final List genericRequestVariables = new ArrayList<>(); + + final Map> headers = new HashMap<>(); + headers.put("someparam", newArrayList("some value")); + headers.put("anotherparam", newArrayList("another value", "even more")); + headers.put("content-type", newArrayList("application/json")); + headers.put("param_not_mapped", newArrayList("do not include")); + + final List genericHeaderVariables = new ArrayList<>(); + final boolean shouldNotFlatten = false; + final Map variables = new VariablesResolver( + headers, + parameterMap, + postContent, + genericVariables, + genericRequestVariables, + genericHeaderVariables, + shouldNotFlatten) + .getVariables(); + + assertThat(variables) // + .hasSize(0); + } } diff --git a/src/test/java/org/jenkinsci/plugins/gwt/VariablesResolverJsonPathTest.java b/src/test/java/org/jenkinsci/plugins/gwt/VariablesResolverJsonPathTest.java index bc88e5d9..83fa845c 100644 --- a/src/test/java/org/jenkinsci/plugins/gwt/VariablesResolverJsonPathTest.java +++ b/src/test/java/org/jenkinsci/plugins/gwt/VariablesResolverJsonPathTest.java @@ -13,439 +13,419 @@ import org.junit.Test; public class VariablesResolverJsonPathTest { - private final Map> headers = new HashMap<>(); - private final List genericHeaderVariables = new ArrayList<>(); - private boolean shouldNotFlatten = false; - - @Test - public void testJSONPathGetOneLeaf() throws Exception { - final String resourceName = "one-leaf.json"; - final Map variables = this.getJsonPathVariables(resourceName, "$.user"); - - assertThat(variables) // - .containsEntry("variableName_name", "Administrator") // - .hasSize(2); - - assertThat(variables.get("variableName")) // - .isEqualTo("{\"name\":\"Administrator\"}"); - } - - @Test - public void testJSONPathGetTwoLeafs() throws Exception { - final String resourceName = "two-leafs.json"; - final Map variables = this.getJsonPathVariables(resourceName, "$.user"); - - assertThat(variables) // - .containsEntry("variableName_name", "Administrator") // - .containsEntry("variableName_username", "root") // - .hasSize(3); - - assertThat(variables.get("variableName")) // - .isEqualTo("{\"name\":\"Administrator\",\"username\":\"root\"}"); - } - - @Test - public void testJSONPathGetOneListItem() throws Exception { - final String resourceName = "one-list-item.json"; - final Map variables = this.getJsonPathVariables(resourceName, "$.user"); - - assertThat(variables.keySet()) // - .containsOnly("variableName", "variableName_0_name"); - - assertThat(variables.get("variableName")) // - .isEqualTo("[{\"name\":\"Administrator\"}]"); - assertThat(variables.get("variableName_0_name")) // - .isEqualTo("Administrator"); - } - - @Test - public void testJSONPathGetRootItem() throws Exception { - final String resourceName = "one-list-item.json"; - final Map variables = this.getJsonPathVariables(resourceName, "$"); - - assertThat(variables.keySet()) // - .containsOnly("variableName", "variableName_user_0_name"); - assertThat(variables.get("variableName").replaceAll("\\n|\\r\\n|\\s", "")) // - .isEqualToIgnoringWhitespace("{\"user\":[{\"name\":\"Administrator\"}]}"); - assertThat(variables.get("variableName_user_0_name")) // - .isEqualTo("Administrator"); - } - - @Test - public void testJSONPathGetTwoListItems() throws Exception { - final String resourceName = "two-list-items.json"; - final Map variables = this.getJsonPathVariables(resourceName, "$.user"); - - assertThat(variables.keySet()) // - .containsOnly("variableName", "variableName_0_name", "variableName_1_username"); - - assertThat(variables.get("variableName")) // - .isEqualTo("[{\"name\":\"Administrator\"},{\"username\":\"root\"}]"); - assertThat(variables.get("variableName_0_name")) // - .isEqualTo("Administrator"); - assertThat(variables.get("variableName_1_username")) // - .isEqualTo("root"); - } - - @Test - public void testJSONPathGetSeveralMixedListItems() throws Exception { - final String resourceName = "several-mixed-list-items.json"; - final Map variables = this.getJsonPathVariables(resourceName, "$.user"); - - assertThat(variables) // - .containsEntry("variableName_0_name", "Administrator") // - .containsEntry("variableName_1_username", "root") // - .containsEntry("variableName_2", "a simple string") // - .containsEntry("variableName_3", "33333") // - .containsEntry("variableName_4_a_number", "a value") // - .containsEntry("variableName_5", "another simple string") // - .containsEntry("variableName_6", "66666") // - .containsEntry("variableName_7_another_number", "another value") // - .hasSize(9); - - assertThat(variables.get("variableName")) // - .isEqualTo( - "[{\"name\":\"Administrator\"},{\"username\":\"root\"},\"a simple string\",33333,{\"a number\":\"a value\"},\"another simple string\",66666,{\"another number\":\"another value\"}]"); - } - - @Test - public void testJSONPathGetNullValues() throws Exception { - final Map variables = - this.getJsonPathVariablesFromContent("$", "{\"a\": null,\"b\": \"value\"}"); - - assertThat(variables.get("variableName")) // - .isEqualTo("{\"a\": null,\"b\": \"value\"}"); - } - - @Test - public void testJSONPathGetAllVariable() throws Exception { - final String resourceName = "gitlab-mergerequest-comment.json"; - final String postContent = this.getContent(resourceName); - - final List genericVariables = - newArrayList( // - new GenericVariable("ids", "$..id")); - final Map parameterMap = new HashMap<>(); - final String[] values1 = new String[] {"a", "b"}; - parameterMap.put("reqp1", values1); - final String[] values2 = new String[] {"just one"}; - parameterMap.put("reqp2", values2); - final List genericRequestVariables = new ArrayList<>(); - genericRequestVariables.add(new GenericRequestVariable("reqp1", "")); - genericRequestVariables.add(new GenericRequestVariable("reqp2", "")); - final Map variables = - new VariablesResolver( - this.headers, - parameterMap, - postContent, - genericVariables, - genericRequestVariables, - this.genericHeaderVariables, - this.shouldNotFlatten) - .getVariables(); - - assertThat(variables) // - .containsEntry("ids_0", "28") // - .containsEntry("ids_1", "1") // - .containsEntry("ids_2", "1c3e5deb451353c34264b98c77836012a2106515") // - .containsEntry("reqp1_0", "a") // - .containsEntry("reqp1_1", "b") // - .containsEntry("reqp2", "just one") // - .containsEntry("reqp2_0", "just one") // - .hasSize(8); - - assertThat(variables.get("ids")) // - .isEqualTo("[28,1,\"1c3e5deb451353c34264b98c77836012a2106515\"]"); - } - - @Test - public void testJSONPathGetAllVariable_not_flat() throws Exception { - this.shouldNotFlatten = true; - - final String resourceName = "gitlab-mergerequest-comment.json"; - final String postContent = this.getContent(resourceName); - - final List genericVariables = - newArrayList( // - new GenericVariable("ids", "$..id"), - new GenericVariable("user", "$.user"), - new GenericVariable("userName", "$.user.name")); - final Map variables = - new VariablesResolver( - this.headers, - new HashMap(), - postContent, - genericVariables, - new ArrayList(), - this.genericHeaderVariables, - this.shouldNotFlatten) - .getVariables(); - - assertThat(variables) // - .containsOnlyKeys("ids", "user", "userName"); - - assertThat(variables.get("ids")) // - .isEqualTo("[28,1,\"1c3e5deb451353c34264b98c77836012a2106515\"]"); - - assertThat(variables.get("user")) // - .isEqualTo( - "{\"name\":\"Administrator\",\"username\":\"root\",\"avatar_url\":\"http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s\\u003d80\\u0026d\\u003didenticon\"}"); - - assertThat(variables.get("userName")) // - .isEqualTo("Administrator"); - } - - @Test - public void testGenericRequestParameters() throws Exception { - final String postContent = null; - - final List genericVariables = newArrayList(); - - final Map parameterMap = new HashMap<>(); - final String[] values1 = new String[] {"abc123456cdef", "ABCdef"}; - parameterMap.put("reqp1", values1); - - final String[] values2 = new String[] {"this one will be ignored"}; - parameterMap.put("reqp2", values2); - - final String[] values3 = new String[] {"just one"}; - parameterMap.put("reqp3", values3); - - final String[] values4 = new String[] {"just one", "just one again"}; - parameterMap.put("reqp4", values4); - - final List genericRequestVariables = new ArrayList<>(); - genericRequestVariables.add(new GenericRequestVariable("reqp1", "[^0-9]")); - genericRequestVariables.add(new GenericRequestVariable("reqp3", "[^a-z]")); - genericRequestVariables.add(new GenericRequestVariable("reqp4", "")); - - final Map variables = - new VariablesResolver( - this.headers, - parameterMap, - postContent, - genericVariables, - genericRequestVariables, - this.genericHeaderVariables, - this.shouldNotFlatten) - .getVariables(); - - assertThat(variables) // - .containsEntry("reqp1_0", "123456") // - .containsEntry("reqp1_1", "") // - .containsEntry("reqp3", "justone") // - .containsEntry("reqp3_0", "justone") // - .containsEntry("reqp4_0", "just one") // - .containsEntry("reqp4_1", "just one again") // - .hasSize(6); - } - - @Test - public void testJSONPathGetZeroMatchingVariables() throws Exception { - final String resourceName = "gitlab-mergerequest-comment.json"; - final String postContent = this.getContent(resourceName); - - final List genericVariables = - newArrayList( // - new GenericVariable("ids", "$..abc")); - final Map parameterMap = new HashMap<>(); - final List genericRequestVariables = new ArrayList<>(); - final Map variables = - new VariablesResolver( - this.headers, - parameterMap, - postContent, - genericVariables, - genericRequestVariables, - this.genericHeaderVariables, - this.shouldNotFlatten) - .getVariables(); - - assertThat(variables) // - .hasSize(1); - - assertThat(variables.get("ids")) // - .isEqualTo("[]"); - } - - @Test - public void testJSONPathGetOneVariable() throws Exception { - final String resourceName = "gitlab-mergerequest-comment.json"; - final String postContent = this.getContent(resourceName); - - final List genericVariables = - newArrayList( // - new GenericVariable("user_name", "$.user.name")); - final Map parameterMap = new HashMap<>(); - final List genericRequestVariables = new ArrayList<>(); - final Map variables = - new VariablesResolver( - this.headers, - parameterMap, - postContent, - genericVariables, - genericRequestVariables, - this.genericHeaderVariables, - this.shouldNotFlatten) - .getVariables(); - - assertThat(variables) // - .hasSize(1) // - .containsEntry("user_name", "Administrator"); - } - - @Test - public void testJSONPathGetTwoVariables() throws Exception { - final String resourceName = "gitlab-mergerequest-comment.json"; - final String postContent = this.getContent(resourceName); - - final GenericVariable genericVariable1 = new GenericVariable("user_name", "$.user.name"); - genericVariable1.setRegexpFilter("[aA]"); - final List genericVariables = - newArrayList( // - genericVariable1, // - new GenericVariable("project_id", "$.project_id")); - final Map parameterMap = new HashMap<>(); - final List genericRequestVariables = new ArrayList<>(); - final Map variables = - new VariablesResolver( - this.headers, - parameterMap, - postContent, - genericVariables, - genericRequestVariables, - this.genericHeaderVariables, - this.shouldNotFlatten) - .getVariables(); - - assertThat(variables) // - .hasSize(2) // - .containsEntry("user_name", "dministrtor") // - .containsEntry("project_id", "1"); - } - - @Test - public void testJSONPathGetNodeVariable() throws Exception { - final String resourceName = "gitlab-mergerequest-comment.json"; - final Map variables = this.getJsonPathVariables(resourceName, "$.user"); - - assertThat(variables) // - .containsEntry("variableName_name", "Administrator"); - } - - @Test - public void testJSONPathGetPayloadVariable() throws Exception { - final String resourceName = "gitlab-mergerequest-comment.json"; - final String postContent = this.getContent(resourceName); - - final List genericVariables = - newArrayList( // - new GenericVariable("payload", "$")); - final Map parameterMap = new HashMap<>(); - final List genericRequestVariables = new ArrayList<>(); - final Map variables = - new VariablesResolver( - this.headers, - parameterMap, - postContent, - genericVariables, - genericRequestVariables, - this.genericHeaderVariables, - this.shouldNotFlatten) - .getVariables(); - - assertThat(variables) // - .containsEntry("payload_user_name", "Administrator"); - } - - @Test - public void testJSONPathGetPayloadVariableDefault() throws Exception { - final String resourceName = "gitlab-mergerequest-comment.json"; - final String postContent = this.getContent(resourceName); - - final GenericVariable genericVariable = new GenericVariable("payload", "$.doesnotexist"); - genericVariable.setDefaultValue("this is the default"); - final List genericVariables = - newArrayList( // - genericVariable); - final Map parameterMap = new HashMap<>(); - final List genericRequestVariables = new ArrayList<>(); - final Map variables = - new VariablesResolver( - this.headers, - parameterMap, - postContent, - genericVariables, - genericRequestVariables, - this.genericHeaderVariables, - this.shouldNotFlatten) - .getVariables(); - - assertThat(variables) // - .containsEntry("payload", "this is the default"); - } - - @Test - public void testStarOperator() throws Exception { - final String resourceName = "github-push-event.json"; - final Map variables = - this.getJsonPathVariables(resourceName, "$.commits[*].modified[*]"); - - assertThat(variables.keySet()) // - .containsOnly("variableName", "variableName_0"); - assertThat(variables.get("variableName")) // - .isEqualTo("[\"README.md\"]"); - assertThat(variables.get("variableName_0")) // - .isEqualTo("README.md"); - } - - @Test - public void testCommaOperator() throws Exception { - final String resourceName = "github-push-event.json"; - final Map variables = - this.getJsonPathVariables(resourceName, "$.commits[*].['modified','added','removed'][*]"); - - assertThat(variables.keySet()) // - .containsOnly("variableName", "variableName_0"); - assertThat(variables.get("variableName")) // - .isEqualTo("[\"README.md\"]"); - assertThat(variables.get("variableName_0")) // - .isEqualTo("README.md"); - } - - private Map getJsonPathVariables( - final String resourceName, final String jsonPath) { - final String postContent = this.getContent(resourceName); - - return this.getJsonPathVariablesFromContent(jsonPath, postContent); - } - - private Map getJsonPathVariablesFromContent( - final String jsonPath, final String postContent) { - final List genericVariables = - newArrayList( // - new GenericVariable("variableName", jsonPath)); - final Map parameterMap = new HashMap<>(); - final List genericRequestVariables = new ArrayList<>(); - final Map variables = - new VariablesResolver( - this.headers, - parameterMap, - postContent, - genericVariables, - genericRequestVariables, - this.genericHeaderVariables, - this.shouldNotFlatten) - .getVariables(); - return variables; - } - - private String getContent(final String resourceName) { - try { - return Resources.toString( - Resources.getResource(resourceName).toURI().toURL(), Charsets.UTF_8); - } catch (final Exception e) { - throw new RuntimeException(e); + private final Map> headers = new HashMap<>(); + private final List genericHeaderVariables = new ArrayList<>(); + private boolean shouldNotFlatten = false; + + @Test + public void testJSONPathGetOneLeaf() throws Exception { + final String resourceName = "one-leaf.json"; + final Map variables = this.getJsonPathVariables(resourceName, "$.user"); + + assertThat(variables) // + .containsEntry("variableName_name", "Administrator") // + .hasSize(2); + + assertThat(variables.get("variableName")) // + .isEqualTo("{\"name\":\"Administrator\"}"); + } + + @Test + public void testJSONPathGetTwoLeafs() throws Exception { + final String resourceName = "two-leafs.json"; + final Map variables = this.getJsonPathVariables(resourceName, "$.user"); + + assertThat(variables) // + .containsEntry("variableName_name", "Administrator") // + .containsEntry("variableName_username", "root") // + .hasSize(3); + + assertThat(variables.get("variableName")) // + .isEqualTo("{\"name\":\"Administrator\",\"username\":\"root\"}"); + } + + @Test + public void testJSONPathGetOneListItem() throws Exception { + final String resourceName = "one-list-item.json"; + final Map variables = this.getJsonPathVariables(resourceName, "$.user"); + + assertThat(variables.keySet()) // + .containsOnly("variableName", "variableName_0_name"); + + assertThat(variables.get("variableName")) // + .isEqualTo("[{\"name\":\"Administrator\"}]"); + assertThat(variables.get("variableName_0_name")) // + .isEqualTo("Administrator"); + } + + @Test + public void testJSONPathGetRootItem() throws Exception { + final String resourceName = "one-list-item.json"; + final Map variables = this.getJsonPathVariables(resourceName, "$"); + + assertThat(variables.keySet()) // + .containsOnly("variableName", "variableName_user_0_name"); + assertThat(variables.get("variableName").replaceAll("\\n|\\r\\n|\\s", "")) // + .isEqualToIgnoringWhitespace("{\"user\":[{\"name\":\"Administrator\"}]}"); + assertThat(variables.get("variableName_user_0_name")) // + .isEqualTo("Administrator"); + } + + @Test + public void testJSONPathGetTwoListItems() throws Exception { + final String resourceName = "two-list-items.json"; + final Map variables = this.getJsonPathVariables(resourceName, "$.user"); + + assertThat(variables.keySet()) // + .containsOnly("variableName", "variableName_0_name", "variableName_1_username"); + + assertThat(variables.get("variableName")) // + .isEqualTo("[{\"name\":\"Administrator\"},{\"username\":\"root\"}]"); + assertThat(variables.get("variableName_0_name")) // + .isEqualTo("Administrator"); + assertThat(variables.get("variableName_1_username")) // + .isEqualTo("root"); + } + + @Test + public void testJSONPathGetSeveralMixedListItems() throws Exception { + final String resourceName = "several-mixed-list-items.json"; + final Map variables = this.getJsonPathVariables(resourceName, "$.user"); + + assertThat(variables) // + .containsEntry("variableName_0_name", "Administrator") // + .containsEntry("variableName_1_username", "root") // + .containsEntry("variableName_2", "a simple string") // + .containsEntry("variableName_3", "33333") // + .containsEntry("variableName_4_a_number", "a value") // + .containsEntry("variableName_5", "another simple string") // + .containsEntry("variableName_6", "66666") // + .containsEntry("variableName_7_another_number", "another value") // + .hasSize(9); + + assertThat(variables.get("variableName")) // + .isEqualTo( + "[{\"name\":\"Administrator\"},{\"username\":\"root\"},\"a simple string\",33333,{\"a number\":\"a value\"},\"another simple string\",66666,{\"another number\":\"another value\"}]"); + } + + @Test + public void testJSONPathGetNullValues() throws Exception { + final Map variables = + this.getJsonPathVariablesFromContent("$", "{\"a\": null,\"b\": \"value\"}"); + + assertThat(variables.get("variableName")) // + .isEqualTo("{\"a\": null,\"b\": \"value\"}"); + } + + @Test + public void testJSONPathGetAllVariable() throws Exception { + final String resourceName = "gitlab-mergerequest-comment.json"; + final String postContent = this.getContent(resourceName); + + final List genericVariables = newArrayList( // + new GenericVariable("ids", "$..id")); + final Map parameterMap = new HashMap<>(); + final String[] values1 = new String[] {"a", "b"}; + parameterMap.put("reqp1", values1); + final String[] values2 = new String[] {"just one"}; + parameterMap.put("reqp2", values2); + final List genericRequestVariables = new ArrayList<>(); + genericRequestVariables.add(new GenericRequestVariable("reqp1", "")); + genericRequestVariables.add(new GenericRequestVariable("reqp2", "")); + final Map variables = new VariablesResolver( + this.headers, + parameterMap, + postContent, + genericVariables, + genericRequestVariables, + this.genericHeaderVariables, + this.shouldNotFlatten) + .getVariables(); + + assertThat(variables) // + .containsEntry("ids_0", "28") // + .containsEntry("ids_1", "1") // + .containsEntry("ids_2", "1c3e5deb451353c34264b98c77836012a2106515") // + .containsEntry("reqp1_0", "a") // + .containsEntry("reqp1_1", "b") // + .containsEntry("reqp2", "just one") // + .containsEntry("reqp2_0", "just one") // + .hasSize(8); + + assertThat(variables.get("ids")) // + .isEqualTo("[28,1,\"1c3e5deb451353c34264b98c77836012a2106515\"]"); + } + + @Test + public void testJSONPathGetAllVariable_not_flat() throws Exception { + this.shouldNotFlatten = true; + + final String resourceName = "gitlab-mergerequest-comment.json"; + final String postContent = this.getContent(resourceName); + + final List genericVariables = newArrayList( // + new GenericVariable("ids", "$..id"), + new GenericVariable("user", "$.user"), + new GenericVariable("userName", "$.user.name")); + final Map variables = new VariablesResolver( + this.headers, + new HashMap(), + postContent, + genericVariables, + new ArrayList(), + this.genericHeaderVariables, + this.shouldNotFlatten) + .getVariables(); + + assertThat(variables) // + .containsOnlyKeys("ids", "user", "userName"); + + assertThat(variables.get("ids")) // + .isEqualTo("[28,1,\"1c3e5deb451353c34264b98c77836012a2106515\"]"); + + assertThat(variables.get("user")) // + .isEqualTo( + "{\"name\":\"Administrator\",\"username\":\"root\",\"avatar_url\":\"http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s\\u003d80\\u0026d\\u003didenticon\"}"); + + assertThat(variables.get("userName")) // + .isEqualTo("Administrator"); + } + + @Test + public void testGenericRequestParameters() throws Exception { + final String postContent = null; + + final List genericVariables = newArrayList(); + + final Map parameterMap = new HashMap<>(); + final String[] values1 = new String[] {"abc123456cdef", "ABCdef"}; + parameterMap.put("reqp1", values1); + + final String[] values2 = new String[] {"this one will be ignored"}; + parameterMap.put("reqp2", values2); + + final String[] values3 = new String[] {"just one"}; + parameterMap.put("reqp3", values3); + + final String[] values4 = new String[] {"just one", "just one again"}; + parameterMap.put("reqp4", values4); + + final List genericRequestVariables = new ArrayList<>(); + genericRequestVariables.add(new GenericRequestVariable("reqp1", "[^0-9]")); + genericRequestVariables.add(new GenericRequestVariable("reqp3", "[^a-z]")); + genericRequestVariables.add(new GenericRequestVariable("reqp4", "")); + + final Map variables = new VariablesResolver( + this.headers, + parameterMap, + postContent, + genericVariables, + genericRequestVariables, + this.genericHeaderVariables, + this.shouldNotFlatten) + .getVariables(); + + assertThat(variables) // + .containsEntry("reqp1_0", "123456") // + .containsEntry("reqp1_1", "") // + .containsEntry("reqp3", "justone") // + .containsEntry("reqp3_0", "justone") // + .containsEntry("reqp4_0", "just one") // + .containsEntry("reqp4_1", "just one again") // + .hasSize(6); + } + + @Test + public void testJSONPathGetZeroMatchingVariables() throws Exception { + final String resourceName = "gitlab-mergerequest-comment.json"; + final String postContent = this.getContent(resourceName); + + final List genericVariables = newArrayList( // + new GenericVariable("ids", "$..abc")); + final Map parameterMap = new HashMap<>(); + final List genericRequestVariables = new ArrayList<>(); + final Map variables = new VariablesResolver( + this.headers, + parameterMap, + postContent, + genericVariables, + genericRequestVariables, + this.genericHeaderVariables, + this.shouldNotFlatten) + .getVariables(); + + assertThat(variables) // + .hasSize(1); + + assertThat(variables.get("ids")) // + .isEqualTo("[]"); + } + + @Test + public void testJSONPathGetOneVariable() throws Exception { + final String resourceName = "gitlab-mergerequest-comment.json"; + final String postContent = this.getContent(resourceName); + + final List genericVariables = newArrayList( // + new GenericVariable("user_name", "$.user.name")); + final Map parameterMap = new HashMap<>(); + final List genericRequestVariables = new ArrayList<>(); + final Map variables = new VariablesResolver( + this.headers, + parameterMap, + postContent, + genericVariables, + genericRequestVariables, + this.genericHeaderVariables, + this.shouldNotFlatten) + .getVariables(); + + assertThat(variables) // + .hasSize(1) // + .containsEntry("user_name", "Administrator"); + } + + @Test + public void testJSONPathGetTwoVariables() throws Exception { + final String resourceName = "gitlab-mergerequest-comment.json"; + final String postContent = this.getContent(resourceName); + + final GenericVariable genericVariable1 = new GenericVariable("user_name", "$.user.name"); + genericVariable1.setRegexpFilter("[aA]"); + final List genericVariables = newArrayList( // + genericVariable1, // + new GenericVariable("project_id", "$.project_id")); + final Map parameterMap = new HashMap<>(); + final List genericRequestVariables = new ArrayList<>(); + final Map variables = new VariablesResolver( + this.headers, + parameterMap, + postContent, + genericVariables, + genericRequestVariables, + this.genericHeaderVariables, + this.shouldNotFlatten) + .getVariables(); + + assertThat(variables) // + .hasSize(2) // + .containsEntry("user_name", "dministrtor") // + .containsEntry("project_id", "1"); + } + + @Test + public void testJSONPathGetNodeVariable() throws Exception { + final String resourceName = "gitlab-mergerequest-comment.json"; + final Map variables = this.getJsonPathVariables(resourceName, "$.user"); + + assertThat(variables) // + .containsEntry("variableName_name", "Administrator"); + } + + @Test + public void testJSONPathGetPayloadVariable() throws Exception { + final String resourceName = "gitlab-mergerequest-comment.json"; + final String postContent = this.getContent(resourceName); + + final List genericVariables = newArrayList( // + new GenericVariable("payload", "$")); + final Map parameterMap = new HashMap<>(); + final List genericRequestVariables = new ArrayList<>(); + final Map variables = new VariablesResolver( + this.headers, + parameterMap, + postContent, + genericVariables, + genericRequestVariables, + this.genericHeaderVariables, + this.shouldNotFlatten) + .getVariables(); + + assertThat(variables) // + .containsEntry("payload_user_name", "Administrator"); + } + + @Test + public void testJSONPathGetPayloadVariableDefault() throws Exception { + final String resourceName = "gitlab-mergerequest-comment.json"; + final String postContent = this.getContent(resourceName); + + final GenericVariable genericVariable = new GenericVariable("payload", "$.doesnotexist"); + genericVariable.setDefaultValue("this is the default"); + final List genericVariables = newArrayList( // + genericVariable); + final Map parameterMap = new HashMap<>(); + final List genericRequestVariables = new ArrayList<>(); + final Map variables = new VariablesResolver( + this.headers, + parameterMap, + postContent, + genericVariables, + genericRequestVariables, + this.genericHeaderVariables, + this.shouldNotFlatten) + .getVariables(); + + assertThat(variables) // + .containsEntry("payload", "this is the default"); + } + + @Test + public void testStarOperator() throws Exception { + final String resourceName = "github-push-event.json"; + final Map variables = this.getJsonPathVariables(resourceName, "$.commits[*].modified[*]"); + + assertThat(variables.keySet()) // + .containsOnly("variableName", "variableName_0"); + assertThat(variables.get("variableName")) // + .isEqualTo("[\"README.md\"]"); + assertThat(variables.get("variableName_0")) // + .isEqualTo("README.md"); + } + + @Test + public void testCommaOperator() throws Exception { + final String resourceName = "github-push-event.json"; + final Map variables = + this.getJsonPathVariables(resourceName, "$.commits[*].['modified','added','removed'][*]"); + + assertThat(variables.keySet()) // + .containsOnly("variableName", "variableName_0"); + assertThat(variables.get("variableName")) // + .isEqualTo("[\"README.md\"]"); + assertThat(variables.get("variableName_0")) // + .isEqualTo("README.md"); + } + + private Map getJsonPathVariables(final String resourceName, final String jsonPath) { + final String postContent = this.getContent(resourceName); + + return this.getJsonPathVariablesFromContent(jsonPath, postContent); + } + + private Map getJsonPathVariablesFromContent(final String jsonPath, final String postContent) { + final List genericVariables = newArrayList( // + new GenericVariable("variableName", jsonPath)); + final Map parameterMap = new HashMap<>(); + final List genericRequestVariables = new ArrayList<>(); + final Map variables = new VariablesResolver( + this.headers, + parameterMap, + postContent, + genericVariables, + genericRequestVariables, + this.genericHeaderVariables, + this.shouldNotFlatten) + .getVariables(); + return variables; + } + + private String getContent(final String resourceName) { + try { + return Resources.toString( + Resources.getResource(resourceName).toURI().toURL(), Charsets.UTF_8); + } catch (final Exception e) { + throw new RuntimeException(e); + } } - } } diff --git a/src/test/java/org/jenkinsci/plugins/gwt/VariablesResolverRequestParameterTest.java b/src/test/java/org/jenkinsci/plugins/gwt/VariablesResolverRequestParameterTest.java index 50e02ab2..fa9a8a07 100644 --- a/src/test/java/org/jenkinsci/plugins/gwt/VariablesResolverRequestParameterTest.java +++ b/src/test/java/org/jenkinsci/plugins/gwt/VariablesResolverRequestParameterTest.java @@ -11,88 +11,86 @@ import org.junit.Test; public class VariablesResolverRequestParameterTest { - private final Map> headers = new HashMap<>(); - private final List genericHeaderVariables = new ArrayList<>(); - private final boolean shouldNotFlatten = false; - - @Test - public void testGenericRequestParametersWithFilters() throws Exception { - final String postContent = null; - - final List genericVariables = newArrayList(); - - final Map parameterMap = new HashMap<>(); - final String[] values1 = new String[] {"abc123456cdef", "ABCdef"}; - parameterMap.put("reqp1", values1); - - final String[] values2 = new String[] {"this one will be ignored"}; - parameterMap.put("reqp2", values2); - - final String[] values3 = new String[] {"just one"}; - parameterMap.put("reqp3", values3); - - final String[] values4 = new String[] {"just one", "just one again"}; - parameterMap.put("reqp4", values4); - - final List genericRequestVariables = new ArrayList<>(); - genericRequestVariables.add(new GenericRequestVariable("reqp1", "[^0-9]")); - genericRequestVariables.add(new GenericRequestVariable("reqp3", "[^a-z]")); - genericRequestVariables.add(new GenericRequestVariable("reqp4", "")); - - final Map variables = - new VariablesResolver( - this.headers, - parameterMap, - postContent, - genericVariables, - genericRequestVariables, - this.genericHeaderVariables, - this.shouldNotFlatten) - .getVariables(); - - assertThat(variables) // - .containsEntry("reqp1_0", "123456") // - .containsEntry("reqp1_1", "") // - .containsEntry("reqp3", "justone") // - .containsEntry("reqp3_0", "justone") // - .containsEntry("reqp4_0", "just one") // - .containsEntry("reqp4_1", "just one again") // - .hasSize(6); - } - - @Test - public void testGenericRequestParameters() throws Exception { - final String postContent = null; - - final List genericVariables = newArrayList(); - - final Map parameterMap = new HashMap<>(); - final String[] values1 = new String[] {"p1value"}; - parameterMap.put("param1", values1); - - final String[] values2 = new String[] {"p2value"}; - parameterMap.put("param2", values2); - - final List genericRequestVariables = new ArrayList<>(); - genericRequestVariables.add(new GenericRequestVariable("param1", "")); - genericRequestVariables.add(new GenericRequestVariable("param2", "")); - - final Map variables = - new VariablesResolver( - this.headers, - parameterMap, - postContent, - genericVariables, - genericRequestVariables, - this.genericHeaderVariables, - this.shouldNotFlatten) - .getVariables(); - - assertThat(variables) // - .hasSize(4) // - .containsEntry("param1", "p1value") // - .containsEntry("param1_0", "p1value") // - .containsEntry("param2", "p2value") // - .containsEntry("param2_0", "p2value"); - } + private final Map> headers = new HashMap<>(); + private final List genericHeaderVariables = new ArrayList<>(); + private final boolean shouldNotFlatten = false; + + @Test + public void testGenericRequestParametersWithFilters() throws Exception { + final String postContent = null; + + final List genericVariables = newArrayList(); + + final Map parameterMap = new HashMap<>(); + final String[] values1 = new String[] {"abc123456cdef", "ABCdef"}; + parameterMap.put("reqp1", values1); + + final String[] values2 = new String[] {"this one will be ignored"}; + parameterMap.put("reqp2", values2); + + final String[] values3 = new String[] {"just one"}; + parameterMap.put("reqp3", values3); + + final String[] values4 = new String[] {"just one", "just one again"}; + parameterMap.put("reqp4", values4); + + final List genericRequestVariables = new ArrayList<>(); + genericRequestVariables.add(new GenericRequestVariable("reqp1", "[^0-9]")); + genericRequestVariables.add(new GenericRequestVariable("reqp3", "[^a-z]")); + genericRequestVariables.add(new GenericRequestVariable("reqp4", "")); + + final Map variables = new VariablesResolver( + this.headers, + parameterMap, + postContent, + genericVariables, + genericRequestVariables, + this.genericHeaderVariables, + this.shouldNotFlatten) + .getVariables(); + + assertThat(variables) // + .containsEntry("reqp1_0", "123456") // + .containsEntry("reqp1_1", "") // + .containsEntry("reqp3", "justone") // + .containsEntry("reqp3_0", "justone") // + .containsEntry("reqp4_0", "just one") // + .containsEntry("reqp4_1", "just one again") // + .hasSize(6); + } + + @Test + public void testGenericRequestParameters() throws Exception { + final String postContent = null; + + final List genericVariables = newArrayList(); + + final Map parameterMap = new HashMap<>(); + final String[] values1 = new String[] {"p1value"}; + parameterMap.put("param1", values1); + + final String[] values2 = new String[] {"p2value"}; + parameterMap.put("param2", values2); + + final List genericRequestVariables = new ArrayList<>(); + genericRequestVariables.add(new GenericRequestVariable("param1", "")); + genericRequestVariables.add(new GenericRequestVariable("param2", "")); + + final Map variables = new VariablesResolver( + this.headers, + parameterMap, + postContent, + genericVariables, + genericRequestVariables, + this.genericHeaderVariables, + this.shouldNotFlatten) + .getVariables(); + + assertThat(variables) // + .hasSize(4) // + .containsEntry("param1", "p1value") // + .containsEntry("param1_0", "p1value") // + .containsEntry("param2", "p2value") // + .containsEntry("param2_0", "p2value"); + } } diff --git a/src/test/java/org/jenkinsci/plugins/gwt/VariablesResolverXPathTest.java b/src/test/java/org/jenkinsci/plugins/gwt/VariablesResolverXPathTest.java index 966b13c6..3053c802 100644 --- a/src/test/java/org/jenkinsci/plugins/gwt/VariablesResolverXPathTest.java +++ b/src/test/java/org/jenkinsci/plugins/gwt/VariablesResolverXPathTest.java @@ -14,461 +14,429 @@ import org.junit.Test; public class VariablesResolverXPathTest { - private final Map> headers = new HashMap<>(); - private final List genericHeaderVariables = new ArrayList<>(); - private final boolean shouldNotFlatten = false; - - @Test - public void testXPathGetOneVariable() throws Exception { - final String resourceName = "two-list-items.xml"; - final String postContent = this.getContent(resourceName); - - final GenericVariable genericVariable = new GenericVariable("book", "/bookstore/book[1]/title"); - genericVariable.setExpressionType(XPath); - final List genericVariables = - newArrayList( // - genericVariable); - final Map parameterMap = new HashMap<>(); - final List genericRequestVariables = new ArrayList<>(); - final Map variables = - new VariablesResolver( - this.headers, - parameterMap, - postContent, - genericVariables, - genericRequestVariables, - this.genericHeaderVariables, - this.shouldNotFlatten) - .getVariables(); - - assertThat(variables) // - .containsEntry("book", "Harry Potter"); - } - - @Test - public void testXPathGetOneNode() throws Exception { - final String resourceName = "two-list-items.xml"; - final String postContent = this.getContent(resourceName); - - final GenericVariable genericVariable = new GenericVariable("book", "/bookstore/book[1]"); - genericVariable.setExpressionType(XPath); - final List genericVariables = - newArrayList( // - genericVariable); - final Map parameterMap = new HashMap<>(); - final List genericRequestVariables = new ArrayList<>(); - final Map variables = - new VariablesResolver( - this.headers, - parameterMap, - postContent, - genericVariables, - genericRequestVariables, - this.genericHeaderVariables, - this.shouldNotFlatten) - .getVariables(); - - assertThat(variables) // - .containsEntry("book_title", "Harry Potter"); - } - - @Test - public void testXPathGetNodes() throws Exception { - final String resourceName = "two-list-items.xml"; - final String postContent = this.getContent(resourceName); - - final GenericVariable genericVariable = new GenericVariable("book", "/bookstore/book[*]"); - genericVariable.setExpressionType(XPath); - final List genericVariables = - newArrayList( // - genericVariable); - final Map parameterMap = new HashMap<>(); - final List genericRequestVariables = new ArrayList<>(); - final Map variables = - new VariablesResolver( - this.headers, - parameterMap, - postContent, - genericVariables, - genericRequestVariables, - this.genericHeaderVariables, - this.shouldNotFlatten) - .getVariables(); - - assertThat(variables) // - .containsEntry("book_0_title", "Harry Potter") - .containsEntry("book_1_title", "Learning XML"); - } - - @Test - public void testXPathGetAttribute() throws Exception { - final String resourceName = "attribute.xml"; - final String postContent = this.getContent(resourceName); - - final GenericVariable genericVariable = - new GenericVariable("variablename", "/attribute[@name='thekey']/@value"); - genericVariable.setExpressionType(XPath); - final List genericVariables = - newArrayList( // - genericVariable); - final Map parameterMap = new HashMap<>(); - final List genericRequestVariables = new ArrayList<>(); - final Map variables = - new VariablesResolver( - this.headers, - parameterMap, - postContent, - genericVariables, - genericRequestVariables, - this.genericHeaderVariables, - this.shouldNotFlatten) - .getVariables(); - - assertThat(variables) // - .containsEntry("variablename", "thevalue"); - } - - @Test - public void testXPathGetAbsentAttribute() throws Exception { - final String resourceName = "attribute.xml"; - final String variableName = "variablename"; - final String xPath = "/attribute[@name='thekey']/@anothervalue"; - final GenericVariable genericVariable = new GenericVariable(variableName, xPath); - - final Map variables = this.getVariables(resourceName, genericVariable); - - assertThat(variables) // - .containsEntry(variableName, ""); - } - - @Test - public void testXPathGetAbsentAttributeDefault() throws Exception { - final String resourceName = "attribute.xml"; - final String variableName = "variablename"; - final String xPath = "/attribute[@name='thekey']/@anothervalue"; - final GenericVariable genericVariable = new GenericVariable(variableName, xPath); - genericVariable.setExpressionType(XPath); - genericVariable.setDefaultValue("the default"); - - final Map variables = this.getVariables(resourceName, genericVariable); - - assertThat(variables) // - .containsEntry(variableName, "the default"); - } - - private Map getVariables( - final String resourceName, final GenericVariable genericVariable) { - final String postContent = this.getContent(resourceName); - - genericVariable.setExpressionType(XPath); - final List genericVariables = - newArrayList( // - genericVariable); - final Map parameterMap = new HashMap<>(); - final List genericRequestVariables = new ArrayList<>(); - final Map variables = - new VariablesResolver( - this.headers, - parameterMap, - postContent, - genericVariables, - genericRequestVariables, - this.genericHeaderVariables, - this.shouldNotFlatten) - .getVariables(); - return variables; - } - - @Test - public void testXPathTwoListItems() throws Exception { - final String resourceName = "two-list-items.xml"; - final String postContent = this.getContent(resourceName); - - final GenericVariable genericVariable = new GenericVariable("payload", "/*"); - genericVariable.setExpressionType(XPath); - final List genericVariables = - newArrayList( // - genericVariable); - final Map parameterMap = new HashMap<>(); - final List genericRequestVariables = new ArrayList<>(); - final Map variables = - new VariablesResolver( - this.headers, - parameterMap, - postContent, - genericVariables, - genericRequestVariables, - this.genericHeaderVariables, - this.shouldNotFlatten) - .getVariables(); - - assertThat(variables) // - .containsEntry("payload_book_0_price", "29.99") - .containsEntry("payload_book_0_title", "Harry Potter") - .containsEntry("payload_book_1_price", "39.95") - .containsEntry("payload_book_1_title", "Learning XML") - .hasSize(5); - } - - @Test - public void testXPathOneListItem() throws Exception { - final String resourceName = "one-list-item.xml"; - final String postContent = this.getContent(resourceName); - - final GenericVariable genericVariable = new GenericVariable("payload", "/*"); - genericVariable.setExpressionType(XPath); - final List genericVariables = - newArrayList( // - genericVariable); - final Map parameterMap = new HashMap<>(); - final List genericRequestVariables = new ArrayList<>(); - final Map variables = - new VariablesResolver( - this.headers, - parameterMap, - postContent, - genericVariables, - genericRequestVariables, - this.genericHeaderVariables, - this.shouldNotFlatten) - .getVariables(); - - assertThat(variables) // - .containsEntry("payload_book_0_price", "29.99") - .containsEntry("payload_book_0_title", "Harry Potter") - .hasSize(3); - } - - @Test - public void testXPathTwoListListItems() throws Exception { - final String resourceName = "two-list-list-items.xml"; - final String postContent = this.getContent(resourceName); - - final GenericVariable genericVariable = new GenericVariable("book", "/bookstore"); - genericVariable.setExpressionType(XPath); - final List genericVariables = - newArrayList( // - genericVariable); - final Map parameterMap = new HashMap<>(); - final List genericRequestVariables = new ArrayList<>(); - final Map variables = - new VariablesResolver( - this.headers, - parameterMap, - postContent, - genericVariables, - genericRequestVariables, - this.genericHeaderVariables, - this.shouldNotFlatten) - .getVariables(); - - assertThat(variables) // - .containsEntry("book_book_0_page_0_content", "content 1") - .containsEntry("book_book_0_page_0_number", "1") - .containsEntry("book_book_0_page_1_content", "content 2") - .containsEntry("book_book_0_page_1_number", "2") - .containsEntry("book_book_1_page_0_content", "content 21") - .containsEntry("book_book_1_page_0_number", "21") - .hasSize(7); - - assertThat(variables.get("book").replaceAll("\\r|\\n|\\s", "")) // - .isEqualTo( - "1content12content221content21"); - } - - @Test - public void testXPathTwoListListItemsFirstBook() throws Exception { - final String resourceName = "two-list-list-items.xml"; - final String postContent = this.getContent(resourceName); - - final GenericVariable genericVariable = new GenericVariable("book", "/bookstore/book[1]"); - genericVariable.setExpressionType(XPath); - final List genericVariables = - newArrayList( // - genericVariable); - final Map parameterMap = new HashMap<>(); - final List genericRequestVariables = new ArrayList<>(); - final Map variables = - new VariablesResolver( - this.headers, - parameterMap, - postContent, - genericVariables, - genericRequestVariables, - this.genericHeaderVariables, - this.shouldNotFlatten) - .getVariables(); - - assertThat(variables) // - .containsEntry("book_page_0_content", "content 1") - .containsEntry("book_page_0_number", "1") - .containsEntry("book_page_1_content", "content 2") - .containsEntry("book_page_1_number", "2") - .hasSize(5); - - assertThat(variables.get("book").replaceAll("\\r|\\n|\\s", "")) // - .isEqualTo( - "1content12content2"); - } - - @Test - public void testXPathRootElement() throws Exception { - final String resourceName = "two-list-list-items.xml"; - final String postContent = this.getContent(resourceName); - - final GenericVariable genericVariable = new GenericVariable("book", "/"); - genericVariable.setExpressionType(XPath); - final List genericVariables = - newArrayList( // - genericVariable); - final Map parameterMap = new HashMap<>(); - final List genericRequestVariables = new ArrayList<>(); - final Map variables = - new VariablesResolver( - this.headers, - parameterMap, - postContent, - genericVariables, - genericRequestVariables, - this.genericHeaderVariables, - this.shouldNotFlatten) - .getVariables(); - - assertThat(variables) // - .hasSize(7); - - assertThat(variables.get("book").replaceAll("\\r|\\n|\\s", "")) // - .isEqualTo( - "1content12content221content21"); - } - - @Test - public void testXPathTwoListListItemsSecondBook() throws Exception { - final String resourceName = "two-list-list-items.xml"; - final String postContent = this.getContent(resourceName); - - final GenericVariable genericVariable = new GenericVariable("book", "/bookstore/book[2]"); - genericVariable.setExpressionType(XPath); - final List genericVariables = - newArrayList( // - genericVariable); - final Map parameterMap = new HashMap<>(); - final List genericRequestVariables = new ArrayList<>(); - final Map variables = - new VariablesResolver( - this.headers, - parameterMap, - postContent, - genericVariables, - genericRequestVariables, - this.genericHeaderVariables, - this.shouldNotFlatten) - .getVariables(); - - assertThat(variables) // - .containsEntry("book_page_0_content", "content 21") - .containsEntry("book_page_0_number", "21") - .hasSize(3); - } - - @Test - public void testXPathTwoListItemsFirstBook() throws Exception { - final String resourceName = "two-list-items.xml"; - final String postContent = this.getContent(resourceName); - - final GenericVariable genericVariable = new GenericVariable("book", "/bookstore/book[1]"); - genericVariable.setExpressionType(XPath); - final List genericVariables = - newArrayList( // - genericVariable); - final Map parameterMap = new HashMap<>(); - final List genericRequestVariables = new ArrayList<>(); - final Map variables = - new VariablesResolver( - this.headers, - parameterMap, - postContent, - genericVariables, - genericRequestVariables, - this.genericHeaderVariables, - this.shouldNotFlatten) - .getVariables(); - - assertThat(variables) // - .containsEntry("book_price", "29.99") - .containsEntry("book_title", "Harry Potter") - .hasSize(3); - } - - @Test - public void testXPathGetTwoVariable() throws Exception { - final String resourceName = "two-list-items.xml"; - final String postContent = this.getContent(resourceName); - - final GenericVariable genericVariable1 = - new GenericVariable("book1", "/bookstore/book[1]/title"); - genericVariable1.setRegexpFilter("\\s"); - genericVariable1.setExpressionType(XPath); - final GenericVariable genericVariable = - new GenericVariable("book2", "/bookstore/book[2]/title"); - genericVariable.setExpressionType(XPath); - final List genericVariables = - newArrayList( // - genericVariable1, // - genericVariable); - final Map parameterMap = new HashMap<>(); - final List genericRequestVariables = new ArrayList<>(); - final Map variables = - new VariablesResolver( - this.headers, - parameterMap, - postContent, - genericVariables, - genericRequestVariables, - this.genericHeaderVariables, - this.shouldNotFlatten) - .getVariables(); - - assertThat(variables) // - .containsEntry("book1", "HarryPotter") // - .containsEntry("book2", "Learning XML"); - } - - @Test - public void testXPathGetZeroMatchingVariables() throws Exception { - final String resourceName = "two-list-items.xml"; - final String postContent = this.getContent(resourceName); - - final GenericVariable genericVariable = - new GenericVariable("book1", "/bookstore/book[1]/title123"); - genericVariable.setExpressionType(XPath); - genericVariable.setRegexpFilter("[a-z]"); - final List genericVariables = - newArrayList( // - genericVariable); - final Map parameterMap = new HashMap<>(); - final List genericRequestVariables = new ArrayList<>(); - final Map variables = - new VariablesResolver( - this.headers, - parameterMap, - postContent, - genericVariables, - genericRequestVariables, - this.genericHeaderVariables, - this.shouldNotFlatten) - .getVariables(); - - assertThat(variables) // - .containsEntry("book1", ""); - } - - private String getContent(final String resourceName) { - try { - return Resources.toString( - Resources.getResource(resourceName).toURI().toURL(), Charsets.UTF_8); - } catch (final Exception e) { - throw new RuntimeException(e); + private final Map> headers = new HashMap<>(); + private final List genericHeaderVariables = new ArrayList<>(); + private final boolean shouldNotFlatten = false; + + @Test + public void testXPathGetOneVariable() throws Exception { + final String resourceName = "two-list-items.xml"; + final String postContent = this.getContent(resourceName); + + final GenericVariable genericVariable = new GenericVariable("book", "/bookstore/book[1]/title"); + genericVariable.setExpressionType(XPath); + final List genericVariables = newArrayList( // + genericVariable); + final Map parameterMap = new HashMap<>(); + final List genericRequestVariables = new ArrayList<>(); + final Map variables = new VariablesResolver( + this.headers, + parameterMap, + postContent, + genericVariables, + genericRequestVariables, + this.genericHeaderVariables, + this.shouldNotFlatten) + .getVariables(); + + assertThat(variables) // + .containsEntry("book", "Harry Potter"); + } + + @Test + public void testXPathGetOneNode() throws Exception { + final String resourceName = "two-list-items.xml"; + final String postContent = this.getContent(resourceName); + + final GenericVariable genericVariable = new GenericVariable("book", "/bookstore/book[1]"); + genericVariable.setExpressionType(XPath); + final List genericVariables = newArrayList( // + genericVariable); + final Map parameterMap = new HashMap<>(); + final List genericRequestVariables = new ArrayList<>(); + final Map variables = new VariablesResolver( + this.headers, + parameterMap, + postContent, + genericVariables, + genericRequestVariables, + this.genericHeaderVariables, + this.shouldNotFlatten) + .getVariables(); + + assertThat(variables) // + .containsEntry("book_title", "Harry Potter"); + } + + @Test + public void testXPathGetNodes() throws Exception { + final String resourceName = "two-list-items.xml"; + final String postContent = this.getContent(resourceName); + + final GenericVariable genericVariable = new GenericVariable("book", "/bookstore/book[*]"); + genericVariable.setExpressionType(XPath); + final List genericVariables = newArrayList( // + genericVariable); + final Map parameterMap = new HashMap<>(); + final List genericRequestVariables = new ArrayList<>(); + final Map variables = new VariablesResolver( + this.headers, + parameterMap, + postContent, + genericVariables, + genericRequestVariables, + this.genericHeaderVariables, + this.shouldNotFlatten) + .getVariables(); + + assertThat(variables) // + .containsEntry("book_0_title", "Harry Potter") + .containsEntry("book_1_title", "Learning XML"); + } + + @Test + public void testXPathGetAttribute() throws Exception { + final String resourceName = "attribute.xml"; + final String postContent = this.getContent(resourceName); + + final GenericVariable genericVariable = + new GenericVariable("variablename", "/attribute[@name='thekey']/@value"); + genericVariable.setExpressionType(XPath); + final List genericVariables = newArrayList( // + genericVariable); + final Map parameterMap = new HashMap<>(); + final List genericRequestVariables = new ArrayList<>(); + final Map variables = new VariablesResolver( + this.headers, + parameterMap, + postContent, + genericVariables, + genericRequestVariables, + this.genericHeaderVariables, + this.shouldNotFlatten) + .getVariables(); + + assertThat(variables) // + .containsEntry("variablename", "thevalue"); + } + + @Test + public void testXPathGetAbsentAttribute() throws Exception { + final String resourceName = "attribute.xml"; + final String variableName = "variablename"; + final String xPath = "/attribute[@name='thekey']/@anothervalue"; + final GenericVariable genericVariable = new GenericVariable(variableName, xPath); + + final Map variables = this.getVariables(resourceName, genericVariable); + + assertThat(variables) // + .containsEntry(variableName, ""); + } + + @Test + public void testXPathGetAbsentAttributeDefault() throws Exception { + final String resourceName = "attribute.xml"; + final String variableName = "variablename"; + final String xPath = "/attribute[@name='thekey']/@anothervalue"; + final GenericVariable genericVariable = new GenericVariable(variableName, xPath); + genericVariable.setExpressionType(XPath); + genericVariable.setDefaultValue("the default"); + + final Map variables = this.getVariables(resourceName, genericVariable); + + assertThat(variables) // + .containsEntry(variableName, "the default"); + } + + private Map getVariables(final String resourceName, final GenericVariable genericVariable) { + final String postContent = this.getContent(resourceName); + + genericVariable.setExpressionType(XPath); + final List genericVariables = newArrayList( // + genericVariable); + final Map parameterMap = new HashMap<>(); + final List genericRequestVariables = new ArrayList<>(); + final Map variables = new VariablesResolver( + this.headers, + parameterMap, + postContent, + genericVariables, + genericRequestVariables, + this.genericHeaderVariables, + this.shouldNotFlatten) + .getVariables(); + return variables; + } + + @Test + public void testXPathTwoListItems() throws Exception { + final String resourceName = "two-list-items.xml"; + final String postContent = this.getContent(resourceName); + + final GenericVariable genericVariable = new GenericVariable("payload", "/*"); + genericVariable.setExpressionType(XPath); + final List genericVariables = newArrayList( // + genericVariable); + final Map parameterMap = new HashMap<>(); + final List genericRequestVariables = new ArrayList<>(); + final Map variables = new VariablesResolver( + this.headers, + parameterMap, + postContent, + genericVariables, + genericRequestVariables, + this.genericHeaderVariables, + this.shouldNotFlatten) + .getVariables(); + + assertThat(variables) // + .containsEntry("payload_book_0_price", "29.99") + .containsEntry("payload_book_0_title", "Harry Potter") + .containsEntry("payload_book_1_price", "39.95") + .containsEntry("payload_book_1_title", "Learning XML") + .hasSize(5); + } + + @Test + public void testXPathOneListItem() throws Exception { + final String resourceName = "one-list-item.xml"; + final String postContent = this.getContent(resourceName); + + final GenericVariable genericVariable = new GenericVariable("payload", "/*"); + genericVariable.setExpressionType(XPath); + final List genericVariables = newArrayList( // + genericVariable); + final Map parameterMap = new HashMap<>(); + final List genericRequestVariables = new ArrayList<>(); + final Map variables = new VariablesResolver( + this.headers, + parameterMap, + postContent, + genericVariables, + genericRequestVariables, + this.genericHeaderVariables, + this.shouldNotFlatten) + .getVariables(); + + assertThat(variables) // + .containsEntry("payload_book_0_price", "29.99") + .containsEntry("payload_book_0_title", "Harry Potter") + .hasSize(3); + } + + @Test + public void testXPathTwoListListItems() throws Exception { + final String resourceName = "two-list-list-items.xml"; + final String postContent = this.getContent(resourceName); + + final GenericVariable genericVariable = new GenericVariable("book", "/bookstore"); + genericVariable.setExpressionType(XPath); + final List genericVariables = newArrayList( // + genericVariable); + final Map parameterMap = new HashMap<>(); + final List genericRequestVariables = new ArrayList<>(); + final Map variables = new VariablesResolver( + this.headers, + parameterMap, + postContent, + genericVariables, + genericRequestVariables, + this.genericHeaderVariables, + this.shouldNotFlatten) + .getVariables(); + + assertThat(variables) // + .containsEntry("book_book_0_page_0_content", "content 1") + .containsEntry("book_book_0_page_0_number", "1") + .containsEntry("book_book_0_page_1_content", "content 2") + .containsEntry("book_book_0_page_1_number", "2") + .containsEntry("book_book_1_page_0_content", "content 21") + .containsEntry("book_book_1_page_0_number", "21") + .hasSize(7); + + assertThat(variables.get("book").replaceAll("\\r|\\n|\\s", "")) // + .isEqualTo( + "1content12content221content21"); + } + + @Test + public void testXPathTwoListListItemsFirstBook() throws Exception { + final String resourceName = "two-list-list-items.xml"; + final String postContent = this.getContent(resourceName); + + final GenericVariable genericVariable = new GenericVariable("book", "/bookstore/book[1]"); + genericVariable.setExpressionType(XPath); + final List genericVariables = newArrayList( // + genericVariable); + final Map parameterMap = new HashMap<>(); + final List genericRequestVariables = new ArrayList<>(); + final Map variables = new VariablesResolver( + this.headers, + parameterMap, + postContent, + genericVariables, + genericRequestVariables, + this.genericHeaderVariables, + this.shouldNotFlatten) + .getVariables(); + + assertThat(variables) // + .containsEntry("book_page_0_content", "content 1") + .containsEntry("book_page_0_number", "1") + .containsEntry("book_page_1_content", "content 2") + .containsEntry("book_page_1_number", "2") + .hasSize(5); + + assertThat(variables.get("book").replaceAll("\\r|\\n|\\s", "")) // + .isEqualTo( + "1content12content2"); + } + + @Test + public void testXPathRootElement() throws Exception { + final String resourceName = "two-list-list-items.xml"; + final String postContent = this.getContent(resourceName); + + final GenericVariable genericVariable = new GenericVariable("book", "/"); + genericVariable.setExpressionType(XPath); + final List genericVariables = newArrayList( // + genericVariable); + final Map parameterMap = new HashMap<>(); + final List genericRequestVariables = new ArrayList<>(); + final Map variables = new VariablesResolver( + this.headers, + parameterMap, + postContent, + genericVariables, + genericRequestVariables, + this.genericHeaderVariables, + this.shouldNotFlatten) + .getVariables(); + + assertThat(variables) // + .hasSize(7); + + assertThat(variables.get("book").replaceAll("\\r|\\n|\\s", "")) // + .isEqualTo( + "1content12content221content21"); + } + + @Test + public void testXPathTwoListListItemsSecondBook() throws Exception { + final String resourceName = "two-list-list-items.xml"; + final String postContent = this.getContent(resourceName); + + final GenericVariable genericVariable = new GenericVariable("book", "/bookstore/book[2]"); + genericVariable.setExpressionType(XPath); + final List genericVariables = newArrayList( // + genericVariable); + final Map parameterMap = new HashMap<>(); + final List genericRequestVariables = new ArrayList<>(); + final Map variables = new VariablesResolver( + this.headers, + parameterMap, + postContent, + genericVariables, + genericRequestVariables, + this.genericHeaderVariables, + this.shouldNotFlatten) + .getVariables(); + + assertThat(variables) // + .containsEntry("book_page_0_content", "content 21") + .containsEntry("book_page_0_number", "21") + .hasSize(3); + } + + @Test + public void testXPathTwoListItemsFirstBook() throws Exception { + final String resourceName = "two-list-items.xml"; + final String postContent = this.getContent(resourceName); + + final GenericVariable genericVariable = new GenericVariable("book", "/bookstore/book[1]"); + genericVariable.setExpressionType(XPath); + final List genericVariables = newArrayList( // + genericVariable); + final Map parameterMap = new HashMap<>(); + final List genericRequestVariables = new ArrayList<>(); + final Map variables = new VariablesResolver( + this.headers, + parameterMap, + postContent, + genericVariables, + genericRequestVariables, + this.genericHeaderVariables, + this.shouldNotFlatten) + .getVariables(); + + assertThat(variables) // + .containsEntry("book_price", "29.99") + .containsEntry("book_title", "Harry Potter") + .hasSize(3); + } + + @Test + public void testXPathGetTwoVariable() throws Exception { + final String resourceName = "two-list-items.xml"; + final String postContent = this.getContent(resourceName); + + final GenericVariable genericVariable1 = new GenericVariable("book1", "/bookstore/book[1]/title"); + genericVariable1.setRegexpFilter("\\s"); + genericVariable1.setExpressionType(XPath); + final GenericVariable genericVariable = new GenericVariable("book2", "/bookstore/book[2]/title"); + genericVariable.setExpressionType(XPath); + final List genericVariables = newArrayList( // + genericVariable1, // + genericVariable); + final Map parameterMap = new HashMap<>(); + final List genericRequestVariables = new ArrayList<>(); + final Map variables = new VariablesResolver( + this.headers, + parameterMap, + postContent, + genericVariables, + genericRequestVariables, + this.genericHeaderVariables, + this.shouldNotFlatten) + .getVariables(); + + assertThat(variables) // + .containsEntry("book1", "HarryPotter") // + .containsEntry("book2", "Learning XML"); + } + + @Test + public void testXPathGetZeroMatchingVariables() throws Exception { + final String resourceName = "two-list-items.xml"; + final String postContent = this.getContent(resourceName); + + final GenericVariable genericVariable = new GenericVariable("book1", "/bookstore/book[1]/title123"); + genericVariable.setExpressionType(XPath); + genericVariable.setRegexpFilter("[a-z]"); + final List genericVariables = newArrayList( // + genericVariable); + final Map parameterMap = new HashMap<>(); + final List genericRequestVariables = new ArrayList<>(); + final Map variables = new VariablesResolver( + this.headers, + parameterMap, + postContent, + genericVariables, + genericRequestVariables, + this.genericHeaderVariables, + this.shouldNotFlatten) + .getVariables(); + + assertThat(variables) // + .containsEntry("book1", ""); + } + + private String getContent(final String resourceName) { + try { + return Resources.toString( + Resources.getResource(resourceName).toURI().toURL(), Charsets.UTF_8); + } catch (final Exception e) { + throw new RuntimeException(e); + } } - } } diff --git a/src/test/java/org/jenkinsci/plugins/gwt/bdd/FeatureState.java b/src/test/java/org/jenkinsci/plugins/gwt/bdd/FeatureState.java index de0a1dfb..0fa6f8db 100644 --- a/src/test/java/org/jenkinsci/plugins/gwt/bdd/FeatureState.java +++ b/src/test/java/org/jenkinsci/plugins/gwt/bdd/FeatureState.java @@ -9,109 +9,108 @@ import org.jenkinsci.plugins.gwt.GenericVariable; public class FeatureState { - private Map> headers = new HashMap<>(); - private Map parameterMap = new HashMap<>(); - private String postContent; - private List genericVariables = new ArrayList<>(); - private List genericRequestVariables = new ArrayList<>(); - private List genericHeaderVariables = new ArrayList<>(); - private String regexpFilterText; - private String regexpFilterExpression; - private boolean shouldNotFlatten; - - public Map> getHeaders() { - return this.headers; - } - - public void setHeaders(final Map> headers) { - this.headers = headers; - } - - public Map getParameterMap() { - return this.parameterMap; - } - - public void setParameterMap(final Map parameterMap) { - this.parameterMap = parameterMap; - } - - public String getPostContent() { - return this.postContent; - } - - public void setPostContent(final String postContent) { - this.postContent = postContent; - } - - public List getGenericVariables() { - return this.genericVariables; - } - - public void setGenericVariables(final List genericVariables) { - this.genericVariables = genericVariables; - } - - public List getGenericRequestVariables() { - return this.genericRequestVariables; - } - - public void setGenericRequestVariables( - final List genericRequestVariables) { - this.genericRequestVariables = genericRequestVariables; - } - - public List getGenericHeaderVariables() { - return this.genericHeaderVariables; - } - - public void setGenericHeaderVariables(final List genericHeaderVariables) { - this.genericHeaderVariables = genericHeaderVariables; - } - - public String getRegexpFilterText() { - return this.regexpFilterText; - } - - public void setRegexpFilterText(final String regexpFilterText) { - this.regexpFilterText = regexpFilterText; - } - - public String getRegexpFilterExpression() { - return this.regexpFilterExpression; - } - - public void setRegexpFilterExpression(final String regexpFilterExpression) { - this.regexpFilterExpression = regexpFilterExpression; - } - - public boolean getShouldNotFlatten() { - return this.shouldNotFlatten; - } - - public void setShouldNotFlatten(final boolean shouldNotFlatten) { - this.shouldNotFlatten = shouldNotFlatten; - } - - @Override - public String toString() { - return "FeatureState [headers=" - + this.headers - + ", parameterMap=" - + this.parameterMap - + ", postContent=" - + this.postContent - + ", genericVariables=" - + this.genericVariables - + ", genericRequestVariables=" - + this.genericRequestVariables - + ", genericHeaderVariables=" - + this.genericHeaderVariables - + ", regexpFilterText=" - + this.regexpFilterText - + ", regexpFilterExpression=" - + this.regexpFilterExpression - + ", shouldNotFlatten=" - + this.shouldNotFlatten - + "]"; - } + private Map> headers = new HashMap<>(); + private Map parameterMap = new HashMap<>(); + private String postContent; + private List genericVariables = new ArrayList<>(); + private List genericRequestVariables = new ArrayList<>(); + private List genericHeaderVariables = new ArrayList<>(); + private String regexpFilterText; + private String regexpFilterExpression; + private boolean shouldNotFlatten; + + public Map> getHeaders() { + return this.headers; + } + + public void setHeaders(final Map> headers) { + this.headers = headers; + } + + public Map getParameterMap() { + return this.parameterMap; + } + + public void setParameterMap(final Map parameterMap) { + this.parameterMap = parameterMap; + } + + public String getPostContent() { + return this.postContent; + } + + public void setPostContent(final String postContent) { + this.postContent = postContent; + } + + public List getGenericVariables() { + return this.genericVariables; + } + + public void setGenericVariables(final List genericVariables) { + this.genericVariables = genericVariables; + } + + public List getGenericRequestVariables() { + return this.genericRequestVariables; + } + + public void setGenericRequestVariables(final List genericRequestVariables) { + this.genericRequestVariables = genericRequestVariables; + } + + public List getGenericHeaderVariables() { + return this.genericHeaderVariables; + } + + public void setGenericHeaderVariables(final List genericHeaderVariables) { + this.genericHeaderVariables = genericHeaderVariables; + } + + public String getRegexpFilterText() { + return this.regexpFilterText; + } + + public void setRegexpFilterText(final String regexpFilterText) { + this.regexpFilterText = regexpFilterText; + } + + public String getRegexpFilterExpression() { + return this.regexpFilterExpression; + } + + public void setRegexpFilterExpression(final String regexpFilterExpression) { + this.regexpFilterExpression = regexpFilterExpression; + } + + public boolean getShouldNotFlatten() { + return this.shouldNotFlatten; + } + + public void setShouldNotFlatten(final boolean shouldNotFlatten) { + this.shouldNotFlatten = shouldNotFlatten; + } + + @Override + public String toString() { + return "FeatureState [headers=" + + this.headers + + ", parameterMap=" + + this.parameterMap + + ", postContent=" + + this.postContent + + ", genericVariables=" + + this.genericVariables + + ", genericRequestVariables=" + + this.genericRequestVariables + + ", genericHeaderVariables=" + + this.genericHeaderVariables + + ", regexpFilterText=" + + this.regexpFilterText + + ", regexpFilterExpression=" + + this.regexpFilterExpression + + ", shouldNotFlatten=" + + this.shouldNotFlatten + + "]"; + } } diff --git a/src/test/java/org/jenkinsci/plugins/gwt/bdd/GenericFilterPojo.java b/src/test/java/org/jenkinsci/plugins/gwt/bdd/GenericFilterPojo.java index 61cd0b56..2bf11229 100644 --- a/src/test/java/org/jenkinsci/plugins/gwt/bdd/GenericFilterPojo.java +++ b/src/test/java/org/jenkinsci/plugins/gwt/bdd/GenericFilterPojo.java @@ -1,22 +1,22 @@ package org.jenkinsci.plugins.gwt.bdd; public class GenericFilterPojo { - private String expression; - private String text; + private String expression; + private String text; - public String getExpression() { - return expression; - } + public String getExpression() { + return expression; + } - public void setExpression(final String expression) { - this.expression = expression; - } + public void setExpression(final String expression) { + this.expression = expression; + } - public String getText() { - return text; - } + public String getText() { + return text; + } - public void setText(final String text) { - this.text = text; - } + public void setText(final String text) { + this.text = text; + } } diff --git a/src/test/java/org/jenkinsci/plugins/gwt/bdd/GenericVariablePojo.java b/src/test/java/org/jenkinsci/plugins/gwt/bdd/GenericVariablePojo.java index bde8b08d..6953c4f6 100644 --- a/src/test/java/org/jenkinsci/plugins/gwt/bdd/GenericVariablePojo.java +++ b/src/test/java/org/jenkinsci/plugins/gwt/bdd/GenericVariablePojo.java @@ -1,57 +1,57 @@ package org.jenkinsci.plugins.gwt.bdd; public class GenericVariablePojo { - private final String variable; - private final String expression; - private final String expressionType; - private final String defaultValue; - private final String regexpFilter; - - public GenericVariablePojo( - final String variable, - final String expression, - final String expressionType, - final String defaultValue, - final String regexpFilter) { - this.variable = variable; - this.expression = expression; - this.expressionType = expressionType; - this.defaultValue = defaultValue; - this.regexpFilter = regexpFilter; - } - - public String getDefaultValue() { - return defaultValue; - } - - public String getExpression() { - return expression; - } - - public String getExpressionType() { - return expressionType; - } - - public String getRegexpFilter() { - return regexpFilter; - } - - public String getVariable() { - return variable; - } - - @Override - public String toString() { - return "GenericVariablePojo [variable=" - + variable - + ", expression=" - + expression - + ", expressionType=" - + expressionType - + ", defaultValue=" - + defaultValue - + ", regexpFilter=" - + regexpFilter - + "]"; - } + private final String variable; + private final String expression; + private final String expressionType; + private final String defaultValue; + private final String regexpFilter; + + public GenericVariablePojo( + final String variable, + final String expression, + final String expressionType, + final String defaultValue, + final String regexpFilter) { + this.variable = variable; + this.expression = expression; + this.expressionType = expressionType; + this.defaultValue = defaultValue; + this.regexpFilter = regexpFilter; + } + + public String getDefaultValue() { + return defaultValue; + } + + public String getExpression() { + return expression; + } + + public String getExpressionType() { + return expressionType; + } + + public String getRegexpFilter() { + return regexpFilter; + } + + public String getVariable() { + return variable; + } + + @Override + public String toString() { + return "GenericVariablePojo [variable=" + + variable + + ", expression=" + + expression + + ", expressionType=" + + expressionType + + ", defaultValue=" + + defaultValue + + ", regexpFilter=" + + regexpFilter + + "]"; + } } diff --git a/src/test/java/org/jenkinsci/plugins/gwt/bdd/GenericVariablesResolvedPojo.java b/src/test/java/org/jenkinsci/plugins/gwt/bdd/GenericVariablesResolvedPojo.java index 21946650..6035a4d5 100644 --- a/src/test/java/org/jenkinsci/plugins/gwt/bdd/GenericVariablesResolvedPojo.java +++ b/src/test/java/org/jenkinsci/plugins/gwt/bdd/GenericVariablesResolvedPojo.java @@ -1,22 +1,22 @@ package org.jenkinsci.plugins.gwt.bdd; public class GenericVariablesResolvedPojo { - private String variable; - private String value; + private String variable; + private String value; - public String getVariable() { - return variable; - } + public String getVariable() { + return variable; + } - public void setVariable(final String variable) { - this.variable = variable; - } + public void setVariable(final String variable) { + this.variable = variable; + } - public String getValue() { - return value; - } + public String getValue() { + return value; + } - public void setValue(final String value) { - this.value = value; - } + public void setValue(final String value) { + this.value = value; + } } diff --git a/src/test/java/org/jenkinsci/plugins/gwt/bdd/Stepdefs.java b/src/test/java/org/jenkinsci/plugins/gwt/bdd/Stepdefs.java index a46b107e..8a2a2872 100644 --- a/src/test/java/org/jenkinsci/plugins/gwt/bdd/Stepdefs.java +++ b/src/test/java/org/jenkinsci/plugins/gwt/bdd/Stepdefs.java @@ -22,169 +22,165 @@ public class Stepdefs { - private static Logger LOG = Logger.getLogger(Stepdefs.class.getSimpleName()); - private static FeatureState featureState; - - @Before - public void before() { - featureState = new FeatureState(); - } - - @When("^received post content is:$") - public void postContentReceived(final String postContent) { - featureState.setPostContent(postContent); - } - - @DataTableType - public GenericVariablePojo genericVariablePojo(final Map entry) { - return new GenericVariablePojo( - Strings.nullToEmpty(entry.get("variable")), - Strings.nullToEmpty(entry.get("expression")), - Strings.nullToEmpty(entry.get("expressionType")), - Strings.nullToEmpty(entry.get("defaultValue")), - Strings.nullToEmpty(entry.get("regexpFilter"))); - } - - @Given("^the following generic variables are configured:$") - public void givenGenericVariables(final List given) { - for (final GenericVariablePojo from : given) { - final GenericVariable to = new GenericVariable(from.getVariable(), from.getExpression()); - to.setDefaultValue(from.getDefaultValue()); - to.setRegexpFilter(from.getRegexpFilter()); - if (!isNullOrEmpty(from.getExpressionType())) { - to.setExpressionType(ExpressionType.valueOf(from.getExpressionType())); - } - featureState // - .getGenericVariables() // - .add(to); - } - } - - @Given("^variable ([a-z]+?) has regexpFilter: (.*)$") - public void givenGenericVariables(final String variable, final String regexpFilter) { - for (final GenericVariable gv : featureState.getGenericVariables()) { - if (gv.getVariableName().equals(variable)) { - gv.setRegexpFilter(regexpFilter); - } - } - } - - @DataTableType - public GenericFilterPojo genericFilterPojo(final Map entry) { - final GenericFilterPojo it = new GenericFilterPojo(); - it.setExpression(Strings.nullToEmpty(entry.get("expression"))); - it.setText(Strings.nullToEmpty(entry.get("text"))); - return it; - } - - @Given("^filter is configured with:$") - public void givenFilter(final List given) { - featureState.setRegexpFilterText(given.get(0).getText()); - featureState.setRegexpFilterExpression(given.get(0).getExpression()); - } - - @Given("^filter is configured with text: (.*)$") - public void givenFilterFluentText(final String given) { - featureState.setRegexpFilterText(given.trim()); - } - - @Given("^filter is configured with expression: (.*)$") - public void givenFilterFluentExpression(final String given) { - featureState.setRegexpFilterExpression(given.trim()); - } - - @Given("^should not flatten is checked$") - public void givenShouldNotFlatten() { - featureState.setShouldNotFlatten(true); - } - - @DataTableType - public GenericVariablesResolvedPojo gnericVariablesResolvedPojo(final Map entry) { - final GenericVariablesResolvedPojo it = new GenericVariablesResolvedPojo(); - it.setVariable(Strings.nullToEmpty(entry.get("variable"))); - it.setValue(Strings.nullToEmpty(entry.get("value"))); - return it; - } - - @Then("^variables are resolved to:$") - public void variablesAreResolved(final List given) { - final Map resolvedVariables = this.getResolvedVariables(); - for (final GenericVariablesResolvedPojo expected : given) { - String actual = ""; - if (resolvedVariables.containsKey(expected.getVariable())) { - actual = resolvedVariables.get(expected.getVariable()); - } - assertThat(actual) // - .as(expected.getVariable()) // - .isEqualTo(expected.getValue()); - } - } - - @Then("^variable ([a-z]+?) is resolved to:$") - public void variableIsResolvedTo(final String variable, final String expected) { - assertThat(this.getResolvedVariables().get(variable)) // - .as(variable) // - .isEqualTo(expected); - } - - @Then("^the job is triggered$") - public void jobShouldBeTriggered() { - this.isMatching(true); - } - - @Then("^the job is not triggered$") - public void jobShouldNotBeTriggered() { - this.isMatching(false); - } - - @Then("^filter text is rendered to: (.*)$") - public void filterTextIsRenderedTo(final String given) { - assertThat(this.renderedText(this.getResolvedVariables())).isEqualTo(given); - } - - private boolean isMatching(final boolean expected) { - final Map resolvedVariables = this.getResolvedVariables(); - - final String renderedRegexpFilterText = this.renderedText(resolvedVariables); - final boolean isMatching = - Renderer.isMatching(renderedRegexpFilterText, featureState.getRegexpFilterExpression()); - if (!isMatching && expected) { - fail( - "Text: \"" - + renderedRegexpFilterText - + "\" does not match \"" - + featureState.getRegexpFilterExpression() - + "\""); - } - if (isMatching && !expected) { - fail( - "Text: \"" - + renderedRegexpFilterText - + "\" does match \"" - + featureState.getRegexpFilterExpression() - + "\""); - } - return isMatching; - } - - private String renderedText(final Map resolvedVariables) { - return renderText(featureState.getRegexpFilterText(), resolvedVariables); - } - - private Map getResolvedVariables() { - final Map resolvedVariables = - new VariablesResolver( - featureState.getHeaders(), - featureState.getParameterMap(), - featureState.getPostContent(), - featureState.getGenericVariables(), - featureState.getGenericRequestVariables(), - featureState.getGenericHeaderVariables(), - featureState.getShouldNotFlatten()) // - .getVariables(); - LOG.info( - "Resolved variables:\n " - + new GsonBuilder().setPrettyPrinting().create().toJson(resolvedVariables)); - return resolvedVariables; - } + private static Logger LOG = Logger.getLogger(Stepdefs.class.getSimpleName()); + private static FeatureState featureState; + + @Before + public void before() { + featureState = new FeatureState(); + } + + @When("^received post content is:$") + public void postContentReceived(final String postContent) { + featureState.setPostContent(postContent); + } + + @DataTableType + public GenericVariablePojo genericVariablePojo(final Map entry) { + return new GenericVariablePojo( + Strings.nullToEmpty(entry.get("variable")), + Strings.nullToEmpty(entry.get("expression")), + Strings.nullToEmpty(entry.get("expressionType")), + Strings.nullToEmpty(entry.get("defaultValue")), + Strings.nullToEmpty(entry.get("regexpFilter"))); + } + + @Given("^the following generic variables are configured:$") + public void givenGenericVariables(final List given) { + for (final GenericVariablePojo from : given) { + final GenericVariable to = new GenericVariable(from.getVariable(), from.getExpression()); + to.setDefaultValue(from.getDefaultValue()); + to.setRegexpFilter(from.getRegexpFilter()); + if (!isNullOrEmpty(from.getExpressionType())) { + to.setExpressionType(ExpressionType.valueOf(from.getExpressionType())); + } + featureState // + .getGenericVariables() // + .add(to); + } + } + + @Given("^variable ([a-z]+?) has regexpFilter: (.*)$") + public void givenGenericVariables(final String variable, final String regexpFilter) { + for (final GenericVariable gv : featureState.getGenericVariables()) { + if (gv.getVariableName().equals(variable)) { + gv.setRegexpFilter(regexpFilter); + } + } + } + + @DataTableType + public GenericFilterPojo genericFilterPojo(final Map entry) { + final GenericFilterPojo it = new GenericFilterPojo(); + it.setExpression(Strings.nullToEmpty(entry.get("expression"))); + it.setText(Strings.nullToEmpty(entry.get("text"))); + return it; + } + + @Given("^filter is configured with:$") + public void givenFilter(final List given) { + featureState.setRegexpFilterText(given.get(0).getText()); + featureState.setRegexpFilterExpression(given.get(0).getExpression()); + } + + @Given("^filter is configured with text: (.*)$") + public void givenFilterFluentText(final String given) { + featureState.setRegexpFilterText(given.trim()); + } + + @Given("^filter is configured with expression: (.*)$") + public void givenFilterFluentExpression(final String given) { + featureState.setRegexpFilterExpression(given.trim()); + } + + @Given("^should not flatten is checked$") + public void givenShouldNotFlatten() { + featureState.setShouldNotFlatten(true); + } + + @DataTableType + public GenericVariablesResolvedPojo gnericVariablesResolvedPojo(final Map entry) { + final GenericVariablesResolvedPojo it = new GenericVariablesResolvedPojo(); + it.setVariable(Strings.nullToEmpty(entry.get("variable"))); + it.setValue(Strings.nullToEmpty(entry.get("value"))); + return it; + } + + @Then("^variables are resolved to:$") + public void variablesAreResolved(final List given) { + final Map resolvedVariables = this.getResolvedVariables(); + for (final GenericVariablesResolvedPojo expected : given) { + String actual = ""; + if (resolvedVariables.containsKey(expected.getVariable())) { + actual = resolvedVariables.get(expected.getVariable()); + } + assertThat(actual) // + .as(expected.getVariable()) // + .isEqualTo(expected.getValue()); + } + } + + @Then("^variable ([a-z]+?) is resolved to:$") + public void variableIsResolvedTo(final String variable, final String expected) { + assertThat(this.getResolvedVariables().get(variable)) // + .as(variable) // + .isEqualTo(expected); + } + + @Then("^the job is triggered$") + public void jobShouldBeTriggered() { + this.isMatching(true); + } + + @Then("^the job is not triggered$") + public void jobShouldNotBeTriggered() { + this.isMatching(false); + } + + @Then("^filter text is rendered to: (.*)$") + public void filterTextIsRenderedTo(final String given) { + assertThat(this.renderedText(this.getResolvedVariables())).isEqualTo(given); + } + + private boolean isMatching(final boolean expected) { + final Map resolvedVariables = this.getResolvedVariables(); + + final String renderedRegexpFilterText = this.renderedText(resolvedVariables); + final boolean isMatching = + Renderer.isMatching(renderedRegexpFilterText, featureState.getRegexpFilterExpression()); + if (!isMatching && expected) { + fail("Text: \"" + + renderedRegexpFilterText + + "\" does not match \"" + + featureState.getRegexpFilterExpression() + + "\""); + } + if (isMatching && !expected) { + fail("Text: \"" + + renderedRegexpFilterText + + "\" does match \"" + + featureState.getRegexpFilterExpression() + + "\""); + } + return isMatching; + } + + private String renderedText(final Map resolvedVariables) { + return renderText(featureState.getRegexpFilterText(), resolvedVariables); + } + + private Map getResolvedVariables() { + final Map resolvedVariables = new VariablesResolver( + featureState.getHeaders(), + featureState.getParameterMap(), + featureState.getPostContent(), + featureState.getGenericVariables(), + featureState.getGenericRequestVariables(), + featureState.getGenericHeaderVariables(), + featureState.getShouldNotFlatten()) // + .getVariables(); + LOG.info("Resolved variables:\n " + + new GsonBuilder().setPrettyPrinting().create().toJson(resolvedVariables)); + return resolvedVariables; + } } diff --git a/src/test/java/org/jenkinsci/plugins/gwt/jobfinder/JobFinderTest.java b/src/test/java/org/jenkinsci/plugins/gwt/jobfinder/JobFinderTest.java index 30e32fed..f2b42f97 100644 --- a/src/test/java/org/jenkinsci/plugins/gwt/jobfinder/JobFinderTest.java +++ b/src/test/java/org/jenkinsci/plugins/gwt/jobfinder/JobFinderTest.java @@ -20,127 +20,126 @@ import org.junit.Test; public class JobFinderTest { - private final AtomicInteger atomicInteger = new AtomicInteger(0); - private List allParameterizedJobsByImpersonation; - private final ParameterizedJob job1WithNoToken = this.createJob("", ""); - private final ParameterizedJob job2WithNoToken = this.createJob("", ""); - private final ParameterizedJob job3WithAuthTokenAbc = this.createJob("ABC", ""); - private final ParameterizedJob job4WithAuthTokenDef = this.createJob("DEF", ""); - private final ParameterizedJob job5WithGenericTokenAbc = this.createJob("", "ABC"); - private final ParameterizedJob job6WithGenericTokenDef = this.createJob("", "DEF"); - private Boolean didImpersonate; - - @Before - public void before() { - this.didImpersonate = null; - this.allParameterizedJobsByImpersonation = new ArrayList<>(); - final JobFinderImpersonater jobFinderImpersonater = - new JobFinderImpersonater() { - @Override - public List getAllParameterizedJobs(final boolean impersonate) { - JobFinderTest.this.didImpersonate = impersonate; - return JobFinderTest.this.allParameterizedJobsByImpersonation; - } + private final AtomicInteger atomicInteger = new AtomicInteger(0); + private List allParameterizedJobsByImpersonation; + private final ParameterizedJob job1WithNoToken = this.createJob("", ""); + private final ParameterizedJob job2WithNoToken = this.createJob("", ""); + private final ParameterizedJob job3WithAuthTokenAbc = this.createJob("ABC", ""); + private final ParameterizedJob job4WithAuthTokenDef = this.createJob("DEF", ""); + private final ParameterizedJob job5WithGenericTokenAbc = this.createJob("", "ABC"); + private final ParameterizedJob job6WithGenericTokenDef = this.createJob("", "DEF"); + private Boolean didImpersonate; + + @Before + public void before() { + this.didImpersonate = null; + this.allParameterizedJobsByImpersonation = new ArrayList<>(); + final JobFinderImpersonater jobFinderImpersonater = new JobFinderImpersonater() { + @Override + public List getAllParameterizedJobs(final boolean impersonate) { + JobFinderTest.this.didImpersonate = impersonate; + return JobFinderTest.this.allParameterizedJobsByImpersonation; + } }; - this.allParameterizedJobsByImpersonation.add(this.job1WithNoToken); - this.allParameterizedJobsByImpersonation.add(this.job2WithNoToken); - this.allParameterizedJobsByImpersonation.add(this.job3WithAuthTokenAbc); - this.allParameterizedJobsByImpersonation.add(this.job4WithAuthTokenDef); - this.allParameterizedJobsByImpersonation.add(this.job5WithGenericTokenAbc); - this.allParameterizedJobsByImpersonation.add(this.job6WithGenericTokenDef); - - JobFinder.setJobFinderImpersonater(jobFinderImpersonater); - } - - @SuppressWarnings("deprecation") - private ParameterizedJob createJob(final String authToken, final String genericToken) { - final ParameterizedJob mock = mock(ParameterizedJob.class); - when(mock.getAuthToken()) // - .thenReturn(new BuildAuthorizationToken(authToken)); - when(mock.getFullName()) // - .thenReturn("name-" + this.atomicInteger.incrementAndGet()); - final Map> triggers = new HashMap<>(); - final TriggerDescriptor typeDescr = mock(TriggerDescriptor.class); - final GenericTrigger genericTrigger = new GenericTrigger(null, null, null); - genericTrigger.setToken(genericToken); - triggers.put(typeDescr, genericTrigger); - when(mock.getTriggers()) // - .thenReturn(triggers); - - return mock; - } - - private List findAllJobs(final String givenToken) { - final List foundJobs = JobFinder.findAllJobsWithTrigger(givenToken); - final List names = new ArrayList<>(); - for (final FoundJob found : foundJobs) { - names.add(found.getFullName()); + this.allParameterizedJobsByImpersonation.add(this.job1WithNoToken); + this.allParameterizedJobsByImpersonation.add(this.job2WithNoToken); + this.allParameterizedJobsByImpersonation.add(this.job3WithAuthTokenAbc); + this.allParameterizedJobsByImpersonation.add(this.job4WithAuthTokenDef); + this.allParameterizedJobsByImpersonation.add(this.job5WithGenericTokenAbc); + this.allParameterizedJobsByImpersonation.add(this.job6WithGenericTokenDef); + + JobFinder.setJobFinderImpersonater(jobFinderImpersonater); + } + + @SuppressWarnings("deprecation") + private ParameterizedJob createJob(final String authToken, final String genericToken) { + final ParameterizedJob mock = mock(ParameterizedJob.class); + when(mock.getAuthToken()) // + .thenReturn(new BuildAuthorizationToken(authToken)); + when(mock.getFullName()) // + .thenReturn("name-" + this.atomicInteger.incrementAndGet()); + final Map> triggers = new HashMap<>(); + final TriggerDescriptor typeDescr = mock(TriggerDescriptor.class); + final GenericTrigger genericTrigger = new GenericTrigger(null, null, null); + genericTrigger.setToken(genericToken); + triggers.put(typeDescr, genericTrigger); + when(mock.getTriggers()) // + .thenReturn(triggers); + + return mock; + } + + private List findAllJobs(final String givenToken) { + final List foundJobs = JobFinder.findAllJobsWithTrigger(givenToken); + final List names = new ArrayList<>(); + for (final FoundJob found : foundJobs) { + names.add(found.getFullName()); + } + Collections.sort(names); + return names; + } + + @Test + public void testThatJobsWithoutTokenIsNotFoundWhenTokenSupplied() { + final String givenToken = "some-token"; + + final List actual = this.findAllJobs(givenToken); + + assertThat(actual) // + .isEmpty(); + assertThat(this.didImpersonate) // + .isTrue(); + } + + @Test + public void testThatJobsWithTokenIsFoundWhenTokenSuppliedAndMatchesABC() { + final String givenToken = "ABC"; + + final List actual = this.findAllJobs(givenToken); + + assertThat(actual) // + .containsExactly(this.job5WithGenericTokenAbc.getFullName()); + assertThat(this.didImpersonate) // + .isTrue(); + } + + @Test + public void testThatJobsWithTokenIsFoundWhenTokenSuppliedAndMatchesDEF() { + final String givenToken = "DEF"; + + final List actual = this.findAllJobs(givenToken); + + assertThat(actual) // + .containsExactly(this.job6WithGenericTokenDef.getFullName()); + assertThat(this.didImpersonate) // + .isTrue(); + } + + @Test + public void testThatJobsWithoutTokenIsFoundWhenTokenNotSupplied() { + final String givenToken = ""; + + final List actual = this.findAllJobs(givenToken); + + assertThat(actual) // + .containsExactly( + this.job1WithNoToken.getFullName(), + this.job2WithNoToken.getFullName(), + this.job3WithAuthTokenAbc.getFullName(), + this.job4WithAuthTokenDef.getFullName()); + assertThat(this.didImpersonate) // + .isFalse(); + } + + @Test + public void testThatNoJobsAreFoundWhenTokenSuppliedButDoesNotMatch() { + final String givenToken = "QWE"; + + final List actual = this.findAllJobs(givenToken); + + assertThat(actual) // + .isEmpty(); + assertThat(this.didImpersonate) // + .isTrue(); } - Collections.sort(names); - return names; - } - - @Test - public void testThatJobsWithoutTokenIsNotFoundWhenTokenSupplied() { - final String givenToken = "some-token"; - - final List actual = this.findAllJobs(givenToken); - - assertThat(actual) // - .isEmpty(); - assertThat(this.didImpersonate) // - .isTrue(); - } - - @Test - public void testThatJobsWithTokenIsFoundWhenTokenSuppliedAndMatchesABC() { - final String givenToken = "ABC"; - - final List actual = this.findAllJobs(givenToken); - - assertThat(actual) // - .containsExactly(this.job5WithGenericTokenAbc.getFullName()); - assertThat(this.didImpersonate) // - .isTrue(); - } - - @Test - public void testThatJobsWithTokenIsFoundWhenTokenSuppliedAndMatchesDEF() { - final String givenToken = "DEF"; - - final List actual = this.findAllJobs(givenToken); - - assertThat(actual) // - .containsExactly(this.job6WithGenericTokenDef.getFullName()); - assertThat(this.didImpersonate) // - .isTrue(); - } - - @Test - public void testThatJobsWithoutTokenIsFoundWhenTokenNotSupplied() { - final String givenToken = ""; - - final List actual = this.findAllJobs(givenToken); - - assertThat(actual) // - .containsExactly( - this.job1WithNoToken.getFullName(), - this.job2WithNoToken.getFullName(), - this.job3WithAuthTokenAbc.getFullName(), - this.job4WithAuthTokenDef.getFullName()); - assertThat(this.didImpersonate) // - .isFalse(); - } - - @Test - public void testThatNoJobsAreFoundWhenTokenSuppliedButDoesNotMatch() { - final String givenToken = "QWE"; - - final List actual = this.findAllJobs(givenToken); - - assertThat(actual) // - .isEmpty(); - assertThat(this.didImpersonate) // - .isTrue(); - } } diff --git a/src/test/java/org/jenkinsci/plugins/gwt/whitelist/HMACVerifierTest.java b/src/test/java/org/jenkinsci/plugins/gwt/whitelist/HMACVerifierTest.java index 6e7f776b..535ee961 100644 --- a/src/test/java/org/jenkinsci/plugins/gwt/whitelist/HMACVerifierTest.java +++ b/src/test/java/org/jenkinsci/plugins/gwt/whitelist/HMACVerifierTest.java @@ -17,126 +17,115 @@ public class HMACVerifierTest { - @Test - public void testThatHmacCanBeVerifiedAndValidHex() throws Exception { - final String postContent = this.getPostContent(); - final String hmacSecret = "this is secret"; - final String algorithm = WhitelistAlgorithm.HMAC_SHA256.getFullName(); - final String hmacHeader = "X-Hub-Signature"; - final String headerValue = - "sha256=87e3e7b7e4567f528342a75b6d88c619f272c68a4d0d565c68d596a830213164"; - final Map> headers = this.getHeaders(hmacHeader, headerValue); - - final boolean actual = - this.testHmacVerify(headers, postContent, hmacHeader, hmacSecret, algorithm); - assertThat(actual).isTrue(); - } - - @Test - public void testThatHmacCanBeVerifiedAndValid() throws Exception { - final String postContent = this.getPostContent(); - final String hmacSecret = "this is secret"; - final String algorithm = WhitelistAlgorithm.HMAC_SHA256.getFullName(); - final String hmacHeader = "X-Hub-Signature"; - final String headerValue = "sha256=h+Pnt+RWf1KDQqdbbYjGGfJyxopNDVZcaNWWqDAhMWQ="; - final Map> headers = this.getHeaders(hmacHeader, headerValue); - - final boolean actual = - this.testHmacVerify(headers, postContent, hmacHeader, hmacSecret, algorithm); - assertThat(actual).isTrue(); - } - - @Test - public void testThatHmacCanBeVerifiedAndValidHmacPrefixHeader() throws Exception { - final String postContent = this.getPostContent(); - final String hmacSecret = "this is secret"; - final String algorithm = WhitelistAlgorithm.HMAC_SHA256.getFullName(); - final String hmacHeader = "X-Hub-Signature"; - final String headerValue = "HMAC h+Pnt+RWf1KDQqdbbYjGGfJyxopNDVZcaNWWqDAhMWQ="; - final Map> headers = this.getHeaders(hmacHeader, headerValue); - - final boolean actual = - this.testHmacVerify(headers, postContent, hmacHeader, hmacSecret, algorithm); - assertThat(actual).isTrue(); - } - - @Test - public void testThatHmacCanBeBase64() throws Exception { - final String postContent = "whatever"; - final String hmacSecret = "this is secret"; - final String algorithm = WhitelistAlgorithm.HMAC_SHA256.getFullName(); - final String hmacHeader = "hmac"; - final String headerValue = - "NzEyMTJGODU0RTIzQzU3NUQ3QjFBQUQ0QzM0NjcwRkYwOEVCRjcyMUMzODM3NjY4NjEzRTk2Qzg3RjZFRThCMg=="; - final Map> headers = this.getHeaders(hmacHeader, headerValue); - - final boolean actual = - this.testHmacVerify(headers, postContent, hmacHeader, hmacSecret, algorithm); - - assertThat(actual).isTrue(); - } - - @Test - public void testThatHmacCanBeVerifiedAndValidWIthoutAlgorithmInHeader() throws Exception { - final String postContent = this.getPostContent(); - final String hmacSecret = "this is secret"; - final String algorithm = WhitelistAlgorithm.HMAC_SHA256.getFullName(); - final String hmacHeader = "X-Hub-Signature"; - final String headerValue = "87e3e7b7e4567f528342a75b6d88c619f272c68a4d0d565c68d596a830213164"; - final Map> headers = this.getHeaders(hmacHeader, headerValue); - - final boolean actual = - this.testHmacVerify(headers, postContent, hmacHeader, hmacSecret, algorithm); - - assertThat(actual).isTrue(); - } - - @Test - public void testThatHmacCanBeVerifiedAndInvalid() throws Exception { - final String postContent = this.getPostContent(); - final String hmacSecret = "this is secret"; - final String algorithm = WhitelistAlgorithm.HMAC_SHA256.getFullName(); - final String hmacHeader = "X-Hub-Signature"; - final String headerValue = - "sha256=97e3e7b7e4567f528342a75b6d88c619f272c68a4d0d565c68d596a830213164"; - final Map> headers = this.getHeaders(hmacHeader, headerValue); - - final boolean actual = - this.testHmacVerify(headers, postContent, hmacHeader, hmacSecret, algorithm); - - assertThat(actual).isFalse(); - } - - private Map> getHeaders(final String hmacHeader, final String value) { - final Map> headers = new HashMap<>(); - headers.put(hmacHeader, Arrays.asList(value)); - return headers; - } - - private String getPostContent() throws IOException, URISyntaxException { - final String postContent = - new String( - Files.readAllBytes( - Paths.get( - this.getClass() + @Test + public void testThatHmacCanBeVerifiedAndValidHex() throws Exception { + final String postContent = this.getPostContent(); + final String hmacSecret = "this is secret"; + final String algorithm = WhitelistAlgorithm.HMAC_SHA256.getFullName(); + final String hmacHeader = "X-Hub-Signature"; + final String headerValue = "sha256=87e3e7b7e4567f528342a75b6d88c619f272c68a4d0d565c68d596a830213164"; + final Map> headers = this.getHeaders(hmacHeader, headerValue); + + final boolean actual = this.testHmacVerify(headers, postContent, hmacHeader, hmacSecret, algorithm); + assertThat(actual).isTrue(); + } + + @Test + public void testThatHmacCanBeVerifiedAndValid() throws Exception { + final String postContent = this.getPostContent(); + final String hmacSecret = "this is secret"; + final String algorithm = WhitelistAlgorithm.HMAC_SHA256.getFullName(); + final String hmacHeader = "X-Hub-Signature"; + final String headerValue = "sha256=h+Pnt+RWf1KDQqdbbYjGGfJyxopNDVZcaNWWqDAhMWQ="; + final Map> headers = this.getHeaders(hmacHeader, headerValue); + + final boolean actual = this.testHmacVerify(headers, postContent, hmacHeader, hmacSecret, algorithm); + assertThat(actual).isTrue(); + } + + @Test + public void testThatHmacCanBeVerifiedAndValidHmacPrefixHeader() throws Exception { + final String postContent = this.getPostContent(); + final String hmacSecret = "this is secret"; + final String algorithm = WhitelistAlgorithm.HMAC_SHA256.getFullName(); + final String hmacHeader = "X-Hub-Signature"; + final String headerValue = "HMAC h+Pnt+RWf1KDQqdbbYjGGfJyxopNDVZcaNWWqDAhMWQ="; + final Map> headers = this.getHeaders(hmacHeader, headerValue); + + final boolean actual = this.testHmacVerify(headers, postContent, hmacHeader, hmacSecret, algorithm); + assertThat(actual).isTrue(); + } + + @Test + public void testThatHmacCanBeBase64() throws Exception { + final String postContent = "whatever"; + final String hmacSecret = "this is secret"; + final String algorithm = WhitelistAlgorithm.HMAC_SHA256.getFullName(); + final String hmacHeader = "hmac"; + final String headerValue = + "NzEyMTJGODU0RTIzQzU3NUQ3QjFBQUQ0QzM0NjcwRkYwOEVCRjcyMUMzODM3NjY4NjEzRTk2Qzg3RjZFRThCMg=="; + final Map> headers = this.getHeaders(hmacHeader, headerValue); + + final boolean actual = this.testHmacVerify(headers, postContent, hmacHeader, hmacSecret, algorithm); + + assertThat(actual).isTrue(); + } + + @Test + public void testThatHmacCanBeVerifiedAndValidWIthoutAlgorithmInHeader() throws Exception { + final String postContent = this.getPostContent(); + final String hmacSecret = "this is secret"; + final String algorithm = WhitelistAlgorithm.HMAC_SHA256.getFullName(); + final String hmacHeader = "X-Hub-Signature"; + final String headerValue = "87e3e7b7e4567f528342a75b6d88c619f272c68a4d0d565c68d596a830213164"; + final Map> headers = this.getHeaders(hmacHeader, headerValue); + + final boolean actual = this.testHmacVerify(headers, postContent, hmacHeader, hmacSecret, algorithm); + + assertThat(actual).isTrue(); + } + + @Test + public void testThatHmacCanBeVerifiedAndInvalid() throws Exception { + final String postContent = this.getPostContent(); + final String hmacSecret = "this is secret"; + final String algorithm = WhitelistAlgorithm.HMAC_SHA256.getFullName(); + final String hmacHeader = "X-Hub-Signature"; + final String headerValue = "sha256=97e3e7b7e4567f528342a75b6d88c619f272c68a4d0d565c68d596a830213164"; + final Map> headers = this.getHeaders(hmacHeader, headerValue); + + final boolean actual = this.testHmacVerify(headers, postContent, hmacHeader, hmacSecret, algorithm); + + assertThat(actual).isFalse(); + } + + private Map> getHeaders(final String hmacHeader, final String value) { + final Map> headers = new HashMap<>(); + headers.put(hmacHeader, Arrays.asList(value)); + return headers; + } + + private String getPostContent() throws IOException, URISyntaxException { + final String postContent = new String( + Files.readAllBytes(Paths.get(this.getClass() .getResource("/hmac/hmac-bitbucket-server-payload.json") .toURI())), - UTF_8); - return postContent; - } - - private boolean testHmacVerify( - final Map> headers, - final String postContent, - final String hmacHeader, - final String hmacSecret, - final String algorithm) - throws WhitelistException { - try { - hmacVerify(headers, postContent, hmacHeader, hmacSecret, algorithm); - return true; - } catch (final WhitelistException e) { - return false; + UTF_8); + return postContent; + } + + private boolean testHmacVerify( + final Map> headers, + final String postContent, + final String hmacHeader, + final String hmacSecret, + final String algorithm) + throws WhitelistException { + try { + hmacVerify(headers, postContent, hmacHeader, hmacSecret, algorithm); + return true; + } catch (final WhitelistException e) { + return false; + } } - } } diff --git a/src/test/java/org/jenkinsci/plugins/gwt/whitelist/WhitelistVerifierTest.java b/src/test/java/org/jenkinsci/plugins/gwt/whitelist/WhitelistVerifierTest.java index 6525d85d..925b3c95 100644 --- a/src/test/java/org/jenkinsci/plugins/gwt/whitelist/WhitelistVerifierTest.java +++ b/src/test/java/org/jenkinsci/plugins/gwt/whitelist/WhitelistVerifierTest.java @@ -16,277 +16,297 @@ public class WhitelistVerifierTest { - @Test - public void testThatRequestIsValidWhenNoWhitelist() { - final Map> headers = new HashMap<>(); - final String postContent = ""; - - final String remoteHost = "192.168.0.1"; - final boolean enabled = false; - final Whitelist whitelist = new Whitelist(enabled, new ArrayList()); - - assertThat(testDoVerifyWhitelist(remoteHost, headers, postContent, whitelist)).isTrue(); - } - - @Test - public void testThatHostCanBeVerifiedAndValid() { - final WhitelistItem whitelistItem = new WhitelistItem("192.168.0.1"); - whitelistItem.setHmacEnabled(false); - final Map> headers = new HashMap<>(); - final String postContent = ""; - - final String remoteHost = "192.168.0.1"; - final boolean enabled = true; - final Whitelist whitelist = new Whitelist(enabled, Arrays.asList(whitelistItem)); - - assertThat(testDoVerifyWhitelist(remoteHost, headers, postContent, whitelist)).isTrue(); - } - - @Test - public void testThatHostCanBeVerifiedAndInvalid() { - final WhitelistItem whitelistItem = new WhitelistItem("192.168.0.1"); - whitelistItem.setHmacEnabled(false); - final Map> headers = new HashMap<>(); - final String postContent = ""; - - final String remoteHost = "anotherhost"; - final boolean enabled = true; - final Whitelist whitelist = new Whitelist(enabled, Arrays.asList(whitelistItem)); - - assertThat(testDoVerifyWhitelist(remoteHost, headers, postContent, whitelist)).isFalse(); - } - - @Test - public void testThatHostIsAcceptedWhenWhitelistDisabled() { - final WhitelistItem whitelistItem = new WhitelistItem("192.168.0.1"); - whitelistItem.setHmacEnabled(false); - final Map> headers = new HashMap<>(); - final String postContent = ""; - - final String remoteHost = "anotherhost"; - final boolean enabled = false; - final Whitelist whitelist = new Whitelist(enabled, Arrays.asList(whitelistItem)); - - assertThat(testDoVerifyWhitelist(remoteHost, headers, postContent, whitelist)).isTrue(); - } - - @Test - public void testThatHostCanBeVerifiedAndInvalidAndValidByAnotherItem() throws Exception { - final WhitelistItem whitelistItem1 = new WhitelistItem("192.168.0.1"); - whitelistItem1.setHmacEnabled(false); - - final WhitelistItem whitelistItem2 = new WhitelistItem("192.168.0.2"); - whitelistItem2.setHmacEnabled(false); - - final WhitelistItem whitelistItem3 = new WhitelistItem("192.168.0.3"); - whitelistItem3.setHmacEnabled(false); - - final Map> headers = new HashMap<>(); - final String postContent = ""; - - final boolean enabled = true; - final Whitelist whitelist = - new Whitelist(enabled, Arrays.asList(whitelistItem1, whitelistItem2, whitelistItem3)); - - assertThat(testDoVerifyWhitelist("192.168.0.0", headers, postContent, whitelist)).isFalse(); - assertThat(testDoVerifyWhitelist("192.168.0.1", headers, postContent, whitelist)).isTrue(); - assertThat(testDoVerifyWhitelist("192.168.0.2", headers, postContent, whitelist)).isTrue(); - assertThat(testDoVerifyWhitelist("192.168.0.3", headers, postContent, whitelist)).isTrue(); - assertThat(testDoVerifyWhitelist("192.168.0.4", headers, postContent, whitelist)).isFalse(); - } - - @Test - public void testThatHostCanBeVerifiedWithSupportedNotations() { - final WhitelistItem whitelistItem1 = new WhitelistItem("1.2.3.4"); - whitelistItem1.setHmacEnabled(false); - - final WhitelistItem whitelistItem2 = new WhitelistItem("2.2.3.0/24"); - whitelistItem2.setHmacEnabled(false); - - final WhitelistItem whitelistItem3 = new WhitelistItem("3.2.1.1-3.2.1.10"); - whitelistItem3.setHmacEnabled(false); - - final WhitelistItem whitelistItem4 = - new WhitelistItem("2001:0db8:85a3:0000:0000:8a2e:0370:7334"); - whitelistItem4.setHmacEnabled(false); - - final WhitelistItem whitelistItem5 = - new WhitelistItem("2002:0db8:85a3:0000:0000:8a2e:0370:7334/127"); - whitelistItem5.setHmacEnabled(false); - - final Map> headers = new HashMap<>(); - final String postContent = ""; - - final boolean enabled = true; - final Whitelist whitelist = - new Whitelist( - enabled, - Arrays.asList( - whitelistItem1, whitelistItem2, whitelistItem3, whitelistItem4, whitelistItem5)); - - assertThat(testDoVerifyWhitelist("1.2.3.4", headers, postContent, whitelist)).isTrue(); - assertThat(testDoVerifyWhitelist("3.2.1.0", headers, postContent, whitelist)).isFalse(); - assertThat(testDoVerifyWhitelist("3.2.1.1", headers, postContent, whitelist)).isTrue(); - assertThat(testDoVerifyWhitelist("3.2.1.10", headers, postContent, whitelist)).isTrue(); - assertThat(testDoVerifyWhitelist("3.2.1.11", headers, postContent, whitelist)).isFalse(); - assertThat(testDoVerifyWhitelist("1.1.1.2", headers, postContent, whitelist)).isFalse(); - assertThat(testDoVerifyWhitelist("2.2.3.50", headers, postContent, whitelist)).isTrue(); - assertThat( - testDoVerifyWhitelist( - "2001:0db8:85a3:0000:0000:8a2e:0370:7334", headers, postContent, whitelist)) - .isTrue(); - assertThat( - testDoVerifyWhitelist( - "2002:0db8:85a3:0000:0000:8a2e:0370:7335", headers, postContent, whitelist)) - .isTrue(); - } - - @Test - public void testThatHostCanBeVerifiedWithCidr() { - final WhitelistItem whitelistItem = new WhitelistItem("2.2.3.0/24"); - whitelistItem.setHmacEnabled(false); - - final Map> headers = new HashMap<>(); - final String postContent = ""; - - final boolean enabled = true; - final Whitelist whitelist = new Whitelist(enabled, Arrays.asList(whitelistItem)); - - assertThat(testDoVerifyWhitelist("2.2.2.255", headers, postContent, whitelist)).isFalse(); - assertThat(testDoVerifyWhitelist("2.2.3.0", headers, postContent, whitelist)).isTrue(); - assertThat(testDoVerifyWhitelist("2.2.3.255", headers, postContent, whitelist)).isTrue(); - assertThat(testDoVerifyWhitelist("2.2.4.0", headers, postContent, whitelist)).isFalse(); - } - - @Test - public void testThatHostCanBeVerifiedWithRanges() { - final WhitelistItem whitelistItem = new WhitelistItem("3.2.3.5-3.2.3.10"); - whitelistItem.setHmacEnabled(false); - - final Map> headers = new HashMap<>(); - final String postContent = ""; - - final boolean enabled = true; - final Whitelist whitelist = new Whitelist(enabled, Arrays.asList(whitelistItem)); - - assertThat(testDoVerifyWhitelist("3.2.3.4", headers, postContent, whitelist)).isFalse(); - assertThat(testDoVerifyWhitelist("3.2.3.5", headers, postContent, whitelist)).isTrue(); - assertThat(testDoVerifyWhitelist("3.2.3.10", headers, postContent, whitelist)).isTrue(); - assertThat(testDoVerifyWhitelist("3.2.3.11", headers, postContent, whitelist)).isFalse(); - } - - @Test - public void testThatHostCanBeVerifiedWithAny() { - final WhitelistItem whitelistItem = new WhitelistItem(""); - whitelistItem.setHmacEnabled(false); - - final Map> headers = new HashMap<>(); - final String postContent = ""; - - final boolean enabled = true; - final Whitelist whitelist = new Whitelist(enabled, Arrays.asList(whitelistItem)); - - assertThat(testDoVerifyWhitelist("6.2.3.10", headers, postContent, whitelist)).isTrue(); - } - - @Test - public void testThatHostCanBeVerifiedWithAnyAndDeniedByHmac() { - final WhitelistItem whitelistItem = new WhitelistItem(""); - whitelistItem.setHmacEnabled(true); - - final Map> headers = new HashMap<>(); - final String postContent = ""; - - final boolean enabled = true; - final Whitelist whitelist = new Whitelist(enabled, Arrays.asList(whitelistItem)); - - assertThat(testDoVerifyWhitelist("6.2.3.10", headers, postContent, whitelist)).isFalse(); - } - - @Test - public void testThatInvalidRangeThrowsException() { - final WhitelistItem whitelistItem = new WhitelistItem("3.2.3.a-3.2.3.10"); - whitelistItem.setHmacEnabled(false); - - final Map> headers = new HashMap<>(); - final String postContent = ""; - - final boolean enabled = true; - final Whitelist whitelist = new Whitelist(enabled, Arrays.asList(whitelistItem)); - - try { - doVerifyWhitelist("1.1.1.1", headers, postContent, whitelist); - fail("No exception"); - } catch (final WhitelistException e) { - assertThat(e.getMessage()).contains("3.2.3.a-3.2.3.10 is not an Ipv4 string literal."); + @Test + public void testThatRequestIsValidWhenNoWhitelist() { + final Map> headers = new HashMap<>(); + final String postContent = ""; + + final String remoteHost = "192.168.0.1"; + final boolean enabled = false; + final Whitelist whitelist = new Whitelist(enabled, new ArrayList()); + + assertThat(testDoVerifyWhitelist(remoteHost, headers, postContent, whitelist)) + .isTrue(); + } + + @Test + public void testThatHostCanBeVerifiedAndValid() { + final WhitelistItem whitelistItem = new WhitelistItem("192.168.0.1"); + whitelistItem.setHmacEnabled(false); + final Map> headers = new HashMap<>(); + final String postContent = ""; + + final String remoteHost = "192.168.0.1"; + final boolean enabled = true; + final Whitelist whitelist = new Whitelist(enabled, Arrays.asList(whitelistItem)); + + assertThat(testDoVerifyWhitelist(remoteHost, headers, postContent, whitelist)) + .isTrue(); + } + + @Test + public void testThatHostCanBeVerifiedAndInvalid() { + final WhitelistItem whitelistItem = new WhitelistItem("192.168.0.1"); + whitelistItem.setHmacEnabled(false); + final Map> headers = new HashMap<>(); + final String postContent = ""; + + final String remoteHost = "anotherhost"; + final boolean enabled = true; + final Whitelist whitelist = new Whitelist(enabled, Arrays.asList(whitelistItem)); + + assertThat(testDoVerifyWhitelist(remoteHost, headers, postContent, whitelist)) + .isFalse(); + } + + @Test + public void testThatHostIsAcceptedWhenWhitelistDisabled() { + final WhitelistItem whitelistItem = new WhitelistItem("192.168.0.1"); + whitelistItem.setHmacEnabled(false); + final Map> headers = new HashMap<>(); + final String postContent = ""; + + final String remoteHost = "anotherhost"; + final boolean enabled = false; + final Whitelist whitelist = new Whitelist(enabled, Arrays.asList(whitelistItem)); + + assertThat(testDoVerifyWhitelist(remoteHost, headers, postContent, whitelist)) + .isTrue(); + } + + @Test + public void testThatHostCanBeVerifiedAndInvalidAndValidByAnotherItem() throws Exception { + final WhitelistItem whitelistItem1 = new WhitelistItem("192.168.0.1"); + whitelistItem1.setHmacEnabled(false); + + final WhitelistItem whitelistItem2 = new WhitelistItem("192.168.0.2"); + whitelistItem2.setHmacEnabled(false); + + final WhitelistItem whitelistItem3 = new WhitelistItem("192.168.0.3"); + whitelistItem3.setHmacEnabled(false); + + final Map> headers = new HashMap<>(); + final String postContent = ""; + + final boolean enabled = true; + final Whitelist whitelist = + new Whitelist(enabled, Arrays.asList(whitelistItem1, whitelistItem2, whitelistItem3)); + + assertThat(testDoVerifyWhitelist("192.168.0.0", headers, postContent, whitelist)) + .isFalse(); + assertThat(testDoVerifyWhitelist("192.168.0.1", headers, postContent, whitelist)) + .isTrue(); + assertThat(testDoVerifyWhitelist("192.168.0.2", headers, postContent, whitelist)) + .isTrue(); + assertThat(testDoVerifyWhitelist("192.168.0.3", headers, postContent, whitelist)) + .isTrue(); + assertThat(testDoVerifyWhitelist("192.168.0.4", headers, postContent, whitelist)) + .isFalse(); + } + + @Test + public void testThatHostCanBeVerifiedWithSupportedNotations() { + final WhitelistItem whitelistItem1 = new WhitelistItem("1.2.3.4"); + whitelistItem1.setHmacEnabled(false); + + final WhitelistItem whitelistItem2 = new WhitelistItem("2.2.3.0/24"); + whitelistItem2.setHmacEnabled(false); + + final WhitelistItem whitelistItem3 = new WhitelistItem("3.2.1.1-3.2.1.10"); + whitelistItem3.setHmacEnabled(false); + + final WhitelistItem whitelistItem4 = new WhitelistItem("2001:0db8:85a3:0000:0000:8a2e:0370:7334"); + whitelistItem4.setHmacEnabled(false); + + final WhitelistItem whitelistItem5 = new WhitelistItem("2002:0db8:85a3:0000:0000:8a2e:0370:7334/127"); + whitelistItem5.setHmacEnabled(false); + + final Map> headers = new HashMap<>(); + final String postContent = ""; + + final boolean enabled = true; + final Whitelist whitelist = new Whitelist( + enabled, Arrays.asList(whitelistItem1, whitelistItem2, whitelistItem3, whitelistItem4, whitelistItem5)); + + assertThat(testDoVerifyWhitelist("1.2.3.4", headers, postContent, whitelist)) + .isTrue(); + assertThat(testDoVerifyWhitelist("3.2.1.0", headers, postContent, whitelist)) + .isFalse(); + assertThat(testDoVerifyWhitelist("3.2.1.1", headers, postContent, whitelist)) + .isTrue(); + assertThat(testDoVerifyWhitelist("3.2.1.10", headers, postContent, whitelist)) + .isTrue(); + assertThat(testDoVerifyWhitelist("3.2.1.11", headers, postContent, whitelist)) + .isFalse(); + assertThat(testDoVerifyWhitelist("1.1.1.2", headers, postContent, whitelist)) + .isFalse(); + assertThat(testDoVerifyWhitelist("2.2.3.50", headers, postContent, whitelist)) + .isTrue(); + assertThat(testDoVerifyWhitelist("2001:0db8:85a3:0000:0000:8a2e:0370:7334", headers, postContent, whitelist)) + .isTrue(); + assertThat(testDoVerifyWhitelist("2002:0db8:85a3:0000:0000:8a2e:0370:7335", headers, postContent, whitelist)) + .isTrue(); + } + + @Test + public void testThatHostCanBeVerifiedWithCidr() { + final WhitelistItem whitelistItem = new WhitelistItem("2.2.3.0/24"); + whitelistItem.setHmacEnabled(false); + + final Map> headers = new HashMap<>(); + final String postContent = ""; + + final boolean enabled = true; + final Whitelist whitelist = new Whitelist(enabled, Arrays.asList(whitelistItem)); + + assertThat(testDoVerifyWhitelist("2.2.2.255", headers, postContent, whitelist)) + .isFalse(); + assertThat(testDoVerifyWhitelist("2.2.3.0", headers, postContent, whitelist)) + .isTrue(); + assertThat(testDoVerifyWhitelist("2.2.3.255", headers, postContent, whitelist)) + .isTrue(); + assertThat(testDoVerifyWhitelist("2.2.4.0", headers, postContent, whitelist)) + .isFalse(); + } + + @Test + public void testThatHostCanBeVerifiedWithRanges() { + final WhitelistItem whitelistItem = new WhitelistItem("3.2.3.5-3.2.3.10"); + whitelistItem.setHmacEnabled(false); + + final Map> headers = new HashMap<>(); + final String postContent = ""; + + final boolean enabled = true; + final Whitelist whitelist = new Whitelist(enabled, Arrays.asList(whitelistItem)); + + assertThat(testDoVerifyWhitelist("3.2.3.4", headers, postContent, whitelist)) + .isFalse(); + assertThat(testDoVerifyWhitelist("3.2.3.5", headers, postContent, whitelist)) + .isTrue(); + assertThat(testDoVerifyWhitelist("3.2.3.10", headers, postContent, whitelist)) + .isTrue(); + assertThat(testDoVerifyWhitelist("3.2.3.11", headers, postContent, whitelist)) + .isFalse(); } - } - @Test - public void testThatInvalidCidrThrowsException() { - final WhitelistItem whitelistItem = new WhitelistItem("3.2.3.1/a"); - whitelistItem.setHmacEnabled(false); + @Test + public void testThatHostCanBeVerifiedWithAny() { + final WhitelistItem whitelistItem = new WhitelistItem(""); + whitelistItem.setHmacEnabled(false); - final Map> headers = new HashMap<>(); - final String postContent = ""; + final Map> headers = new HashMap<>(); + final String postContent = ""; - final boolean enabled = true; - final Whitelist whitelist = new Whitelist(enabled, Arrays.asList(whitelistItem)); + final boolean enabled = true; + final Whitelist whitelist = new Whitelist(enabled, Arrays.asList(whitelistItem)); - try { - doVerifyWhitelist("1.1.1.1", headers, postContent, whitelist); - fail("No exception"); - } catch (final WhitelistException e) { - assertThat(e.getMessage()).contains("3.2.3.1/a cannot be parsed as Ipv4 string literal"); + assertThat(testDoVerifyWhitelist("6.2.3.10", headers, postContent, whitelist)) + .isTrue(); } - } - @Test - public void testThatInvalidStaticThrowsException() { - final WhitelistItem whitelistItem = new WhitelistItem("3.2.3.a"); - whitelistItem.setHmacEnabled(false); + @Test + public void testThatHostCanBeVerifiedWithAnyAndDeniedByHmac() { + final WhitelistItem whitelistItem = new WhitelistItem(""); + whitelistItem.setHmacEnabled(true); - final Map> headers = new HashMap<>(); - final String postContent = ""; + final Map> headers = new HashMap<>(); + final String postContent = ""; - final boolean enabled = true; - final Whitelist whitelist = new Whitelist(enabled, Arrays.asList(whitelistItem)); + final boolean enabled = true; + final Whitelist whitelist = new Whitelist(enabled, Arrays.asList(whitelistItem)); - try { - doVerifyWhitelist("1.1.1.1", headers, postContent, whitelist); - fail("No exception"); - } catch (final WhitelistException e) { - assertThat(e.getMessage()).contains("3.2.3.a is not a valid IP string literal"); + assertThat(testDoVerifyWhitelist("6.2.3.10", headers, postContent, whitelist)) + .isFalse(); } - } - - @Test - public void testThatHostCanBeVerifiedWithStaticIp() { - final WhitelistItem whitelistItem = new WhitelistItem("4.2.3.5"); - whitelistItem.setHmacEnabled(false); - - final Map> headers = new HashMap<>(); - final String postContent = ""; - - final boolean enabled = true; - final Whitelist whitelist = new Whitelist(enabled, Arrays.asList(whitelistItem)); - - assertThat(testDoVerifyWhitelist("4.2.3.4", headers, postContent, whitelist)).isFalse(); - assertThat(testDoVerifyWhitelist("4.2.3.5", headers, postContent, whitelist)).isTrue(); - assertThat(testDoVerifyWhitelist("4.2.3.6", headers, postContent, whitelist)).isFalse(); - } - - private boolean testDoVerifyWhitelist( - final String remoteHost, - final Map> headers, - final String postContent, - final Whitelist whitelist) { - try { - doVerifyWhitelist(remoteHost, headers, postContent, whitelist); - return true; - } catch (final WhitelistException e) { - Logger.getLogger(WhitelistVerifierTest.class.getSimpleName()).info(e.getMessage()); - return false; + + @Test + public void testThatInvalidRangeThrowsException() { + final WhitelistItem whitelistItem = new WhitelistItem("3.2.3.a-3.2.3.10"); + whitelistItem.setHmacEnabled(false); + + final Map> headers = new HashMap<>(); + final String postContent = ""; + + final boolean enabled = true; + final Whitelist whitelist = new Whitelist(enabled, Arrays.asList(whitelistItem)); + + try { + doVerifyWhitelist("1.1.1.1", headers, postContent, whitelist); + fail("No exception"); + } catch (final WhitelistException e) { + assertThat(e.getMessage()).contains("3.2.3.a-3.2.3.10 is not an Ipv4 string literal."); + } + } + + @Test + public void testThatInvalidCidrThrowsException() { + final WhitelistItem whitelistItem = new WhitelistItem("3.2.3.1/a"); + whitelistItem.setHmacEnabled(false); + + final Map> headers = new HashMap<>(); + final String postContent = ""; + + final boolean enabled = true; + final Whitelist whitelist = new Whitelist(enabled, Arrays.asList(whitelistItem)); + + try { + doVerifyWhitelist("1.1.1.1", headers, postContent, whitelist); + fail("No exception"); + } catch (final WhitelistException e) { + assertThat(e.getMessage()).contains("3.2.3.1/a cannot be parsed as Ipv4 string literal"); + } + } + + @Test + public void testThatInvalidStaticThrowsException() { + final WhitelistItem whitelistItem = new WhitelistItem("3.2.3.a"); + whitelistItem.setHmacEnabled(false); + + final Map> headers = new HashMap<>(); + final String postContent = ""; + + final boolean enabled = true; + final Whitelist whitelist = new Whitelist(enabled, Arrays.asList(whitelistItem)); + + try { + doVerifyWhitelist("1.1.1.1", headers, postContent, whitelist); + fail("No exception"); + } catch (final WhitelistException e) { + assertThat(e.getMessage()).contains("3.2.3.a is not a valid IP string literal"); + } + } + + @Test + public void testThatHostCanBeVerifiedWithStaticIp() { + final WhitelistItem whitelistItem = new WhitelistItem("4.2.3.5"); + whitelistItem.setHmacEnabled(false); + + final Map> headers = new HashMap<>(); + final String postContent = ""; + + final boolean enabled = true; + final Whitelist whitelist = new Whitelist(enabled, Arrays.asList(whitelistItem)); + + assertThat(testDoVerifyWhitelist("4.2.3.4", headers, postContent, whitelist)) + .isFalse(); + assertThat(testDoVerifyWhitelist("4.2.3.5", headers, postContent, whitelist)) + .isTrue(); + assertThat(testDoVerifyWhitelist("4.2.3.6", headers, postContent, whitelist)) + .isFalse(); + } + + private boolean testDoVerifyWhitelist( + final String remoteHost, + final Map> headers, + final String postContent, + final Whitelist whitelist) { + try { + doVerifyWhitelist(remoteHost, headers, postContent, whitelist); + return true; + } catch (final WhitelistException e) { + Logger.getLogger(WhitelistVerifierTest.class.getSimpleName()).info(e.getMessage()); + return false; + } } - } }