From 5027eb2d34ca1d7b5564edd51c2b8a9b5dbc8845 Mon Sep 17 00:00:00 2001
From: Chris Ridd <chris.ridd@forgerock.com>
Date: Thu, 22 May 2014 09:46:17 +0000
Subject: [PATCH] Fix OPENDJ-1466: Improve initialization of InetSocketAddress in SDK to prevent cached DNS data.

---
 opendj-sdk/opendj-grizzly/src/test/java/org/forgerock/opendj/grizzly/ConnectionFactoryTestCase.java |   41 ++++++++++++++++++++++++++++-------------
 1 files changed, 28 insertions(+), 13 deletions(-)

diff --git a/opendj-sdk/opendj-grizzly/src/test/java/org/forgerock/opendj/grizzly/ConnectionFactoryTestCase.java b/opendj-sdk/opendj-grizzly/src/test/java/org/forgerock/opendj/grizzly/ConnectionFactoryTestCase.java
index 37d00f0..5763cca 100644
--- a/opendj-sdk/opendj-grizzly/src/test/java/org/forgerock/opendj/grizzly/ConnectionFactoryTestCase.java
+++ b/opendj-sdk/opendj-grizzly/src/test/java/org/forgerock/opendj/grizzly/ConnectionFactoryTestCase.java
@@ -36,6 +36,7 @@
 import static org.mockito.Mockito.*;
 import static org.testng.Assert.*;
 
+import java.net.InetSocketAddress;
 import java.util.Arrays;
 import java.util.concurrent.Callable;
 import java.util.concurrent.CountDownLatch;
@@ -166,9 +167,10 @@
                 Requests.newSearchRequest("uid=user.0,ou=people,o=test", SearchScope.BASE_OBJECT,
                         "objectclass=*", "cn");
 
+        InetSocketAddress serverAddress = getServerSocketAddress();
         factories[0][0] =
                 Connections.newHeartBeatConnectionFactory(new LDAPConnectionFactory(
-                        getServerSocketAddress()),
+                        serverAddress.getHostName(), serverAddress.getPort()),
                         1000, 500, TimeUnit.MILLISECONDS, request);
 
         // InternalConnectionFactory
@@ -176,16 +178,18 @@
 
         // AuthenticatedConnectionFactory
         factories[2][0] =
-                Connections.newAuthenticatedConnectionFactory(new LDAPConnectionFactory(getServerSocketAddress()),
+                Connections.newAuthenticatedConnectionFactory(new LDAPConnectionFactory(
+                                serverAddress.getHostName(), serverAddress.getPort()),
                         Requests.newSimpleBindRequest("", new char[0]));
 
         // AuthenticatedConnectionFactory with multi-stage SASL
         factories[3][0] =
-                Connections.newAuthenticatedConnectionFactory(new LDAPConnectionFactory(getServerSocketAddress()),
+                Connections.newAuthenticatedConnectionFactory(new LDAPConnectionFactory(
+                                serverAddress.getHostName(), serverAddress.getPort()),
                         Requests.newCRAMMD5SASLBindRequest("id:user", "password".toCharArray()));
 
         // LDAPConnectionFactory with default options
-        factories[4][0] = new LDAPConnectionFactory(getServerSocketAddress());
+        factories[4][0] = new LDAPConnectionFactory(serverAddress.getHostName(), serverAddress.getPort());
 
         // LDAPConnectionFactory with startTLS
         SSLContext sslContext =
@@ -198,7 +202,7 @@
                                     "SSL_DH_anon_WITH_DES_CBC_SHA", "SSL_DH_anon_WITH_RC4_128_MD5",
                                     "TLS_DH_anon_WITH_AES_128_CBC_SHA",
                                     "TLS_DH_anon_WITH_AES_256_CBC_SHA" });
-        factories[5][0] = new LDAPConnectionFactory(getServerSocketAddress(), options);
+        factories[5][0] = new LDAPConnectionFactory(serverAddress.getHostName(), serverAddress.getPort(), options);
 
         // startTLS + SASL confidentiality
         // Use IP address here so that DIGEST-MD5 host verification works if
