From e3c572ea44ac45ee852f71d4c05b83d3cf27febf Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Tue, 13 Aug 2013 10:07:41 +0000
Subject: [PATCH] ExternalChangelogTest.java: Extracted constants SERVER_ID_1 and SERVER_ID_2. Renamed getAttributeValue() to getAttributeValueOrNull(). Extracted new getAttributeValue() from getAttributeValueOrNull(), checkValue() and checkPossibleValues(). In ECLGetEligibleCountTest(), extracted constants to better explicit the code + removed the count local variable + extracted method now() Removed useless code blocks.

---
 opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ExternalChangeLogTest.java |  473 ++++++++++++++++++++++++++--------------------------------
 opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java                |    6 
 2 files changed, 216 insertions(+), 263 deletions(-)

diff --git a/opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java b/opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java
index 6edf6ab..947fcbf 100644
--- a/opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java
+++ b/opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java
@@ -3335,11 +3335,7 @@
 
     for (int serverId : getDbServerState())
     {
-      ChangeNumber startCN = null;
-      if (startState.getChangeNumber(serverId) != null)
-      {
-        startCN = startState.getChangeNumber(serverId);
-      }
+      ChangeNumber startCN = startState.getChangeNumber(serverId);
       long serverIdRes = getCount(serverId, startCN, endCN);
 
       // The startPoint is excluded when counting the ECL eligible changes
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ExternalChangeLogTest.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ExternalChangeLogTest.java
index b6a3be5..80f9853 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ExternalChangeLogTest.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ExternalChangeLogTest.java
@@ -88,6 +88,10 @@
 @SuppressWarnings("javadoc")
 public class ExternalChangeLogTest extends ReplicationTestCase
 {
+
+  private static final int SERVER_ID_1 = 1201;
+  private static final int SERVER_ID_2 = 1202;
+
   /** The tracer object for the debug logger */
   private static final DebugTracer TRACER = getTracer();
 
@@ -485,25 +489,23 @@
     {
       // create 2 regular brokers on the 2 suffixes
       server01 = openReplicationSession(
-          DN.decode(TEST_ROOT_DN_STRING),  1201,
-          100, replicationServerPort,
-          brokerSessionTimeout, true);
+          DN.decode(TEST_ROOT_DN_STRING), SERVER_ID_1,
+          100, replicationServerPort, brokerSessionTimeout, true);
 
       server02 = openReplicationSession(
-          DN.decode(TEST_ROOT_DN_STRING2),  1202,
-          100, replicationServerPort,
-          brokerSessionTimeout, true, EMPTY_DN_GENID);
+          DN.decode(TEST_ROOT_DN_STRING2), SERVER_ID_2,
+          100, replicationServerPort, brokerSessionTimeout, true, EMPTY_DN_GENID);
 
       // create and publish 1 change on each suffix
       long time = TimeThread.getTime();
       int ts = 1;
-      ChangeNumber cn1 = new ChangeNumber(time, ts++, 1201);
+      ChangeNumber cn1 = new ChangeNumber(time, ts++, SERVER_ID_1);
       DeleteMsg delMsg1 =
         new DeleteMsg("o=" + tn + "1," + TEST_ROOT_DN_STRING, cn1, "ECLBasicMsg1uid");
       server01.publish(delMsg1);
       debugInfo(tn, "publishes:" + delMsg1);
 
-      ChangeNumber cn2 = new ChangeNumber(time, ts++, 1202);
+      ChangeNumber cn2 = new ChangeNumber(time, ts++, SERVER_ID_2);
       DeleteMsg delMsg2 =
         new DeleteMsg("o=" + tn + "2," + TEST_ROOT_DN_STRING2, cn2, "ECLBasicMsg2uid");
       server02.publish(delMsg2);
@@ -637,14 +639,13 @@
       baseDn2 = DN.decode(TEST_ROOT_DN_STRING2);
 
       server01 = openReplicationSession(
-          DN.decode(TEST_ROOT_DN_STRING),  1201,
-          100, replicationServerPort,
-          brokerSessionTimeout, true);
+          DN.decode(TEST_ROOT_DN_STRING), SERVER_ID_1,
+          100, replicationServerPort, brokerSessionTimeout, true);
 
       // create and publish 1 change on each suffix
       long time = TimeThread.getTime();
       int ts = 1;
-      ChangeNumber cn1 = new ChangeNumber(time, ts++, 1201);
+      ChangeNumber cn1 = new ChangeNumber(time, ts++, SERVER_ID_1);
       DeleteMsg delMsg1 =
         new DeleteMsg("o=" + tn + "1," + TEST_ROOT_DN_STRING, cn1, "ECLBasicMsg1uid");
       server01.publish(delMsg1);
