From 9a31b22460437b88cd6f4a751fe04c959239261a Mon Sep 17 00:00:00 2001
From: Jean-Noël Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Wed, 02 Sep 2015 14:43:36 +0000
Subject: [PATCH] Make ChangelogBackendTestCase code more robust by using ReplicaId class

---
 opendj-server-legacy/src/test/java/org/opends/server/backends/ChangelogBackendTestCase.java |  241 +++++++++++++++++++++++++----------------------
 1 files changed, 127 insertions(+), 114 deletions(-)

diff --git a/opendj-server-legacy/src/test/java/org/opends/server/backends/ChangelogBackendTestCase.java b/opendj-server-legacy/src/test/java/org/opends/server/backends/ChangelogBackendTestCase.java
index 64b1da2..bb8c256 100644
--- a/opendj-server-legacy/src/test/java/org/opends/server/backends/ChangelogBackendTestCase.java
+++ b/opendj-server-legacy/src/test/java/org/opends/server/backends/ChangelogBackendTestCase.java
@@ -136,8 +136,9 @@
   private static DN DN_OTEST;
   private static DN DN_OTEST2;
   private static DN DN_OTEST3;
+  private static ReplicaId server1;
+  private static ReplicaId server2;
 
-  private final int brokerSessionTimeout = 5000;
   private final int maxWindow = 100;
 
   /** The replicationServer that will be used in this test. */
@@ -153,9 +154,12 @@
   public void setUp() throws Exception
   {
     super.setUp();
+
     DN_OTEST = DN.valueOf(TEST_ROOT_DN_STRING);
     DN_OTEST2 = DN.valueOf(TEST_ROOT_DN_STRING2);
     DN_OTEST3 = DN.valueOf(TEST_ROOT_DN_STRING3);
+    server1 = ReplicaId.of(DN_OTEST, SERVER_ID_1);
+    server2 = ReplicaId.of(DN_OTEST2, SERVER_ID_2);
 
     // This test suite depends on having the schema available.
     configureReplicationServer();
@@ -211,17 +215,15 @@
     debugInfo("configure", "ReplicationServer created:" + replicationServer);
   }
 
