From 4102cd7949dacd9df6be6dc59d268c465bcd8abc Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Mon, 30 Sep 2013 09:12:26 +0000
Subject: [PATCH] Various little changes.

---
 opendj-sdk/opends/src/server/org/opends/server/replication/plugin/PendingChange.java                                             |   11 
 opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/JEChangelogDB.java                                |   17 ++
 opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServer.java                                         |    2 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/common/CSNGeneratorTest.java                  |   21 ++
 opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/api/ChangelogDB.java                                 |    5 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/je/DbHandlerTest.java        |  235 +++++++++++++++-----------------
 opendj-sdk/opends/src/server/org/opends/server/replication/common/CSNGenerator.java                                              |   16 ++
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/ExternalChangeLogTest.java             |    8 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/je/DraftCNDbHandlerTest.java |   61 +++-----
 9 files changed, 193 insertions(+), 183 deletions(-)

diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/common/CSNGenerator.java b/opendj-sdk/opends/src/server/org/opends/server/replication/common/CSNGenerator.java
index d7d0e27..84bd933 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/common/CSNGenerator.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/common/CSNGenerator.java
@@ -106,7 +106,23 @@
     }
 
     return new CSN(myTime, mySeqnum, serverId);
+  }
 
+  /**
+   * Generate an array of new {@link CSN}s.
+   *
+   * @param number
+   *          the total number of {@link CSN}s to generate
+   * @return the array of generated {@link CSN}s
+   */
+  public CSN[] newCSNs(int number)
+  {
+    final CSN[] csns = new CSN[number];
+    for (int i = 0; i < number; i++)
+    {
+      csns[i] = newCSN();
+    }
+    return csns;
   }
 
   /**
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/plugin/PendingChange.java b/opendj-sdk/opends/src/server/org/opends/server/replication/plugin/PendingChange.java
index 9d9503a..9e22ecd 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/plugin/PendingChange.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/plugin/PendingChange.java
@@ -125,19 +125,18 @@
   }
 
   /**
-   * Add the given ChangeNumber in the list of dependencies of this
-   * PendingChange.
+   * Add the given CSN to the list of dependencies of this PendingChange.
    *
-   * @param changeNumber The ChangeNumber to add in the list of dependencies
-   *                     of this PendingChange.
+   * @param csn
+   *          The CSN to add to the list of dependencies of this PendingChange.
    */
-  public void addDependency(CSN changeNumber)
+  public void addDependency(CSN csn)
   {
     if (dependencyState == null)
     {
       dependencyState = new ServerState();
     }
-    dependencyState.update(changeNumber);
+    dependencyState.update(csn);
   }
 
   /**
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServer.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServer.java
index d2fbc45..4dc9c43 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServer.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServer.java
@@ -1739,7 +1739,7 @@
    *
    * @return the changelogDB.
    */