@@ -738,22 +739,17 @@
     try
     {
       // Initialize a second test backend
-      Backend backend2 = initializeTestBackend(true,
-          TEST_ROOT_DN_STRING2, TEST_BACKEND_ID2);
+      initializeTestBackend(true, TEST_ROOT_DN_STRING2, TEST_BACKEND_ID2);
 
-      //
       LDIFWriter ldifWriter = getLDIFWriter();
 
-      // --
       s1test = openReplicationSession(
-          DN.decode(TEST_ROOT_DN_STRING),  1201,
-          100, replicationServerPort,
-          brokerSessionTimeout, true);
+          DN.decode(TEST_ROOT_DN_STRING), SERVER_ID_1,
+          100, replicationServerPort, brokerSessionTimeout, true);
 
       s2test2 = openReplicationSession(
-          DN.decode(TEST_ROOT_DN_STRING2),  1202,
-          100, replicationServerPort,
-          brokerSessionTimeout, true, EMPTY_DN_GENID);
+          DN.decode(TEST_ROOT_DN_STRING2), SERVER_ID_2,
+          100, replicationServerPort, brokerSessionTimeout, true, EMPTY_DN_GENID);
       sleep(500);
 
       // Produce updates
@@ -826,13 +822,11 @@
       // --
       s1test2 = openReplicationSession(
           DN.decode(TEST_ROOT_DN_STRING2),  1203,
-          100, replicationServerPort,
-          brokerSessionTimeout, true, EMPTY_DN_GENID);
+          100, replicationServerPort, brokerSessionTimeout, true, EMPTY_DN_GENID);
 
       s2test = openReplicationSession(
           DN.decode(TEST_ROOT_DN_STRING),  1204,
-          100, replicationServerPort,
-          brokerSessionTimeout, true);
+          100, replicationServerPort, brokerSessionTimeout, true);
       sleep(500);
 
       time = TimeThread.getTime();
@@ -1009,11 +1003,10 @@
 
       // Creates broker on o=test
       server01 = openReplicationSession(
-          DN.decode(TEST_ROOT_DN_STRING),  1201,
-          100, replicationServerPort,
-          brokerSessionTimeout, true);
+          DN.decode(TEST_ROOT_DN_STRING), SERVER_ID_1,
+          100, replicationServerPort, brokerSessionTimeout, true);
 
-      final ChangeNumber[] cns = generateChangeNumbers(4, 1201);
+      final ChangeNumber[] cns = generateChangeNumbers(4, SERVER_ID_1);
       publishDeleteMsgInOTest(server01, cns[0], tn, 1);
 
       Thread.sleep(1000);
@@ -1149,20 +1142,18 @@
 
       // Creates broker on o=test
       ReplicationBroker server01 = openReplicationSession(
-          DN.decode(TEST_ROOT_DN_STRING),  1201,
-          100, replicationServerPort,
-          brokerSessionTimeout, true);
+          DN.decode(TEST_ROOT_DN_STRING), SERVER_ID_1,
+          100, replicationServerPort, brokerSessionTimeout, true);
 
       // Creates broker on o=test2
       ReplicationBroker server02 = openReplicationSession(
-          DN.decode(TEST_ROOT_DN_STRING2),  1202,
-          100, replicationServerPort,
-          brokerSessionTimeout, true);
+          DN.decode(TEST_ROOT_DN_STRING2), SERVER_ID_2,
+          100, replicationServerPort, brokerSessionTimeout, true);
 
       String user1entryUUID = "11111111-1111-1111-1111-111111111111";
       String baseUUID       = "22222222-2222-2222-2222-222222222222";
 
-      ChangeNumber[] cns = generateChangeNumbers(4, 1201);
+      ChangeNumber[] cns = generateChangeNumbers(4, SERVER_ID_1);
 
       // Publish DEL
       int cnCounter = 0;
@@ -1233,7 +1224,7 @@
           checkDn(cns[i - 1], resultEntry);
           checkValue(resultEntry, "targetdn", "uid=" + tn + i + "," + TEST_ROOT_DN_STRING);
           checkValue(resultEntry, "replicationcsn", cns[i - 1].toString());
-          checkValue(resultEntry, "replicaidentifier", "1201");
+          checkValue(resultEntry, "replicaidentifier", String.valueOf(SERVER_ID_1));
           checkValue(resultEntry, "changelogcookie", cookies[i - 1]);
           checkValue(resultEntry, "changenumber", "0");
 
@@ -1362,34 +1353,18 @@
 
   private static void checkValue(Entry entry, String attrName, String expectedValue)
   {
-    AttributeValue av = null;
-    try
-    {
-      List<Attribute> attrs = entry.getAttribute(attrName);
-      Attribute a = attrs.iterator().next();
-      av = a.iterator().next();
-      String encodedValue = av.toString();
-      assertTrue(encodedValue.equalsIgnoreCase(expectedValue),
-          "In entry " + entry + " attr <" + attrName + "> equals " +
-          av + " instead of expected value " + expectedValue);
-    }
-    catch(Exception e)
-    {
-      assertTrue(false,
-          "In entry " + entry + " attr <" + attrName + "> equals " +
-          av + " instead of expected value " + expectedValue);
-    }
+    String encodedValue = getAttributeValue(entry, attrName);
+    assertTrue(encodedValue.equalsIgnoreCase(expectedValue), "In entry "
+        + entry + " attr <" + attrName + "> equals " + encodedValue
+        + " instead of expected value " + expectedValue);
   }
 
 