-  /** Enable replication on provided domain DN and serverid, using provided port. */
-  private ReplicationBroker enableReplication(DN domainDN, int serverId, int replicationPort, int timeout)
-      throws Exception
+  /** Enable replication on provided domain DN and serverId, using provided port. */
+  private ReplicationBroker enableReplication(ReplicaId replicaId) throws Exception
   {
-    ReplicaId replicaId = ReplicaId.of(domainDN, serverId);
     ReplicationBroker broker = brokers.get(replicaId);
     if (broker == null)
     {
-      broker = openReplicationSession(domainDN, serverId, 100, replicationPort, timeout);
+      broker = openReplicationSession(replicaId.getBaseDN(), replicaId.getServerId(), 100, replicationServerPort, 5000);
       brokers.put(replicaId, broker);
-      DomainFakeCfg domainConf = newFakeCfg(domainDN, serverId, replicationPort);
+      DomainFakeCfg domainConf = newFakeCfg(replicaId.getBaseDN(), replicaId.getServerId(), replicationServerPort);
       startNewReplicationDomain(domainConf, null, null);
     }
     return broker;
@@ -265,7 +267,6 @@
     debugInfo(test, "Starting test\n\n");
 
     final CSN[] csns = generateAndPublishUpdateMsgForEachOperationType(test, true);
-    final String[] cookies = buildCookiesFromCsns(csns);
 
     int nbEntries = 4;
     String cookie = "";
@@ -273,12 +274,11 @@
         searchChangelogUsingCookie("(targetdn=*" + test + "*,o=test)", cookie, SUCCESS, nbEntries, test);
 
     final List<SearchResultEntry> searchEntries = searchOp.getSearchEntries();
-    assertDelEntry(searchEntries.get(0), test + 1, test + "uuid1", CHANGENUMBER_ZERO, csns[0], cookies[0]);
-    assertAddEntry(searchEntries.get(1), test + 2, USER1_ENTRY_UUID, CHANGENUMBER_ZERO, csns[1], cookies[1]);
-    assertModEntry(searchEntries.get(2), test + 3, test + "uuid3", CHANGENUMBER_ZERO, csns[2], cookies[2]);
-    assertModDNEntry(searchEntries.get(3), test + 4, test + "new4", test+"uuid4", CHANGENUMBER_ZERO,
-        csns[3], cookies[3]);
-    assertResultsContainCookieControl(searchOp, cookies);
+    assertDelEntry(searchEntries.get(0), test + 1, test + "uuid1", CHANGENUMBER_ZERO, csns[0]);
+    assertAddEntry(searchEntries.get(1), test + 2, USER1_ENTRY_UUID, CHANGENUMBER_ZERO, csns[1]);
+    assertModEntry(searchEntries.get(2), test + 3, test + "uuid3", CHANGENUMBER_ZERO, csns[2]);
+    assertModDNEntry(searchEntries.get(3), test + 4, test + "new4", test + "uuid4", CHANGENUMBER_ZERO, csns[3]);
+    assertResultsContainCookieControl(searchOp, buildCookiesFromCsns(csns));
 
     assertChangelogAttributesInRootDSE(1, 4);
 
@@ -300,10 +300,9 @@
     searchOp = searchChangelogUsingCookie("(targetdn=*" + test + "*,o=test)", cookies[0], SUCCESS, nbEntries, test);
 
     List<SearchResultEntry> searchEntries = searchOp.getSearchEntries();
-    assertAddEntry(searchEntries.get(0), test + 2, USER1_ENTRY_UUID, CHANGENUMBER_ZERO, csns[1], cookies[1]);
-    assertModEntry(searchEntries.get(1), test + 3, test + "uuid3", CHANGENUMBER_ZERO, csns[2], cookies[2]);
-    assertModDNEntry(searchEntries.get(2), test + 4, test + "new4", test+"uuid4", CHANGENUMBER_ZERO,
-        csns[3], cookies[3]);
+    assertAddEntry(searchEntries.get(0), test + 2, USER1_ENTRY_UUID, CHANGENUMBER_ZERO, csns[1]);
+    assertModEntry(searchEntries.get(1), test + 3, test + "uuid3", CHANGENUMBER_ZERO, csns[2]);
+    assertModDNEntry(searchEntries.get(2), test + 4, test + "new4", test + "uuid4", CHANGENUMBER_ZERO, csns[3]);
 
     // check querying with cookie of add entry : should return 2 entries
     nbEntries = 2;
@@ -314,8 +313,7 @@
     searchOp = searchChangelogUsingCookie("(targetdn=*" + test + "*,o=test)", cookies[2], SUCCESS, nbEntries, test);
 
     searchEntries = searchOp.getSearchEntries();
-    assertModDNEntry(searchEntries.get(0), test + 4, test + "new4", test+"uuid4", CHANGENUMBER_ZERO,
-        csns[3], cookies[3]);
+    assertModDNEntry(searchEntries.get(0), test + 4, test + "new4", test + "uuid4", CHANGENUMBER_ZERO, csns[3]);
 
     // check querying with cookie of mod dn entry : should return 0 entry
     nbEntries = 0;
@@ -330,18 +328,18 @@
     String test = "CookieAfterDomainIsRemoved";
     debugInfo(test, "Starting test");
 
-    final CSN[] csns = generateCSNs(3, SERVER_ID_1);
+    final CSN[] csns = generateCSNs(3, server1);
 
     publishUpdateMessagesInOTest(test, true,
-      generateDeleteMsg(DN_OTEST, csns[0], test, 1),
-      generateDeleteMsg(DN_OTEST, csns[1], test, 2),
-      generateDeleteMsg(DN_OTEST, csns[2], test, 3));
+      generateDeleteMsg(server1, csns[0], test, 1),
+      generateDeleteMsg(server1, csns[1], test, 2),
+      generateDeleteMsg(server1, csns[2], test, 3));
 
     InternalSearchOperation searchOp = searchChangelogUsingCookie("(targetDN=*)", "", SUCCESS, 3, test);
     String firstCookie = readCookieFromNthEntry(searchOp.getSearchEntries(), 0);
 
     // remove the domain by sending a reset message
-    publishUpdateMessages(test, DN_OTEST, SERVER_ID_1, false, new ResetGenerationIdMsg(23657));
+    publishUpdateMessages(test, server1, false, new ResetGenerationIdMsg(23657));
 
     // replication changelog must have been cleared
     String cookie= "";
