Fix AMQP test for NPE from mocks

https://build.spring.io/browse/INT-MAIN-261/

**Cherry-pick to `5.5.x`**
This commit is contained in:
Artem Bilan
2022-03-23 15:39:34 -04:00
parent 343be47c04
commit dfaf5001fe
2 changed files with 23 additions and 28 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2019 the original author or authors.
* Copyright 2002-2022 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.
@@ -18,18 +18,20 @@ package org.springframework.integration.amqp.config;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.BDDMockito.willReturn;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
import org.junit.After;
import org.junit.Test;
import org.junit.jupiter.api.Test;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;
@@ -41,6 +43,7 @@ import org.springframework.integration.handler.MessageProcessor;
import org.springframework.integration.test.util.TestUtils;
import org.springframework.messaging.Message;
import org.springframework.messaging.support.GenericMessage;
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
import org.springframework.test.util.ReflectionTestUtils;
/**
@@ -51,26 +54,22 @@ import org.springframework.test.util.ReflectionTestUtils;
*
* @since 2.1
*/
@SpringJUnitConfig
public class OutboundGatewayTests {
private static final ExpressionParser PARSER = new SpelExpressionParser();
private final ClassPathXmlApplicationContext context =
new ClassPathXmlApplicationContext(getClass().getSimpleName() + "-context.xml", getClass());
@After
public void tearDown() {
context.close();
}
@Autowired
ConfigurableApplicationContext context;
@Test
public void testVanillaConfiguration() throws Exception {
public void testVanillaConfiguration() {
assertThat(context.getBeanFactory().containsBeanDefinition("vanilla")).isTrue();
context.getBean("vanilla");
}
@Test
public void testExpressionBasedConfiguration() throws Exception {
public void testExpressionBasedConfiguration() {
assertThat(context.getBeanFactory().containsBeanDefinition("expression")).isTrue();
Object target = context.getBean("expression");
assertThat(ReflectionTestUtils.getField(ReflectionTestUtils.getField(target, "handler"),
@@ -79,7 +78,7 @@ public class OutboundGatewayTests {
@Test
@SuppressWarnings("unchecked")
public void testExpressionsBeanResolver() throws Exception {
public void testExpressionsBeanResolver() {
ApplicationContext context = mock(ApplicationContext.class);
doAnswer(invocation -> invocation.getArguments()[0] + "bar").when(context).getBean(anyString());
when(context.containsBean(IntegrationContextUtils.INTEGRATION_EVALUATION_CONTEXT_BEAN_NAME)).thenReturn(true);
@@ -92,8 +91,9 @@ public class OutboundGatewayTests {
StandardEvaluationContext evalContext = integrationEvaluationContextFactoryBean.getObject();
when(context.getBean(IntegrationContextUtils.INTEGRATION_EVALUATION_CONTEXT_BEAN_NAME,
StandardEvaluationContext.class))
.thenReturn(evalContext);
.thenReturn(evalContext);
RabbitTemplate template = spy(new RabbitTemplate());
willReturn(mock(ConnectionFactory.class)).given(template).getConnectionFactory();
AmqpOutboundEndpoint endpoint = new AmqpOutboundEndpoint(template);
endpoint.setRoutingKeyExpression(PARSER.parseExpression("@foo"));
endpoint.setExchangeNameExpression(PARSER.parseExpression("@bar"));

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2021 the original author or authors.
* Copyright 2002-2022 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.
@@ -30,9 +30,7 @@ import java.util.Collection;
import java.util.List;
import java.util.concurrent.TimeUnit;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.jupiter.api.Test;
import org.mockito.ArgumentCaptor;
import org.springframework.amqp.core.Queue;
@@ -40,7 +38,7 @@ import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.connection.CorrelationData;
import org.springframework.amqp.rabbit.connection.CorrelationData.Confirm;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.rabbit.junit.BrokerRunning;
import org.springframework.amqp.rabbit.junit.RabbitAvailable;
import org.springframework.amqp.support.AmqpHeaders;
import org.springframework.amqp.utils.test.TestUtils;
import org.springframework.beans.factory.BeanFactory;
@@ -59,8 +57,7 @@ import org.springframework.messaging.support.GenericMessage;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.annotation.DirtiesContext.ClassMode;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
/**
* @author Oleg Zhurakousky
@@ -71,14 +68,11 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
* @since 2.1
*
*/
@ContextConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
@SpringJUnitConfig
@RabbitAvailable
@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
public class AmqpOutboundEndpointTests {
@Rule
public BrokerRunning brokerRunning = BrokerRunning.isRunning();
@Autowired
private MessageChannel pcRequestChannel;
@@ -192,6 +186,7 @@ public class AmqpOutboundEndpointTests {
willDoNothing().given(template).send(isNull(), isNull(), any(), any());
List<CorrelationData> correlationList = new ArrayList<>();
willReturn(correlationList).given(template).getUnconfirmed(100L);
willReturn(mock(ConnectionFactory.class)).given(template).getConnectionFactory();
ArgumentCaptor<CorrelationData> correlationCaptor = ArgumentCaptor.forClass(CorrelationData.class);
AmqpOutboundEndpoint endpoint = new AmqpOutboundEndpoint(template);
PollableChannel nacks = new QueueChannel();
@@ -215,7 +210,7 @@ public class AmqpOutboundEndpointTests {
assertThat(nack.getPayload()).isInstanceOf(NackedAmqpMessageException.class);
assertThat(((NackedAmqpMessageException) nack.getPayload()).getFailedMessage()).isSameAs(message);
assertThat(((NackedAmqpMessageException) nack.getPayload()).getCorrelationData())
.isSameAs(message.getHeaders().getId());
.isSameAs(message.getHeaders().getId());
assertThat(((NackedAmqpMessageException) nack.getPayload()).getNackReason()).isEqualTo("Confirm timed out");
endpoint.stop();
sched.destroy();