mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

Jean-Noel Rouvignac
30.12.2013 6f4e39c2324a3055906d5889da00d482e1436299
Various little changes.


ChangelogDB.java:
Updated javadoc for getCSNAfter().


CSNGenerator.java
Added newCSNs(int) to generate a certain number of CSNs in one go. It is very useful in tests.

CSNGeneratorTest.java
Added a test for newCSNs(int).

ReplicationServer.java:
In getChangelogDB(), weakened visibility from private to default for unit tests access.

JEChangelogDB.java:
In getOrCreateDbHandler(), weakened visibility from private to default for unit tests access.

DbHandlerTest.java:
Cleaned up the tests by relying on production code methods cleanups.
Used CSNGenerator(.newCSNs().
Added newDbHandler(), testGenerateCursorFrom().
Renamed/inlined a few local variables.

DraftCNDbHandlerTest.java:
Cleaned up the tests by relying on production code methods cleanups.
Used CSNGenerator(.newCSNs().
Added newDbHandler().


PendingChange.java, ExternalChangeLogTest.java:
Renamed "changeNumber" to "csn".
9 files modified
376 ■■■■ changed files
opends/src/server/org/opends/server/replication/common/CSNGenerator.java 16 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/replication/plugin/PendingChange.java 11 ●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/replication/server/ReplicationServer.java 2 ●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/replication/server/changelog/api/ChangelogDB.java 5 ●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/replication/server/changelog/je/JEChangelogDB.java 17 ●●●●● patch | view | raw | blame | history
opends/tests/unit-tests-testng/src/server/org/opends/server/replication/common/CSNGeneratorTest.java 21 ●●●● patch | view | raw | blame | history
opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/ExternalChangeLogTest.java 8 ●●●●● patch | view | raw | blame | history
opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/je/DbHandlerTest.java 235 ●●●● patch | view | raw | blame | history
opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/je/DraftCNDbHandlerTest.java 61 ●●●●● patch | view | raw | blame | history
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;
  }
  /**
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);
  }
  /**
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;
  }
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
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)
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);
    }
  }
}
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");
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);
    }
  }
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);
    }
  }