-  private static String getAttributeValue(Entry entry, String attrName)
+  private static String getAttributeValueOrNull(Entry entry, String attrName)
   {
     try
     {
-      List<Attribute> attrs = entry.getAttribute(attrName);
-      Attribute a = attrs.iterator().next();
-      AttributeValue av = a.iterator().next();
-      return av.toString();
+      return getAttributeValue(entry, attrName);
     }
     catch(Exception e)
     {
@@ -1397,30 +1372,24 @@
     return null;
   }
 
+  private static String getAttributeValue(Entry entry, String attrName)
+  {
+    List<Attribute> attrs = entry.getAttribute(attrName);
+    Attribute a = attrs.iterator().next();
+    AttributeValue av = a.iterator().next();
+    return av.toString();
+  }
+
   private static void checkPossibleValues(Entry entry, String attrName,
       String expectedValue1, String expectedValue2)
   {
-    AttributeValue av = null;
-    try
-    {
-      List<Attribute> attrs = entry.getAttribute(attrName);
-      Attribute a = attrs.iterator().next();
-      av = a.iterator().next();
-      String encodedValue = av.toString();
-      assertTrue(
-          (encodedValue.equalsIgnoreCase(expectedValue1) ||
-              encodedValue.equalsIgnoreCase(expectedValue2)),
-              "In entry " + entry + " attr <" + attrName + "> equals " +
-              av + " instead of one of the expected values " + expectedValue1
-              + " or " + expectedValue2);
-    }
-    catch(Exception e)
-    {
-      assertTrue(false,
-          "In entry " + entry + " attr <" + attrName + "> equals " +
-          av + " instead of one of the expected values " + expectedValue1
-          + " or " + expectedValue2);
-    }
+    String encodedValue = getAttributeValue(entry, attrName);
+    assertTrue(
+        (encodedValue.equalsIgnoreCase(expectedValue1)
+            || encodedValue.equalsIgnoreCase(expectedValue2)),
+        "In entry " + entry + " attr <" + attrName + "> equals " + encodedValue
+        + " instead of one of the expected values " + expectedValue1 + " or "
+        + expectedValue2);
   }
 
   private static void checkValues(Entry entry, String attrName,
@@ -1464,11 +1433,10 @@
     {
       // Create broker on suffix
       ReplicationBroker server01 = openReplicationSession(
-          DN.decode(TEST_ROOT_DN_STRING),  1201,
-          100, replicationServerPort,
-          brokerSessionTimeout, true);
+          DN.decode(TEST_ROOT_DN_STRING), SERVER_ID_1,
+          100, replicationServerPort, brokerSessionTimeout, true);
 
-      ChangeNumber[] cns = generateChangeNumbers(2, 1201);
+      ChangeNumber[] cns = generateChangeNumbers(2, SERVER_ID_1);
 
       // Produce update on this suffix
       DeleteMsg delMsg =
@@ -1746,22 +1714,20 @@
     {
       // Create broker on o=test
       server01 = openReplicationSession(
-          DN.decode(TEST_ROOT_DN_STRING),  1201,
-          100, replicationServerPort,
-          brokerSessionTimeout, true);
+          DN.decode(TEST_ROOT_DN_STRING), SERVER_ID_1,
+          100, replicationServerPort, brokerSessionTimeout, true);
       server01.setChangeTimeHeartbeatInterval(100); //ms
       int ts = 1;
 
       // Create broker on o=test2
       server02 = openReplicationSession(
-          DN.decode(TEST_ROOT_DN_STRING2),  1202,
-          100, replicationServerPort,
-          brokerSessionTimeout, true, EMPTY_DN_GENID);
+          DN.decode(TEST_ROOT_DN_STRING2), SERVER_ID_2,
+          100, replicationServerPort, brokerSessionTimeout, true, EMPTY_DN_GENID);
       server02.setChangeTimeHeartbeatInterval(100); //ms
 
       // Produce update 1
       ChangeNumber cn1 =
-        new ChangeNumber(TimeThread.getTime(), ts++, 1201);
+        new ChangeNumber(TimeThread.getTime(), ts++, SERVER_ID_1);
       DeleteMsg delMsg1 =
         new DeleteMsg("uid=" + tn + "1," + TEST_ROOT_DN_STRING, cn1,
             "11111111-1111-1111-1111-111111111111");
@@ -1771,7 +1737,7 @@
 
       // Produce update 2
       ChangeNumber cn2 =
-        new ChangeNumber(TimeThread.getTime(), ts++, 1202);
+        new ChangeNumber(TimeThread.getTime(), ts++, SERVER_ID_2);
       DeleteMsg delMsg2 =
         new DeleteMsg("uid=" + tn + "2," + TEST_ROOT_DN_STRING2, cn2,
             "22222222-2222-2222-2222-222222222222");
@@ -1781,7 +1747,7 @@
 
       // Produce update 3
       ChangeNumber cn3 =
-        new ChangeNumber(TimeThread.getTime(), ts++, 1202);
+        new ChangeNumber(TimeThread.getTime(), ts++, SERVER_ID_2);
       DeleteMsg delMsg3 =
         new DeleteMsg("uid=" + tn + "3," + TEST_ROOT_DN_STRING2, cn3,
             "33333333-3333-3333-3333-333333333333");
@@ -2013,7 +1979,7 @@
       }
 
       // Produces additional change