@@ -382,18 +380,18 @@
       // publish 4 changes (2 on each suffix)
       long time = TimeThread.getTime();
       int seqNum = 1;
-      CSN csn1 = new CSN(time, seqNum++, SERVER_ID_1);
-      CSN csn2 = new CSN(time, seqNum++, SERVER_ID_2);
-      CSN csn3 = new CSN(time, seqNum++, SERVER_ID_2);
-      CSN csn4 = new CSN(time, seqNum++, SERVER_ID_1);
+      CSN csn1 = new CSN(time, seqNum++, server1.getServerId());
+      CSN csn2 = new CSN(time, seqNum++, server2.getServerId());
+      CSN csn3 = new CSN(time, seqNum++, server2.getServerId());
+      CSN csn4 = new CSN(time, seqNum++, server1.getServerId());
 
-      publishUpdateMessagesInOTest(test, false, generateDeleteMsg(DN_OTEST, csn1, test, 1));
+      publishUpdateMessagesInOTest(test, false, generateDeleteMsg(server1, csn1, test, 1));
 
-      publishUpdateMessagesInOTest2(test, false,
-        generateDeleteMsg(DN_OTEST2, csn2, test, 2),
-        generateDeleteMsg(DN_OTEST2, csn3, test, 3));
+      publishUpdateMessagesInOTest2(test,
+          generateDeleteMsg(server2, csn2, test, 2),
+          generateDeleteMsg(server2, csn3, test, 3));
 
-      publishUpdateMessagesInOTest(test, false, generateDeleteMsg(DN_OTEST, csn4, test, 4));
+      publishUpdateMessagesInOTest(test, false, generateDeleteMsg(server1, csn4, test, 4));
 
       // search on all suffixes using empty cookie
       String cookie = "";
@@ -407,8 +405,8 @@
       cookie = assertEntriesContainsCSNsAndReadLastCookie(test, searchOp.getSearchEntries(), ldifWriter, csn4);
 
       // publish a new change on first suffix
-      CSN csn5 = new CSN(time, seqNum++, SERVER_ID_1);
-      publishUpdateMessagesInOTest(test, false, generateDeleteMsg(DN_OTEST, csn5, test, 5));
+      CSN csn5 = new CSN(time, seqNum++, server1.getServerId());
+      publishUpdateMessagesInOTest(test, false, generateDeleteMsg(server1, csn5, test, 5));
 
       // search using last cookie and expect to get the last change
       searchOp = searchChangelogUsingCookie("(targetDN=*" + test + "*)", cookie, SUCCESS, 1, test);
@@ -423,31 +421,28 @@
       // publish 4 more changes (2 on each suffix, on different server ids)
       time = TimeThread.getTime();
       seqNum = 6;
-      int serverId11 = 1203;
-      int serverId22 = 1204;
-      CSN csn6 = new CSN(time, seqNum++, serverId11);
-      CSN csn7 = new CSN(time, seqNum++, serverId22);
-      CSN csn8 = new CSN(time, seqNum++, serverId11);
-      CSN csn9 = new CSN(time, seqNum++, serverId22);
+      final ReplicaId server3 = ReplicaId.of(DN_OTEST2, 1203);
+      final ReplicaId server4 = ReplicaId.of(DN_OTEST, 1204);
+      CSN csn6 = new CSN(time, seqNum++, server3.getServerId());
+      CSN csn7 = new CSN(time, seqNum++, server4.getServerId());
+      CSN csn8 = new CSN(time, seqNum++, server3.getServerId());
+      CSN csn9 = new CSN(time, seqNum++, server4.getServerId());
 
-      publishUpdateMessages(test, DN_OTEST2, serverId11, false,
-        generateDeleteMsg(DN_OTEST2, csn6, test, 6));
-
-      publishUpdateMessages(test, DN_OTEST, serverId22, false,
-        generateDeleteMsg(DN_OTEST, csn7, test, 7));
-
-      publishUpdateMessages(test, DN_OTEST2, serverId11, false,
-        generateDeleteMsg(DN_OTEST2, csn8, test, 8));
-
-      publishUpdateMessages(test, DN_OTEST, serverId22, false,
-        generateDeleteMsg(DN_OTEST, csn9, test, 9));
+      publishUpdateMessages(test, server3, false,
+        generateDeleteMsg(server3, csn6, test, 6));
+      publishUpdateMessages(test, server4, false,
+        generateDeleteMsg(server4, csn7, test, 7));
+      publishUpdateMessages(test, server3, false,
+        generateDeleteMsg(server3, csn8, test, 8));
+      publishUpdateMessages(test, server4, false,
+        generateDeleteMsg(server4, csn9, test, 9));
 
       // ensure oldest state is correct for each suffix and for each server id
