Autoconfigure a basic ConnectionFactory as RabbitMockConnectionFactory (#1499)
* Autoconfigure a basic ConnectionFactory as RabbitMockConnectionFactory Autoconfigure a barebones ConnectionFactory implementation instead of CachingConnectionFactory. CachingConnectionFactory would require additional mocking to support its transaction tracking and caching the mocked connection isn't necessary. Fixes gh-1259 * Add Test Co-authored-by: Henning Garus <henning.garus@exxeta.com>
This commit is contained in:
committed by
Marcin Grzejszczak
parent
0f338ca5a0
commit
e4ed93acbf
@@ -23,12 +23,13 @@ import org.mockito.Mockito;
|
||||
import org.mockito.invocation.InvocationOnMock;
|
||||
import org.mockito.stubbing.Answer;
|
||||
|
||||
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
|
||||
import org.springframework.amqp.rabbit.connection.AbstractConnectionFactory;
|
||||
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.lang.NonNull;
|
||||
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.when;
|
||||
@@ -79,8 +80,11 @@ public class RabbitMockConnectionFactoryAutoConfiguration {
|
||||
catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
return new CachingConnectionFactory(mockConnectionFactory) {
|
||||
|
||||
return new AbstractConnectionFactory(mockConnectionFactory) {
|
||||
@Override
|
||||
public @NonNull org.springframework.amqp.rabbit.connection.Connection createConnection() {
|
||||
return super.createBareConnection();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -18,21 +18,31 @@ package org.springframework.cloud.contract.verifier.messaging.amqp;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import org.springframework.amqp.rabbit.core.RabbitTemplate;
|
||||
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
|
||||
import org.springframework.boot.autoconfigure.AutoConfigurations;
|
||||
import org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration;
|
||||
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
|
||||
import org.springframework.boot.test.mock.mockito.MockitoPostProcessor;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.assertThatCode;
|
||||
|
||||
/**
|
||||
* @author Tim Ysewyn
|
||||
* @author Henning Garus
|
||||
*/
|
||||
public class ContractVerifierAmqpAutoConfigurationTests {
|
||||
|
||||
private ApplicationContextRunner contextRunner = new ApplicationContextRunner()
|
||||
.withConfiguration(AutoConfigurations.of(RabbitAutoConfiguration.class,
|
||||
ContractVerifierAmqpAutoConfiguration.class,
|
||||
RabbitMockConnectionFactoryAutoConfiguration.class));
|
||||
RabbitMockConnectionFactoryAutoConfiguration.class))
|
||||
// register MockitoPostProcessor manually to perform the SpyBean injection for
|
||||
// ContractVerifierAmqpAutoConfiguration. This is normally done automatically
|
||||
// during test setup
|
||||
.withInitializer(context -> MockitoPostProcessor
|
||||
.register((BeanDefinitionRegistry) context));
|
||||
|
||||
@Test
|
||||
public void shouldNotCreateBeansByDefault() {
|
||||
@@ -55,7 +65,23 @@ public class ContractVerifierAmqpAutoConfigurationTests {
|
||||
|
||||
@Test
|
||||
public void shouldCreateBeansWhenExplicitlyEnabled() {
|
||||
// TODO
|
||||
this.contextRunner.withPropertyValues("stubrunner.amqp.enabled=true")
|
||||
.run((context) -> {
|
||||
assertThat(context.getBeansOfType(SpringAmqpStubMessages.class))
|
||||
.hasSize(1);
|
||||
assertThat(context.getBeansOfType(ContractVerifierHelper.class))
|
||||
.hasSize(1);
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldNotThrowOnSendWhenRabbitTemplateIsTransacted() {
|
||||
this.contextRunner.withPropertyValues("stubrunner.amqp.enabled=true")
|
||||
.run(context -> assertThatCode(() -> {
|
||||
RabbitTemplate rabbitTemplate = context.getBean(RabbitTemplate.class);
|
||||
rabbitTemplate.setChannelTransacted(true);
|
||||
rabbitTemplate.convertAndSend("A Message");
|
||||
}).doesNotThrowAnyException());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user