From 80f29a511a0681bc55293f0ea82e368097f2fa9a Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Fri, 27 Sep 2013 12:30:28 +0000
Subject: [PATCH] Fixed the failing nightly test GenerationIdTest.testSingleRS().
---
opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ReplicationTestCase.java | 182 ++++---------
opends/tests/unit-tests-testng/src/server/org/opends/server/replication/GenerationIdTest.java | 393 +++++++++++------------------
opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/ReplicationServerTest.java | 160 ++++-------
3 files changed, 267 insertions(+), 468 deletions(-)
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/GenerationIdTest.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/GenerationIdTest.java
index 4d670e6..a3c710e 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/GenerationIdTest.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/GenerationIdTest.java
@@ -77,8 +77,9 @@
private static final String baseDnStr = TEST_ROOT_DN_STRING;
private static final String testName = "generationIdTest";
+ private static final String REPLICATION_GENERATION_ID = "ds-sync-generation-id";
- private static final int WINDOW_SIZE = 10;
+ private static final int WINDOW_SIZE = 10;
private static final int server1ID = 1;
private static final int server2ID = 2;
private static final int server3ID = 3;
@@ -87,11 +88,11 @@
private static final int changelog3ID = 13;
private DN baseDN;
- private ReplicationBroker broker2 = null;
- private ReplicationBroker broker3 = null;
- private ReplicationServer replServer1 = null;
- private ReplicationServer replServer2 = null;
- private ReplicationServer replServer3 = null;
+ private ReplicationBroker broker2;
+ private ReplicationBroker broker3;
+ private ReplicationServer replServer1;
+ private ReplicationServer replServer2;
+ private ReplicationServer replServer3;
private boolean emptyOldChanges = true;
private Entry taskInitRemoteS2;
private String[] updatedEntries;
@@ -148,7 +149,8 @@
TRACER.debugInfo("** TEST **" + s);
}
}
- protected void debugInfo(String message, Exception e)
+
+ private void debugInfo(String message, Exception e)
{
debugInfo(message + stackTraceToSingleLineString(e));
}
@@ -183,31 +185,21 @@
"ds-task-initialize-replica-server-id: " + server2ID);
}
- /** Tests that entries have been written in the db */
- private int testEntriesInDb()
+ /** Tests that entries have been written in the db. */
+ private int countUpdatedEntriesInDb() throws Exception
{
- debugInfo("TestEntriesInDb");
- short found = 0;
+ debugInfo("countUpdatedEntriesInDb");
+ int found = 0;
for (String entry : updatedEntries)
{
-
int dns = entry.indexOf("dn: ");
- int dne = entry.indexOf(TestCaseUtils.TEST_ROOT_DN_STRING);
- String dn = entry.substring(dns + 4,
- dne + TestCaseUtils.TEST_ROOT_DN_STRING.length());
+ int dne = entry.indexOf(TEST_ROOT_DN_STRING);
+ String dn = entry.substring(dns + 4, dne + TEST_ROOT_DN_STRING.length());
debugInfo("Search Entry: " + dn);
- DN entryDN = null;
- try
- {
- entryDN = DN.decode(dn);
- }
- catch(Exception e)
- {
- debugInfo("TestEntriesInDb/" + e);
- }
+ DN entryDN = DN.decode(dn);
try
{
@@ -272,62 +264,49 @@
};
}
- private int receiveImport(ReplicationBroker broker, int serverID,
- String[] updatedEntries)
+ private int receiveImport(ReplicationBroker broker, int serverID, String[] updatedEntries) throws Exception
{
// Expect the broker to receive the entries
- ReplicationMsg msg;
- short entriesReceived = -100;
+ int entriesReceived = -100;
while (true)
{
- try
+ debugInfo("Broker " + serverID + " Wait for entry or done msg");
+ ReplicationMsg msg = broker.receive();
+ if (msg == null)
{
- debugInfo("Broker " + serverID + " Wait for entry or done msg");
- msg = broker.receive();
-
- if (msg == null)
- {
- break;
- }
-
- if (msg instanceof InitializeTargetMsg)
- {
- debugInfo("Broker " + serverID + " receives InitializeTargetMessage ");
- entriesReceived = 0;
- }
- else if (msg instanceof EntryMsg)
- {
- EntryMsg em = (EntryMsg)msg;
- debugInfo("Broker " + serverID + " receives entry " + new String(em.getEntryBytes()));
- entriesReceived++;
- }
- else if (msg instanceof DoneMsg)
- {
- debugInfo("Broker " + serverID + " receives done ");
- break;
- }
- else if (msg instanceof ErrorMsg)
- {
- ErrorMsg em = (ErrorMsg)msg;
- debugInfo("Broker " + serverID + " receives ERROR " + em);
- break;
- }
- else
- {
- debugInfo("Broker " + serverID + " receives and trashes " + msg);
- }
+ break;
}
- catch(Exception e)
+
+ if (msg instanceof InitializeTargetMsg)
{
- debugInfo("receiveUpdatedEntries" + stackTraceToSingleLineString(e));
+ debugInfo("Broker " + serverID + " receives InitializeTargetMessage ");
+ entriesReceived = 0;
+ }
+ else if (msg instanceof EntryMsg)
+ {
+ EntryMsg em = (EntryMsg)msg;
+ debugInfo("Broker " + serverID + " receives entry " + new String(em.getEntryBytes()));
+ entriesReceived++;
+ }
+ else if (msg instanceof DoneMsg)
+ {
+ debugInfo("Broker " + serverID + " receives done ");
+ break;
+ }
+ else if (msg instanceof ErrorMsg)
+ {
+ debugInfo("Broker " + serverID + " receives ERROR " + msg);
+ break;
+ }
+ else
+ {
+ debugInfo("Broker " + serverID + " receives and trashes " + msg);
}
}
if (updatedEntries != null)
{
- assertTrue(entriesReceived == updatedEntries.length,
- " Received entries("+entriesReceived +
- ") == Expected entries("+updatedEntries.length+")");
+ assertEquals(updatedEntries.length, entriesReceived);
}
return entriesReceived;
@@ -387,7 +366,7 @@
// Must be no connection already done or disconnectFromReplServer should
// have been called
- assertTrue(synchroServerEntry == null);
+ assertNull(synchroServerEntry);
synchroServerEntry = TestCaseUtils.entryFromLdifString(synchroServerLdif);
DirectoryServer.getConfigHandler().addEntry(synchroServerEntry, null);
@@ -423,7 +402,7 @@
String synchroServerStringDN = "cn=" + testName + ", cn=domains," +
SYNCHRO_PLUGIN_DN;
// Must have called connectServer1ToChangelog previously
- assertTrue(synchroServerEntry != null);
+ assertNotNull(synchroServerEntry);
DN synchroServerDN = DN.decode(synchroServerStringDN);
@@ -434,8 +413,7 @@
DirectoryServer.getConfigHandler().deleteEntry(ecle.getDN(), null);
}
DirectoryServer.getConfigHandler().deleteEntry(synchroServerDN, null);
- assertTrue(DirectoryServer.getConfigEntry(synchroServerEntry.getDN()) ==
- null,
+ assertNull(DirectoryServer.getConfigEntry(synchroServerEntry.getDN()),
"Unable to delete the synchronized domain");
synchroServerEntry = null;
@@ -451,7 +429,7 @@
Thread.sleep(200);
waitCo++;
}
- assert(replDomainToDis==null);
+ assertNull(replDomainToDis);
}
catch (DirectoryException e)
{
@@ -470,39 +448,29 @@
return replServerPort[changelogID];
}
- protected static final String REPLICATION_GENERATION_ID =
- "ds-sync-generation-id";
-
private long readGenIdFromSuffixRootEntry() throws Exception
{
- long genId=-1;
+ Entry resultEntry = getEntry(baseDN, 1000, true);
+ if (resultEntry == null)
{
- Entry resultEntry = getEntry(baseDN, 1000, true);
- if (resultEntry==null)
- {
- debugInfo("Entry not found <" + baseDN + ">");
- }
- else
- {
- debugInfo("Entry found <" + baseDN + ">");
+ debugInfo("Entry not found <" + baseDN + ">");
+ }
+ else
+ {
+ debugInfo("Entry found <" + baseDN + ">");
- AttributeType synchronizationGenIDType =
- DirectoryServer.getAttributeType(REPLICATION_GENERATION_ID);
- List<Attribute> attrs =
- resultEntry.getAttribute(synchronizationGenIDType);
- if (attrs != null)
+ AttributeType synchronizationGenIDType = DirectoryServer.getAttributeType(REPLICATION_GENERATION_ID);
+ List<Attribute> attrs = resultEntry.getAttribute(synchronizationGenIDType);
+ if (attrs != null)
+ {
+ Attribute attr = attrs.get(0);
+ if (attr.size() == 1)
{
- Attribute attr = attrs.get(0);
- if (attr.size() == 1)
- {
- genId =
- Long.decode(attr.iterator().next().getValue().toString());
- }
+ return Long.decode(attr.iterator().next().getValue().toString());
}
-
}
}
- return genId;
+ return -1;
}
private void performLdifImport() throws Exception
@@ -545,22 +513,18 @@
+ "userPassword: password\n" + "initials: AA\n";
}
- static protected ReplicationMsg createAddMsg() throws Exception
+ private static AddMsg createAddMsg() throws Exception
{
- Entry personWithUUIDEntry = null;
- String user1entryUUID;
- String baseUUID = null;
- String user1dn;
-
/*
* Create a CSN generator to generate new CSNs when we need to send
* operation messages to the replicationServer.
*/
CSNGenerator gen = new CSNGenerator(2, 0);
- user1entryUUID = "33333333-3333-3333-3333-333333333333";
- user1dn = "uid=user1,ou=People," + baseDnStr;
- String entryWithUUIDldif = "dn: "+ user1dn + "\n"
+ String user1entryUUID = "33333333-3333-3333-3333-333333333333";
+ String user1dn = "uid=user1,ou=People," + baseDnStr;
+ Entry personWithUUIDEntry = TestCaseUtils.entryFromLdifString(
+ "dn: "+ user1dn + "\n"
+ "objectClass: top\n" + "objectClass: person\n"
+ "objectClass: organizationalPerson\n"
+ "objectClass: inetOrgPerson\n" + "uid: user.1\n"
@@ -574,15 +538,13 @@
+ "telephoneNumber: 216-564-6748\n" + "employeeNumber: 1\n"
+ "sn: Amar\n" + "givenName: Aaccf\n" + "postalCode: 85762\n"
+ "userPassword: password\n" + "initials: AA\n"
- + "entryUUID: " + user1entryUUID + "\n";
-
- personWithUUIDEntry = TestCaseUtils.entryFromLdifString(entryWithUUIDldif);
+ + "entryUUID: " + user1entryUUID + "\n");
// Create and publish an update message to add an entry.
return new AddMsg(gen.newCSN(),
personWithUUIDEntry.getDN(),
user1entryUUID,
- baseUUID,
+ null,
personWithUUIDEntry.getObjectClassAttribute(),
personWithUUIDEntry.getAttributes(), new ArrayList<Attribute>());
}
@@ -591,31 +553,24 @@
* Check that the expected number of changes are in the replication server
* database.
*/
- private void checkChangelogSize(int expectedCount)
+ private void checkChangelogSize(int expectedCount) throws Exception
{
- try
+ SearchFilter filter = SearchFilter.createFilterFromString("(objectclass=*)");
+ InternalSearchOperation searchOperation =
+ connection.processSearch(DN.decode("dc=replicationchanges"),
+ SearchScope.SUBORDINATE_SUBTREE,
+ filter);
+ if (debugEnabled())
{
- SearchFilter filter =
- SearchFilter.createFilterFromString("(objectclass=*)");
- InternalSearchOperation searchOperation =
- connection.processSearch(DN.decode("dc=replicationchanges"),
- SearchScope.SUBORDINATE_SUBTREE,
- filter);
- if (debugEnabled())
+ if (searchOperation.getSearchEntries().size() != expectedCount)
{
- if (searchOperation.getSearchEntries().size() != expectedCount)
+ for (SearchResultEntry sre : searchOperation.getSearchEntries())
{
- for (SearchResultEntry sre : searchOperation.getSearchEntries())
- {
- debugInfo("Entry found: " + sre.toLDIFString());
- }
+ debugInfo("Entry found: " + sre.toLDIFString());
}
}
- assertEquals(searchOperation.getSearchEntries().size(), expectedCount);
}
- catch(Exception e)
- {
- }
+ assertEquals(searchOperation.getSearchEntries().size(), expectedCount);
}
/**
@@ -706,10 +661,10 @@
broker3.receive();
fail("No update message is supposed to be received here.");
}
- catch(SocketTimeoutException e)
+ catch (SocketTimeoutException expected)
{
// This is the expected result
- // Note that timeout should be lower than RS montoring publisher period
+ // Note that timeout should be lower than RS monitoring publisher period
// so that timeout occurs
}
@@ -717,8 +672,7 @@
debugInfo(testCase + " ** TEST ** The part of the topology with the right gen ID should work well");
// Now create a change that must be replicated
- String ent1[] = { createEntry(UUID.randomUUID()) };
- addTestEntriesToDB(ent1);
+ addTestEntriesToDB(createEntry(UUID.randomUUID()));
// Verify that RS1 does contain the change related to this ADD.
Thread.sleep(500);
@@ -731,12 +685,12 @@
//===========================================================
debugInfo(testCase + " ** TEST ** Persistence of the generation ID in RS1");
- long genIdBeforeShut = replServer1.getGenerationId(baseDN);
+ final long genIdBeforeShut = replServer1.getGenerationId(baseDN);
debugInfo("Shutdown replServer1");
stop(broker2, broker3);
broker2 = broker3 = null;
- remove(replServer1);
+ replServer1.remove();
replServer1 = null;
debugInfo("Create again replServer1");
@@ -749,10 +703,10 @@
debugInfo("Delay to allow DS to reconnect to replServer1");
- long genIdAfterRestart = replServer1.getGenerationId(baseDN);
+ final long genIdAfterRestart = replServer1.getGenerationId(baseDN);
debugInfo("Aft restart / replServer.genId=" + genIdAfterRestart);
- assertTrue(replServer1!=null, "Replication server creation failed.");
- assertTrue(genIdBeforeShut == genIdAfterRestart,
+ assertNotNull(replServer1, "Replication server creation failed.");
+ assertEquals(genIdAfterRestart, genIdBeforeShut,
"generationId is expected to have the same value" +
" after replServer1 restart. Before : " + genIdBeforeShut +
" after : " + genIdAfterRestart);
@@ -799,20 +753,14 @@
// to enter the bad gen id status
ChangeStatusMsg csMsg = (ChangeStatusMsg)waitForSpecificMsg(broker2,
ChangeStatusMsg.class.getName());
- if (csMsg.getRequestedStatus() != ServerStatus.BAD_GEN_ID_STATUS)
- {
- fail("Broker 2 connection is expected to receive 1 ChangeStatusMsg" +
- " to enter the bad gen id status"
- + csMsg);
- }
+ assertEquals(csMsg.getRequestedStatus(), ServerStatus.BAD_GEN_ID_STATUS,
+ "Broker 2 connection is expected to receive 1 ChangeStatusMsg"
+ + " to enter the bad gen id status" + csMsg);
csMsg = (ChangeStatusMsg)waitForSpecificMsg(broker3,
ChangeStatusMsg.class.getName());
- if (csMsg.getRequestedStatus() != ServerStatus.BAD_GEN_ID_STATUS)
- {
- fail("Broker 2 connection is expected to receive 1 ChangeStatusMsg" +
- " to enter the bad gen id status"
- + csMsg);
- }
+ assertEquals(csMsg.getRequestedStatus(), ServerStatus.BAD_GEN_ID_STATUS,
+ "Broker 2 connection is expected to receive 1 ChangeStatusMsg"
+ + " to enter the bad gen id status" + csMsg);
debugInfo("DS1 root entry must contain the new gen ID");
genId = readGenIdFromSuffixRootEntry();
@@ -841,39 +789,24 @@
"Expecting that DS3 with old gen ID is in bad gen id from RS1");
debugInfo("Add entries to DS1, update should not be sent to DS2 and DS3 that are in bad gen id");
- String[] ent3 = { createEntry(UUID.randomUUID()) };
- addTestEntriesToDB(ent3);
+ addTestEntriesToDB(createEntry(UUID.randomUUID()));
debugInfo("RS1 must have stored that update.");
Thread.sleep(500);
checkChangelogSize(1);
- try
- {
- ReplicationMsg msg2 = broker2.receive();
- fail("No update message is supposed to be received by broker2 in bad gen id. " + msg2);
- } catch(SocketTimeoutException e) { /* expected */ }
-
- try
- {
- ReplicationMsg msg2 = broker3.receive();
- fail("No update message is supposed to be received by broker3 in bad gen id. " + msg2);
- } catch(SocketTimeoutException e) { /* expected */ }
-
+ assertNoMessageReceivedBadGenId(broker2, "broker2");
+ assertNoMessageReceivedBadGenId(broker3, "broker3");
debugInfo("DS2 is publishing a change and RS1 must ignore this change, DS3 must not receive it.");
- AddMsg emsg = (AddMsg)createAddMsg();
+ AddMsg emsg = createAddMsg();
broker2.publish(emsg);
// Updates count in RS1 must stay unchanged = to 1
Thread.sleep(500);
checkChangelogSize(1);
- try
- {
- ReplicationMsg msg2 = broker3.receive();
- fail("No update message is supposed to be received by broker3 in bad gen id. "+ msg2);
- } catch(SocketTimeoutException e) { /* expected */ }
+ assertNoMessageReceivedBadGenId(broker3, "broker3");
//===============================================================
@@ -941,7 +874,7 @@
assertTrue(msg instanceof AddMsg, "Expected to receive an AddMsg but received: " + msg);
debugInfo("DS2 is publishing a change and RS1 must store this change, DS3 must receive it.");
- emsg = (AddMsg)createAddMsg();
+ emsg = createAddMsg();
broker2.publish(emsg);
Thread.sleep(500);
@@ -965,7 +898,19 @@
}
}
- /**
+ private void assertNoMessageReceivedBadGenId(ReplicationBroker broker, String brokerName)
+ {
+ try
+ {
+ ReplicationMsg msg = broker.receive();
+ fail("No update message is supposed to be received by " + brokerName
+ + " with bad gen id. " + msg);
+ }
+ catch (SocketTimeoutException expected)
+ { /* expected */
+ }
+ }
+
/**
* testMultiRS tests basic features of generationID
* with more than one Replication Server.
@@ -997,38 +942,13 @@
connectServer1ToChangelog(changelog1ID);
debugInfo("Expect genId are set in all replServers.");
- int waitRes=0;
- while(waitRes<100)
- {
- if (replServer1.getGenerationId(baseDN) == EMPTY_DN_GENID
- && replServer2.getGenerationId(baseDN) == EMPTY_DN_GENID
- && replServer3.getGenerationId(baseDN) == EMPTY_DN_GENID)
- break;
- waitRes++;
- Thread.sleep(100);
- }
- assertEquals(replServer1.getGenerationId(baseDN), EMPTY_DN_GENID, " in replServer1");
- assertEquals(replServer2.getGenerationId(baseDN), EMPTY_DN_GENID, " in replServer2");
- assertEquals(replServer3.getGenerationId(baseDN), EMPTY_DN_GENID, " in replServer3");
+ waitForStableGenerationId(EMPTY_DN_GENID);
debugInfo("Disconnect DS from replServer1.");
disconnectFromReplServer(changelog1ID);
- waitRes=0;
- while(waitRes<100)
- {
- if (replServer1.getGenerationId(baseDN) == -1
- && replServer2.getGenerationId(baseDN) == -1
- && replServer3.getGenerationId(baseDN) == -1)
- break;
- waitRes++;
- Thread.sleep(100);
- }
- debugInfo(
- "Expect genIds to be resetted in all servers to -1 as no more DS in topo - after 10 sec");
- assertEquals(replServer1.getGenerationId(baseDN), -1);
- assertEquals(replServer2.getGenerationId(baseDN), -1);
- assertEquals(replServer3.getGenerationId(baseDN), -1);
+ debugInfo("Expect genIds to be resetted in all servers to -1 as no more DS in topo - after 10 sec");
+ waitForStableGenerationId(-1);
debugInfo("Add entries to DS");
addTestEntriesToDB(updatedEntries);
@@ -1036,23 +956,10 @@
debugInfo("Connecting DS to replServer2");
connectServer1ToChangelog(changelog2ID);
- debugInfo(
- "Expect genIds to be set in all servers based on the added entries.");
+ debugInfo("Expect genIds to be set in all servers based on the added entries.");
genId = readGenIdFromSuffixRootEntry();
assertTrue(genId != -1);
- waitRes=0;
- while(waitRes<100)
- {
- if (replServer1.getGenerationId(baseDN) == genId
- && replServer2.getGenerationId(baseDN) == genId
- && replServer3.getGenerationId(baseDN) == genId)
- break;
- waitRes++;
- Thread.sleep(100);
- }
- assertEquals(replServer1.getGenerationId(baseDN), genId);
- assertEquals(replServer2.getGenerationId(baseDN), genId);
- assertEquals(replServer3.getGenerationId(baseDN), genId);
+ waitForStableGenerationId(genId);
debugInfo("Connecting broker2 to replServer3 with a good genId");
broker2 = openReplicationSession(baseDN, server2ID, 100,
@@ -1067,18 +974,8 @@
debugInfo("Verifying that all replservers genIds have been reset.");
- debugInfo(
- "Expect all genIds to keep their value since broker2 is still connected.");
- waitRes=0;
- while(waitRes<100)
- {
- if (replServer1.getGenerationId(baseDN) == genId
- && replServer2.getGenerationId(baseDN) == genId
- && replServer3.getGenerationId(baseDN) == genId)
- break;
- waitRes++;
- Thread.sleep(100);
- }
+ debugInfo("Expect all genIds to keep their value since broker2 is still connected.");
+ waitForStableGenerationId(genId);
assertEquals(replServer1.getGenerationId(baseDN), genId);
assertEquals(replServer2.getGenerationId(baseDN), genId);
assertEquals(replServer3.getGenerationId(baseDN), genId);
@@ -1092,10 +989,7 @@
debugInfo("Expecting that broker3 is in bad gen id since it has a bad genId");
assertTrue(isDegradedDueToGenerationId(replServer1, server3ID));
- int found = testEntriesInDb();
- assertEquals(found, updatedEntries.length,
- " Entries present in DB :" + found +
- " Expected entries :" + updatedEntries.length);
+ assertEquals(countUpdatedEntriesInDb(), updatedEntries.length);
debugInfo("Connecting DS to replServer1.");
connectServer1ToChangelog(changelog1ID);
@@ -1134,7 +1028,7 @@
waitTaskState(taskReset, TaskState.COMPLETED_SUCCESSFULLY, null);
debugInfo("Verifying that all replservers genIds have been reset.");
- waitRes=0;
+ int waitRes = 0;
while(waitRes<100)
{
readGenIdFromSuffixRootEntry();
@@ -1160,6 +1054,23 @@
}
}
+ private void waitForStableGenerationId(long expectedGenId) throws Exception
+ {
+ int wait = 0;
+ while (wait < 100)
+ {
+ if (replServer1.getGenerationId(baseDN) == expectedGenId
+ && replServer2.getGenerationId(baseDN) == expectedGenId
+ && replServer3.getGenerationId(baseDN) == expectedGenId)
+ break;
+ wait++;
+ Thread.sleep(100);
+ }
+ assertEquals(replServer1.getGenerationId(baseDN), expectedGenId, " in replServer1");
+ assertEquals(replServer2.getGenerationId(baseDN), expectedGenId, " in replServer2");
+ assertEquals(replServer3.getGenerationId(baseDN), expectedGenId, " in replServer3");
+ }
+
private boolean isDegradedDueToGenerationId(ReplicationServer rs, int serverId)
{
ReplicationServerDomain domain = rs.getReplicationServerDomain(baseDN);
@@ -1169,7 +1080,7 @@
/**
* Disconnect broker and remove entries from the local DB
*/
- protected void postTest()
+ private void postTest() throws Exception
{
debugInfo("Post test cleaning.");
@@ -1182,12 +1093,8 @@
Arrays.fill(replServerPort, 0);
- debugInfo("Clearing DS backend");
- try
- {
- TestCaseUtils.initializeTestBackend(false);
- } catch (Exception ex)
- {debugInfo("postTest(): error cleaning memory backend: " + ex);}
+ debugInfo("Clearing DJ backend");
+ TestCaseUtils.initializeTestBackend(false);
}
/**
@@ -1208,8 +1115,6 @@
try
{
- long genId;
-
replServer1 = createReplicationServer(changelog1ID, false, testCase);
/*
@@ -1223,14 +1128,12 @@
connectServer1ToChangelog(changelog1ID);
debugInfo(testCase + " Expect genId attribute to be not retrievable");
- genId = readGenIdFromSuffixRootEntry();
- assertEquals(genId,-1);
+ assertEquals(readGenIdFromSuffixRootEntry(), -1);
addTestEntriesToDB(updatedEntries);
debugInfo(testCase + " Expect genId attribute to be retrievable");
- genId = readGenIdFromSuffixRootEntry();
- assertEquals(genId, EMPTY_DN_GENID);
+ assertEquals(readGenIdFromSuffixRootEntry(), EMPTY_DN_GENID);
disconnectFromReplServer(changelog1ID);
}
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ReplicationTestCase.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ReplicationTestCase.java
index de7b4a9..83b9c03 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ReplicationTestCase.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ReplicationTestCase.java
@@ -327,33 +327,6 @@
return broker;
}
- /**
- * Open a replicationServer session with flow control to the local
- * ReplicationServer.
- */
- protected ReplicationBroker openReplicationSession(
- final DN baseDN, int serverId, int window_size,
- int port, int timeout, int maxSendQueue, int maxRcvQueue,
- boolean emptyOldChanges)
- throws Exception, SocketException
- {
- ServerState state = new ServerState();
-
- if (emptyOldChanges)
- new PersistentServerState(baseDN, serverId, new ServerState());
-
- ReplicationBroker broker = new ReplicationBroker(null,
- state, baseDN, serverId, window_size,
- getGenerationId(baseDN), 0, getReplSessionSecurity(), (byte)1, 500);
- List<String> servers = new ArrayList<String>(1);
- servers.add("localhost:" + port);
- broker.start(servers);
- checkConnection(30, broker, port);
- if (timeout != 0)
- broker.setSoTimeout(timeout);
- return broker;
- }
-
protected void deleteEntry(DN dn)
{
try
@@ -364,10 +337,9 @@
catch(Exception e)
{}
- DeleteOperationBasis op;
- op = new DeleteOperationBasis(connection, InternalClientConnection
- .nextOperationID(), InternalClientConnection.nextMessageID(), null,
- dn);
+ DeleteOperationBasis op = new DeleteOperationBasis(connection,
+ InternalClientConnection.nextOperationID(), InternalClientConnection.nextMessageID(),
+ null, dn);
op.run();
if ((op.getResultCode() != ResultCode.SUCCESS) &&
(op.getResultCode() != ResultCode.NO_SUCH_OBJECT))
@@ -897,102 +869,76 @@
}
protected void waitTaskState(Entry taskEntry, TaskState expectedTaskState,
- Message expectedMessage)
+ Message expectedMessage) throws Exception
{
TaskState taskState = null;
int cpt=40;
- try
+
+ SearchFilter filter = SearchFilter.createFilterFromString("(objectclass=*)");
+ Entry resultEntry = null;
+ do
{
- SearchFilter filter =
- SearchFilter.createFilterFromString("(objectclass=*)");
- Entry resultEntry = null;
- do
- {
- InternalSearchOperation searchOperation =
- connection.processSearch(taskEntry.getDN(),
- SearchScope.BASE_OBJECT,
- filter);
- try
- {
- resultEntry = searchOperation.getSearchEntries().getFirst();
- } catch (Exception e)
- {
- fail("Task entry was not returned from the search.");
- continue;
- }
+ InternalSearchOperation searchOperation =
+ connection.processSearch(taskEntry.getDN(), SearchScope.BASE_OBJECT, filter);
+ resultEntry = searchOperation.getSearchEntries().getFirst();
- try
- {
- // Check that the task state is as expected.
- AttributeType taskStateType =
- DirectoryServer.getAttributeType(ATTR_TASK_STATE.toLowerCase());
- String stateString =
- resultEntry.getAttributeValue(taskStateType,
- DirectoryStringSyntax.DECODER);
- taskState = TaskState.fromString(stateString);
- }
- catch(Exception e)
- {
- fail("Exception"+ e.getMessage()+e.getStackTrace());
- }
- Thread.sleep(500);
- cpt--;
- }
- while ((taskState != expectedTaskState) &&
- (taskState != TaskState.STOPPED_BY_ERROR) &&
- (taskState != TaskState.COMPLETED_SUCCESSFULLY) &&
- (cpt > 0));
+ // Check that the task state is as expected.
+ AttributeType taskStateType =
+ DirectoryServer.getAttributeType(ATTR_TASK_STATE.toLowerCase());
+ String stateString =
+ resultEntry.getAttributeValue(taskStateType, DirectoryStringSyntax.DECODER);
+ taskState = TaskState.fromString(stateString);
- // Check that the task contains some log messages.
- AttributeType logMessagesType = DirectoryServer.getAttributeType(
- ATTR_TASK_LOG_MESSAGES.toLowerCase());
- List<String> logMessages = new ArrayList<String>();
- resultEntry.getAttributeValues(logMessagesType,
- DirectoryStringSyntax.DECODER,
- logMessages);
+ Thread.sleep(500);
+ cpt--;
+ }
+ while ((taskState != expectedTaskState)
+ && (taskState != TaskState.STOPPED_BY_ERROR)
+ && (taskState != TaskState.COMPLETED_SUCCESSFULLY) && (cpt > 0));
- if ((taskState != TaskState.COMPLETED_SUCCESSFULLY)
- && (taskState != TaskState.RUNNING))
- {
- if (logMessages.size() == 0)
- {
- fail("No log messages were written to the task entry on a failed task");
- }
- }
- if (logMessages.size() != 0)
- {
- TRACER.debugInfo(logMessages.get(0));
- if (expectedMessage != null)
- {
- TRACER.debugInfo(expectedMessage.toString());
- assertTrue(logMessages.get(0).indexOf(
- expectedMessage.toString())>0);
- }
- }
+ // Check that the task contains some log messages.
+ AttributeType logMessagesType =
+ DirectoryServer.getAttributeType(ATTR_TASK_LOG_MESSAGES.toLowerCase());
+ List<String> logMessages = new ArrayList<String>();
+ resultEntry.getAttributeValues(logMessagesType,
+ DirectoryStringSyntax.DECODER, logMessages);
- if ((expectedTaskState == TaskState.RUNNING)
- && (taskState == TaskState.COMPLETED_SUCCESSFULLY))
+ if ((taskState != TaskState.COMPLETED_SUCCESSFULLY)
+ && (taskState != TaskState.RUNNING))
+ {
+ if (logMessages.size() == 0)
{
- // We usually wait the running state after adding the task
- // and if the task is fast enough then it may be already done
- // and we can go on.
- }
- else
- {
- assertEquals(taskState, expectedTaskState, "Task State:" + taskState +
- " Expected task state:" + expectedTaskState);
+ fail("No log messages were written to the task entry on a failed task");
}
}
- catch(Exception e)
+ if (logMessages.size() != 0)
{
- fail("waitTaskState Exception:"+ e.getMessage() + " " + stackTraceToSingleLineString(e));
+ TRACER.debugInfo(logMessages.get(0));
+ if (expectedMessage != null)
+ {
+ TRACER.debugInfo(expectedMessage.toString());
+ assertTrue(logMessages.get(0).indexOf(expectedMessage.toString()) > 0);
+ }
+ }
+
+ if ((expectedTaskState == TaskState.RUNNING)
+ && (taskState == TaskState.COMPLETED_SUCCESSFULLY))
+ {
+ // We usually wait the running state after adding the task
+ // and if the task is fast enough then it may be already done
+ // and we can go on.
+ }
+ else
+ {
+ assertEquals(taskState, expectedTaskState, "Task State:" + taskState
+ + " Expected task state:" + expectedTaskState);
}
}
/**
* Add to the current DB the entries necessary to the test
*/
- protected void addTestEntriesToDB(String[] ldifEntries)
+ protected void addTestEntriesToDB(String... ldifEntries)
{
try
{
@@ -1040,10 +986,7 @@
*/
protected String getEntryUUID(DN dn) throws Exception
{
- Entry newEntry;
int count = 10;
- if (count<1)
- count=1;
String found = null;
while ((count> 0) && (found == null))
{
@@ -1057,14 +1000,11 @@
try
{
- newEntry = DirectoryServer.getEntry(dn);
-
+ Entry newEntry = DirectoryServer.getEntry(dn);
if (newEntry != null)
{
List<Attribute> tmpAttrList = newEntry.getAttribute("entryuuid");
- Attribute tmpAttr = tmpAttrList.get(0);
-
- for (AttributeValue val : tmpAttr)
+ for (AttributeValue val : tmpAttrList.get(0))
{
found = val.getValue().toString();
break;
@@ -1104,15 +1044,13 @@
* @return The expected message if it comes in time or fails (assertion).
*/
protected static ReplicationMsg waitForSpecificMsg(Session session, String msgType) {
-
- ReplicationMsg replMsg = null;
-
int timeOut = 5000; // 5 seconds max to wait for the desired message
long startTime = System.currentTimeMillis();
long curTime = startTime;
int nMsg = 0;
while ((curTime - startTime) <= timeOut)
{
+ ReplicationMsg replMsg = null;
try
{
replMsg = session.receive();
@@ -1147,15 +1085,13 @@
* @return The expected message if it comes in time or fails (assertion).
*/
protected static ReplicationMsg waitForSpecificMsg(ReplicationBroker broker, String msgType) {
-
- ReplicationMsg replMsg = null;
-
int timeOut = 5000; // 5 seconds max to wait for the desired message
long startTime = System.currentTimeMillis();
long curTime = startTime;
int nMsg = 0;
while ((curTime - startTime) <= timeOut)
{
+ ReplicationMsg replMsg = null;
try
{
replMsg = broker.receive();
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/ReplicationServerTest.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/ReplicationServerTest.java
index 7a6c9b4..1cff9ac 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/ReplicationServerTest.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/ReplicationServerTest.java
@@ -251,41 +251,16 @@
*/
unknownCSNServer1 = new CSN(time + 1, 1, 1);
- /*
- * Send and receive a Delete Msg from server 1 to server 2
- */
- DeleteMsg msg = new DeleteMsg(EXAMPLE_DN, firstCSNServer1, "uid");
- server1.publish(msg);
- ReplicationMsg msg2 = server2.receive();
- server2.updateWindowAfterReplay();
- assertDeleteMsgBodyEquals(msg, msg2);
+ sendAndReceiveDeleteMsg(server1, server2, EXAMPLE_DN, firstCSNServer1, "uid");
- /*
- * Send and receive a second Delete Msg
- */
- msg = new DeleteMsg(TEST_ROOT_DN, secondCSNServer1, "uid");
- server1.publish(msg);
- msg2 = server2.receive();
- server2.updateWindowAfterReplay();
- assertDeleteMsgBodyEquals(msg, msg2);
+ // Send and receive a second Delete Msg
+ sendAndReceiveDeleteMsg(server1, server2, TEST_ROOT_DN, secondCSNServer1, "uid");
- /*
- * Send and receive a Delete Msg from server 2 to server 1
- */
- msg = new DeleteMsg(EXAMPLE_DN, firstCSNServer2, "other-uid");
- server2.publish(msg);
- msg2 = server1.receive();
- server1.updateWindowAfterReplay();
- assertDeleteMsgBodyEquals(msg, msg2);
+ // Send and receive a Delete Msg from server 2 to server 1
+ sendAndReceiveDeleteMsg(server2, server1, EXAMPLE_DN, firstCSNServer2, "other-uid");
- /*
- * Send and receive a second Delete Msg
- */
- msg = new DeleteMsg(TEST_ROOT_DN, secondCSNServer2, "uid");
- server2.publish(msg);
- msg2 = server1.receive();
- server1.updateWindowAfterReplay();
- assertDeleteMsgBodyEquals(msg, msg2);
+ // Send and receive a second Delete Msg
+ sendAndReceiveDeleteMsg(server2, server1, TEST_ROOT_DN, secondCSNServer2, "uid");
debugInfo("Ending changelogBasic");
}
@@ -295,6 +270,16 @@
}
}
+ private void sendAndReceiveDeleteMsg(ReplicationBroker sender, ReplicationBroker receiver,
+ DN dn, CSN csn, String entryUUID) throws Exception
+ {
+ DeleteMsg sentMsg = new DeleteMsg(dn, csn, entryUUID);
+ sender.publish(sentMsg);
+ ReplicationMsg receivedMsg = receiver.receive();
+ receiver.updateWindowAfterReplay();
+ assertDeleteMsgBodyEquals(sentMsg, receivedMsg);
+ }
+
private void assertDeleteMsgBodyEquals(DeleteMsg msg, ReplicationMsg msg2)
{
assertTrue(msg2 instanceof DeleteMsg,
@@ -305,6 +290,16 @@
"ReplicationServer basic : incorrect message body received.");
}
+ private ServerState newServerState(CSN... csns)
+ {
+ ServerState state = new ServerState();
+ for (CSN csn : csns)
+ {
+ state.update(csn);
+ }
+ return state;
+ }
+
/**
* Test that a new client see the change that was sent in the
* previous test.
@@ -319,9 +314,9 @@
3, 100, replicationServerPort, 1000, false);
assertTrue(broker.isConnected());
- ReplicationMsg msg2 = broker.receive();
+ ReplicationMsg receivedMsg = broker.receive();
broker.updateWindowAfterReplay();
- assertDeleteMsgCSNEquals(msg2, firstCSNServer1, "first");
+ assertDeleteMsgCSNEquals(receivedMsg, firstCSNServer1, "first");
debugInfo("Ending newClient");
}
finally
@@ -330,8 +325,6 @@
}
}
-
-
/**
* Test that a client that has already seen some changes now receive
* the correct next change.
@@ -345,9 +338,9 @@
broker = openReplicationSession(TEST_ROOT_DN,
3, 100, replicationServerPort, 5000, state);
- ReplicationMsg msg2 = broker.receive();
+ ReplicationMsg receivedMsg = broker.receive();
broker.updateWindowAfterReplay();
- assertDeleteMsgCSNEquals(msg2, nextCSN, "second");
+ assertDeleteMsgCSNEquals(receivedMsg, nextCSN, "second");
}
finally
{
@@ -383,10 +376,7 @@
* Create a ServerState updated with the first changes from both servers
* done in test changelogBasic.
*/
- ServerState state = new ServerState();
- state.update(firstCSNServer1);
- state.update(firstCSNServer2);
-
+ ServerState state = newServerState(firstCSNServer1, firstCSNServer2);
newClientWithChanges(state, secondCSNServer1);
debugInfo("Ending newClientWithFirstChanges");
}
@@ -398,13 +388,7 @@
private void newClientWithUnknownChanges() throws Exception
{
debugInfo("Starting newClientWithUnknownChanges");
- /*
- * Create a ServerState with wrongCSNServer1
- */
- ServerState state = new ServerState();
- state.update(unknownCSNServer1);
- state.update(secondCSNServer2);
-
+ ServerState state = newServerState(unknownCSNServer1, secondCSNServer2);
newClientWithChanges(state, secondCSNServer1);
debugInfo("Ending newClientWithUnknownChanges");
}
@@ -416,12 +400,7 @@
private void newClientWithChangefromServer1() throws Exception
{
debugInfo("Starting newClientWithChangefromServer1");
- /*
- * Create a ServerState updated with the first change from server 1
- */
- ServerState state = new ServerState();
- state.update(firstCSNServer1);
-
+ ServerState state = newServerState(firstCSNServer1);
newClientWithChanges(state, firstCSNServer2);
debugInfo("Ending newClientWithChangefromServer1");
}
@@ -433,12 +412,7 @@
private void newClientWithChangefromServer2() throws Exception
{
debugInfo("Starting newClientWithChangefromServer2");
- /*
- * Create a ServerState updated with the first change from server 1
- */
- ServerState state = new ServerState();
- state.update(firstCSNServer2);
-
+ ServerState state = newServerState(firstCSNServer2);
newClientWithChanges(state, firstCSNServer1);
debugInfo("Ending newClientWithChangefromServer2");
}
@@ -450,13 +424,7 @@
private void newClientLateServer1() throws Exception
{
debugInfo("Starting newClientLateServer1");
- /*
- * Create a ServerState updated with the first change from server 1
- */
- ServerState state = new ServerState();
- state.update(secondCSNServer2);
- state.update(firstCSNServer1);
-
+ ServerState state = newServerState(secondCSNServer2, firstCSNServer1);
newClientWithChanges(state, secondCSNServer1);
debugInfo("Ending newClientLateServer1");
}
@@ -511,7 +479,7 @@
* Open a sender session
*/
server = openReplicationSession(TEST_ROOT_DN,
- 5, 100, replicationServerPort, 100000, 1000, 0, false);
+ 5, 100, replicationServerPort, 100000, false);
assertTrue(server.isConnected());
reader = new BrokerReader(server, TOTAL_MSG);
@@ -596,7 +564,7 @@
int serverId = 10 + i;
CSNGenerator gen = new CSNGenerator(serverId , 0);
broker[i] = openReplicationSession(TEST_ROOT_DN,
- serverId, 100, replicationServerPort, 3000, 1000, 0, true);
+ serverId, 100, replicationServerPort, 3000, true);
assertTrue(broker[i].isConnected());
producer[i] = new BrokerWriter(broker[i], gen, TOTAL_MSG/THREADS);
@@ -723,9 +691,8 @@
// - Modify
Attribute attr1 = Attributes.create("description", "new value");
- Modification mod1 = new Modification(ModificationType.REPLACE, attr1);
- List<Modification> mods = new ArrayList<Modification>();
- mods.add(mod1);
+ List<Modification> mods =
+ Arrays.asList(new Modification(ModificationType.REPLACE, attr1));
ModifyMsg modMsg = new ModifyMsg(csnGen.newCSN(), EXAMPLE_DN, mods, "fakeuniqueid");
broker1.publish(modMsg);
@@ -821,9 +788,8 @@
// - Modify
Attribute attr1 = Attributes.create("description", "new value");
- Modification mod1 = new Modification(ModificationType.REPLACE, attr1);
- List<Modification> mods = new ArrayList<Modification>();
- mods.add(mod1);
+ List<Modification> mods =
+ Arrays.asList(new Modification(ModificationType.REPLACE, attr1));
ModifyMsg modMsg = new ModifyMsg(csnGen.newCSN(), EXAMPLE_DN, mods, "fakeuniqueid");
broker1.publish(modMsg);
@@ -1188,9 +1154,8 @@
debugInfo("Ending export");
}
- private Entry createBackupTask()
- throws Exception
- {
+ private Entry createBackupTask() throws Exception
+ {
return TestCaseUtils.makeEntry(
"dn: ds-task-id=" + UUID.randomUUID() + ",cn=Scheduled Tasks,cn=Tasks",
"objectclass: top",
@@ -1200,12 +1165,10 @@
"ds-backup-directory-path: bak" + File.separator +
"replicationChanges",
"ds-task-backup-backend-id: replicationChanges");
+ }
- }
-
- private Entry createRestoreTask()
- throws Exception
- {
+ private Entry createRestoreTask() throws Exception
+ {
return TestCaseUtils.makeEntry(
"dn: ds-task-id=" + UUID.randomUUID() + ",cn=Scheduled Tasks,cn=Tasks",
"objectclass: top",
@@ -1214,11 +1177,10 @@
"ds-task-class-name: org.opends.server.tasks.RestoreTask",
"ds-backup-directory-path: bak" + File.separator +
"replicationChanges");
- }
+ }
- private Entry createExportAllTask()
- throws Exception
- {
+ private Entry createExportAllTask() throws Exception
+ {
return TestCaseUtils.makeEntry(
"dn: ds-task-id=" + UUID.randomUUID() + ",cn=Scheduled Tasks,cn=Tasks",
"objectclass: top",
@@ -1228,11 +1190,10 @@
"ds-task-export-ldif-file: " + exportLDIFAllFile,
"ds-task-export-backend-id: replicationChanges",
"ds-task-export-include-branch: dc=replicationChanges");
- }
+ }
- private Entry createExportDomainTask(String suffix)
- throws Exception
- {
+ private Entry createExportDomainTask(String suffix) throws Exception
+ {
String root = suffix.substring(suffix.indexOf('=')+1, suffix.indexOf(','));
exportLDIFDomainFile = "exportLDIF" + root +".ldif";
return TestCaseUtils.makeEntry(
@@ -1244,7 +1205,7 @@
"ds-task-export-ldif-file: " + exportLDIFDomainFile,
"ds-task-export-backend-id: replicationChanges",
"ds-task-export-include-branch: "+suffix+",dc=replicationChanges");
- }
+ }
private List<UpdateMsg> createChanges(String suffix, int serverId) throws Exception
{
@@ -1293,13 +1254,13 @@
// - Modify
Attribute attr1 = Attributes.create("description", "new value");
- Modification mod1 = new Modification(ModificationType.REPLACE, attr1);
Attribute attr2 = Attributes.create("modifiersName", "cn=Directory Manager,cn=Root DNs,cn=config");
- Modification mod2 = new Modification(ModificationType.REPLACE, attr2);
Attribute attr3 = Attributes.create("modifyTimestamp", "20070917172420Z");
- Modification mod3 = new Modification(ModificationType.REPLACE, attr3);
- List<Modification> mods = Arrays.asList(mod1, mod2, mod3);
+ List<Modification> mods = Arrays.asList(
+ new Modification(ModificationType.REPLACE, attr1),
+ new Modification(ModificationType.REPLACE, attr2),
+ new Modification(ModificationType.REPLACE, attr3));
DN dn = exampleSuffixDN;
ModifyMsg modMsg = new ModifyMsg(csnGen.newCSN(), dn, mods, "fakeuniqueid");
@@ -1629,9 +1590,8 @@
// - Modify
Attribute attr1 = Attributes.create("description", "new value");
- Modification mod1 = new Modification(ModificationType.REPLACE, attr1);
- List<Modification> mods = new ArrayList<Modification>();
- mods.add(mod1);
+ List<Modification> mods =
+ Arrays.asList(new Modification(ModificationType.REPLACE, attr1));
ModifyMsg modMsg = new ModifyMsg(csnGen.newCSN(), EXAMPLE_DN, mods, "fakeuniqueid");
broker1.publish(modMsg);
--
Gitblit v1.10.0