-      isOldestCSNForReplica(DN_OTEST, csn1);
-      isOldestCSNForReplica(DN_OTEST, csn7);
+      isOldestCSNForReplica(server1, csn1);
+      isOldestCSNForReplica(server4, csn7);
 
-      isOldestCSNForReplica(DN_OTEST2, csn2);
-      isOldestCSNForReplica(DN_OTEST2, csn6);
+      isOldestCSNForReplica(server2, csn2);
+      isOldestCSNForReplica(server3, csn6);
 
       // test last cookie on root DSE
       String expectedLastCookie = "o=test:" + csn5 + " " + csn9 + ";o=test2:" + csn3 + " " + csn8 + ";";
@@ -477,8 +472,9 @@
     }
   }
 
-  private void isOldestCSNForReplica(final DN baseDN, final CSN csn) throws Exception
+  private void isOldestCSNForReplica(final ReplicaId replicaId, final CSN csn) throws Exception
   {
+    assertSameServerId(replicaId, csn);
     TestTimer timer = new TestTimer.Builder()
       .maxSleep(3, SECONDS)
       .sleepTimes(100, MILLISECONDS)
@@ -490,10 +486,9 @@
       {
         final ReplicationDomainDB domainDB = replicationServer.getChangelogDB().getReplicationDomainDB();
         CursorOptions options = new CursorOptions(GREATER_THAN_OR_EQUAL_TO_KEY, ON_MATCHING_KEY);
-        try (DBCursor<UpdateMsg> cursor = domainDB.getCursorFrom(baseDN, csn.getServerId(), csn, options))
+        try (DBCursor<UpdateMsg> cursor = domainDB.getCursorFrom(replicaId.getBaseDN(), csn.getServerId(), csn, options))
         {
-          assertTrue(cursor.next(), "Expected to find at least one change in replicaDB(" + baseDN + " "
-              + csn.getServerId() + ")");
+          assertTrue(cursor.next(), "Expected to find at least one change in replicaDB for " + replicaId);
           assertEquals(cursor.getRecord().getCSN(), csn);
           return END_RUN;
         }
@@ -511,12 +506,12 @@
       Backend<?> backend3 = null;
       LDAPReplicationDomain domain2 = null;
       try {
-        ReplicationBroker broker = enableReplication(DN_OTEST, SERVER_ID_1, replicationServerPort, brokerSessionTimeout);
+        ReplicationBroker broker = enableReplication(server1);
 
         // create and publish 1 change on each suffix
         long time = TimeThread.getTime();
-        CSN csn1 = new CSN(time, 1, SERVER_ID_1);
-        broker.publish(generateDeleteMsg(DN_OTEST, csn1, test, 1));
+        CSN csn1 = new CSN(time, 1, server1.getServerId());
+        broker.publish(generateDeleteMsg(server1, csn1, test, 1));
 
         // create backend and configure replication for it
         backend3 = initializeMemoryBackend(false, TEST_BACKEND_ID3);
@@ -542,7 +537,7 @@
 
         // test the lastExternalChangelogCookie attribute of the ECL
         // (does only refer to non private backend)
-        assertLastCookieIsEqualTo("o=test:" + csn1 + ";");
+        assertLastCookieIsEqualTo(buildCookie(csn1));
       }
       finally
       {
@@ -605,8 +600,8 @@
     // add a new change, then check again first and last change number without previous search
     testName = "Multiple/9";
     CSN lastCsn = csns[csns.length - 1];
-    CSN csn = new CSN(lastCsn.getTime() + 1, 9, SERVER_ID_1);
-    publishUpdateMessagesInOTest(testName, false, generateDeleteMsg(DN_OTEST, csn, testName, 1));
+    CSN csn = new CSN(lastCsn.getTime() + 1, 9, server1.getServerId());
+    publishUpdateMessagesInOTest(testName, false, generateDeleteMsg(server1, csn, testName, 1));
 
     assertChangelogAttributesInRootDSE(1, 9);
   }
@@ -974,12 +969,12 @@
   private CSN[] generateAndPublishUpdateMsgForEachOperationType(String testName, boolean checkLastCookie)
       throws Exception
   {
-    CSN[] csns = generateCSNs(4, SERVER_ID_1);
+    CSN[] csns = generateCSNs(4, server1);
     publishUpdateMessagesInOTest(testName, checkLastCookie,
-      generateDeleteMsg(DN_OTEST, csns[0], testName, 1),
-      generateAddMsg(DN_OTEST, csns[1], USER1_ENTRY_UUID, testName),
-      generateModMsg(DN_OTEST, csns[2], testName),
-      generateModDNMsg(DN_OTEST, csns[3], testName));
+      generateDeleteMsg(server1, csns[0], testName, 1),
+      generateAddMsg(server1, csns[1], USER1_ENTRY_UUID, testName),
+      generateModMsg(server1, csns[2], testName),
+      generateModDNMsg(server1, csns[3], testName));
     return csns;
   }
 
@@ -987,13 +982,13 @@
   private void publishUpdateMessagesInOTest(String testName, boolean checkLastCookie, UpdateMsg...messages)
       throws Exception
   {
-    publishUpdateMessages(testName, DN_OTEST, SERVER_ID_1, checkLastCookie, messages);
+    publishUpdateMessages(testName, server1, checkLastCookie, messages);
   }
 
-  private void publishUpdateMessagesInOTest2(String testName, boolean checkLastCookie, UpdateMsg...messages)
+  private void publishUpdateMessagesInOTest2(String testName, UpdateMsg...messages)
       throws Exception
   {
-    publishUpdateMessages(testName, DN_OTEST2, SERVER_ID_2, checkLastCookie, messages);
+    publishUpdateMessages(testName, server2, false, messages);
   }
 
   /**
@@ -1001,17 +996,17 @@
    *
    * @param checkLastCookie if true, checks that last cookie is update after each message publication
    */
-  private void publishUpdateMessages(String testName, DN baseDN, int serverId, boolean checkLastCookie,
-      ReplicationMsg...messages) throws Exception
+  private void publishUpdateMessages(String testName, ReplicaId replicaId, boolean checkLastCookie,
+      ReplicationMsg... messages) throws Exception
   {
-    ReplicationBroker broker = enableReplication(baseDN, serverId, replicationServerPort, brokerSessionTimeout);
+    ReplicationBroker broker = enableReplication(replicaId);
     String cookie = "";
     for (ReplicationMsg msg : messages)
     {
       if (msg instanceof UpdateMsg)
       {
         final UpdateMsg updateMsg = (UpdateMsg) msg;
-        assertThat(updateMsg.getCSN().getServerId()).isEqualTo(serverId);
+        assertThat(updateMsg.getCSN().getServerId()).isEqualTo(replicaId.getServerId());
         debugInfo(testName, " publishes " + updateMsg.getCSN());
       }
 
@@ -1029,7 +1024,7 @@
     final String[] cookies = new String[csns.length];
     for (int j = 0; j < cookies.length; j++)
     {
-      cookies[j] = "o=test:" + csns[j] + ";";
+      cookies[j] = buildCookie(csns[j]);
     }
     return cookies;
   }
@@ -1073,8 +1068,7 @@
 
     SearchResultEntry entry = searchOp.getSearchEntries().get(0);
     String uncheckedUid = null;
-    assertEntryCommonAttributes(entry, uncheckedUid, USER1_ENTRY_UUID, changeNumber, expectedCsn,
-        "o=test:" + expectedCsn + ";");
+    assertEntryCommonAttributes(entry, uncheckedUid, USER1_ENTRY_UUID, changeNumber, expectedCsn);
 
     debugInfo(testName, "Ending search with success");
   }
@@ -1162,7 +1156,7 @@
     return new LDIFWriter(exportConfig);
   }
 