-  ChangelogDB getChangelogDB()
+  public ChangelogDB getChangelogDB()
   {
     return this.changelogDB;
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/api/ChangelogDB.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/api/ChangelogDB.java
index e1dc552..28ee57e 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/api/ChangelogDB.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/api/ChangelogDB.java
@@ -227,7 +227,10 @@
 
   /**
    * Returns the {@link CSN} situated immediately after the specified
-   * {@link CSN} for the specified serverId and replication domain.
+   * {@link CSN} for the specified serverId and replication domain according to
+   * the order specified by {@link CSN#compareTo(CSN)}. If an Exception occurs
+   * in this method, then it returns the oldest possible CSN for the provided
+   * serverId.
    *
    * @param baseDN
    *          the replication domain baseDN
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/JEChangelogDB.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/JEChangelogDB.java
index 742dd06..a401c83 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/JEChangelogDB.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/JEChangelogDB.java
@@ -101,6 +101,7 @@
     @Override
     public void close()
     {
+      // empty
     }
   };
 
@@ -177,7 +178,21 @@
     getOrCreateDbHandler(baseDN, serverId, rs);
   }
 
-  private Pair<DbHandler, Boolean> getOrCreateDbHandler(DN baseDN,
+  /**
+   * Returns a DbHandler, possibly creating it.
+   *
+   * @param baseDN
+   *          the baseDN for which to create a DbHandler
+   * @param serverId
+   *          the baseserverId for which to create a DbHandler
+   * @param rs
+   *          the ReplicationServer
+   * @return a Pair with the DbHandler and a a boolean indicating if it has been
+   *         created
+   * @throws ChangelogException
+   *           if a problem occurred with the database
+   */
+  Pair<DbHandler, Boolean> getOrCreateDbHandler(DN baseDN,
       int serverId, ReplicationServer rs) throws ChangelogException
   {
     synchronized (sourceDbHandlers)
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/common/CSNGeneratorTest.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/common/CSNGeneratorTest.java
index 3b005e7..b6fce32 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/common/CSNGeneratorTest.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/common/CSNGeneratorTest.java
@@ -43,14 +43,12 @@
   public void adjustTest()
   {
     CSNGenerator generator = new CSNGenerator(5, TimeThread.getTime());
-
     CSN csn = generator.newCSN();
 
     CSN csn1 = new CSN(csn.getTime() + 5000, csn.getSeqnum(), 6);
     generator.adjust(csn1);
 
     CSN csn2 = generator.newCSN();
-
     assertTrue(csn2.compareTo(csn1) > 0,
         "CSNGenerator generated an earlier CSN after calling the adjust method.");
   }
@@ -59,14 +57,12 @@
   public void adjustSameMilliTest()
   {
     CSNGenerator generator = new CSNGenerator(5, TimeThread.getTime());
-
     CSN csn = generator.newCSN();
 
     CSN csn1 = new CSN(csn.getTime(), csn.getSeqnum() + 10, 6);
     generator.adjust(csn1);
 
     CSN csn2 = generator.newCSN();
-
     assertTrue(csn2.compareTo(csn1) > 0,
         "CSNGenerator generated an earlier CSN after calling the adjust method.");
   }
@@ -85,7 +81,22 @@
     CSNGenerator generator = new CSNGenerator(5, state);
     CSN csn2 = generator.newCSN();
 
-    assertTrue(csn2.getSeqnum() == 0);
+    assertEquals(csn2.getSeqnum(), 0);
     assertTrue(csn2.getTime() > csn1.getTime());
   }
+
+  @Test
+  public void newCSNs()
+  {
+    CSNGenerator generator = new CSNGenerator(5, TimeThread.getTime());
+    CSN[] csns = generator.newCSNs(5);
+    assertNotNull(csns);
+    for (int i = 0; i + 1 < csns.length; i++)
+    {
+      assertEquals(csns[i + 1].getTime(), csns[i].getTime());
+      assertEquals(csns[i + 1].getSeqnum(), csns[i].getSeqnum() + 1);
+      assertEquals(csns[i + 1].getServerId(), csns[i].getServerId());
+      assertTrue(csns[i + 1].compareTo(csns[0]) > 0);
+    }
+  }
 }
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/ExternalChangeLogTest.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/ExternalChangeLogTest.java
index a3c3552..0c125b9 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/ExternalChangeLogTest.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/ExternalChangeLogTest.java
@@ -2572,12 +2572,10 @@
       evaluateSearchParameters(baseDN, 8, 8, "(changenumber=8)");
 
       //
-      CSNGenerator gen = new CSNGenerator( 1, 0);
-      CSN changeNumber1 = gen.newCSN();
+      CSN csn = new CSNGenerator(1, 0).newCSN();
       final StartECLSessionMsg startCLmsg =
