From d04fb0f282e0fd9a4bc80d3f9d5ee15506a3b83b Mon Sep 17 00:00:00 2001
From: gbellato <gbellato@localhost>
Date: Mon, 08 Dec 2008 08:03:33 +0000
Subject: [PATCH] Merge the replication-service branch with the OpenDS trunk

---
 opends/tests/unit-tests-testng/src/server/org/opends/server/replication/InitOnLineTest.java |  141 ++++++++++++++++++++++++++++++----------------
 1 files changed, 92 insertions(+), 49 deletions(-)

diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/InitOnLineTest.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/InitOnLineTest.java
index 7713a48..443b601 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/InitOnLineTest.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/InitOnLineTest.java
@@ -60,8 +60,8 @@
 import org.opends.messages.Severity;
 import org.opends.server.protocols.internal.InternalClientConnection;
 import org.opends.server.protocols.internal.InternalSearchOperation;
-import org.opends.server.replication.plugin.ReplicationBroker;
-import org.opends.server.replication.plugin.ReplicationDomain;
+import org.opends.server.replication.service.ReplicationBroker;
+import org.opends.server.replication.plugin.LDAPReplicationDomain;
 import org.opends.server.replication.protocol.DoneMsg;
 import org.opends.server.replication.protocol.EntryMsg;
 import org.opends.server.replication.protocol.ErrorMsg;
@@ -144,7 +144,7 @@
   ReplicationServer changelog2 = null;
   ReplicationServer changelog3 = null;
   boolean emptyOldChanges = true;
-  ReplicationDomain replDomain = null;
+  LDAPReplicationDomain replDomain = null;
 
   private void log(String s)
   {
@@ -181,7 +181,7 @@
     // re-enabled and this clears the backend reference and thus the underlying
     // data. So for this particular test, we use a classical backend. Let's
     // clear it.
-    ReplicationDomain.clearJEBackend(false, "userRoot", EXAMPLE_DN);
+    LDAPReplicationDomain.clearJEBackend(false, "userRoot", EXAMPLE_DN);
 
     updatedEntries = newLDIFEntries();
 
@@ -190,7 +190,7 @@
     connection = InternalClientConnection.getRootConnection();
 
     synchroServerEntry = null;
-    replServerEntry = null;   
+    replServerEntry = null;
 
     taskInitFromS2 = TestCaseUtils.makeEntry(
         "dn: ds-task-id=" + UUID.randomUUID() +
@@ -198,7 +198,7 @@
         "objectclass: top",
         "objectclass: ds-task",
         "objectclass: ds-task-initialize-from-remote-replica",
-        "ds-task-class-name: org.opends.server.tasks.InitializeTask",
+        "ds-task-class-name: org.opends.server.replication.service.InitializeTask",
         "ds-task-initialize-domain-dn: " + EXAMPLE_DN,
         "ds-task-initialize-replica-server-id: " + server2ID);
 
@@ -208,7 +208,7 @@
         "objectclass: top",
         "objectclass: ds-task",
         "objectclass: ds-task-initialize-remote-replica",
-        "ds-task-class-name: org.opends.server.tasks.InitializeTargetTask",
+        "ds-task-class-name: org.opends.server.replication.service.InitializeTargetTask",
         "ds-task-initialize-domain-dn: " + EXAMPLE_DN,
         "ds-task-initialize-replica-server-id: " + server2ID);
 
@@ -218,7 +218,7 @@
         "objectclass: top",
         "objectclass: ds-task",
         "objectclass: ds-task-initialize-remote-replica",
-        "ds-task-class-name: org.opends.server.tasks.InitializeTargetTask",
+        "ds-task-class-name: org.opends.server.replication.service.InitializeTargetTask",
         "ds-task-initialize-domain-dn: " + EXAMPLE_DN,
         "ds-task-initialize-replica-server-id: all");
   }
@@ -321,7 +321,7 @@
           {
             break;
           }
-          Thread.sleep(10);
+          Thread.sleep(100);
         }
       } while (completionTime == null);
 