-  private CSN[] generateCSNs(int numberOfCsns, int serverId)
+  private CSN[] generateCSNs(int numberOfCsns, ReplicaId replicaId)
   {
     long startTime = TimeThread.getTime();
 
@@ -1170,23 +1164,23 @@
     for (int i = 0; i < numberOfCsns; i++)
     {
       // seqNum must be greater than 0, so start at 1
-      csns[i] = new CSN(startTime + i, i + 1, serverId);
+      csns[i] = new CSN(startTime + i, i + 1, replicaId.getServerId());
     }
     return csns;
   }
 
-  private UpdateMsg generateDeleteMsg(DN baseDn, CSN csn, String testName, int testIndex)
-      throws Exception
+  private UpdateMsg generateDeleteMsg(ReplicaId replicaId, CSN csn, String testName, int testIndex)      throws Exception
   {
-    String dn = "uid=" + testName + testIndex + "," + baseDn;
+    assertSameServerId(replicaId, csn);
+    String dn = "uid=" + testName + testIndex + "," + replicaId.getBaseDN();
     return new DeleteMsg(DN.valueOf(dn), csn, testName + "uuid" + testIndex);
   }
 
-  private UpdateMsg generateAddMsg(DN baseDn, CSN csn, String user1entryUUID, String testName)
-      throws Exception
+  private UpdateMsg generateAddMsg(ReplicaId replicaId, CSN csn, String user1entryUUID, String testName)      throws Exception
   {
+    assertSameServerId(replicaId, csn);
     String baseUUID = "22222222-2222-2222-2222-222222222222";
-    String dn = "uid=" + testName + "2," + baseDn;
+    String dn = "uid=" + testName + "2," + replicaId.getBaseDN();
     Entry entry = makeEntry(
         "dn: " + dn,
         "objectClass: top",
@@ -1202,9 +1196,10 @@
         Collections.<Attribute> emptyList());
   }
 
