From f1731e018eb97455b37dbd6b0ea291c5ddce2ec3 Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Tue, 13 Aug 2019 15:11:12 +0200 Subject: [PATCH 1/2] Removed jacoco from the build on circle --- .circleci/config.yml | 2 +- .../verifier/util/ContractVerifierDslConverter.groovy | 11 +++++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index e49cc159ca..3ea9e1ab9d 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -32,7 +32,7 @@ jobs: command: rm -rf ~/.m2/repository/org/springframework/cloud/contract && rm -rf ~/.m2/repository/com/example - run: name: "Running build" - command: ./mvnw -s .settings.xml clean org.jacoco:jacoco-maven-plugin:prepare-agent install -U -Pdocs,fast,integration,sonar -nsu --batch-mode -Dmaven.test.redirectTestOutputToFile=true -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn + command: ./mvnw -s .settings.xml clean install -U -Pdocs,fast,integration -nsu --batch-mode -Dmaven.test.redirectTestOutputToFile=true -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn - run: name: "Aggregate test results" when: always diff --git a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/util/ContractVerifierDslConverter.groovy b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/util/ContractVerifierDslConverter.groovy index e2841d49d6..f5590a8159 100644 --- a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/util/ContractVerifierDslConverter.groovy +++ b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/util/ContractVerifierDslConverter.groovy @@ -128,16 +128,19 @@ class ContractVerifierDslConverter implements ContractConverter constructor = classConstructor(dsl) Object newInstance = constructor.newInstance() if (!newInstance instanceof Supplier) { @@ -158,7 +161,7 @@ class ContractVerifierDslConverter implements ContractConverter clazz = compilationResult.compiledClasses.find { it.name == fqn } + Class clazz = compilationResult.compiledClasses.find { it.name == fqn} if (clazz == null) { throw new IllegalStateException("Class with name [" + fqn + "] not found") } From ca72481d107e8e7e79a4813bc043f749ee8edf30 Mon Sep 17 00:00:00 2001 From: anatoliy-balakirev Date: Tue, 13 Aug 2019 15:28:02 +0200 Subject: [PATCH 2/2] fix NPEs (#1170) --- .../spec/internal/OptionalProperty.java | 11 ++- .../verifier/builder/QueryParamsResolver.java | 4 +- .../builder/QueryParamsResolverSpec.groovy | 84 +++++++++++++++++++ 3 files changed, 95 insertions(+), 4 deletions(-) create mode 100644 spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/QueryParamsResolverSpec.groovy diff --git a/specs/spring-cloud-contract-spec-java/src/main/java/org/springframework/cloud/contract/spec/internal/OptionalProperty.java b/specs/spring-cloud-contract-spec-java/src/main/java/org/springframework/cloud/contract/spec/internal/OptionalProperty.java index 6e19b1482c..bafd2ad923 100644 --- a/specs/spring-cloud-contract-spec-java/src/main/java/org/springframework/cloud/contract/spec/internal/OptionalProperty.java +++ b/specs/spring-cloud-contract-spec-java/src/main/java/org/springframework/cloud/contract/spec/internal/OptionalProperty.java @@ -44,8 +44,15 @@ public class OptionalProperty implements Serializable, CanBeDynamic { } public String value() { - return this.value instanceof RegexProperty - ? ((RegexProperty) this.value).pattern() : this.value.toString(); + if (this.value == null) { + return ""; + } + else if (this.value instanceof RegexProperty) { + return ((RegexProperty) this.value).pattern(); + } + else { + return this.value.toString(); + } } protected Pattern optionalPatternValue() { diff --git a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/QueryParamsResolver.java b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/QueryParamsResolver.java index 4a58847066..461f8a45a9 100644 --- a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/QueryParamsResolver.java +++ b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/QueryParamsResolver.java @@ -34,12 +34,12 @@ interface QueryParamsResolver { return resolveParamValue(((OptionalProperty) value).optionalPattern()); } else if (value instanceof MatchingStrategy) { - return ((MatchingStrategy) value).getServerValue().toString(); + return resolveParamValue(((MatchingStrategy) value).getServerValue()); } else if (value instanceof DslProperty) { return resolveParamValue(((DslProperty) value).getServerValue()); } - return value.toString(); + return value == null ? "null" : value.toString(); } } diff --git a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/QueryParamsResolverSpec.groovy b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/QueryParamsResolverSpec.groovy new file mode 100644 index 0000000000..4a0fd0dba6 --- /dev/null +++ b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/QueryParamsResolverSpec.groovy @@ -0,0 +1,84 @@ +package org.springframework.cloud.contract.verifier.builder + +import org.springframework.cloud.contract.spec.internal.DslProperty +import org.springframework.cloud.contract.spec.internal.MatchingStrategy +import org.springframework.cloud.contract.spec.internal.OptionalProperty +import org.springframework.cloud.contract.spec.internal.QueryParameter +import org.springframework.cloud.contract.spec.internal.RegexProperty +import spock.lang.Specification + +import java.util.regex.Pattern + +class QueryParamsResolverSpec extends Specification { + + def 'should return serverValue for QueryParameter'() { + given: + Object parameter = new QueryParameter("some_param", dslProperty) + when: + String resolved = new QueryParamsResolver() {}.resolveParamValue(parameter) + then: + resolved == expected + where: + dslProperty | expected + new DslProperty("client", "server") | "server" + new DslProperty(null, "server") | "server" + new DslProperty("client", null) | "null" + new DslProperty(null, null) | "null" + } + + def 'should return optionalPattern for OptionalProperty'() { + given: + Object parameter = new OptionalProperty(value) + when: + String resolved = new QueryParamsResolver() {}.resolveParamValue(parameter) + then: + resolved == expected + where: + value | expected + "server" | "(server)?" + null | "()?" + new RegexProperty(Pattern.compile(".*")) | "(.*)?" + new RegexProperty(null, Pattern.compile(".*")) | "(.*)?" + new RegexProperty(Pattern.compile(".*"), null) | "(.*)?" + new RegexProperty("", Pattern.compile(".*")) | "(.*)?" + new RegexProperty(Pattern.compile(".*"), "") | "(.*)?" + } + + def 'should return serverValue for MatchingStrategy'() { + given: + Object parameter = new MatchingStrategy(value, MatchingStrategy.Type.EQUAL_TO) + when: + String resolved = new QueryParamsResolver() {}.resolveParamValue(parameter) + then: + resolved == expected + where: + value | expected + "server" | "server" + null | "null" + new DslProperty("client", "server") | "server" + new DslProperty(null, "server") | "server" + new DslProperty("client", null) | "null" + new DslProperty(null, null) | "null" + } + + def 'should return serverValue for DslProperty'() { + when: + String resolved = new QueryParamsResolver() {}.resolveParamValue(parameter) + then: + resolved == expected + where: + parameter | expected + new DslProperty("client", "server") | "server" + new DslProperty(null, "server") | "server" + new DslProperty("client", null) | "null" + new DslProperty(null, null) | "null" + } + + def 'should return \"null\" for null'() { + when: + String resolved = new QueryParamsResolver() {}.resolveParamValue(null) + then: + resolved == "null" + } + +}