Fixes messaging
This commit is contained in:
@@ -109,8 +109,7 @@ testImplementation(group: 'org.springframework.cloud', name: 'spring-cloud-strea
|
||||
|
||||
The main interface used by the tests is
|
||||
`org.springframework.cloud.contract.verifier.messaging.MessageVerifierSender` and `org.springframework.cloud.contract.verifier.messaging.MessageVerifierReceiver`.
|
||||
It defines how to send and receive messages. If you need both sender and receiver capabilities you can use `org.springframework.cloud.contract.verifier.messaging.MessageVerifier` interface. You can create your own implementation to
|
||||
achieve the same goal.
|
||||
It defines how to send and receive messages.
|
||||
|
||||
In a test, you can inject a `ContractVerifierMessageExchange` to send and receive
|
||||
messages that follow the contract. Then add `@AutoConfigureMessageVerifier` to your test.
|
||||
|
||||
@@ -389,7 +389,7 @@ dependencies, tries to:
|
||||
- Start a WireMock server for each Maven dependency on a random port from the provided
|
||||
range of ports or the provided port
|
||||
- Feed the WireMock server with all JSON files that are valid WireMock definitions
|
||||
- Send messages (remember to pass an implementation of `MessageVerifier` interface)
|
||||
- Send messages (remember to pass an implementation of `MessageVerifierSender` interface)
|
||||
|
||||
Stub Runner uses the https://wiki.eclipse.org/Aether[Eclipse Aether] mechanism to download the Maven dependencies.
|
||||
Check their https://wiki.eclipse.org/Aether[docs] for more information.
|
||||
@@ -430,7 +430,7 @@ See the <<features-stub-runner-common-properties-junit-spring>> for more informa
|
||||
how to apply global configuration of Stub Runner.
|
||||
|
||||
IMPORTANT: To use the JUnit rule or JUnit 5 extension together with messaging, you have to provide an implementation of the
|
||||
`MessageVerifier` interface to the rule builder (for example, `rule.messageVerifier(new MyMessageVerifier())`).
|
||||
`MessageVerifierSender` and `MessageVerifierReceiver` interface to the rule builder (for example, `rule.messageVerifierSender(new MyMessageVerifierSender())`).
|
||||
If you do not do this, then, whenever you try to send a message, an exception is thrown.
|
||||
|
||||
[[features-stub-runner-rule-maven-settings]]
|
||||
|
||||
@@ -20,13 +20,14 @@ import java.util.Map;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import org.springframework.cloud.contract.verifier.converter.YamlContract;
|
||||
import org.springframework.cloud.contract.verifier.messaging.MessageVerifier;
|
||||
import org.springframework.cloud.contract.verifier.messaging.MessageVerifierReceiver;
|
||||
import org.springframework.cloud.contract.verifier.messaging.MessageVerifierSender;
|
||||
|
||||
/**
|
||||
* @author Olga Maciaszek-Sharma
|
||||
* @since 2.1.0
|
||||
*/
|
||||
class ExceptionThrowingMessageVerifier implements MessageVerifier {
|
||||
class ExceptionThrowingMessageVerifier implements MessageVerifierSender, MessageVerifierReceiver {
|
||||
|
||||
private static final String EXCEPTION_MESSAGE = "Please provide a custom MessageVerifier to use this feature";
|
||||
|
||||
|
||||
@@ -43,7 +43,8 @@ import org.springframework.cloud.contract.stubrunner.StubNotFoundException;
|
||||
import org.springframework.cloud.contract.stubrunner.StubRunnerOptions;
|
||||
import org.springframework.cloud.contract.stubrunner.StubRunnerOptionsBuilder;
|
||||
import org.springframework.cloud.contract.stubrunner.spring.StubRunnerProperties;
|
||||
import org.springframework.cloud.contract.verifier.messaging.MessageVerifier;
|
||||
import org.springframework.cloud.contract.verifier.messaging.MessageVerifierReceiver;
|
||||
import org.springframework.cloud.contract.verifier.messaging.MessageVerifierSender;
|
||||
|
||||
/**
|
||||
* JUnit 5 extension that allows to download and run stubs.
|
||||
@@ -71,7 +72,9 @@ public class StubRunnerExtension implements BeforeAllCallback, AfterAllCallback,
|
||||
private StubRunnerOptionsBuilder stubRunnerOptionsBuilder = new StubRunnerOptionsBuilder(
|
||||
StubRunnerOptions.fromSystemProps());
|
||||
|
||||
private MessageVerifier verifier = new ExceptionThrowingMessageVerifier();
|
||||
private MessageVerifierSender verifierSender = new ExceptionThrowingMessageVerifier();
|
||||
|
||||
private MessageVerifierReceiver verifierReceiver = new ExceptionThrowingMessageVerifier();
|
||||
|
||||
public StubRunnerExtension() {
|
||||
}
|
||||
@@ -121,7 +124,7 @@ public class StubRunnerExtension implements BeforeAllCallback, AfterAllCallback,
|
||||
}
|
||||
|
||||
private void before() {
|
||||
stubFinder(new BatchStubRunnerFactory(builder().build(), verifier()).buildBatchStubRunner());
|
||||
stubFinder(new BatchStubRunnerFactory(builder().build(), verifierSender()).buildBatchStubRunner());
|
||||
stubFinder().runStubs();
|
||||
}
|
||||
|
||||
@@ -188,8 +191,14 @@ public class StubRunnerExtension implements BeforeAllCallback, AfterAllCallback,
|
||||
}
|
||||
|
||||
@Override
|
||||
public StubRunnerExtension messageVerifier(MessageVerifier messageVerifier) {
|
||||
verifier(messageVerifier);
|
||||
public StubRunnerExtension messageVerifierSender(MessageVerifierSender messageVerifier) {
|
||||
verifierSender(messageVerifier);
|
||||
return this.delegate;
|
||||
}
|
||||
|
||||
@Override
|
||||
public StubRunnerExtension messageVerifierReceiver(MessageVerifierReceiver messageVerifier) {
|
||||
verifierReceiver(messageVerifier);
|
||||
return this.delegate;
|
||||
}
|
||||
|
||||
@@ -326,12 +335,20 @@ public class StubRunnerExtension implements BeforeAllCallback, AfterAllCallback,
|
||||
return this.delegate.stubRunnerOptionsBuilder;
|
||||
}
|
||||
|
||||
MessageVerifier verifier() {
|
||||
return this.delegate.verifier;
|
||||
MessageVerifierSender verifierSender() {
|
||||
return this.delegate.verifierSender;
|
||||
}
|
||||
|
||||
void verifier(MessageVerifier verifier) {
|
||||
this.delegate.verifier = verifier;
|
||||
MessageVerifierReceiver verifierReceiver() {
|
||||
return this.delegate.verifierReceiver;
|
||||
}
|
||||
|
||||
void verifierSender(MessageVerifierSender verifier) {
|
||||
this.delegate.verifierSender = verifier;
|
||||
}
|
||||
|
||||
void verifierReceiver(MessageVerifierReceiver verifier) {
|
||||
this.delegate.verifierReceiver = verifier;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -22,7 +22,8 @@ import java.util.Map;
|
||||
import org.springframework.cloud.contract.stubrunner.HttpServerStubConfigurer;
|
||||
import org.springframework.cloud.contract.stubrunner.StubRunnerOptions;
|
||||
import org.springframework.cloud.contract.stubrunner.spring.StubRunnerProperties;
|
||||
import org.springframework.cloud.contract.verifier.messaging.MessageVerifier;
|
||||
import org.springframework.cloud.contract.verifier.messaging.MessageVerifierReceiver;
|
||||
import org.springframework.cloud.contract.verifier.messaging.MessageVerifierSender;
|
||||
|
||||
/**
|
||||
* @author Olga Maciaszek-Sharma
|
||||
@@ -31,13 +32,22 @@ import org.springframework.cloud.contract.verifier.messaging.MessageVerifier;
|
||||
interface StubRunnerExtensionOptions {
|
||||
|
||||
/**
|
||||
* Pass the {@link MessageVerifier} that this rule should use. If you don't pass
|
||||
* Pass the {@link MessageVerifierSender} that this rule should use. If you don't pass
|
||||
* anything a {@link ExceptionThrowingMessageVerifier} will be used. That means that
|
||||
* an exception will be thrown whenever you try to do sth messaging related.
|
||||
* @param messageVerifier message verifier implementation
|
||||
* @return the stub runner extension
|
||||
*/
|
||||
StubRunnerExtension messageVerifier(MessageVerifier messageVerifier);
|
||||
StubRunnerExtension messageVerifierSender(MessageVerifierSender messageVerifier);
|
||||
|
||||
/**
|
||||
* Pass the {@link MessageVerifierReceiver} that this rule should use. If you don't
|
||||
* pass anything a {@link ExceptionThrowingMessageVerifier} will be used. That means
|
||||
* that an exception will be thrown whenever you try to do sth messaging related.
|
||||
* @param messageVerifier message verifier implementation
|
||||
* @return the stub runner extension
|
||||
*/
|
||||
StubRunnerExtension messageVerifierReceiver(MessageVerifierReceiver messageVerifier);
|
||||
|
||||
/**
|
||||
* Override all options.
|
||||
|
||||
@@ -36,7 +36,8 @@ import org.springframework.cloud.contract.stubrunner.StubFinder;
|
||||
import org.springframework.cloud.contract.stubrunner.StubRunnerOptions;
|
||||
import org.springframework.cloud.contract.stubrunner.StubRunnerOptionsBuilder;
|
||||
import org.springframework.cloud.contract.stubrunner.spring.StubRunnerProperties;
|
||||
import org.springframework.cloud.contract.verifier.messaging.MessageVerifier;
|
||||
import org.springframework.cloud.contract.verifier.messaging.MessageVerifierReceiver;
|
||||
import org.springframework.cloud.contract.verifier.messaging.MessageVerifierSender;
|
||||
|
||||
/**
|
||||
* JUnit class rule that allows you to download the provided stubs.
|
||||
@@ -54,7 +55,9 @@ public class StubRunnerRule implements TestRule, StubFinder, StubRunnerRuleOptio
|
||||
|
||||
BatchStubRunner stubFinder;
|
||||
|
||||
MessageVerifier verifier = new ExceptionThrowingMessageVerifier();
|
||||
MessageVerifierSender verifierSender = new ExceptionThrowingMessageVerifier();
|
||||
|
||||
MessageVerifierReceiver verifierReceiver = new ExceptionThrowingMessageVerifier();
|
||||
|
||||
StubRunnerRule delegate = this;
|
||||
|
||||
@@ -76,14 +79,20 @@ public class StubRunnerRule implements TestRule, StubFinder, StubRunnerRuleOptio
|
||||
}
|
||||
|
||||
private void before() {
|
||||
stubFinder(new BatchStubRunnerFactory(builder().build(), verifier()).buildBatchStubRunner());
|
||||
stubFinder(new BatchStubRunnerFactory(builder().build(), verifierSender()).buildBatchStubRunner());
|
||||
StubRunnerRule.this.stubFinder().runStubs();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public StubRunnerRule messageVerifier(MessageVerifier messageVerifier) {
|
||||
public StubRunnerRule messageVerifierSender(MessageVerifierSender messageVerifier) {
|
||||
verifier(messageVerifier);
|
||||
return this.delegate;
|
||||
}
|
||||
|
||||
@Override
|
||||
public StubRunnerRule messageVerifierReceiver(MessageVerifierReceiver messageVerifier) {
|
||||
verifier(messageVerifier);
|
||||
return this.delegate;
|
||||
}
|
||||
@@ -270,12 +279,20 @@ public class StubRunnerRule implements TestRule, StubFinder, StubRunnerRuleOptio
|
||||
this.delegate.stubFinder = stubFinder;
|
||||
}
|
||||
|
||||
MessageVerifier verifier() {
|
||||
return this.delegate.verifier;
|
||||
MessageVerifierSender verifierSender() {
|
||||
return this.delegate.verifierSender;
|
||||
}
|
||||
|
||||
void verifier(MessageVerifier verifier) {
|
||||
this.delegate.verifier = verifier;
|
||||
MessageVerifierReceiver verifierReceiver() {
|
||||
return this.delegate.verifierReceiver;
|
||||
}
|
||||
|
||||
void verifier(MessageVerifierSender verifier) {
|
||||
this.delegate.verifierSender = verifier;
|
||||
}
|
||||
|
||||
void verifier(MessageVerifierReceiver verifier) {
|
||||
this.delegate.verifierReceiver = verifier;
|
||||
}
|
||||
|
||||
StubRunnerOptionsBuilder builder() {
|
||||
|
||||
@@ -22,18 +22,28 @@ import java.util.Map;
|
||||
import org.springframework.cloud.contract.stubrunner.HttpServerStubConfigurer;
|
||||
import org.springframework.cloud.contract.stubrunner.StubRunnerOptions;
|
||||
import org.springframework.cloud.contract.stubrunner.spring.StubRunnerProperties;
|
||||
import org.springframework.cloud.contract.verifier.messaging.MessageVerifier;
|
||||
import org.springframework.cloud.contract.verifier.messaging.MessageVerifierReceiver;
|
||||
import org.springframework.cloud.contract.verifier.messaging.MessageVerifierSender;
|
||||
|
||||
interface StubRunnerRuleOptions {
|
||||
|
||||
/**
|
||||
* Pass the {@link MessageVerifier} that this rule should use. If you don't pass
|
||||
* Pass the {@link MessageVerifierSender} that this rule should use. If you don't pass
|
||||
* anything a {@link ExceptionThrowingMessageVerifier} will be used. That means that
|
||||
* an exception will be thrown whenever you try to do sth messaging related.
|
||||
* @param messageVerifier message verifier implementation
|
||||
* @return the rule
|
||||
*/
|
||||
StubRunnerRule messageVerifier(MessageVerifier messageVerifier);
|
||||
StubRunnerRule messageVerifierSender(MessageVerifierSender messageVerifier);
|
||||
|
||||
/**
|
||||
* Pass the {@link MessageVerifierReceiver} that this rule should use. If you don't
|
||||
* pass anything a {@link ExceptionThrowingMessageVerifier} will be used. That means
|
||||
* that an exception will be thrown whenever you try to do sth messaging related.
|
||||
* @param messageVerifier message verifier implementation
|
||||
* @return the rule
|
||||
*/
|
||||
StubRunnerRule messageVerifierReceiver(MessageVerifierReceiver messageVerifier);
|
||||
|
||||
/**
|
||||
* Override all options.
|
||||
|
||||
@@ -34,7 +34,6 @@ import org.springframework.cloud.contract.stubrunner.StubDownloaderBuilderProvid
|
||||
import org.springframework.cloud.contract.stubrunner.StubRunnerOptions;
|
||||
import org.springframework.cloud.contract.stubrunner.StubRunnerOptionsBuilder;
|
||||
import org.springframework.cloud.contract.verifier.converter.YamlContract;
|
||||
import org.springframework.cloud.contract.verifier.messaging.MessageVerifier;
|
||||
import org.springframework.cloud.contract.verifier.messaging.MessageVerifierReceiver;
|
||||
import org.springframework.cloud.contract.verifier.messaging.MessageVerifierSender;
|
||||
import org.springframework.cloud.contract.verifier.messaging.noop.NoOpStubMessages;
|
||||
@@ -158,7 +157,7 @@ public class StubRunnerConfiguration {
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
class LazyMessageVerifier implements MessageVerifier {
|
||||
class LazyMessageVerifier implements MessageVerifierSender, MessageVerifierReceiver {
|
||||
|
||||
private MessageVerifierSender<?> messageVerifierSender;
|
||||
|
||||
|
||||
@@ -23,7 +23,8 @@ import spock.lang.Specification
|
||||
|
||||
import org.springframework.cloud.contract.stubrunner.util.StubsParser
|
||||
import org.springframework.cloud.contract.verifier.converter.YamlContract
|
||||
import org.springframework.cloud.contract.verifier.messaging.MessageVerifier
|
||||
import org.springframework.cloud.contract.verifier.messaging.MessageVerifierReceiver
|
||||
import org.springframework.cloud.contract.verifier.messaging.MessageVerifierSender
|
||||
import org.springframework.cloud.test.TestSocketUtils
|
||||
|
||||
class StubRunnerExecutorSpec extends Specification {
|
||||
@@ -164,7 +165,7 @@ class StubRunnerExecutorSpec extends Specification {
|
||||
executor.shutdown()
|
||||
}
|
||||
|
||||
class MockMessageVerifier implements MessageVerifier {
|
||||
class MockMessageVerifier implements MessageVerifierSender, MessageVerifierReceiver {
|
||||
|
||||
boolean called
|
||||
|
||||
@@ -199,7 +200,7 @@ class StubRunnerExecutorSpec extends Specification {
|
||||
}
|
||||
}
|
||||
|
||||
private class AssertingStubMessages implements MessageVerifier<Object> {
|
||||
private class AssertingStubMessages implements MessageVerifierSender<Object>, MessageVerifierReceiver<Object> {
|
||||
|
||||
@Override
|
||||
void send(Object message, String destination, YamlContract contract) {
|
||||
|
||||
@@ -27,8 +27,8 @@ import spock.lang.Specification
|
||||
import org.springframework.cloud.contract.stubrunner.junit.StubRunnerRule
|
||||
import org.springframework.cloud.contract.stubrunner.spring.StubRunnerProperties
|
||||
import org.springframework.cloud.contract.verifier.converter.YamlContract
|
||||
import org.springframework.cloud.contract.verifier.messaging.MessageVerifier
|
||||
|
||||
import org.springframework.cloud.contract.verifier.messaging.MessageVerifierReceiver
|
||||
import org.springframework.cloud.contract.verifier.messaging.MessageVerifierSender
|
||||
/**
|
||||
* @author Marcin Grzejszczak
|
||||
*/
|
||||
@@ -47,7 +47,8 @@ class StubRunnerRuleCustomMsgVerifierSpec extends Specification {
|
||||
.stubsMode(StubRunnerProperties.StubsMode.REMOTE)
|
||||
.repoRoot(StubRunnerRuleCustomMsgVerifierSpec.getResource("/m2repo/repository").toURI().toString())
|
||||
.downloadStub("org.springframework.cloud.contract.verifier.stubs", "bootService")
|
||||
.messageVerifier(new MyMessageVerifier())
|
||||
.messageVerifierSender(new MyMessageVerifier())
|
||||
.messageVerifierReceiver(new MyMessageVerifier())
|
||||
|
||||
def 'should use the provided message verifier in the junit rule'() {
|
||||
when:
|
||||
@@ -67,7 +68,7 @@ class StubRunnerRuleCustomMsgVerifierSpec extends Specification {
|
||||
e.message.contains("Failed to send a message with headers")
|
||||
}
|
||||
|
||||
static class MyMessageVerifier implements MessageVerifier {
|
||||
static class MyMessageVerifier implements MessageVerifierSender, MessageVerifierReceiver {
|
||||
|
||||
@Override
|
||||
void send(Object message, String destination, YamlContract contract) {
|
||||
|
||||
@@ -29,7 +29,8 @@ import org.springframework.boot.test.web.client.TestRestTemplate
|
||||
import org.springframework.cloud.contract.stubrunner.StubFinder
|
||||
import org.springframework.cloud.contract.stubrunner.spring.AutoConfigureStubRunner
|
||||
import org.springframework.cloud.contract.stubrunner.spring.StubRunnerProperties
|
||||
import org.springframework.cloud.contract.verifier.messaging.MessageVerifier
|
||||
import org.springframework.cloud.contract.verifier.messaging.MessageVerifierReceiver
|
||||
import org.springframework.cloud.contract.verifier.messaging.MessageVerifierSender
|
||||
import org.springframework.cloud.stream.binder.test.TestChannelBinderConfiguration
|
||||
import org.springframework.context.annotation.Bean
|
||||
import org.springframework.context.annotation.Configuration
|
||||
@@ -37,7 +38,6 @@ import org.springframework.core.env.Environment
|
||||
import org.springframework.http.ResponseEntity
|
||||
import org.springframework.messaging.Message
|
||||
import org.springframework.test.context.ActiveProfiles
|
||||
|
||||
/**
|
||||
* @author Marcin Grzejszczak
|
||||
*/
|
||||
@@ -56,7 +56,7 @@ class StubRunnerStubsPerConsumerSpec {
|
||||
@Autowired
|
||||
Environment environment
|
||||
@Autowired
|
||||
MessageVerifier<Message<?>> messaging
|
||||
MessageVerifierReceiver<Message<?>> messaging
|
||||
TestRestTemplate template = new TestRestTemplate()
|
||||
|
||||
@Test
|
||||
|
||||
@@ -20,7 +20,6 @@ import java.util.function.Function
|
||||
|
||||
import org.assertj.core.api.BDDAssertions
|
||||
import org.junit.jupiter.api.Test
|
||||
import spock.lang.Specification
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired
|
||||
import org.springframework.boot.autoconfigure.EnableAutoConfiguration
|
||||
@@ -30,7 +29,7 @@ import org.springframework.boot.test.web.client.TestRestTemplate
|
||||
import org.springframework.cloud.contract.stubrunner.StubFinder
|
||||
import org.springframework.cloud.contract.stubrunner.spring.AutoConfigureStubRunner
|
||||
import org.springframework.cloud.contract.stubrunner.spring.StubRunnerProperties
|
||||
import org.springframework.cloud.contract.verifier.messaging.MessageVerifier
|
||||
import org.springframework.cloud.contract.verifier.messaging.MessageVerifierReceiver
|
||||
import org.springframework.cloud.stream.binder.test.TestChannelBinderConfiguration
|
||||
import org.springframework.context.annotation.Bean
|
||||
import org.springframework.context.annotation.Configuration
|
||||
@@ -57,7 +56,7 @@ class StubRunnerStubsPerConsumerWithConsumerNameSpec {
|
||||
@Autowired
|
||||
Environment environment
|
||||
@Autowired
|
||||
MessageVerifier<Message<?>> messaging
|
||||
MessageVerifierReceiver<Message<?>> messaging
|
||||
|
||||
TestRestTemplate template = new TestRestTemplate()
|
||||
|
||||
|
||||
@@ -27,7 +27,8 @@ import org.junit.jupiter.api.extension.RegisterExtension;
|
||||
import org.springframework.cloud.contract.stubrunner.junit4.StubRunnerRuleCustomPortJUnitTest;
|
||||
import org.springframework.cloud.contract.stubrunner.spring.StubRunnerProperties;
|
||||
import org.springframework.cloud.contract.verifier.converter.YamlContract;
|
||||
import org.springframework.cloud.contract.verifier.messaging.MessageVerifier;
|
||||
import org.springframework.cloud.contract.verifier.messaging.MessageVerifierReceiver;
|
||||
import org.springframework.cloud.contract.verifier.messaging.MessageVerifierSender;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
@@ -43,7 +44,7 @@ class StubRunnerJUnit5ExtensionCustomMessageVerifierTests {
|
||||
static StubRunnerExtension stubRunnerExtension = new StubRunnerExtension()
|
||||
.stubsMode(StubRunnerProperties.StubsMode.REMOTE).repoRoot(repoRoot())
|
||||
.downloadStub("org.springframework.cloud.contract.verifier.stubs", "bootService")
|
||||
.messageVerifier(new MyMessageVerifier());
|
||||
.messageVerifierSender(new MyMessageVerifier()).messageVerifierReceiver(new MyMessageVerifier());
|
||||
|
||||
@BeforeAll
|
||||
@AfterAll
|
||||
@@ -74,7 +75,7 @@ class StubRunnerJUnit5ExtensionCustomMessageVerifierTests {
|
||||
assertThat(wrongLabelWithIvyNotation.getMessage()).contains("Failed to send a message with headers");
|
||||
}
|
||||
|
||||
static class MyMessageVerifier implements MessageVerifier {
|
||||
static class MyMessageVerifier implements MessageVerifierSender, MessageVerifierReceiver {
|
||||
|
||||
@Override
|
||||
public void send(Object message, String destination, YamlContract contract) {
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
/*
|
||||
* Copyright 2013-2020 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.cloud.contract.verifier.messaging;
|
||||
|
||||
/**
|
||||
* Core interface that allows you to build, send and receive messages.
|
||||
*
|
||||
* Destination is relevant to the underlying implementation. Might be a channel, queue,
|
||||
* topic etc.
|
||||
*
|
||||
* @param <M> message type
|
||||
* @author Marcin Grzejszczak
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public interface MessageVerifier<M> extends MessageVerifierSender<M>, MessageVerifierReceiver<M> {
|
||||
|
||||
}
|
||||
@@ -29,14 +29,15 @@ import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import org.springframework.cloud.contract.verifier.converter.YamlContract;
|
||||
import org.springframework.cloud.contract.verifier.messaging.MessageVerifier;
|
||||
import org.springframework.cloud.contract.verifier.messaging.MessageVerifierReceiver;
|
||||
import org.springframework.cloud.contract.verifier.messaging.MessageVerifierSender;
|
||||
import org.springframework.cloud.contract.verifier.messaging.internal.ContractVerifierMessageMetadata;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
/**
|
||||
* @author Marcin Grzejszczak
|
||||
*/
|
||||
public class CamelStubMessages implements MessageVerifier<Message> {
|
||||
public class CamelStubMessages implements MessageVerifierSender<Message>, MessageVerifierReceiver<Message> {
|
||||
|
||||
private static final Logger log = LoggerFactory.getLogger(CamelStubMessages.class);
|
||||
|
||||
|
||||
@@ -50,7 +50,8 @@ public class ContractVerifierIntegrationConfiguration {
|
||||
@ConditionalOnMissingBean(MessageVerifierSender.class)
|
||||
public MessageVerifierSender<Message<?>> integrationContractVerifierMessageSender(
|
||||
ApplicationContext applicationContext) {
|
||||
SpringIntegrationStubMessages springIntegrationStubMessages = new SpringIntegrationStubMessages(applicationContext);
|
||||
SpringIntegrationStubMessages springIntegrationStubMessages = new SpringIntegrationStubMessages(
|
||||
applicationContext);
|
||||
return new MessageVerifierSender<>() {
|
||||
@Override
|
||||
public void send(Message<?> message, String destination, @Nullable YamlContract contract) {
|
||||
@@ -58,7 +59,8 @@ public class ContractVerifierIntegrationConfiguration {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> void send(T payload, Map<String, Object> headers, String destination, @Nullable YamlContract contract) {
|
||||
public <T> void send(T payload, Map<String, Object> headers, String destination,
|
||||
@Nullable YamlContract contract) {
|
||||
springIntegrationStubMessages.send(payload, headers, destination, contract);
|
||||
}
|
||||
};
|
||||
@@ -68,10 +70,12 @@ public class ContractVerifierIntegrationConfiguration {
|
||||
@ConditionalOnMissingBean(MessageVerifierReceiver.class)
|
||||
public MessageVerifierReceiver<Message<?>> integrationContractVerifierMessageReceiver(
|
||||
ApplicationContext applicationContext) {
|
||||
SpringIntegrationStubMessages springIntegrationStubMessages = new SpringIntegrationStubMessages(applicationContext);
|
||||
SpringIntegrationStubMessages springIntegrationStubMessages = new SpringIntegrationStubMessages(
|
||||
applicationContext);
|
||||
return new MessageVerifierReceiver<>() {
|
||||
@Override
|
||||
public Message<?> receive(String destination, long timeout, TimeUnit timeUnit, @Nullable YamlContract contract) {
|
||||
public Message<?> receive(String destination, long timeout, TimeUnit timeUnit,
|
||||
@Nullable YamlContract contract) {
|
||||
return springIntegrationStubMessages.receive(destination, timeout, timeUnit, contract);
|
||||
}
|
||||
|
||||
|
||||
@@ -23,7 +23,6 @@ import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
import org.springframework.cloud.contract.verifier.converter.YamlContract;
|
||||
import org.springframework.cloud.contract.verifier.messaging.MessageVerifier;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.messaging.Message;
|
||||
import org.springframework.messaging.MessageChannel;
|
||||
@@ -32,7 +31,9 @@ import org.springframework.messaging.PollableChannel;
|
||||
/**
|
||||
* @author Marcin Grzejszczak
|
||||
*/
|
||||
public class SpringIntegrationStubMessages implements MessageVerifier<Message<?>> {
|
||||
public class SpringIntegrationStubMessages
|
||||
implements org.springframework.cloud.contract.verifier.messaging.MessageVerifierSender<Message<?>>,
|
||||
org.springframework.cloud.contract.verifier.messaging.MessageVerifierReceiver<Message<?>> {
|
||||
|
||||
private static final Log log = LogFactory.getLog(SpringIntegrationStubMessages.class);
|
||||
|
||||
|
||||
@@ -24,14 +24,13 @@ import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
import org.springframework.cloud.contract.verifier.converter.YamlContract;
|
||||
import org.springframework.cloud.contract.verifier.messaging.MessageVerifier;
|
||||
import org.springframework.cloud.contract.verifier.messaging.MessageVerifierReceiver;
|
||||
import org.springframework.cloud.contract.verifier.messaging.MessageVerifierSender;
|
||||
|
||||
/**
|
||||
* Wrapper around messaging. Abstracts all message related operations like sending,
|
||||
* converting and receiving. Delegates the actual work to an implementation of a
|
||||
* {@link MessageVerifier}.
|
||||
* {@link MessageVerifierSender} and {@link MessageVerifierReceiver}.
|
||||
*
|
||||
* @param <M> message type
|
||||
* @author Dave Syer
|
||||
|
||||
@@ -67,7 +67,8 @@ public class ContractVerifierJmsConfiguration {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> void send(T payload, Map<String, Object> headers, String destination, @Nullable YamlContract contract) {
|
||||
public <T> void send(T payload, Map<String, Object> headers, String destination,
|
||||
@Nullable YamlContract contract) {
|
||||
jmsStubMessages.send(payload, headers, destination, contract);
|
||||
}
|
||||
};
|
||||
@@ -81,7 +82,8 @@ public class ContractVerifierJmsConfiguration {
|
||||
JmsStubMessages jmsStubMessages = new JmsStubMessages(jmsTemplate);
|
||||
return new MessageVerifierReceiver<>() {
|
||||
@Override
|
||||
public Message receive(String destination, long timeout, TimeUnit timeUnit, @Nullable YamlContract contract) {
|
||||
public Message receive(String destination, long timeout, TimeUnit timeUnit,
|
||||
@Nullable YamlContract contract) {
|
||||
return jmsStubMessages.receive(destination, timeout, timeUnit, contract);
|
||||
}
|
||||
|
||||
|
||||
@@ -27,11 +27,11 @@ import jakarta.jms.Message;
|
||||
import jakarta.jms.Session;
|
||||
|
||||
import org.springframework.cloud.contract.verifier.converter.YamlContract;
|
||||
import org.springframework.cloud.contract.verifier.messaging.MessageVerifier;
|
||||
import org.springframework.jms.core.JmsTemplate;
|
||||
import org.springframework.jms.core.MessagePostProcessor;
|
||||
|
||||
class JmsStubMessages implements MessageVerifier<Message> {
|
||||
class JmsStubMessages implements org.springframework.cloud.contract.verifier.messaging.MessageVerifierSender<Message>,
|
||||
org.springframework.cloud.contract.verifier.messaging.MessageVerifierReceiver<Message> {
|
||||
|
||||
private final JmsTemplate jmsTemplate;
|
||||
|
||||
|
||||
@@ -55,7 +55,8 @@ public class NoOpContractVerifierAutoConfiguration {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> void send(T payload, Map<String, Object> headers, String destination, @Nullable YamlContract contract) {
|
||||
public <T> void send(T payload, Map<String, Object> headers, String destination,
|
||||
@Nullable YamlContract contract) {
|
||||
noOpStubMessages.send(payload, headers, destination, contract);
|
||||
}
|
||||
};
|
||||
@@ -68,7 +69,8 @@ public class NoOpContractVerifierAutoConfiguration {
|
||||
return new MessageVerifierReceiver<>() {
|
||||
|
||||
@Override
|
||||
public Object receive(String destination, long timeout, TimeUnit timeUnit, @Nullable YamlContract contract) {
|
||||
public Object receive(String destination, long timeout, TimeUnit timeUnit,
|
||||
@Nullable YamlContract contract) {
|
||||
return noOpStubMessages.receive(destination, timeout, timeUnit, contract);
|
||||
}
|
||||
|
||||
|
||||
@@ -20,12 +20,13 @@ import java.util.Map;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import org.springframework.cloud.contract.verifier.converter.YamlContract;
|
||||
import org.springframework.cloud.contract.verifier.messaging.MessageVerifier;
|
||||
|
||||
/**
|
||||
* @author Marcin Grzejszczak
|
||||
*/
|
||||
public class NoOpStubMessages<U> implements MessageVerifier<U> {
|
||||
public class NoOpStubMessages<U>
|
||||
implements org.springframework.cloud.contract.verifier.messaging.MessageVerifierSender<U>,
|
||||
org.springframework.cloud.contract.verifier.messaging.MessageVerifierReceiver<U> {
|
||||
|
||||
@Override
|
||||
public void send(U message, String destination, YamlContract contract) {
|
||||
|
||||
@@ -72,7 +72,8 @@ public class ContractVerifierStreamAutoConfiguration {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> void send(T payload, Map<String, Object> headers, String destination, @Nullable YamlContract contract) {
|
||||
public <T> void send(T payload, Map<String, Object> headers, String destination,
|
||||
@Nullable YamlContract contract) {
|
||||
stubMessages.send(payload, headers, destination, contract);
|
||||
}
|
||||
};
|
||||
@@ -86,7 +87,8 @@ public class ContractVerifierStreamAutoConfiguration {
|
||||
new StreamOutputDestinationMessageReceiver(context));
|
||||
return new MessageVerifierReceiver<>() {
|
||||
@Override
|
||||
public Message<?> receive(String destination, long timeout, TimeUnit timeUnit, @Nullable YamlContract contract) {
|
||||
public Message<?> receive(String destination, long timeout, TimeUnit timeUnit,
|
||||
@Nullable YamlContract contract) {
|
||||
return stubMessages.receive(destination, timeout, timeUnit, contract);
|
||||
}
|
||||
|
||||
|
||||
@@ -20,7 +20,6 @@ import java.util.Map;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import org.springframework.cloud.contract.verifier.converter.YamlContract;
|
||||
import org.springframework.cloud.contract.verifier.messaging.MessageVerifier;
|
||||
import org.springframework.cloud.contract.verifier.messaging.MessageVerifierReceiver;
|
||||
import org.springframework.cloud.contract.verifier.messaging.MessageVerifierSender;
|
||||
import org.springframework.messaging.Message;
|
||||
@@ -28,7 +27,7 @@ import org.springframework.messaging.Message;
|
||||
/**
|
||||
* @author Marcin Grzejszczak
|
||||
*/
|
||||
public class StreamStubMessages implements MessageVerifier<Message<?>> {
|
||||
public class StreamStubMessages implements MessageVerifierSender<Message<?>>, MessageVerifierReceiver<Message<?>> {
|
||||
|
||||
private final MessageVerifierSender<Message<?>> sender;
|
||||
|
||||
|
||||
@@ -21,7 +21,6 @@ import javax.inject.Inject
|
||||
import com.jayway.jsonpath.DocumentContext
|
||||
import com.jayway.jsonpath.JsonPath
|
||||
import com.toomuchcoding.jsonassert.JsonAssertion
|
||||
import org.apache.camel.Message
|
||||
import org.apache.camel.model.ModelCamelContext
|
||||
import org.junit.jupiter.api.Test
|
||||
import org.testcontainers.containers.RabbitMQContainer
|
||||
@@ -31,8 +30,8 @@ import org.testcontainers.junit.jupiter.Testcontainers
|
||||
import org.springframework.beans.factory.annotation.Autowired
|
||||
import org.springframework.boot.test.context.SpringBootTest
|
||||
import org.springframework.cloud.contract.spec.Contract
|
||||
import org.springframework.cloud.contract.verifier.messaging.MessageVerifier
|
||||
import org.springframework.cloud.contract.verifier.messaging.boot.AutoConfigureMessageVerifier
|
||||
import org.springframework.cloud.contract.verifier.messaging.internal.ContractVerifierMessaging
|
||||
import org.springframework.cloud.contract.verifier.messaging.internal.ContractVerifierObjectMapper
|
||||
import org.springframework.test.context.DynamicPropertyRegistry
|
||||
import org.springframework.test.context.DynamicPropertySource
|
||||
@@ -49,7 +48,7 @@ class CamelMessagingApplicationSpec {
|
||||
@Autowired
|
||||
ModelCamelContext camelContext
|
||||
@Inject
|
||||
MessageVerifier<Message> contractVerifierMessaging
|
||||
ContractVerifierMessaging contractVerifierMessaging
|
||||
|
||||
ContractVerifierObjectMapper contractVerifierObjectMapper = new ContractVerifierObjectMapper()
|
||||
|
||||
@@ -87,7 +86,7 @@ class CamelMessagingApplicationSpec {
|
||||
assert response.headers.get('BOOK-NAME') == 'foo'
|
||||
and:
|
||||
DocumentContext parsedJson = JsonPath.
|
||||
parse(contractVerifierObjectMapper.writeValueAsString(response.body))
|
||||
parse(contractVerifierObjectMapper.writeValueAsString(response.getPayload()))
|
||||
JsonAssertion.assertThat(parsedJson).field('bookName').isEqualTo('foo')
|
||||
}
|
||||
|
||||
|
||||
@@ -22,13 +22,12 @@ import com.jayway.jsonpath.DocumentContext
|
||||
import com.jayway.jsonpath.JsonPath
|
||||
import com.toomuchcoding.jsonassert.JsonAssertion
|
||||
import org.junit.jupiter.api.Test
|
||||
import spock.lang.Specification
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired
|
||||
import org.springframework.boot.test.context.SpringBootTest
|
||||
import org.springframework.cloud.contract.spec.Contract
|
||||
import org.springframework.cloud.contract.verifier.messaging.MessageVerifier
|
||||
import org.springframework.cloud.contract.verifier.messaging.boot.AutoConfigureMessageVerifier
|
||||
import org.springframework.cloud.contract.verifier.messaging.internal.ContractVerifierMessaging
|
||||
import org.springframework.cloud.contract.verifier.messaging.internal.ContractVerifierObjectMapper
|
||||
import org.springframework.messaging.Message
|
||||
|
||||
@@ -39,7 +38,7 @@ class IntegrationMessagingApplicationSpec {
|
||||
|
||||
// ALL CASES
|
||||
@Inject
|
||||
MessageVerifier<Message<?>> contractVerifierMessaging
|
||||
ContractVerifierMessaging<Message<?>> contractVerifierMessaging
|
||||
ContractVerifierObjectMapper contractVerifierObjectMapper = new ContractVerifierObjectMapper()
|
||||
|
||||
@Test
|
||||
|
||||
@@ -23,22 +23,18 @@ import com.jayway.jsonpath.JsonPath
|
||||
import com.toomuchcoding.jsonassert.JsonAssertion
|
||||
import jakarta.jms.JMSException
|
||||
import jakarta.jms.Message
|
||||
import org.awaitility.Awaitility
|
||||
import org.junit.jupiter.api.BeforeAll
|
||||
import org.junit.jupiter.api.Test
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired
|
||||
import org.springframework.boot.test.context.SpringBootTest
|
||||
import org.springframework.cloud.contract.spec.Contract
|
||||
import org.springframework.cloud.contract.verifier.messaging.MessageVerifier
|
||||
import org.springframework.cloud.contract.verifier.messaging.boot.AutoConfigureMessageVerifier
|
||||
import org.springframework.cloud.contract.verifier.messaging.internal.ContractVerifierMessage
|
||||
import org.springframework.cloud.contract.verifier.messaging.internal.ContractVerifierMessaging
|
||||
import org.springframework.cloud.contract.verifier.messaging.internal.ContractVerifierObjectMapper
|
||||
import org.springframework.jms.core.JmsTemplate
|
||||
import org.springframework.jms.core.MessagePostProcessor
|
||||
import org.springframework.test.annotation.DirtiesContext
|
||||
|
||||
/**
|
||||
* SPIKE ON TESTS FROM NOTES IN MessagingSpec
|
||||
*/
|
||||
@@ -51,8 +47,6 @@ class JmsMessagingApplicationSpec {
|
||||
@Autowired
|
||||
JmsTemplate jmsTemplate
|
||||
@Inject
|
||||
MessageVerifier<Message> messageVerifier
|
||||
@Inject
|
||||
ContractVerifierMessaging contractVerifierMessaging
|
||||
@Inject
|
||||
ContractVerifierObjectMapper contractVerifierObjectMapper
|
||||
|
||||
@@ -32,7 +32,7 @@ import org.springframework.boot.test.context.SpringBootTest
|
||||
import org.springframework.cloud.contract.spec.Contract
|
||||
import org.springframework.cloud.contract.stubrunner.StubFinder
|
||||
import org.springframework.cloud.contract.stubrunner.spring.AutoConfigureStubRunner
|
||||
import org.springframework.cloud.contract.verifier.messaging.integration.SpringIntegrationStubMessages
|
||||
import org.springframework.cloud.contract.verifier.messaging.internal.ContractVerifierMessaging
|
||||
import org.springframework.context.annotation.ComponentScan
|
||||
import org.springframework.context.annotation.Configuration
|
||||
import org.springframework.context.annotation.ImportResource
|
||||
@@ -49,7 +49,7 @@ class IntegrationStubRunnerSpec {
|
||||
@Autowired
|
||||
StubFinder stubFinder
|
||||
@Autowired
|
||||
SpringIntegrationStubMessages messaging
|
||||
ContractVerifierMessaging messaging
|
||||
|
||||
@BeforeEach
|
||||
void setup() {
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
|
||||
package org.springframework.cloud.contract.stubrunner.messaging.stream
|
||||
|
||||
|
||||
import java.util.function.Function
|
||||
|
||||
import groovy.json.JsonOutput
|
||||
@@ -33,8 +32,8 @@ import org.springframework.boot.test.context.SpringBootTest
|
||||
import org.springframework.cloud.contract.spec.Contract
|
||||
import org.springframework.cloud.contract.stubrunner.StubFinder
|
||||
import org.springframework.cloud.contract.stubrunner.spring.AutoConfigureStubRunner
|
||||
import org.springframework.cloud.contract.verifier.messaging.MessageVerifier
|
||||
import org.springframework.cloud.contract.verifier.messaging.boot.AutoConfigureMessageVerifier
|
||||
import org.springframework.cloud.contract.verifier.messaging.internal.ContractVerifierMessaging
|
||||
import org.springframework.cloud.stream.binder.test.TestChannelBinderConfiguration
|
||||
import org.springframework.context.annotation.Bean
|
||||
import org.springframework.context.annotation.Configuration
|
||||
@@ -53,7 +52,7 @@ class StreamStubRunnerSpec {
|
||||
@Autowired
|
||||
StubFinder stubFinder
|
||||
@Autowired
|
||||
MessageVerifier<Message<?>> messaging
|
||||
ContractVerifierMessaging<Message<?>> messaging
|
||||
|
||||
@Test
|
||||
void 'should trigger a message by label'() {
|
||||
|
||||
Reference in New Issue
Block a user