-  private UpdateMsg generateModMsg(DN baseDn, CSN csn, String testName) throws Exception
+  private UpdateMsg generateModMsg(ReplicaId replicaId, CSN csn, String testName) throws Exception
   {
-    DN baseDN = DN.valueOf("uid=" + testName + "3," + baseDn);
+    assertSameServerId(replicaId, csn);
+    DN baseDN = DN.valueOf("uid=" + testName + "3," + replicaId.getBaseDN());
     List<Modification> mods = createAttributeModif("description", "new value");
     return new ModifyMsg(csn, baseDN, mods, testName + "uuid3");
   }
@@ -1215,11 +1210,12 @@
     return newArrayList(new Modification(ModificationType.REPLACE, attr));
   }
 
-  private UpdateMsg generateModDNMsg(DN baseDn, CSN csn, String testName) throws Exception
+  private UpdateMsg generateModDNMsg(ReplicaId replicaId, CSN csn, String testName) throws Exception
   {
+    assertSameServerId(replicaId, csn);
     final DN newSuperior = DN_OTEST2;
     ModifyDNOperation op = new ModifyDNOperationBasis(connection, 1, 1, null,
-        DN.valueOf("uid=" + testName + "4," + baseDn), // entryDN
+        DN.valueOf("uid=" + testName + "4," + replicaId.getBaseDN()), // entryDN
         RDN.decode("uid=" + testName + "new4"), // new rdn
         true,  // deleteoldrdn
         newSuperior);
@@ -1228,6 +1224,11 @@
     return new ModifyDNMsg(localOp);
   }
 