@@ -207,20 +211,26 @@
         // FIXME: enable QOP once OPENDJ-514 is fixed.
         factories[6][0] =
                 Connections.newAuthenticatedConnectionFactory(new LDAPConnectionFactory(
-                        getServerSocketAddress(), options), Requests.newDigestMD5SASLBindRequest(
+                        serverAddress.getHostName(), serverAddress.getPort(), options),
+                        Requests.newDigestMD5SASLBindRequest(
                             "id:user", "password".toCharArray()).setCipher(
                                 DigestMD5SASLBindRequest.CIPHER_LOW));
 
         // Connection pool and load balancing tests.
+        InetSocketAddress offlineSocketAddress1 = findFreeSocketAddress();
         ConnectionFactory offlineServer1 =
                 Connections.newNamedConnectionFactory(
-                        new LDAPConnectionFactory(findFreeSocketAddress()), "offline1");
+                        new LDAPConnectionFactory(offlineSocketAddress1.getHostName(),
+                                offlineSocketAddress1.getPort()), "offline1");
+        InetSocketAddress offlineSocketAddress2 = findFreeSocketAddress();
         ConnectionFactory offlineServer2 =
                 Connections.newNamedConnectionFactory(
-                        new LDAPConnectionFactory(findFreeSocketAddress()), "offline2");
+                        new LDAPConnectionFactory(offlineSocketAddress2.getHostName(),
+                                offlineSocketAddress2.getPort()), "offline2");
         ConnectionFactory onlineServer =
                 Connections.newNamedConnectionFactory(
-                        new LDAPConnectionFactory(getServerSocketAddress()), "online");
+                        new LDAPConnectionFactory(serverAddress.getHostName(),
+                                serverAddress.getPort()), "online");
 
         // Connection pools.
         factories[7][0] = Connections.newFixedConnectionPool(onlineServer, 10);
@@ -330,7 +340,9 @@
     public void testSchemaUsage() throws Exception {
         // Create a connection factory: this should always use the default
         // schema, even if it is updated.
-        final ConnectionFactory factory = new LDAPConnectionFactory(getServerSocketAddress());
+        InetSocketAddress socketAddress = getServerSocketAddress();
+        final ConnectionFactory factory = new LDAPConnectionFactory(socketAddress.getHostName(),
+                socketAddress.getPort());
         final Schema defaultSchema = Schema.getDefaultSchema();
 
         final Connection connection = factory.getConnection();
@@ -572,7 +584,7 @@
         LDAPListener listener = new LDAPListener(findFreeSocketAddress(), mockServer);
         try {
             LDAPConnectionFactory clientFactory =
-                    new LDAPConnectionFactory(listener.getSocketAddress());
+                    new LDAPConnectionFactory(listener.getHostName(), listener.getPort());
             final Connection client = clientFactory.getConnection();
             connectLatch.await(TEST_TIMEOUT, TimeUnit.SECONDS);
             MockConnectionEventListener mockListener = null;
@@ -655,7 +667,8 @@
         LDAPListener listener = new LDAPListener(findFreeSocketAddress(), mockServer);
         try {
             LDAPConnectionFactory clientFactory =
-                    new LDAPConnectionFactory(listener.getSocketAddress());
+                    new LDAPConnectionFactory(listener.getHostName(),
+                            listener.getPort());
             final Connection client = clientFactory.getConnection();
             connectLatch.await(TEST_TIMEOUT, TimeUnit.SECONDS);
             try {
@@ -689,9 +702,11 @@
     @Test(description = "Test for OPENDJ-1121: Closing a connection after "
             + "closing the connection factory causes NPE")
     public void testFactoryCloseBeforeConnectionClose() throws Exception {
+        InetSocketAddress socketAddress = getServerSocketAddress();
         final ConnectionFactory factory =
                 newLoadBalancer(new FailoverLoadBalancingAlgorithm(Arrays.asList(newFixedConnectionPool(
-                        newHeartBeatConnectionFactory(new LDAPConnectionFactory(getServerSocketAddress())), 2))));
+                        newHeartBeatConnectionFactory(new LDAPConnectionFactory(
+                                socketAddress.getHostName(), socketAddress.getPort())), 2))));
         Connection conn = null;
         try {
             conn = factory.getConnection();

--
Gitblit v1.10.0