diff --git a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/integration/StubRunnerIntegrationMessageSelector.java b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/integration/StubRunnerIntegrationMessageSelector.java index 7994023f95..c99ce1bdbc 100644 --- a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/integration/StubRunnerIntegrationMessageSelector.java +++ b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/integration/StubRunnerIntegrationMessageSelector.java @@ -233,8 +233,8 @@ class StubRunnerIntegrationMessageSelector implements MessageSelector { Object value = it.getClientValue(); Object valueInHeader = headers.get(name); boolean matches; - if (value instanceof RegexProperty) { - Pattern pattern = ((RegexProperty) value).getPattern(); + if (value instanceof RegexProperty || value instanceof Pattern) { + Pattern pattern = new RegexProperty(value).getPattern(); matches = pattern.matcher(valueInHeader.toString()).matches(); } else { diff --git a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/stream/StubRunnerStreamMessageSelector.java b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/stream/StubRunnerStreamMessageSelector.java index 75f9572441..73c4be3961 100644 --- a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/stream/StubRunnerStreamMessageSelector.java +++ b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/stream/StubRunnerStreamMessageSelector.java @@ -234,8 +234,8 @@ class StubRunnerStreamMessageSelector implements MessageSelector { Object value = it.getClientValue(); Object valueInHeader = headers.get(name); boolean matches; - if (value instanceof RegexProperty) { - Pattern pattern = ((RegexProperty) value).getPattern(); + if (value instanceof RegexProperty || value instanceof Pattern) { + Pattern pattern = new RegexProperty(value).getPattern(); matches = pattern.matcher(valueInHeader.toString()).matches(); } else { diff --git a/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/integration/StubRunnerIntegrationMessageSelectorSpec.groovy b/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/integration/StubRunnerIntegrationMessageSelectorSpec.groovy index 9d27fd1390..ba0a1371dc 100644 --- a/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/integration/StubRunnerIntegrationMessageSelectorSpec.groovy +++ b/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/integration/StubRunnerIntegrationMessageSelectorSpec.groovy @@ -16,6 +16,7 @@ package org.springframework.cloud.contract.stubrunner.messaging.integration +import spock.lang.Issue import spock.lang.Specification import org.springframework.cloud.contract.spec.Contract @@ -181,7 +182,8 @@ class StubRunnerIntegrationMessageSelectorSpec extends Specification { } } and: - StubRunnerIntegrationMessageSelector predicate = new StubRunnerIntegrationMessageSelector(dsl) + StubRunnerIntegrationMessageSelector predicate = new StubRunnerIntegrationMessageSelector( + dsl) message.headers >> [ foo: 123 ] @@ -191,4 +193,29 @@ class StubRunnerIntegrationMessageSelectorSpec extends Specification { expect: predicate.accept(message) } + + @Issue("1382") + def "should return true if header matches regex"() { + given: + Contract dsl = Contract.make { + input { + messageFrom "foo" + messageHeaders { + header("foo", $(anyUuid())) + } + messageBody(foo: 123) + } + } + and: + StubRunnerIntegrationMessageSelector predicate = new StubRunnerIntegrationMessageSelector( + dsl) + message.headers >> [ + foo: "fbcc2ed3-dbac-47e7-9a4b-c2d55709792c" + ] + message.payload >> [ + foo: 123 + ] + expect: + predicate.accept(message) + } } diff --git a/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/stream/StubRunnerStreamMessageSelectorSpec.groovy b/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/stream/StubRunnerStreamMessageSelectorSpec.groovy index e770cb1f84..8a969773d1 100644 --- a/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/stream/StubRunnerStreamMessageSelectorSpec.groovy +++ b/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/stream/StubRunnerStreamMessageSelectorSpec.groovy @@ -16,6 +16,7 @@ package org.springframework.cloud.contract.stubrunner.messaging.stream +import spock.lang.Issue import spock.lang.Specification import org.springframework.cloud.contract.spec.Contract @@ -210,7 +211,8 @@ class StubRunnerStreamMessageSelectorSpec extends Specification { } } and: - StubRunnerStreamMessageSelector predicate = new StubRunnerStreamMessageSelector(dsl) + StubRunnerStreamMessageSelector predicate = new StubRunnerStreamMessageSelector( + dsl) message.headers >> [ foo: 123 ] @@ -220,4 +222,29 @@ class StubRunnerStreamMessageSelectorSpec extends Specification { expect: predicate.accept(message) } + + @Issue("1382") + def "should return true if header matches regex"() { + given: + Contract dsl = Contract.make { + input { + messageFrom "foo" + messageHeaders { + header("foo", $(anyUuid())) + } + messageBody(foo: 123) + } + } + and: + StubRunnerStreamMessageSelector predicate = new StubRunnerStreamMessageSelector( + dsl) + message.headers >> [ + foo: "fbcc2ed3-dbac-47e7-9a4b-c2d55709792c" + ] + message.payload >> [ + foo: 123 + ] + expect: + predicate.accept(message) + } }