-      ChangeNumber cn11 = new ChangeNumber(TimeThread.getTime(), 11, 1201);
+      ChangeNumber cn11 = new ChangeNumber(TimeThread.getTime(), 11, SERVER_ID_1);
       String expectedDn11 = "uid=" + tn + "11," +  TEST_ROOT_DN_STRING;
       DeleteMsg delMsg11 = new DeleteMsg(expectedDn11, cn11,
          "44444444-4444-4444-4444-444444444444");
@@ -2023,7 +1989,7 @@
       debugInfo(tn, delMsg11.getChangeNumber() + " published additionally ");
 
       // Produces additional change
-      ChangeNumber cn12 = new ChangeNumber(TimeThread.getTime(), 12, 1202);
+      ChangeNumber cn12 = new ChangeNumber(TimeThread.getTime(), 12, SERVER_ID_2);
       String expectedDn12 = "uid=" + tn + "12," +  TEST_ROOT_DN_STRING2;
       DeleteMsg delMsg12 = new DeleteMsg(expectedDn12, cn12,
          "55555555-5555-5555-5555-555555555555");
@@ -2033,7 +1999,7 @@
       debugInfo(tn, delMsg12.getChangeNumber()  + " published additionally ");
 
       // Produces additional change
-      ChangeNumber cn13 = new ChangeNumber(TimeThread.getTime(), 13, 1202);
+      ChangeNumber cn13 = new ChangeNumber(TimeThread.getTime(), 13, SERVER_ID_2);
       String expectedDn13 = "uid=" + tn + "13," +  TEST_ROOT_DN_STRING2;
       DeleteMsg delMsg13 = new DeleteMsg(expectedDn13, cn13,
          "66666666-6666-6666-6666-666666666666");
@@ -2328,14 +2294,12 @@
 
       // --
       s1test = openReplicationSession(
-          DN.decode(TEST_ROOT_DN_STRING),  1201,
-          100, replicationServerPort,
-          brokerSessionTimeout, true);
+          DN.decode(TEST_ROOT_DN_STRING), SERVER_ID_1,
+          100, replicationServerPort, brokerSessionTimeout, true);
 
       s2test2 = openReplicationSession(
-          DN.decode(TEST_ROOT_DN_STRING2),  1202,
-          100, replicationServerPort,
-          brokerSessionTimeout, true, EMPTY_DN_GENID);
+          DN.decode(TEST_ROOT_DN_STRING2), SERVER_ID_2,
+          100, replicationServerPort, brokerSessionTimeout, true, EMPTY_DN_GENID);
       sleep(500);
 
       // Produce updates
@@ -2357,13 +2321,11 @@
       // --
       s1test2 = openReplicationSession(
           DN.decode(TEST_ROOT_DN_STRING2),  1203,
-          100, replicationServerPort,
-          brokerSessionTimeout, true, EMPTY_DN_GENID);
+          100, replicationServerPort, brokerSessionTimeout, true, EMPTY_DN_GENID);
 
       s2test = openReplicationSession(
           DN.decode(TEST_ROOT_DN_STRING),  1204,
-          100, replicationServerPort,
-          brokerSessionTimeout, true);
+          100, replicationServerPort, brokerSessionTimeout, true);
       sleep(500);
 
       // Test startState ("first cookie") of the ECL
@@ -2454,14 +2416,13 @@
 
       // Creates broker on o=test
       ReplicationBroker server01 = openReplicationSession(
-          DN.decode(TEST_ROOT_DN_STRING),  1201,
-          100, replicationServerPort,
-          brokerSessionTimeout, true);
+          DN.decode(TEST_ROOT_DN_STRING), SERVER_ID_1,
+          100, replicationServerPort, brokerSessionTimeout, true);
 
       String user1entryUUID = "11111111-1112-1113-1114-111111111115";
       String baseUUID       = "22222222-2222-2222-2222-222222222222";
 
-      ChangeNumber[] cns = generateChangeNumbers(nbChanges, 1201);
+      ChangeNumber[] cns = generateChangeNumbers(nbChanges, SERVER_ID_1);
       gblCN = cns[1];
 
       // Publish DEL
@@ -2545,7 +2506,7 @@
       assertDnEquals(resultEntry, firstDraftChangeNumber, i - 1);
       checkValue(resultEntry, "changenumber", String.valueOf(firstDraftChangeNumber + i - 1));
       checkValue(resultEntry, "targetentryuuid", user1entryUUID);
-      checkValue(resultEntry, "replicaidentifier", "1201");
+      checkValue(resultEntry, "replicaidentifier", String.valueOf(SERVER_ID_1));
       final ChangeNumber cn = cns[i - 1];
       checkValue(resultEntry, "replicationcsn", cn.toString());
       checkValue(resultEntry, "changelogcookie", "o=test:" + cn + ";");
@@ -2594,36 +2555,34 @@
     String tn = "ECLCompatReadFrom/" + firstDraftChangeNumber;
     debugInfo(tn, "Starting test\n\n");
 