+  private void assertSameServerId(ReplicaId replicaId, CSN csn)
+  {
+    assertThat(replicaId.getServerId()).isEqualTo(csn.getServerId());
+  }
+
   /** TODO : share this code with other classes ? */
   private void waitForSearchOpResult(final Operation operation, final ResultCode expectedResult) throws Exception
   {
@@ -1279,49 +1280,50 @@
 
   /** Check the DEL entry has the right content. */
   private void assertDelEntry(SearchResultEntry entry, String uid, String entryUUID,
-      long changeNumber, CSN csn, String cookie) throws Exception
+      long changeNumber, CSN csn) throws Exception
   {
     assertAttributeValue(entry, "changetype", "delete");
     assertAttributeValue(entry, "targetuniqueid", entryUUID);
     assertAttributeValue(entry, "targetentryuuid", entryUUID);
-    assertEntryCommonAttributes(entry, uid, entryUUID, changeNumber, csn, cookie);
+    assertEntryCommonAttributes(entry, uid, entryUUID, changeNumber, csn);
   }
 
   /** Check the ADD entry has the right content. */
   private void assertAddEntry(SearchResultEntry entry, String uid, String entryUUID,
-      long changeNumber, CSN csn, String cookie) throws Exception
+      long changeNumber, CSN csn) throws Exception
   {
     assertAttributeValue(entry, "changetype", "add");
     assertEntryMatchesLDIF(entry, "changes",
         "objectClass: domain",
         "objectClass: top",
         "entryUUID: " + entryUUID);
-    assertEntryCommonAttributes(entry, uid, entryUUID, changeNumber, csn, cookie);
+    assertEntryCommonAttributes(entry, uid, entryUUID, changeNumber, csn);
   }
 
   private void assertModEntry(SearchResultEntry entry, String uid, String entryUUID,
-      long changeNumber, CSN csn, String cookie) throws Exception
+      long changeNumber, CSN csn) throws Exception
   {
     assertAttributeValue(entry, "changetype", "modify");
     assertEntryMatchesLDIF(entry, "changes",
         "replace: description",
         "description: new value",
         "-");
-    assertEntryCommonAttributes(entry, uid, entryUUID, changeNumber, csn, cookie);
+    assertEntryCommonAttributes(entry, uid, entryUUID, changeNumber, csn);
   }
 
   private void assertModDNEntry(SearchResultEntry entry, String uid, String newUid,
-      String entryUUID, long changeNumber, CSN csn, String cookie) throws Exception
+      String entryUUID, long changeNumber, CSN csn) throws Exception
   {
     assertAttributeValue(entry, "changetype", "modrdn");
     assertAttributeValue(entry, "newrdn", "uid=" + newUid);
     assertAttributeValue(entry, "newsuperior", DN_OTEST2);
     assertAttributeValue(entry, "deleteoldrdn", "true");
-    assertEntryCommonAttributes(entry, uid, entryUUID, changeNumber, csn, cookie);
+    assertEntryCommonAttributes(entry, uid, entryUUID, changeNumber, csn);
   }
 
   private void assertEntryCommonAttributes(SearchResultEntry resultEntry,
-      String uid, String entryUUID, long changeNumber, CSN csn, String cookie) throws Exception
+ String uid, String entryUUID,
+      long changeNumber, CSN csn) throws Exception
   {
     if (changeNumber == 0)
     {
@@ -1335,7 +1337,7 @@
     assertAttributeValue(resultEntry, "targetentryuuid", entryUUID);
     assertAttributeValue(resultEntry, "replicaidentifier", SERVER_ID_1);
     assertAttributeValue(resultEntry, "replicationcsn", csn);
-    assertAttributeValue(resultEntry, "changelogcookie", cookie);
+    assertAttributeValue(resultEntry, "changelogcookie", buildCookie(csn));
     // A null value can be provided for uid if it should not be checked
     if (uid != null)
     {
@@ -1351,19 +1353,30 @@
 
     assertThat(entries).hasSize(4);
 
-    CSN csn = csns[0];
-    assertDelEntry(entries.get(0), testName + "1", testName + "uuid1", firstChangeNumber, csn, "o=test:" + csn + ";");
+    int idx = 0;
+    assertDelEntry(entries.get(idx), testName + (idx + 1),
+        testName + "uuid1",
+        firstChangeNumber + idx, csns[idx]);
 
-    csn = csns[1];
-    assertAddEntry(entries.get(1), testName + "2", entryUUID, firstChangeNumber+1, csn, "o=test:" + csn + ";");
+    idx = 1;
+    assertAddEntry(entries.get(idx), testName + (idx + 1),
+        entryUUID,
+        firstChangeNumber + idx, csns[idx]);
 
-    csn = csns[2];
-    assertModEntry(entries.get(2), testName + "3", testName + "uuid3", firstChangeNumber+2, csn,
-        "o=test:" + csn + ";");
+    idx = 2;
+    assertModEntry(entries.get(idx), testName + (idx + 1),
+        testName + "uuid3",
+        firstChangeNumber + idx, csns[idx]);
 
-    csn = csns[3];
-    assertModDNEntry(entries.get(3), testName + "4", testName + "new4", testName + "uuid4", firstChangeNumber+3, csn,
-        "o=test:" + csn + ";");
+    idx = 3;
+    assertModDNEntry(entries.get(idx), testName + (idx + 1),
+        testName + "new4", testName + "uuid4",
+        firstChangeNumber + idx, csns[idx]);
+  }
+
+  private String buildCookie(CSN csn)
+  {
+    return "o=test:" + csn + ";";
   }
 
   /** Asserts the attribute value as LDIF to ignore lines ordering. */

--
Gitblit v1.10.0