-          evaluateSearchParameters(baseDN, -1, -1,
-              "(replicationcsn=" + changeNumber1 + ")");
-      assertEquals(startCLmsg.getCSN(), changeNumber1);
+          evaluateSearchParameters(baseDN, -1, -1, "(replicationcsn=" + csn + ")");
+      assertEquals(startCLmsg.getCSN(), csn);
 
       // Use change number as base object.
       baseDN = DN.decode("changeNumber=8,cn=changelog");
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/je/DbHandlerTest.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/je/DbHandlerTest.java
index 7e5e55e..2b76a41 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/je/DbHandlerTest.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/je/DbHandlerTest.java
@@ -82,33 +82,19 @@
   @Test(enabled=true)
   void testDbHandlerTrim() throws Exception
   {
-    File testRoot = null;
     ReplicationServer replicationServer = null;
-    ReplicationDbEnv dbEnv = null;
-    DbHandler handler = null;
     try
     {
       TestCaseUtils.startServer();
+      replicationServer = configureReplicationServer(100, 5000);
+      DbHandler handler = newDbHandler(replicationServer);
 
-      replicationServer = configureReplicationServer(100);
+      CSN[] csns = new CSNGenerator(1, 0).newCSNs(5);
 
-      // create or clean a directory for the dbHandler
-      testRoot = createCleanDir();
-
-      dbEnv = new ReplicationDbEnv(testRoot.getPath(), replicationServer);
-      handler = new DbHandler(1, TEST_ROOT_DN, replicationServer, dbEnv, 5000);
-
-      CSNGenerator gen = new CSNGenerator( 1, 0);
-      CSN csn1 = gen.newCSN();
-      CSN csn2 = gen.newCSN();
-      CSN csn3 = gen.newCSN();
-      CSN csn4 = gen.newCSN();
-      CSN csn5 = gen.newCSN();
-
-      handler.add(new DeleteMsg(TEST_ROOT_DN, csn1, "uid"));
-      handler.add(new DeleteMsg(TEST_ROOT_DN, csn2, "uid"));
-      handler.add(new DeleteMsg(TEST_ROOT_DN, csn3, "uid"));
-      DeleteMsg update4 = new DeleteMsg(TEST_ROOT_DN, csn4, "uid");
+      handler.add(new DeleteMsg(TEST_ROOT_DN, csns[0], "uid"));
+      handler.add(new DeleteMsg(TEST_ROOT_DN, csns[1], "uid"));
+      handler.add(new DeleteMsg(TEST_ROOT_DN, csns[2], "uid"));
+      DeleteMsg update4 = new DeleteMsg(TEST_ROOT_DN, csns[3], "uid");
 
       //--
       // Iterator tests with memory queue only populated
@@ -116,8 +102,8 @@
       // verify that memory queue is populated
       assertEquals(handler.getQueueSize(),3);
 
-      assertFoundInOrder(handler, csn1, csn2, csn3);
-      assertNotFound(handler, csn5);
+      assertFoundInOrder(handler, csns[0], csns[1], csns[2]);
+      assertNotFound(handler, csns[4]);
 
       //--
       // Iterator tests with db only populated
@@ -126,26 +112,25 @@
       // verify that memory queue is empty (all changes flushed in the db)
       assertEquals(handler.getQueueSize(),0);
 
-      assertFoundInOrder(handler, csn1, csn2, csn3);
-      assertNotFound(handler, csn5);
+      assertFoundInOrder(handler, csns[0], csns[1], csns[2]);
+      assertNotFound(handler, csns[4]);
 
-      // Test first and last
-      assertEquals(csn1, handler.getOldestCSN());
-      assertEquals(csn3, handler.getNewestCSN());
+      assertEquals(handler.getOldestCSN(), csns[0]);
+      assertEquals(handler.getNewestCSN(), csns[2]);
 
       //--
-			// Cursor tests with db and memory queue populated
+      // Cursor tests with db and memory queue populated
       // all changes in the db - add one in the memory queue
       handler.add(update4);
 
       // verify memory queue contains this one
       assertEquals(handler.getQueueSize(),1);
 
-      assertFoundInOrder(handler, csn1, csn2, csn3, csn4);
+      assertFoundInOrder(handler, csns[0], csns[1], csns[2], csns[3]);
       // Test cursor from existing CSN at the limit between queue and db
-      assertFoundInOrder(handler, csn3, csn4);
-      assertFoundInOrder(handler, csn4);
-      assertNotFound(handler, csn5);
+      assertFoundInOrder(handler, csns[2], csns[3]);
+      assertFoundInOrder(handler, csns[3]);
+      assertNotFound(handler, csns[4]);
 
       handler.setPurgeDelay(1);
 
@@ -155,7 +140,7 @@
       {
         CSN oldestCSN = handler.getOldestCSN();
         CSN newestCSN = handler.getNewestCSN();
-        if (!oldestCSN.equals(csn4) || !newestCSN.equals(csn4))
+        if (!oldestCSN.equals(csns[3]) || !newestCSN.equals(csns[3]))
         {
           TestCaseUtils.sleep(100);
         } else
@@ -164,27 +149,28 @@
         }
       }
       // FIXME should add an assert here
-    } finally
+    }
+    finally
     {
-      if (handler != null)
-        handler.shutdown();
-      if (dbEnv != null)
-        dbEnv.shutdown();
-      if (replicationServer != null)
-        replicationServer.remove();
-      TestCaseUtils.deleteDirectory(testRoot);
+      remove(replicationServer);
     }
   }
 