-    {
-      LDIFWriter ldifWriter = getLDIFWriter();
+    LDIFWriter ldifWriter = getLDIFWriter();
 
-      // Creates broker on o=test
-      ReplicationBroker server01 = openReplicationSession(
-          DN.decode(TEST_ROOT_DN_STRING),  1201,
-          100, replicationServerPort,
-          brokerSessionTimeout, true);
+    // Creates broker on o=test
+    ReplicationBroker server01 =
+        openReplicationSession(DN.decode(TEST_ROOT_DN_STRING), SERVER_ID_1,
+            100, replicationServerPort, brokerSessionTimeout, true);
 
-      String user1entryUUID = "11111111-1112-1113-1114-111111111115";
+    String user1entryUUID = "11111111-1112-1113-1114-111111111115";
 
-      String filter = "(changenumber="+firstDraftChangeNumber+")";
-      InternalSearchOperation searchOp = searchOnChangelog(filter, tn, SUCCESS);
+    String filter = "(changenumber=" + firstDraftChangeNumber + ")";
+    InternalSearchOperation searchOp = searchOnChangelog(filter, tn, SUCCESS);
 
-      List<SearchResultEntry> entries = searchOp.getSearchEntries();
-      assertEquals(entries.size(), 1);
-      debugAndWriteEntries(ldifWriter, entries, tn);
+    List<SearchResultEntry> entries = searchOp.getSearchEntries();
+    assertEquals(entries.size(), 1);
+    debugAndWriteEntries(ldifWriter, entries, tn);
 
-      // check the entry has the right content
-      SearchResultEntry resultEntry = entries.get(0);
-      assertTrue("changenumber=6,cn=changelog".equalsIgnoreCase(resultEntry.getDN().toNormalizedString()));
-      checkValue(resultEntry, "replicationcsn", gblCN.toString());
-      checkValue(resultEntry, "replicaidentifier", "1201");
-      checkValue(resultEntry, "changetype", "add");
-      checkValue(resultEntry, "changelogcookie", "o=test:" + gblCN + ";");
-      checkValue(resultEntry, "targetentryuuid", user1entryUUID);
-      checkValue(resultEntry, "changenumber", "6");
+    // check the entry has the right content
+    SearchResultEntry resultEntry = entries.get(0);
+    assertTrue("changenumber=6,cn=changelog".equalsIgnoreCase(resultEntry.getDN().toNormalizedString()));
+    checkValue(resultEntry, "replicationcsn", gblCN.toString());
+    checkValue(resultEntry, "replicaidentifier", String.valueOf(SERVER_ID_1));
+    checkValue(resultEntry, "changetype", "add");
+    checkValue(resultEntry, "changelogcookie", "o=test:" + gblCN + ";");
+    checkValue(resultEntry, "targetentryuuid", user1entryUUID);
+    checkValue(resultEntry, "changenumber", "6");
 
-      server01.stop();
-    }
+    server01.stop();
+
     debugInfo(tn, "Ending test with success");
   }
 
@@ -2638,7 +2597,7 @@
 
     // Creates broker on o=test
     ReplicationBroker server01 =