@@ -485,8 +485,10 @@
     // Send entries
     try
     {
-      RoutableMsg initTargetMessage = new InitializeTargetMsg(
-          baseDn, server2ID, destinationServerID, requestorID, updatedEntries.length);
+      RoutableMsg initTargetMessage =
+        new InitializeTargetMsg(
+          EXAMPLE_DN, server2ID, destinationServerID, requestorID,
+          updatedEntries.length);
       broker.publish(initTargetMessage);
 
       for (String entry : updatedEntries)
@@ -536,7 +538,7 @@
         {
           EntryMsg em = (EntryMsg)msg;
           log("Broker " + serverID + " receives entry " + new String(em.getEntryBytes()));
-          entriesReceived++;
+          entriesReceived+=countEntryLimits(em.getEntryBytes());
         }
         else if (msg instanceof DoneMsg)
         {
@@ -572,6 +574,30 @@
   }
 
   /**
+   * Count the number of entries in the provided byte[].
+   * This is based on the hypothesis that the entries are separated
+   * by a "\n\n" String.
+   *
+   * @param   entryBytes
+   * @return  The number of entries in the provided byte[].
+   */
+  private int countEntryLimits(byte[] entryBytes)
+  {
+    int entryCount = 0;
+    int count = 0;
+    while (count<=entryBytes.length-2)
+    {
+      if ((entryBytes[count] == '\n') && (entryBytes[count+1] == '\n'))
+      {
+        entryCount++;
+        count++;
+      }
+      count++;
+    }
+    return entryCount;
+  }
+
+  /**
    * Creates a new replicationServer.
    * @param changelogId The serverID of the replicationServer to create.
    * @return The new replicationServer.
@@ -592,7 +618,7 @@
       ReplServerFakeConfiguration conf =
         new ReplServerFakeConfiguration(
             getChangelogPort(changelogId),
-            "initOnlineTest" + getChangelogPort(changelogId) + testCase + "Db", 
+            "initOnlineTest" + getChangelogPort(changelogId) + testCase + "Db",
             0,
             changelogId,
             0,
@@ -638,7 +664,7 @@
 
 
       // Clear the backend
-      ReplicationDomain.clearJEBackend(false, "userRoot", EXAMPLE_DN);
+      LDAPReplicationDomain.clearJEBackend(false, "userRoot", EXAMPLE_DN);
 
       synchroServerEntry = TestCaseUtils.entryFromLdifString(synchroServerLdif);
       DirectoryServer.getConfigHandler().addEntry(synchroServerEntry, null);
@@ -646,7 +672,7 @@
         "Unable to add the synchronized server");
       configEntryList.add(synchroServerEntry.getDN());
 
-      replDomain = ReplicationDomain.retrievesReplicationDomain(baseDn);
+      replDomain = LDAPReplicationDomain.retrievesReplicationDomain(baseDn);
 
       assertTrue(!replDomain.ieRunning(),
         "ReplicationDomain: Import/Export is not expected to be running");
@@ -699,7 +725,7 @@
         server2 = openReplicationSession(DN.decode(EXAMPLE_DN),
           server2ID, 100, getChangelogPort(changelog1ID), 1000, emptyOldChanges);
 
-      Thread.sleep(2000);
+      // Thread.sleep(2000);
 
       // In S1 launch the total update
       addTask(taskInitFromS2, ResultCode.SUCCESS, null);
@@ -729,7 +755,7 @@
     catch(Exception e)
     {
       fail(testCase + " Exception:"+ e.getMessage() + " " + stackTraceToSingleLineString(e));
-    } finally 
+    } finally
     {
       afterTest();
     }
@@ -744,7 +770,7 @@
     String testCase = "initializeExport";
 
     log("Starting "+testCase);
-    
+
     try
     {
       changelog1 = createChangelogServer(changelog1ID, testCase);
@@ -758,9 +784,11 @@
         server2 = openReplicationSession(DN.decode(EXAMPLE_DN),
           server2ID, 100, getChangelogPort(changelog1ID), 1000, emptyOldChanges);
 
-      Thread.sleep(3000);
+      // Not needed anymore since OpenReplicationSession
+      // checks for session establishment ?
+      // Thread.sleep(3000);
 
-      InitializeRequestMsg initMsg = new InitializeRequestMsg(baseDn,
+      InitializeRequestMsg initMsg = new InitializeRequestMsg(EXAMPLE_DN,
         server2ID, server1ID);
       server2.publish(initMsg);
 
@@ -782,7 +810,7 @@
     String testCase = "initializeTargetExport";
 
     log("Starting " + testCase);
-    
+
     try
     {
 
@@ -799,7 +827,7 @@
         server2 = openReplicationSession(DN.decode(EXAMPLE_DN),
           server2ID, 100, getChangelogPort(changelog1ID), 1000, emptyOldChanges);
 
-      Thread.sleep(1000);
+      // Thread.sleep(1000);
 
       // Launch in S1 the task that will initialize S2
       addTask(taskInitTargetS2, ResultCode.SUCCESS, null);
@@ -846,7 +874,7 @@
         server3 = openReplicationSession(DN.decode(EXAMPLE_DN),
           server3ID, 100, getChangelogPort(changelog1ID), 1000, emptyOldChanges);
 
-      Thread.sleep(1000);
+      // Thread.sleep(1000);
 
       // Launch in S1 the task that will initialize S2
       addTask(taskInitTargetAll, ResultCode.SUCCESS, null);
@@ -891,7 +919,14 @@
       // S2 publishes entries to S1
       makeBrokerPublishEntries(server2, server2ID, server1ID, server2ID);
 
-      Thread.sleep(10000); // FIXME - how to know the import is done
+      // wait until the replication domain has expected generationID
+      // this should indicate that the import occured correctly.
+      for (int count = 0; count < 100; count++)
+      {
+        if (replDomain.getGenerationID() == 56869)
+          break;
+        Thread.sleep(200);
+      }
 
       // Test that entries have been imported in S1
       testEntriesInDb();
@@ -926,7 +961,7 @@
           "objectclass: top",
           "objectclass: ds-task",
           "objectclass: ds-task-initialize-remote-replica",
-          "ds-task-class-name: org.opends.server.tasks.InitializeTargetTask",
+          "ds-task-class-name: org.opends.server.replication.service.InitializeTargetTask",
           "ds-task-initialize-domain-dn: foo",
           "ds-task-initialize-remote-replica-server-id: " + server2ID);
       addTask(taskInitTarget, ResultCode.INVALID_DN_SYNTAX,
@@ -939,7 +974,7 @@
           "objectclass: top",
           "objectclass: ds-task",
           "objectclass: ds-task-initialize-remote-replica",
-          "ds-task-class-name: org.opends.server.tasks.InitializeTargetTask",
+          "ds-task-class-name: org.opends.server.replication.service.InitializeTargetTask",
           "ds-task-initialize-domain-dn: dc=foo",
           "ds-task-initialize-remote-replica-server-id: " + server2ID);
       addTask(taskInitTarget, ResultCode.OTHER,
@@ -987,11 +1022,11 @@
           "objectclass: top",
           "objectclass: ds-task",
           "objectclass: ds-task-initialize-from-remote-replica",
-          "ds-task-class-name: org.opends.server.tasks.InitializeTask",
+          "ds-task-class-name: org.opends.server.replication.service.InitializeTask",
           "ds-task-initialize-domain-dn: foo",
           "ds-task-initialize-replica-server-id: " + server2ID);
       addTask(taskInit, ResultCode.INVALID_DN_SYNTAX,
-          ERR_TASK_INITIALIZE_INVALID_DN.get());
+          ERR_NO_MATCHING_DOMAIN.get());
 
       // Domain base dn not related to any domain
       taskInit = TestCaseUtils.makeEntry(
@@ -1000,10 +1035,11 @@
           "objectclass: top",
           "objectclass: ds-task",
           "objectclass: ds-task-initialize-from-remote-replica",
-          "ds-task-class-name: org.opends.server.tasks.InitializeTask",
+          "ds-task-class-name: org.opends.server.replication.service.InitializeTask",
           "ds-task-initialize-domain-dn: dc=foo",
           "ds-task-initialize-replica-server-id: " + server2ID);
-      addTask(taskInit, ResultCode.OTHER, ERR_NO_MATCHING_DOMAIN.get());
+      addTask(taskInit, ResultCode.INVALID_DN_SYNTAX,
+          ERR_NO_MATCHING_DOMAIN.get());
 
       // Invalid Source
       taskInit = TestCaseUtils.makeEntry(
@@ -1012,7 +1048,7 @@
           "objectclass: top",
           "objectclass: ds-task",
           "objectclass: ds-task-initialize-from-remote-replica",
-          "ds-task-class-name: org.opends.server.tasks.InitializeTask",
+          "ds-task-class-name: org.opends.server.replication.service.InitializeTask",
           "ds-task-initialize-domain-dn: " + baseDn,
           "ds-task-initialize-replica-server-id: -3");
       addTask(taskInit, ResultCode.OTHER,
@@ -1083,25 +1119,29 @@
 
       // Check that the list of connected LDAP servers is correct
       // in each replication servers
-      List<String> l1 = changelog1.getReplicationServerDomain(baseDn, false).
+      List<String> l1 = changelog1.getReplicationServerDomain(
+          baseDn.toNormalizedString(), false).
         getConnectedLDAPservers();
       assertEquals(l1.size(), 1);
       assertEquals(l1.get(0), String.valueOf(server1ID));
 
       List<String> l2;
-    l2 = changelog2.getReplicationServerDomain(baseDn, false).getConnectedLDAPservers();
+    l2 = changelog2.getReplicationServerDomain(
+        baseDn.toNormalizedString(), false).getConnectedLDAPservers();
       assertEquals(l2.size(), 2);
       assertTrue(l2.contains(String.valueOf(server2ID)));
       assertTrue(l2.contains(String.valueOf(server3ID)));
 
       List<String> l3;
-    l3 = changelog3.getReplicationServerDomain(baseDn, false).getConnectedLDAPservers();
+    l3 = changelog3.getReplicationServerDomain(
+        baseDn.toNormalizedString(), false).getConnectedLDAPservers();
       assertEquals(l3.size(), 0);
 
       // Test updates
       broker3.stop();
       Thread.sleep(1000);
-    l2 = changelog2.getReplicationServerDomain(baseDn, false).getConnectedLDAPservers();
+    l2 = changelog2.getReplicationServerDomain(
+        baseDn.toNormalizedString(), false).getConnectedLDAPservers();
       assertEquals(l2.size(), 1);
       assertEquals(l2.get(0), String.valueOf(server2ID));
 
@@ -1109,7 +1149,8 @@
         server3ID, 100, getChangelogPort(changelog2ID), 1000, emptyOldChanges);
       broker2.stop();
       Thread.sleep(1000);
-    l2 = changelog2.getReplicationServerDomain(baseDn, false).getConnectedLDAPservers();
+    l2 = changelog2.getReplicationServerDomain(
+        baseDn.toNormalizedString(), false).getConnectedLDAPservers();
       assertEquals(l2.size(), 1);
       assertEquals(l2.get(0), String.valueOf(server3ID));
 
@@ -1124,7 +1165,7 @@
       afterTest();
     }
   }
-  
+
   @Test(enabled=true, groups="slow")
   public void initializeTargetExportMultiSS() throws Exception
   {
@@ -1153,7 +1194,7 @@
             server2ID, 100, getChangelogPort(changelog2ID), 1000, emptyOldChanges);
       }
 
-      Thread.sleep(1000);
+     // Thread.sleep(1000);
 
       // Launch in S1 the task that will initialize S2
       addTask(taskInitTargetS2, ResultCode.SUCCESS, null);
@@ -1200,7 +1241,8 @@
         log(testCase + " Will connect server 2 to " + changelog2ID);
         server2 = openReplicationSession(DN.decode(EXAMPLE_DN),
           server2ID, 100, getChangelogPort(changelog2ID),
-          1000, emptyOldChanges, changelog1.getGenerationId(baseDn));
+          1000, emptyOldChanges,
+          changelog1.getGenerationId(baseDn.toNormalizedString()));
       }
 
       // Connect a broker acting as server 3 to Repl Server 3
@@ -1212,15 +1254,16 @@
         log(testCase + " Will connect server 3 to " + changelog3ID);
         server3 = openReplicationSession(DN.decode(EXAMPLE_DN),
           server3ID, 100, getChangelogPort(changelog3ID),
-          1000, emptyOldChanges, changelog1.getGenerationId(baseDn));
+          1000, emptyOldChanges,
+          changelog1.getGenerationId(baseDn.toNormalizedString()));
       }
 
-      Thread.sleep(500);
+      // Thread.sleep(500);
 
       // S3 sends init request
       log(testCase + " server 3 Will send reqinit to " + server1ID);
       InitializeRequestMsg initMsg =
-        new InitializeRequestMsg(baseDn, server3ID, server1ID);
+        new InitializeRequestMsg(EXAMPLE_DN, server3ID, server1ID);
       server3.publish(initMsg);
 
       // S3 should receive target, entries & done
@@ -1268,7 +1311,7 @@
         "objectclass: top",
         "objectclass: ds-task",
         "objectclass: ds-task-initialize-from-remote-replica",
-        "ds-task-class-name: org.opends.server.tasks.InitializeTask",
+        "ds-task-class-name: org.opends.server.replication.service.InitializeTask",
         "ds-task-initialize-domain-dn: " + baseDn,
         "ds-task-initialize-replica-server-id: " + 20);
 
@@ -1284,7 +1327,7 @@
         "objectclass: top",
         "objectclass: ds-task",
         "objectclass: ds-task-initialize-from-remote-replica",
-        "ds-task-class-name: org.opends.server.tasks.InitializeTask",
+        "ds-task-class-name: org.opends.server.replication.service.InitializeTask",
         "ds-task-initialize-domain-dn: " + baseDn,
         "ds-task-initialize-replica-server-id: " + server1ID);
 
@@ -1326,7 +1369,7 @@
         "objectclass: top",
         "objectclass: ds-task",
         "objectclass: ds-task-initialize-remote-replica",
-        "ds-task-class-name: org.opends.server.tasks.InitializeTargetTask",
+        "ds-task-class-name: org.opends.server.replication.service.InitializeTargetTask",
         "ds-task-initialize-domain-dn: " + baseDn,
         "ds-task-initialize-replica-server-id: " + 0);
 
@@ -1400,7 +1443,7 @@
         "objectclass: top",
         "objectclass: ds-task",
         "objectclass: ds-task-initialize-from-remote-replica",
-        "ds-task-class-name: org.opends.server.tasks.InitializeTask",
+        "ds-task-class-name: org.opends.server.replication.service.InitializeTask",
         "ds-task-initialize-domain-dn: " + baseDn,
         "ds-task-initialize-replica-server-id: " + server2ID);
 
@@ -1414,7 +1457,7 @@
         "objectclass: top",
         "objectclass: ds-task",
         "objectclass: ds-task-initialize-from-remote-replica",
-        "ds-task-class-name: org.opends.server.tasks.InitializeTask",
+        "ds-task-class-name: org.opends.server.replication.service.InitializeTask",
         "ds-task-initialize-domain-dn: " + baseDn,
         "ds-task-initialize-replica-server-id: " + server2ID);
 
@@ -1537,8 +1580,8 @@
     super.classCleanUp();
 
     // Clear the backend
-    ReplicationDomain.clearJEBackend(false, "userRoot", EXAMPLE_DN);
-    
+    LDAPReplicationDomain.clearJEBackend(false, "userRoot", EXAMPLE_DN);
+
     paranoiaCheck();
   }
 }

--
Gitblit v1.10.0