From 3f658b5c7f24c27f91b4c49b655f913d8615ba68 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Fri, 03 Jan 2014 13:47:58 +0000
Subject: [PATCH] JEChangeNumberIndexDBTest.java: Fixed an infinite loop after r10071 (Why did it not fail when ran locally?) + extracted method assertOnlyNewestRecordIsLeft(). testClean() this test is still failing in CLI mode, or when you add a dependency towards method testTrim(). I haven't fully grasped yet why is that.
---
opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/je/JEChangeNumberIndexDBTest.java | 49 +++++++++++++++++++++++++++++--------------------
1 files changed, 29 insertions(+), 20 deletions(-)
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/je/JEChangeNumberIndexDBTest.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/je/JEChangeNumberIndexDBTest.java
index e1446e4..54c00bd 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/je/JEChangeNumberIndexDBTest.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/je/JEChangeNumberIndexDBTest.java
@@ -114,13 +114,11 @@
cnIndexDB.startTrimmingThread();
// Check the db is cleared.
- while (!cnIndexDB.isEmpty())
+ while (cnIndexDB.count() > 1)
{
- Thread.sleep(200);
+ Thread.yield();
}
- assertNull(cnIndexDB.getOldestRecord());
- assertNull(cnIndexDB.getNewestRecord());
- assertEquals(cnIndexDB.count(), 0);
+ assertOnlyNewestRecordIsLeft(cnIndexDB, 3);
}
finally
{
@@ -145,11 +143,11 @@
private JEChangeNumberIndexDB newCNIndexDB(ReplicationServer rs) throws Exception
{
- File testRoot = createCleanDir();
- ReplicationDbEnv dbEnv = new ReplicationDbEnv(testRoot.getPath(), rs);
- JEChangeNumberIndexDB result = new JEChangeNumberIndexDB(rs, dbEnv);
- assertTrue(result.isEmpty());
- return result;
+ final File testRoot = createCleanDir();
+ final ReplicationDbEnv dbEnv = new ReplicationDbEnv(testRoot.getPath(), rs);
+ final JEChangeNumberIndexDB cnIndexDB = new JEChangeNumberIndexDB(rs, dbEnv);
+ assertTrue(cnIndexDB.isEmpty());
+ return cnIndexDB;
}
private File createCleanDir() throws IOException
@@ -219,17 +217,8 @@
cursor = cnIndexDB.getCursorFrom(cn3);
assertCursorReadsInOrder(cursor, cn3);
- // check only the last record is left
cnIndexDB.clear(null);
- final ChangeNumberIndexRecord oldest = cnIndexDB.getOldestRecord();
- final ChangeNumberIndexRecord newest = cnIndexDB.getNewestRecord();
- assertEquals(oldest.getChangeNumber(), 3);
- assertEquals(oldest.getChangeNumber(), newest.getChangeNumber());
- assertEquals(oldest.getPreviousCookie(), newest.getPreviousCookie());
- assertEquals(oldest.getBaseDN(), newest.getBaseDN());
- assertEquals(oldest.getCSN(), newest.getCSN());
- assertEquals(cnIndexDB.count(), 1);
- assertFalse(cnIndexDB.isEmpty());
+ assertOnlyNewestRecordIsLeft(cnIndexDB, 3);
// Check the db is cleared.
cnIndexDB.clear();
@@ -240,10 +229,30 @@
}
finally
{
+ if (cnIndexDB != null)
+ cnIndexDB.shutdown();
remove(replicationServer);
}
}
+ /**
+ * The newest record is no longer cleared to ensure persistence to the last
+ * generated change number across server restarts.
+ */
+ private void assertOnlyNewestRecordIsLeft(JEChangeNumberIndexDB cnIndexDB,
+ int newestChangeNumber) throws ChangelogException
+ {
+ assertEquals(cnIndexDB.count(), 1);
+ assertFalse(cnIndexDB.isEmpty());
+ final ChangeNumberIndexRecord oldest = cnIndexDB.getOldestRecord();
+ final ChangeNumberIndexRecord newest = cnIndexDB.getNewestRecord();
+ assertEquals(oldest.getChangeNumber(), newestChangeNumber);
+ assertEquals(oldest.getChangeNumber(), newest.getChangeNumber());
+ assertEquals(oldest.getPreviousCookie(), newest.getPreviousCookie());
+ assertEquals(oldest.getBaseDN(), newest.getBaseDN());
+ assertEquals(oldest.getCSN(), newest.getCSN());
+ }
+
private ReplicationServer newReplicationServer() throws Exception
{
TestCaseUtils.startServer();
--
Gitblit v1.10.0