Fixes messaging

This commit is contained in:
Marcin Grzejszczak
2022-11-18 20:11:10 +01:00
parent 65a6c5e95c
commit a5b97e6175
29 changed files with 144 additions and 118 deletions

View File

@@ -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";

View File

@@ -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;
}
/**

View File

@@ -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.

View File

@@ -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() {

View File

@@ -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.

View File

@@ -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;

View File

@@ -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) {

View File

@@ -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) {

View File

@@ -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

View File

@@ -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()

View File

@@ -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) {