Skip to content

Commit ea66f12

Browse files
author
Nick Johnson
committed
Adds tests.
1 parent bd06958 commit ea66f12

File tree

2 files changed

+66
-2
lines changed

2 files changed

+66
-2
lines changed

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

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import com.rabbitmq.client.MetricsCollector;
2222
import com.rabbitmq.client.impl.AMQConnection;
2323
import com.rabbitmq.client.impl.ConnectionParams;
24+
import com.rabbitmq.client.impl.CredentialsProvider;
2425
import com.rabbitmq.client.impl.FrameHandler;
2526
import com.rabbitmq.client.impl.FrameHandlerFactory;
2627
import org.junit.Test;
@@ -29,8 +30,9 @@
2930
import java.util.Queue;
3031
import java.util.concurrent.ArrayBlockingQueue;
3132
import java.util.concurrent.TimeoutException;
33+
import java.util.concurrent.atomic.AtomicBoolean;
3234

33-
import static org.junit.Assert.assertSame;
35+
import static org.junit.Assert.*;
3436
import static org.mockito.Mockito.*;
3537

3638
public class ConnectionFactoryTest {
@@ -62,5 +64,30 @@ protected synchronized FrameHandlerFactory createFrameHandlerFactory() throws IO
6264
);
6365
assertSame(connectionThatSucceeds, returnedConnection);
6466
}
67+
68+
// see https://github.com/rabbitmq/rabbitmq-java-client/pull/350
69+
@Test public void customizeCredentialsProvider() throws Exception {
70+
final CredentialsProvider provider = mock(CredentialsProvider.class);
71+
final AMQConnection connection = mock(AMQConnection.class);
72+
final AtomicBoolean createCalled = new AtomicBoolean(false);
73+
74+
ConnectionFactory connectionFactory = new ConnectionFactory() {
75+
@Override
76+
protected AMQConnection createConnection(ConnectionParams params, FrameHandler frameHandler,
77+
MetricsCollector metricsCollector) {
78+
assertSame(provider, params.getCredentialsProvider());
79+
createCalled.set(true);
80+
return connection;
81+
}
82+
};
83+
connectionFactory.setCredentialsProvider(provider);
84+
connectionFactory.setAutomaticRecoveryEnabled(false);
85+
86+
doNothing().when(connection).start();
87+
88+
Connection returnedConnection = connectionFactory.newConnection();
89+
assertSame(returnedConnection, connection);
90+
assertTrue(createCalled.get());
91+
}
6592

6693
}

src/test/java/com/rabbitmq/client/test/functional/ConnectionRecovery.java

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
package com.rabbitmq.client.test.functional;
1717

1818
import com.rabbitmq.client.*;
19-
19+
import com.rabbitmq.client.impl.AbstractCredentialsProvider;
2020
import com.rabbitmq.client.impl.NetworkConnection;
2121
import com.rabbitmq.client.impl.recovery.*;
2222
import com.rabbitmq.client.test.BrokerTestCase;
@@ -34,6 +34,7 @@
3434
import java.util.concurrent.TimeUnit;
3535
import java.util.concurrent.TimeoutException;
3636
import java.util.concurrent.atomic.AtomicInteger;
37+
import java.util.concurrent.atomic.AtomicLong;
3738
import java.util.concurrent.atomic.AtomicReference;
3839

3940
import static org.junit.Assert.*;
@@ -121,6 +122,42 @@ public class ConnectionRecovery extends BrokerTestCase {
121122
c.abort();
122123
}
123124
}
125+
126+
// See https://github.com/rabbitmq/rabbitmq-java-client/pull/350 . We want to request fresh creds when recovering.
127+
@Test public void connectionRecoveryRequestsCredentialsAgain() throws Exception {
128+
ConnectionFactory cf = buildConnectionFactoryWithRecoveryEnabled(false);
129+
final String username = cf.getUsername();
130+
final String password = cf.getPassword();
131+
final AtomicLong usernameRequested = new AtomicLong(0);
132+
final AtomicLong passwordRequested = new AtomicLong(0);
133+
cf.setCredentialsProvider(new AbstractCredentialsProvider() {
134+
135+
@Override
136+
public String getUsername() {
137+
usernameRequested.incrementAndGet();
138+
return username;
139+
}
140+
141+
@Override
142+
public String getPassword() {
143+
passwordRequested.incrementAndGet();
144+
return password;
145+
}
146+
});
147+
RecoverableConnection c = (RecoverableConnection) cf.newConnection();
148+
try {
149+
assertTrue(c.isOpen());
150+
assertEquals(1, usernameRequested.get());
151+
assertEquals(1, passwordRequested.get());
152+
153+
closeAndWaitForRecovery(c);
154+
assertTrue(c.isOpen());
155+
assertEquals(2, usernameRequested.get());
156+
assertEquals(2, passwordRequested.get());
157+
} finally {
158+
c.abort();
159+
}
160+
}
124161

125162
// see https://github.com/rabbitmq/rabbitmq-java-client/issues/135
126163
@Test public void thatShutdownHooksOnConnectionFireBeforeRecoveryStarts() throws IOException, InterruptedException {

0 commit comments

Comments
 (0)