-  private ReplicationServer configureReplicationServer(int windowSize)
+  private ReplicationServer configureReplicationServer(int windowSize, int queueSize)
       throws IOException, ConfigException
   {
     final int changelogPort = findFreePort();
     final ReplicationServerCfg conf =
-        new ReplServerFakeConfiguration(changelogPort, null, 0, 2, 0, windowSize, null);
+        new ReplServerFakeConfiguration(changelogPort, null, 0, 2, queueSize, windowSize, null);
     return new ReplicationServer(conf);
   }
 
+  private DbHandler newDbHandler(ReplicationServer replicationServer) throws Exception
+  {
+    JEChangelogDB changelogDB = (JEChangelogDB) replicationServer.getChangelogDB();
+    return changelogDB.getOrCreateDbHandler(TEST_ROOT_DN, 1, replicationServer).getFirst();
+  }
+
   private File createCleanDir() throws IOException
   {
     String buildRoot = System.getProperty(TestCaseUtils.PROPERTY_BUILD_ROOT);
@@ -210,16 +196,16 @@
       assertNull(cursor.getChange());
       for (int i = 1; i < csns.length; i++)
       {
-				assertTrue(cursor.next());
+        assertTrue(cursor.next());
         assertEquals(cursor.getChange().getCSN(), csns[i]);
       }
-			assertFalse(cursor.next());
+      assertFalse(cursor.next());
       assertNull(cursor.getChange(), "Actual change=" + cursor.getChange()
           + ", Expected null");
     }
     finally
     {
-			StaticUtils.close(cursor);
+      StaticUtils.close(cursor);
     }
   }
 
