Skip to content

Commit ffd6b7d

Browse files
committed
Disable DNS resolution when using TLS
Fixes #400 (cherry picked from commit 8dde8b5)
1 parent f750761 commit ffd6b7d

File tree

2 files changed

+60
-1
lines changed

2 files changed

+60
-1
lines changed

src/main/java/com/rabbitmq/client/ConnectionFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1273,7 +1273,7 @@ public Connection newConnection(ExecutorService executor, String connectionName)
12731273
}
12741274

12751275
protected AddressResolver createAddressResolver(List<Address> addresses) {
1276-
if(addresses.size() == 1) {
1276+
if(addresses.size() == 1 && !isSSL()) {
12771277
return new DnsRecordIpAddressResolver(addresses.get(0), isSSL());
12781278
} else {
12791279
return new ListAddressResolver(addresses);

src/test/java/com/rabbitmq/client/test/ConnectionFactoryTest.java

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,22 +16,32 @@
1616
package com.rabbitmq.client.test;
1717

1818
import com.rabbitmq.client.Address;
19+
import com.rabbitmq.client.AddressResolver;
1920
import com.rabbitmq.client.Connection;
2021
import com.rabbitmq.client.ConnectionFactory;
22+
import com.rabbitmq.client.DnsRecordIpAddressResolver;
23+
import com.rabbitmq.client.ListAddressResolver;
2124
import com.rabbitmq.client.MetricsCollector;
2225
import com.rabbitmq.client.impl.AMQConnection;
2326
import com.rabbitmq.client.impl.ConnectionParams;
2427
import com.rabbitmq.client.impl.CredentialsProvider;
2528
import com.rabbitmq.client.impl.FrameHandler;
2629
import com.rabbitmq.client.impl.FrameHandlerFactory;
30+
import org.hamcrest.Matchers;
31+
import org.junit.Assert;
2732
import org.junit.Test;
2833

2934
import java.io.IOException;
35+
import java.util.List;
3036
import java.util.Queue;
3137
import java.util.concurrent.ArrayBlockingQueue;
3238
import java.util.concurrent.TimeoutException;
3339
import java.util.concurrent.atomic.AtomicBoolean;
40+
import java.util.concurrent.atomic.AtomicReference;
3441

42+
import static org.hamcrest.Matchers.allOf;
43+
import static org.hamcrest.Matchers.instanceOf;
44+
import static org.hamcrest.Matchers.notNullValue;
3545
import static org.junit.Assert.*;
3646
import static org.mockito.Mockito.*;
3747

@@ -90,4 +100,53 @@ protected AMQConnection createConnection(ConnectionParams params, FrameHandler f
90100
assertTrue(createCalled.get());
91101
}
92102

103+
@Test public void shouldUseDnsResolutionWhenOneAddressAndNoTls() throws Exception {
104+
AMQConnection connection = mock(AMQConnection.class);
105+
AtomicReference<AddressResolver> addressResolver = new AtomicReference<>();
106+
107+
ConnectionFactory connectionFactory = new ConnectionFactory() {
108+
@Override
109+
protected AMQConnection createConnection(ConnectionParams params, FrameHandler frameHandler,
110+
MetricsCollector metricsCollector) {
111+
return connection;
112+
}
113+
114+
@Override
115+
protected AddressResolver createAddressResolver(List<Address> addresses) {
116+
addressResolver.set(super.createAddressResolver(addresses));
117+
return addressResolver.get();
118+
}
119+
};
120+
121+
doNothing().when(connection).start();
122+
connectionFactory.newConnection();
123+
124+
assertThat(addressResolver.get(), allOf(notNullValue(), instanceOf(DnsRecordIpAddressResolver.class)));
125+
}
126+
127+
@Test public void shouldNotUseDnsResolutionWhenOneAddressAndNoTls() throws Exception {
128+
AMQConnection connection = mock(AMQConnection.class);
129+
AtomicReference<AddressResolver> addressResolver = new AtomicReference<>();
130+
131+
ConnectionFactory connectionFactory = new ConnectionFactory() {
132+
@Override
133+
protected AMQConnection createConnection(ConnectionParams params, FrameHandler frameHandler,
134+
MetricsCollector metricsCollector) {
135+
return connection;
136+
}
137+
138+
@Override
139+
protected AddressResolver createAddressResolver(List<Address> addresses) {
140+
addressResolver.set(super.createAddressResolver(addresses));
141+
return addressResolver.get();
142+
}
143+
};
144+
145+
doNothing().when(connection).start();
146+
connectionFactory.useSslProtocol();
147+
connectionFactory.newConnection();
148+
149+
assertThat(addressResolver.get(), allOf(notNullValue(), instanceOf(ListAddressResolver.class)));
150+
}
151+
93152
}

0 commit comments

Comments
 (0)