Skip to content

Commit fc984e0

Browse files
committed
GH-1419: Fix Local Node Name in Tests
Local node not always `rabbit@localhost`; can be `rabbit@realHostName`.
1 parent c2c534d commit fc984e0

File tree

1 file changed

+61
-9
lines changed

1 file changed

+61
-9
lines changed

spring-rabbit/src/test/java/org/springframework/amqp/rabbit/connection/LocalizedQueueConnectionFactoryIntegrationTests.java

+61-9
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,29 @@
1919
import static org.assertj.core.api.Assertions.assertThat;
2020
import static org.mockito.Mockito.mock;
2121

22+
import java.net.URI;
23+
import java.net.URISyntaxException;
24+
import java.nio.charset.StandardCharsets;
25+
import java.time.Duration;
2226
import java.util.Map;
2327
import java.util.UUID;
2428

2529
import org.junit.jupiter.api.AfterEach;
2630
import org.junit.jupiter.api.BeforeEach;
2731
import org.junit.jupiter.api.Test;
2832

33+
import org.springframework.amqp.core.AnonymousQueue;
2934
import org.springframework.amqp.core.Queue;
3035
import org.springframework.amqp.rabbit.core.RabbitAdmin;
3136
import org.springframework.amqp.rabbit.core.RabbitTemplate;
37+
import org.springframework.amqp.rabbit.junit.BrokerRunningSupport;
3238
import org.springframework.amqp.rabbit.junit.RabbitAvailable;
39+
import org.springframework.amqp.rabbit.junit.RabbitAvailableCondition;
40+
import org.springframework.core.ParameterizedTypeReference;
41+
import org.springframework.http.MediaType;
42+
import org.springframework.web.reactive.function.client.ExchangeFilterFunctions;
43+
import org.springframework.web.reactive.function.client.WebClient;
44+
import org.springframework.web.util.UriUtils;
3345

3446

3547
/**
@@ -43,23 +55,32 @@ public class LocalizedQueueConnectionFactoryIntegrationTests {
4355

4456
private CachingConnectionFactory defaultConnectionFactory;
4557

58+
private RabbitAdmin defaultAdmin;
59+
4660
@BeforeEach
4761
public void setup() {
4862
this.defaultConnectionFactory = new CachingConnectionFactory("localhost");
49-
String[] addresses = new String[] { "localhost:9999", "localhost:5672" };
50-
String[] adminUris = new String[] { "http://localhost:15672", "http://localhost:15672" };
51-
String[] nodes = new String[] { "foo@bar", "rabbit@localhost" };
63+
this.defaultAdmin = new RabbitAdmin(this.defaultConnectionFactory);
64+
BrokerRunningSupport brokerRunning = RabbitAvailableCondition.getBrokerRunning();
65+
String[] addresses = new String[] { "localhost:9999",
66+
brokerRunning.getHostName() + ":" + brokerRunning.getPort() };
67+
String[] adminUris = new String[] { brokerRunning.getAdminUri(), brokerRunning.getAdminUri() };
68+
String[] nodes = new String[] { "foo@bar", findLocalNode() };
5269
String vhost = "/";
53-
String username = "guest";
54-
String password = "guest";
70+
String username = brokerRunning.getAdminUser();
71+
String password = brokerRunning.getAdminPassword();
5572
this.lqcf = new LocalizedQueueConnectionFactory(defaultConnectionFactory, addresses,
5673
adminUris, nodes, vhost, username, password, false, null);
5774
}
5875

5976
@AfterEach
6077
public void tearDown() {
61-
this.lqcf.destroy();
62-
this.defaultConnectionFactory.destroy();
78+
if (this.lqcf != null) {
79+
this.lqcf.destroy();
80+
}
81+
if (this.defaultConnectionFactory != null) {
82+
this.defaultConnectionFactory.destroy();
83+
}
6384
}
6485

6586
@Test
@@ -68,6 +89,7 @@ public void testConnect() throws Exception {
6889
Queue queue = new Queue(UUID.randomUUID().toString(), false, false, true);
6990
admin.declareQueue(queue);
7091
ConnectionFactory targetConnectionFactory = this.lqcf.getTargetConnectionFactory("[" + queue.getName() + "]");
92+
assertThat(targetConnectionFactory).isNotSameAs(this.defaultConnectionFactory);
7193
RabbitTemplate template = new RabbitTemplate(targetConnectionFactory);
7294
template.convertAndSend("", queue.getName(), "foo");
7395
assertThat(template.receiveAndConvert(queue.getName())).isEqualTo("foo");
@@ -77,9 +99,11 @@ public void testConnect() throws Exception {
7799
@Test
78100
void findLocal() {
79101
ConnectionFactory defaultCf = mock(ConnectionFactory.class);
102+
BrokerRunningSupport brokerRunning = RabbitAvailableCondition.getBrokerRunning();
80103
LocalizedQueueConnectionFactory lqcf = new LocalizedQueueConnectionFactory(defaultCf,
81-
Map.of("rabbit@localhost", "localhost:5672"), new String[] { "http://localhost:15672" },
82-
"/", "guest", "guest", false, null);
104+
Map.of(findLocalNode(), brokerRunning.getHostName() + ":" + brokerRunning.getPort()),
105+
new String[] { brokerRunning.getAdminUri() },
106+
"/", brokerRunning.getAdminUser(), brokerRunning.getAdminPassword(), false, null);
83107
ConnectionFactory cf = lqcf.getTargetConnectionFactory("[local]");
84108
RabbitAdmin admin = new RabbitAdmin(cf);
85109
assertThat(admin.getQueueProperties("local")).isNotNull();
@@ -89,4 +113,32 @@ void findLocal() {
89113
lqcf.destroy();
90114
}
91115

116+
private String findLocalNode() {
117+
AnonymousQueue queue = new AnonymousQueue();
118+
this.defaultAdmin.declareQueue(queue);
119+
URI uri;
120+
BrokerRunningSupport brokerRunning = RabbitAvailableCondition.getBrokerRunning();
121+
try {
122+
uri = new URI(brokerRunning.getAdminUri())
123+
.resolve("/api/queues/" + UriUtils.encodePathSegment("/", StandardCharsets.UTF_8) + "/"
124+
+ queue.getName());
125+
}
126+
catch (URISyntaxException ex) {
127+
throw new IllegalStateException(ex);
128+
}
129+
WebClient client = WebClient.builder()
130+
.filter(ExchangeFilterFunctions.basicAuthentication(brokerRunning.getAdminUser(),
131+
brokerRunning.getAdminPassword()))
132+
.build();
133+
Map<String, Object> queueInfo = client.get()
134+
.uri(uri)
135+
.accept(MediaType.APPLICATION_JSON)
136+
.retrieve()
137+
.bodyToMono(new ParameterizedTypeReference<Map<String, Object>>() {
138+
})
139+
.block(Duration.ofSeconds(10));
140+
this.defaultAdmin.deleteQueue(queue.getName());
141+
return (String) queueInfo.get("node");
142+
}
143+
92144
}

0 commit comments

Comments
 (0)