@@ -249,34 +235,23 @@
   @Test(enabled=true)
   void testDbHandlerClear() throws Exception
   {
-    File testRoot = null;
     ReplicationServer replicationServer = null;
-    ReplicationDbEnv dbEnv = null;
-    DbHandler handler = null;
     try
     {
       TestCaseUtils.startServer();
+      replicationServer = configureReplicationServer(100, 5000);
+      DbHandler handler = newDbHandler(replicationServer);
 
-      replicationServer = configureReplicationServer(100);
-
-      testRoot = createCleanDir();
-      dbEnv = new ReplicationDbEnv(testRoot.getPath(), replicationServer);
-      handler = new DbHandler(1, TEST_ROOT_DN, replicationServer, dbEnv, 5000);
-
-      // Creates changes added to the dbHandler
-      CSNGenerator gen = new CSNGenerator( 1, 0);
-      CSN csn1 = gen.newCSN();
-      CSN csn2 = gen.newCSN();
-      CSN csn3 = gen.newCSN();
+      CSN[] csns = new CSNGenerator(1, 0).newCSNs(3);
 
       // Add the changes
-      handler.add(new DeleteMsg(TEST_ROOT_DN, csn1, "uid"));
-      handler.add(new DeleteMsg(TEST_ROOT_DN, csn2, "uid"));
-      handler.add(new DeleteMsg(TEST_ROOT_DN, csn3, "uid"));
+      handler.add(new DeleteMsg(TEST_ROOT_DN, csns[0], "uid"));
+      handler.add(new DeleteMsg(TEST_ROOT_DN, csns[1], "uid"));
+      handler.add(new DeleteMsg(TEST_ROOT_DN, csns[2], "uid"));
 
       // Check they are here
-      assertEquals(csn1, handler.getOldestCSN());
-      assertEquals(csn3, handler.getNewestCSN());
+      assertEquals(csns[0], handler.getOldestCSN());
+      assertEquals(csns[2], handler.getNewestCSN());
 
       // Clear ...
       handler.clear();
@@ -285,40 +260,69 @@
       assertEquals(null, handler.getOldestCSN());
       assertEquals(null, handler.getNewestCSN());
 
-    } finally
+    }
+    finally
     {
-      if (handler != null)
-        handler.shutdown();
-      if (dbEnv != null)
-        dbEnv.shutdown();
-      if (replicationServer != null)
-        replicationServer.remove();
-      TestCaseUtils.deleteDirectory(testRoot);
+      remove(replicationServer);
+    }
+  }
+
+  @Test
+  public void testGenerateCursorFrom() throws Exception
+  {
+    ReplicationServer replicationServer = null;
+    ReplicaDBCursor cursor = null;
+    try
+    {
+      TestCaseUtils.startServer();
+      replicationServer = configureReplicationServer(100000, 10);
+      DbHandler handler = newDbHandler(replicationServer);
+
+      CSN[] csns = new CSNGenerator(1, System.currentTimeMillis()).newCSNs(6);
+      for (int i = 0; i < 5; i++)
+      {
+        if (i != 3)
+        {
+          handler.add(new DeleteMsg(TEST_ROOT_DN, csns[i], "uid"));
+        }
+      }
+      handler.flush();
+
+      cursor = handler.generateCursorFrom(csns[0]);
+      assertTrue(cursor.next());
+      assertEquals(cursor.getChange().getCSN(), csns[1]);
+      StaticUtils.close(cursor);
+
+      cursor = handler.generateCursorFrom(csns[3]);
+      assertTrue(cursor.next());
+      assertEquals(cursor.getChange().getCSN(), csns[4]);
+      StaticUtils.close(cursor);
+
+      cursor = handler.generateCursorFrom(csns[4]);
+      assertFalse(cursor.next());
+      assertNull(cursor.getChange());
+    }
+    finally
+    {
+      StaticUtils.close(cursor);
+      remove(replicationServer);
     }
   }
 
   @Test
   public void testGetCountNoCounterRecords() throws Exception
   {
-    File testRoot = null;
     ReplicationServer replicationServer = null;
-    ReplicationDbEnv dbEnv = null;
-    DbHandler handler = null;
     try
     {
       TestCaseUtils.startServer();
-      replicationServer = configureReplicationServer(100000);
+      replicationServer = configureReplicationServer(100000, 10);
+      DbHandler handler = newDbHandler(replicationServer);
 
-      testRoot = createCleanDir();
-      dbEnv = new ReplicationDbEnv(testRoot.getPath(), replicationServer);
-      handler = new DbHandler(1, TEST_ROOT_DN, replicationServer, dbEnv, 10);
-
-      CSNGenerator csnGen = new CSNGenerator(1, System.currentTimeMillis());
-      CSN[] csns = new CSN[5];
-      for (int i = 0; i < 5; i++)
+      CSN[] csns = new CSNGenerator(1, System.currentTimeMillis()).newCSNs(5);
+      for (CSN csn : csns)
       {
-        csns[i] = csnGen.newCSN();
-        handler.add(new DeleteMsg(TEST_ROOT_DN, csns[i], "uid"));
+        handler.add(new DeleteMsg(TEST_ROOT_DN, csn, "uid"));
       }
       handler.flush();
 
@@ -331,13 +335,7 @@
     }
     finally
     {
-      if (handler != null)
-        handler.shutdown();
-      if (dbEnv != null)
-        dbEnv.shutdown();
-      if (replicationServer != null)
-        replicationServer.remove();
-      TestCaseUtils.deleteDirectory(testRoot);
+      remove(replicationServer);
     }
   }
 
