From 75778303e7058b439622bce97f4f2c831b91b99b Mon Sep 17 00:00:00 2001
From: Jean-Noël Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Wed, 06 Apr 2016 11:46:05 +0000
Subject: [PATCH] Fixed test errors related to HostPort not able to parse "Not connected"

---
 opendj-server-legacy/src/test/java/org/opends/server/replication/ReplicationTestCase.java |   71 ++++++++++++++++++++++++++++-------
 1 files changed, 57 insertions(+), 14 deletions(-)

diff --git a/opendj-server-legacy/src/test/java/org/opends/server/replication/ReplicationTestCase.java b/opendj-server-legacy/src/test/java/org/opends/server/replication/ReplicationTestCase.java
index b88ea77..d3a7130 100644
--- a/opendj-server-legacy/src/test/java/org/opends/server/replication/ReplicationTestCase.java
+++ b/opendj-server-legacy/src/test/java/org/opends/server/replication/ReplicationTestCase.java
@@ -31,6 +31,7 @@
 import org.forgerock.opendj.adapter.server3x.Converters;
 import org.forgerock.opendj.config.server.ConfigException;
 import org.forgerock.opendj.ldap.ByteString;
+import org.forgerock.opendj.ldap.DN;
 import org.forgerock.opendj.ldap.ModificationType;
 import org.forgerock.opendj.ldap.ResultCode;
 import org.forgerock.opendj.ldap.SearchScope;
@@ -38,7 +39,6 @@
 import org.forgerock.opendj.ldap.requests.Requests;
 import org.opends.server.DirectoryServerTestCase;
 import org.opends.server.TestCaseUtils;
-import org.forgerock.opendj.server.config.server.ReplicationDomainCfg;
 import org.opends.server.backends.task.TaskState;
 import org.opends.server.core.AddOperation;
 import org.opends.server.core.DeleteOperation;
@@ -60,8 +60,8 @@
 import org.opends.server.replication.service.ReplicationBroker;
 import org.opends.server.types.Attribute;
 import org.opends.server.types.Attributes;
-import org.forgerock.opendj.ldap.DN;
 import org.opends.server.types.Entry;
+import org.opends.server.types.HostPort;
 import org.opends.server.types.Modification;
 import org.opends.server.types.SearchResultEntry;
 import org.opends.server.util.TestTimer;
@@ -112,8 +112,6 @@
   protected Entry synchroServerEntry;
   protected Entry replServerEntry;
 
-  private static final String REPLICATION_DB_IMPL_PROPERTY = "org.opends.test.replicationDbImpl";
-
   /** Replication monitor stats. */
   private DN monitorDN;
   private String monitorAttr;
@@ -207,18 +205,13 @@
       int serverId, int windowSize, int port, int timeout,
       long generationId) throws Exception
   {
-    DomainFakeCfg config = newFakeCfg(baseDN, serverId, port);
+    final DomainFakeCfg config = newFakeCfg(baseDN, serverId, port);
     config.setWindowSize(windowSize);
-    return openReplicationSession(config, port, timeout, generationId);
-  }
 
-  protected ReplicationBroker openReplicationSession(ReplicationDomainCfg config,
-      int port, int timeout, long generationId) throws Exception
-  {
     final ReplicationBroker broker = new ReplicationBroker(
         new DummyReplicationDomain(generationId), new ServerState(),
         config, getReplSessionSecurity());
-    connect(broker, port, timeout);
+    connect(broker, timeout);
     return broker;
   }
 
@@ -230,11 +223,11 @@
     return fakeCfg;
   }
 
-  protected void connect(ReplicationBroker broker, int port, int timeout) throws Exception
+  protected void connect(ReplicationBroker broker, int timeout) throws Exception
   {
     broker.start();
     // give some time to the broker to connect to the replicationServer.
-    checkConnection(30, broker, port);
+    checkConnection(30, broker);
 
     if (timeout != 0)
     {
@@ -246,7 +239,7 @@
    * Check connection of the provided ds to the replication server. Waits for connection to be ok up
    * to secTimeout seconds before failing.
    */
-  protected void checkConnection(int secTimeout, final ReplicationBroker rb, int rsPort) throws Exception
+  protected void checkConnection(int secTimeout, final ReplicationBroker rb) throws Exception
   {
     TestTimer timer = new TestTimer.Builder()
       .maxSleep(secTimeout, SECONDS)
@@ -919,4 +912,54 @@
       }
     });
   }
+
+  protected void waitConnected(int dsId, int rsId, int rsPort, LDAPReplicationDomain rd, String msg) throws InterruptedException
+  {
+    final int secTimeout = 30;
+    int nSec = 0;
+
+    // Go out of the loop only if connection is verified or if timeout occurs
+    while (true)
+    {
+      boolean connected = rd.isConnected();
+      int rdPort = -1;
+      boolean rightPort = false;
+      if (connected)
+      {
+        String rsUrl = rd.getReplicationServer();
+        try {
+          rdPort = HostPort.valueOf(rsUrl).getPort();
+          rightPort = rdPort == rsPort;
+        }
+        catch (IllegalArgumentException notConnectedYet)
+        {
+          // wait a bit more
+        }
+      }
+      if (connected && rightPort)
+      {
+        // Connection verified
+        String s = "checkConnection: connection from domain " + dsId
+            + " to replication server " + rsId + " obtained after " + nSec + " seconds.";
+        logger.error(LocalizableMessage.raw(s));
+        if (logger.isTraceEnabled())
+        {
+          logger.trace("*** TEST *** " + s);
+        }
+        return;
+      }
+
+      Thread.sleep(1000);
+      nSec++;
+
+      if (nSec > secTimeout)
+      {
+        // Timeout reached, end with error
+        fail("checkConnection: could not verify connection from domain " + dsId
+            + " to replication server " + rsId + " after " + secTimeout + " seconds."
+            + " Domain connected: " + connected + ", connection port: " + rdPort
+            + " (should be: " + rsPort + "). [" + msg + "]");
+      }
+    }
+  }
 }

--
Gitblit v1.10.0