-        openReplicationSession(DN.decode(TEST_ROOT_DN_STRING), 1201, 100,
+        openReplicationSession(DN.decode(TEST_ROOT_DN_STRING), SERVER_ID_1, 100,
             replicationServerPort, brokerSessionTimeout, true);
 
     String filter = "(changenumber=" + firstDraftChangeNumber + ")";
@@ -2846,10 +2805,10 @@
     debugAndWriteEntries(null, entries, tn);
     for (SearchResultEntry resultEntry : entries)
     {
-      assertEquals(getAttributeValue(resultEntry, "firstchangenumber"), null);
-      assertEquals(getAttributeValue(resultEntry, "lastchangenumber"), null);
-      assertEquals(getAttributeValue(resultEntry, "changelog"), null);
-      assertEquals(getAttributeValue(resultEntry, "lastExternalChangelogCookie"), null);
+      assertEquals(getAttributeValueOrNull(resultEntry, "firstchangenumber"), null);
+      assertEquals(getAttributeValueOrNull(resultEntry, "lastchangenumber"), null);
+      assertEquals(getAttributeValueOrNull(resultEntry, "changelog"), null);
+      assertEquals(getAttributeValueOrNull(resultEntry, "lastExternalChangelogCookie"), null);
     }
 
     debugInfo(tn, "Ending test with success");
@@ -2860,40 +2819,40 @@
   {
     String tn = "ECLCompatTestLimits";
     debugInfo(tn, "Starting test\n\n");
+
+    LDIFWriter ldifWriter = getLDIFWriter();
+
+    // search on 'cn=changelog'
+    Set<String> attributes = new LinkedHashSet<String>();
+    if (expectedFirst > 0)
+      attributes.add("firstchangenumber");
+    attributes.add("lastchangenumber");
+    attributes.add("changelog");
+    attributes.add("lastExternalChangelogCookie");
+
+    debugInfo(tn, " Search: rootDSE");
+    InternalSearchOperation searchOp = searchOnRootDSE(attributes);
+    List<SearchResultEntry> entries = searchOp.getSearchEntries();
+    assertEquals(entries.size(), 1);
+    SearchResultEntry resultEntry = entries.get(0);
+    debugAndWriteEntries(ldifWriter, entries, tn);
+
+    if (eclEnabled)
     {
-      LDIFWriter ldifWriter = getLDIFWriter();
-
-      // search on 'cn=changelog'
-      Set<String> attributes = new LinkedHashSet<String>();
-      if (expectedFirst>0)
-        attributes.add("firstchangenumber");
-      attributes.add("lastchangenumber");
-      attributes.add("changelog");
-      attributes.add("lastExternalChangelogCookie");
-
-      debugInfo(tn, " Search: rootDSE");
-      InternalSearchOperation searchOp = searchOnRootDSE(attributes);
-      List<SearchResultEntry> entries = searchOp.getSearchEntries();
-      assertEquals(entries.size(), 1);
-      SearchResultEntry resultEntry = entries.get(0);
-      debugAndWriteEntries(ldifWriter, entries, tn);
-
-      if (eclEnabled)
-      {
-        if (expectedFirst > 0)
-          checkValue(resultEntry, "firstchangenumber", String.valueOf(expectedFirst));
-        checkValue(resultEntry, "lastchangenumber", String.valueOf(expectedLast));
-        checkValue(resultEntry, "changelog", String.valueOf("cn=changelog"));
-      }
-      else
-      {
-        if (expectedFirst > 0)
-          assertEquals(getAttributeValue(resultEntry, "firstchangenumber"), null);
-        assertEquals(getAttributeValue(resultEntry, "lastchangenumber"), null);
-        assertEquals(getAttributeValue(resultEntry, "changelog"), null);
-        assertEquals(getAttributeValue(resultEntry, "lastExternalChangelogCookie"), null);
-      }
+      if (expectedFirst > 0)
+        checkValue(resultEntry, "firstchangenumber", String.valueOf(expectedFirst));
+      checkValue(resultEntry, "lastchangenumber", String.valueOf(expectedLast));
+      checkValue(resultEntry, "changelog", String.valueOf("cn=changelog"));
     }
+    else
+    {
+      if (expectedFirst > 0)
+        assertEquals(getAttributeValueOrNull(resultEntry, "firstchangenumber"), null);
+      assertEquals(getAttributeValueOrNull(resultEntry, "lastchangenumber"), null);
+      assertEquals(getAttributeValueOrNull(resultEntry, "changelog"), null);
+      assertEquals(getAttributeValueOrNull(resultEntry, "lastExternalChangelogCookie"), null);
+    }
+
     debugInfo(tn, "Ending test with success");
   }
 
@@ -2925,13 +2884,13 @@
 
     // Creates broker on o=test
     ReplicationBroker server01 =
-        openReplicationSession(DN.decode(TEST_ROOT_DN_STRING), 1201, 100,
+        openReplicationSession(DN.decode(TEST_ROOT_DN_STRING), SERVER_ID_1, 100,
             replicationServerPort, brokerSessionTimeout, true);
 
     String user1entryUUID = "11111111-1112-1113-1114-111111111115";
 
     // Publish DEL
-    ChangeNumber cn1 = new ChangeNumber(TimeThread.getTime(), ts++, 1201);
+    ChangeNumber cn1 = new ChangeNumber(TimeThread.getTime(), ts++, SERVER_ID_1);
     DeleteMsg delMsg = new DeleteMsg("uid=" + tn + "1," + TEST_ROOT_DN_STRING,
         cn1, user1entryUUID);
     server01.publish(delMsg);
@@ -2949,84 +2908,78 @@
     String tn = "ECLGetEligibleCountTest";
     debugInfo(tn, "Starting test\n\n");
     String user1entryUUID = "11111111-1112-1113-1114-111111111115";
-    ChangeNumber[] cns = generateChangeNumbers(4, 1201);
-    {
-      ReplicationServerDomain rsdtest =
+
+    final ChangeNumber[] cns = generateChangeNumbers(4, SERVER_ID_1);
+    final ChangeNumber cn1 = cns[0];
+    final ChangeNumber cn2 = cns[1];
+    final ChangeNumber cn3 = cns[2];
+
+    ReplicationServerDomain rsdtest =
         replicationServer.getReplicationServerDomain(TEST_ROOT_DN_STRING, false);
+    // this empty state will force to count from the start of the DB
+    final ServerState fromStart = new ServerState();
 
-      // The replication changelog is empty
-      long count = rsdtest.getEligibleCount(new ServerState(), cns[0]);
-      assertEquals(count, 0);
+    // The replication changelog is empty
+    assertEquals(rsdtest.getEligibleCount(fromStart, cns[0]), 0);
 
-      // Creates broker on o=test
-      ReplicationBroker server01 = openReplicationSession(
-          DN.decode(TEST_ROOT_DN_STRING),  1201,
-          1000, replicationServerPort,
-          brokerSessionTimeout, true);
+    // Creates broker on o=test
+    ReplicationBroker server01 = openReplicationSession(
+        DN.decode(TEST_ROOT_DN_STRING), SERVER_ID_1,
+        1000, replicationServerPort, brokerSessionTimeout, true);
 
-      // Publish one first message
-      ChangeNumber cn1 = cns[0];
-      DeleteMsg delMsg =
-        new DeleteMsg("uid="+tn+"1," + TEST_ROOT_DN_STRING, cn1,
+    // Publish one first message
+    DeleteMsg delMsg = new DeleteMsg("uid=" + tn + "1," + TEST_ROOT_DN_STRING, cn1,
             user1entryUUID);
-      server01.publish(delMsg);
-      debugInfo(tn, " publishes " + delMsg.getChangeNumber());
-      sleep(300);
+    server01.publish(delMsg);
+    debugInfo(tn, " publishes " + delMsg.getChangeNumber());
+    sleep(300);
 
-      // From begin to now : 1 change
-      count = rsdtest.getEligibleCount(new ServerState(), cns[0]);
-      assertEquals(count, 1);
+    // From begin to now : 1 change
+    assertEquals(rsdtest.getEligibleCount(fromStart, now()), 1);
 
-      // Publish one second message
-      ChangeNumber cn2 = cns[1];
-      delMsg = new DeleteMsg("uid=" + tn + "1," + TEST_ROOT_DN_STRING, cn2,
-            user1entryUUID);
-      server01.publish(delMsg);
-      debugInfo(tn, " publishes " + delMsg.getChangeNumber());
-      sleep(300);
+    // Publish one second message
+    delMsg = new DeleteMsg("uid=" + tn + "1," + TEST_ROOT_DN_STRING, cn2,
+        user1entryUUID);
+    server01.publish(delMsg);
+    debugInfo(tn, " publishes " + delMsg.getChangeNumber());
+    sleep(300);
 
-      // From begin to now : 2 changes
-      count = rsdtest.getEligibleCount(new ServerState(), cns[0]);
-      assertEquals(count, 2);
+    // From begin to now : 2 changes
+    assertEquals(rsdtest.getEligibleCount(fromStart, now()), 2);
 
-      // From begin to first change (inclusive) : 1 change = cn1
-      count = rsdtest.getEligibleCount(new ServerState(),  cn1);
-      assertEquals(count, 1);
+    // From begin to first change (inclusive) : 1 change = cn1
+    assertEquals(rsdtest.getEligibleCount(fromStart, cn1), 1);
 
-      ServerState ss = new ServerState();
-      ss.update(cn1);
+    final ServerState fromStateBeforeCN1 = new ServerState();
+    fromStateBeforeCN1.update(cn1);
 
-      // From state/cn1(exclusive) to cn1 (inclusive) : 0 change
-      count = rsdtest.getEligibleCount(ss, cn1);
-      assertEquals(count, 0);
+    // From state/cn1(exclusive) to cn1 (inclusive) : 0 change
+    assertEquals(rsdtest.getEligibleCount(fromStateBeforeCN1, cn1), 0);
 
-      // From state/cn1(exclusive) to cn2 (inclusive) : 1 change = cn2
-      count = rsdtest.getEligibleCount(ss, cn2);
-      assertEquals(count, 1);
+    // From state/cn1(exclusive) to cn2 (inclusive) : 1 change = cn2
+    assertEquals(rsdtest.getEligibleCount(fromStateBeforeCN1, cn2), 1);
 
-      ss.update(cn2);
+    final ServerState fromStateBeforeCN2 = new ServerState();
+    fromStateBeforeCN2.update(cn2);
 
-      // From state/cn2(exclusive) to now (inclusive) : 0 change
-      count = rsdtest.getEligibleCount(ss, cns[3]);
-      assertEquals(count, 0);
+    // From state/cn2(exclusive) to now (inclusive) : 0 change
+    assertEquals(rsdtest.getEligibleCount(fromStateBeforeCN2, now()), 0);
 
-      // Publish one third message
-      ChangeNumber cn3 = cns[2];
-      delMsg = new DeleteMsg("uid="+tn+"1," + TEST_ROOT_DN_STRING, cn3,
-            user1entryUUID);
-      server01.publish(delMsg);
-      debugInfo(tn, " publishes " + delMsg.getChangeNumber());
-      sleep(300);
+    // Publish one third message
+    delMsg = new DeleteMsg("uid="+tn+"1," + TEST_ROOT_DN_STRING, cn3,
+        user1entryUUID);
+    server01.publish(delMsg);
+    debugInfo(tn, " publishes " + delMsg.getChangeNumber());
+    sleep(300);
 
-      ss.update(cn2);
+    fromStateBeforeCN2.update(cn2);
 
-      // From state/cn2(exclusive) to now : 1 change = cn3
-      count = rsdtest.getEligibleCount(ss, cns[3]);
-      assertEquals(count, 1);
+    // From state/cn2(exclusive) to now : 1 change = cn3
+    assertEquals(rsdtest.getEligibleCount(fromStateBeforeCN2, now()), 1);
 
-      boolean perfs=false;
-      if (perfs)
-      {
+    boolean perfs=false;
+    if (perfs)
+    {
       // number of msgs used by the test
       int maxMsg = 999999;
 
@@ -3036,15 +2989,14 @@
       debugInfo(tn, "Perf test in compat mode - will generate " + maxMsg + " msgs.");
       for (int i=4; i<=maxMsg; i++)
       {
-        ChangeNumber cnx = new ChangeNumber(TimeThread.getTime(), i, 1201);
+        ChangeNumber cnx = new ChangeNumber(TimeThread.getTime(), i, SERVER_ID_1);
         delMsg = new DeleteMsg("uid="+tn+i+"," + TEST_ROOT_DN_STRING, cnx,
               user1entryUUID);
         server01.publish(delMsg);
       }
       sleep(1000);
       debugInfo(tn, "Perfs test in compat - search lastChangeNumber");
-      Set<String> excludedDomains =
-        MultimasterReplication.getECLDisabledDomains();
+      Set<String> excludedDomains = MultimasterReplication.getECLDisabledDomains();
       excludedDomains.add(ServerConstants.DN_EXTERNAL_CHANGELOG_ROOT);
 
       ECLWorkflowElement eclwe = (ECLWorkflowElement)
@@ -3058,30 +3010,35 @@
       long t2 = TimeThread.getTime();
       debugInfo(tn, "Perfs - " + maxMsg + " counted in (ms):" + (t2 - t1));
 
-        String filter = "(changenumber>="+maxMsg+")";
-        InternalSearchOperation searchOp = searchOnChangelog(filter, tn, SUCCESS);
-        long t3 = TimeThread.getTime();
-        assertEquals(searchOp.getSearchEntries().size(), 1);
-        debugInfo(tn, "Perfs - last change searched in (ms):" + (t3 - t2));
+      String filter = "(changenumber>=" + maxMsg + ")";
+      InternalSearchOperation searchOp = searchOnChangelog(filter, tn, SUCCESS);
+      long t3 = TimeThread.getTime();
+      assertEquals(searchOp.getSearchEntries().size(), 1);
+      debugInfo(tn, "Perfs - last change searched in (ms):" + (t3 - t2));
 
-        filter = "(changenumber>="+maxMsg+")";
-        searchOp = searchOnChangelog(filter, tn, SUCCESS);
-        long t4 = TimeThread.getTime();
-        assertEquals(searchOp.getSearchEntries().size(), 1);
-        debugInfo(tn, "Perfs - last change searched in (ms):" + (t4 - t3));
+      filter = "(changenumber>=" + maxMsg + ")";
+      searchOp = searchOnChangelog(filter, tn, SUCCESS);
+      long t4 = TimeThread.getTime();
+      assertEquals(searchOp.getSearchEntries().size(), 1);
+      debugInfo(tn, "Perfs - last change searched in (ms):" + (t4 - t3));
 
-        filter = "(changenumber>="+(maxMsg-2)+")";
-        searchOp = searchOnChangelog(filter, tn, SUCCESS);
-        long t5 = TimeThread.getTime();
-        assertEquals(searchOp.getSearchEntries().size(), 3);
-        debugInfo(tn, "Perfs - last 3 changes searched in (ms):" + (t5 - t4));
-        debugAndWriteEntries(null, searchOp.getSearchEntries(), tn);
-      }
+      filter = "(changenumber>=" + (maxMsg - 2) + ")";
+      searchOp = searchOnChangelog(filter, tn, SUCCESS);
+      long t5 = TimeThread.getTime();
+      assertEquals(searchOp.getSearchEntries().size(), 3);
+      debugInfo(tn, "Perfs - last 3 changes searched in (ms):" + (t5 - t4));
+      debugAndWriteEntries(null, searchOp.getSearchEntries(), tn);
+
       server01.stop();
     }
     debugInfo(tn, "Ending test with success");
   }
 
+  private ChangeNumber now()
+  {
+    return new ChangeNumber(TimeThread.getTime(), 1, SERVER_ID_1);
+  }
+
   /**
    * Test ECl entry attributes, and there configuration.
    */
@@ -3200,7 +3157,7 @@
 
       for (SearchResultEntry resultEntry : entries)
       {
-        String targetdn = getAttributeValue(resultEntry, "targetdn");
+        String targetdn = getAttributeValueOrNull(resultEntry, "targetdn");
 
         if (targetdn.endsWith("cn=robert hue,o=test3")
             || targetdn.endsWith("cn=robert hue2,o=test3"))
@@ -3210,7 +3167,7 @@
           Set<String> eoc = newSet("person", "inetOrgPerson", "organizationalPerson", "top");
           checkValues(targetEntry, "objectclass", eoc);
 
-          String changeType = getAttributeValue(resultEntry, "changetype");
+          String changeType = getAttributeValueOrNull(resultEntry, "changetype");
           if ("delete".equals(changeType))
           {
             // We are using "*" for deletes so should get back 4 attributes.
@@ -3318,7 +3275,7 @@
       String targetdn) throws Exception
   {
     // Parse includedAttributes as an entry.
-    String includedAttributes = getAttributeValue(resultEntry, "includedattributes");
+    String includedAttributes = getAttributeValueOrNull(resultEntry, "includedattributes");
     String[] ldifAttributeLines = includedAttributes.split("\\n");
     String[] ldif = new String[ldifAttributeLines.length + 1];
     System.arraycopy(ldifAttributeLines, 0, ldif, 1, ldifAttributeLines.length);

--
Gitblit v1.10.0