@@ -394,7 +392,7 @@
     try
     {
       TestCaseUtils.startServer();
-      replicationServer = configureReplicationServer(100000);
+      replicationServer = configureReplicationServer(100000, 10);
 
       testRoot = createCleanDir();
       dbEnv = new ReplicationDbEnv(testRoot.getPath(), replicationServer);
@@ -408,17 +406,13 @@
       for (int i=1; i<=max; i++)
       {
         csns[i] = new CSN(now + i, mySeqnum, 1);
+        handler.add(new DeleteMsg(TEST_ROOT_DN, csns[i], "uid"));
         mySeqnum+=2;
-        DeleteMsg update1 = new DeleteMsg(TEST_ROOT_DN, csns[i], "uid");
-        handler.add(update1);
       }
       handler.flush();
 
-      // Test first and last
-      CSN oldestCSN = handler.getOldestCSN();
-      assertEquals(oldestCSN, csns[1], "Wrong oldest CSN");
-      CSN newestCSN = handler.getNewestCSN();
-      assertEquals(newestCSN, csns[max], "Wrong newest CSN");
+      assertEquals(handler.getOldestCSN(), csns[1], "Wrong oldest CSN");
+      assertEquals(handler.getNewestCSN(), csns[max], "Wrong newest CSN");
 
       // Test count in different subcases trying to handle all special cases
       // regarding the 'counter' record and 'count' algorithm
@@ -445,15 +439,14 @@
       assertCount(tn, handler, csns[(counterWindow + 4)], csns[(counterWindow + 4)], 1,
           "FROM counterWindow+4 TO counterWindow+4 ");
 
-      // Now test with changes older than first or newer than last
-      CSN olderThanFirst = null;
-      CSN newerThanLast = new CSN(System.currentTimeMillis() + (2*(max+1)), 100, 1);
+      CSN olderThanOldest = null;
+      CSN newerThanNewest = new CSN(System.currentTimeMillis() + (2*(max+1)), 100, 1);
 
       // Now we want to test with start and stop outside of the db
 
-      assertCount(tn, handler, csns[1], newerThanLast, max,
+      assertCount(tn, handler, csns[1], newerThanNewest, max,
           "FROM our first generated change TO now (> newest change in the db)");
-      assertCount(tn, handler, olderThanFirst, newerThanLast, max,
+      assertCount(tn, handler, olderThanOldest, newerThanNewest, max,
           "FROM null (start of time) TO now (> newest change in the db)");
 
       // Now we want to test that after closing and reopening the db, the
@@ -465,32 +458,25 @@
       handler = new DbHandler(1, TEST_ROOT_DN, replicationServer, dbEnv, 10);
       handler.setCounterRecordWindowSize(counterWindow);
 
-      // Test first and last
-      oldestCSN = handler.getOldestCSN();
-      assertEquals(oldestCSN, csns[1], "Wrong oldest CSN");
-      newestCSN = handler.getNewestCSN();
-      assertEquals(newestCSN, csns[max], "Wrong newest CSN");
+      assertEquals(handler.getOldestCSN(), csns[1], "Wrong oldest CSN");
+      assertEquals(handler.getNewestCSN(), csns[max], "Wrong newest CSN");
 
-      assertCount(tn, handler, csns[1], newerThanLast, max,
+      assertCount(tn, handler, csns[1], newerThanNewest, max,
           "FROM our first generated change TO now (> newest change in the db)");
 
       // Populate the db with 'max' msg
       for (int i=max+1; i<=(2*max); i++)
       {
         csns[i] = new CSN(now + i, mySeqnum, 1);
+        handler.add(new DeleteMsg(TEST_ROOT_DN, csns[i], "uid"));
         mySeqnum+=2;
-        DeleteMsg update1 = new DeleteMsg(TEST_ROOT_DN, csns[i], "uid");
-        handler.add(update1);
       }
       handler.flush();
 
-      // Test first and last
-      oldestCSN = handler.getOldestCSN();
-      assertEquals(oldestCSN, csns[1], "Wrong oldest CSN");
-      newestCSN = handler.getNewestCSN();
-      assertEquals(newestCSN, csns[2 * max], "Wrong newest CSN");
+      assertEquals(handler.getOldestCSN(), csns[1], "Wrong oldest CSN");
+      assertEquals(handler.getNewestCSN(), csns[2 * max], "Wrong newest CSN");
 
-      assertCount(tn, handler, csns[1], newerThanLast, 2 * max,
+      assertCount(tn, handler, csns[1], newerThanNewest, 2 * max,
           "FROM our first generated change TO now (> newest change in the db)");
 
       //
@@ -500,7 +486,7 @@
       long totalCount = handler.getCount(null, null);
       debugInfo(tn, "FROM our first generated change TO now (> newest change in the db)" + " After purge, total count=" + totalCount);
 
-      String testcase = "AFTER PURGE (first, last)=";
+      String testcase = "AFTER PURGE (oldest, newest)=";
       debugInfo(tn, testcase + handler.getOldestCSN() + handler.getNewestCSN());
       assertEquals(handler.getNewestCSN(), csns[2 * max], "Newest=");
 
@@ -515,7 +501,7 @@
       {
         expectedCnt = 0;
       }
-      assertCount(tn, handler, csns[1], newerThanLast, expectedCnt, "AFTER PURGE");
+      assertCount(tn, handler, csns[1], newerThanNewest, expectedCnt, "AFTER PURGE");
 
       // Clear ...
       debugInfo(tn,"clear:");
@@ -532,8 +518,7 @@
         handler.shutdown();
       if (dbEnv != null)
         dbEnv.shutdown();
-      if (replicationServer != null)
-        replicationServer.remove();
+      remove(replicationServer);
       TestCaseUtils.deleteDirectory(testRoot);
     }
   }
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/je/DraftCNDbHandlerTest.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/je/DraftCNDbHandlerTest.java
index 4ff647d..5e445d6 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/je/DraftCNDbHandlerTest.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/je/DraftCNDbHandlerTest.java
@@ -62,9 +62,7 @@
   @Test()
   void testDraftCNDbHandlerTrim() throws Exception
   {
-    File testRoot = null;
     ReplicationServer replicationServer = null;
-    ReplicationDbEnv dbEnv = null;
     DraftCNDbHandler handler = null;
     try
     {
@@ -78,10 +76,7 @@
         2, 0, 100, null);
       replicationServer = new ReplicationServer(conf);
 
-      testRoot = createCleanDir();
-      dbEnv = new ReplicationDbEnv(testRoot.getPath(), replicationServer);
-
-      handler = new DraftCNDbHandler(replicationServer, dbEnv);
+      handler = newDraftCNDbHandler(replicationServer);
       handler.setPurgeDelay(0);
 
       // Prepare data to be stored in the db
@@ -97,15 +92,12 @@
       DN baseDN2 = DN.decode("o=baseDN2");
       DN baseDN3 = DN.decode("o=baseDN3");
 
-      CSNGenerator gen = new CSNGenerator(1, 0);
-      CSN csn1 = gen.newCSN();
-      CSN csn2 = gen.newCSN();
-      CSN csn3 = gen.newCSN();
+      CSN[] csns = new CSNGenerator(1, 0).newCSNs(3);
 
       // Add records
-      handler.addRecord(new CNIndexRecord(cn1, value1, baseDN1, csn1));
-      handler.addRecord(new CNIndexRecord(cn2, value2, baseDN2, csn2));
-      handler.addRecord(new CNIndexRecord(cn3, value3, baseDN3, csn3));
+      handler.addRecord(new CNIndexRecord(cn1, value1, baseDN1, csns[0]));
+      handler.addRecord(new CNIndexRecord(cn2, value2, baseDN2, csns[1]));
+      handler.addRecord(new CNIndexRecord(cn3, value3, baseDN3, csns[2]));
 
       // The ChangeNumber should not get purged
       final long firstChangeNumber = handler.getFirstRecord().getChangeNumber();
@@ -115,14 +107,14 @@
       DraftCNDBCursor dbc = handler.getReadCursor(firstChangeNumber);
       try
       {
-        assertEqualTo(dbc.currentRecord(), csn1, baseDN1, value1);
+        assertEqualTo(dbc.currentRecord(), csns[0], baseDN1, value1);
         assertTrue(dbc.toString().length() != 0);
 
         assertTrue(dbc.next());
-        assertEqualTo(dbc.currentRecord(), csn2, baseDN2, value2);
+        assertEqualTo(dbc.currentRecord(), csns[1], baseDN2, value2);
 
         assertTrue(dbc.next());
-        assertEqualTo(dbc.currentRecord(), csn3, baseDN3, value3);
+        assertEqualTo(dbc.currentRecord(), csns[2], baseDN3, value3);
 
         assertFalse(dbc.next());
       }
@@ -146,11 +138,7 @@
     {
       if (handler != null)
         handler.shutdown();
-      if (dbEnv != null)
-        dbEnv.shutdown();
-      if (replicationServer != null)
-        replicationServer.remove();
-      TestCaseUtils.deleteDirectory(testRoot);
+      remove(replicationServer);
     }
   }
 
@@ -161,6 +149,13 @@
     assertEquals(data.getPreviousCookie(), cookie);
   }
 
+  private DraftCNDbHandler newDraftCNDbHandler(ReplicationServer rs) throws Exception
+  {
+    File testRoot = createCleanDir();
+    ReplicationDbEnv dbEnv = new ReplicationDbEnv(testRoot.getPath(), rs);
+    return new DraftCNDbHandler(rs, dbEnv);
+  }
+
   private File createCleanDir() throws IOException
   {
     String buildRoot = System.getProperty(TestCaseUtils.PROPERTY_BUILD_ROOT);
@@ -186,9 +181,7 @@
   @Test()
   void testDraftCNDbHandlerClear() throws Exception
   {
-    File testRoot = null;
     ReplicationServer replicationServer = null;
-    ReplicationDbEnv dbEnv = null;
     DraftCNDbHandler handler = null;
     try
     {
@@ -202,10 +195,7 @@
         2, 0, 100, null);
       replicationServer = new ReplicationServer(conf);
 
-      testRoot = createCleanDir();
-      dbEnv = new ReplicationDbEnv(testRoot.getAbsolutePath(), replicationServer);
-
-      handler = new DraftCNDbHandler(replicationServer, dbEnv);
+      handler = newDraftCNDbHandler(replicationServer);
       handler.setPurgeDelay(0);
 
       assertTrue(handler.isEmpty());
@@ -223,15 +213,12 @@
       DN baseDN2 = DN.decode("o=baseDN2");
       DN baseDN3 = DN.decode("o=baseDN3");
 
-      CSNGenerator gen = new CSNGenerator(1, 0);
-      CSN csn1 = gen.newCSN();
-      CSN csn2 = gen.newCSN();
-      CSN csn3 = gen.newCSN();
+      CSN[] csns = new CSNGenerator(1, 0).newCSNs(3);
 
       // Add records
-      handler.addRecord(new CNIndexRecord(cn1, value1, baseDN1, csn1));
-      handler.addRecord(new CNIndexRecord(cn2, value2, baseDN2, csn2));
-      handler.addRecord(new CNIndexRecord(cn3, value3, baseDN3, csn3));
+      handler.addRecord(new CNIndexRecord(cn1, value1, baseDN1, csns[0]));
+      handler.addRecord(new CNIndexRecord(cn2, value2, baseDN2, csns[1]));
+      handler.addRecord(new CNIndexRecord(cn3, value3, baseDN3, csns[2]));
       Thread.sleep(500);
 
       // Checks
@@ -266,11 +253,7 @@
     {
       if (handler != null)
         handler.shutdown();
-      if (dbEnv != null)
-        dbEnv.shutdown();
-      if (replicationServer != null)
-        replicationServer.remove();
-      TestCaseUtils.deleteDirectory(testRoot);
+      remove(replicationServer);
     }
   }
 

--
Gitblit v1.10.0