replServer1 = createReplicationServer(changelog1ID, false, testCase);
// To search the replication server db later in these tests, we need
// to attach the search backend to the replication server just created.
ReplicationBackend b =
(ReplicationBackend)DirectoryServer.getBackend("replicationChanges");
b.setServer(replServer1);
//===========================================================
debugInfo(testCase + " ** TEST ** Empty backend");
debugInfo(testCase + " Configuring DS1 to replicate to RS1(" + changelog1ID + ") on an empty backend");
connectServer1ToChangelog(changelog1ID);
debugInfo(testCase + " Expect genId to be not retrievable from suffix root entry");
genId = readGenIdFromSuffixRootEntry();
assertEquals(genId,-1);
debugInfo(testCase + " Expect genId to be set in memory on the replication " +
" server side (not wrote on disk/db since no change occurred).");
rgenId = replServer1.getGenerationId(baseDn.toNormalizedString());
assertEquals(rgenId, EMPTY_DN_GENID);
// Clean for next test
debugInfo(testCase + " Unconfiguring DS1 to replicate to RS1(" + changelog1ID + ")");
disconnectFromReplServer(changelog1ID);
//===========================================================
debugInfo(testCase + " ** TEST ** Non empty backend");
debugInfo(testCase + " Adding test entries to DS");
this.addTestEntriesToDB(updatedEntries);
debugInfo(testCase + " Configuring DS1 to replicate to RS1(" + changelog1ID + ") on a non empty backend");
connectServer1ToChangelog(changelog1ID);
debugInfo(testCase + " Test that the generationId is written in the DB in the root entry on DS1");
genId = readGenIdFromSuffixRootEntry();
assertTrue(genId != -1);
assertTrue(genId != EMPTY_DN_GENID);
debugInfo(testCase + " Test that the generationId is set on RS1");
rgenId = replServer1.getGenerationId(baseDn.toNormalizedString());
assertEquals(genId, rgenId);
//===========================================================
debugInfo(testCase + " ** TEST ** DS2 connection to RS1 with bad genID");
try
{
broker2 = openReplicationSession(baseDn,
server2ID, 100, getChangelogPort(changelog1ID),
1000, !emptyOldChanges, genId+1);
}
catch(SocketException se)
{
fail("DS2 with bad genID failed to connect to RS1.");
}
//===========================================================
debugInfo(testCase + " ** TEST ** DS3 connection to RS1 with good genID");
try
{
broker3 = openReplicationSession(baseDn,
server3ID, 100, getChangelogPort(changelog1ID), 1000, !emptyOldChanges, genId);
}
catch(SocketException se)
{
fail("Broker connection is expected to be accepted.");
}
//===========================================================
debugInfo(testCase + " ** TEST ** DS2 (bad genID) changes must be ignored.");
broker2.publish(createAddMsg());
try
{
broker3.receive();
fail("No update message is supposed to be received here.");
}
catch(SocketTimeoutException e)
{
// This is the expected result
// Note that timeout should be lower than RS montoring publisher period
// so that timeout occurs
}
//===========================================================
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()) };
this.addTestEntriesToDB(ent1);
// Verify that RS1 does contain the change related to this ADD.
Thread.sleep(500);
checkChangelogSize(1);
// Verify that DS3 receives this change
try
{
ReplicationMsg msg = broker3.receive();
debugInfo("Broker 3 received expected update msg" + msg);
}
catch(SocketTimeoutException e)
{
fail("Update message is supposed to be received.");
}
//===========================================================
debugInfo(testCase + " ** TEST ** Persistence of the generation ID in RS1");
long genIdBeforeShut =
replServer1.getGenerationId(baseDn.toNormalizedString());
debugInfo("Shutdown replServer1");
broker2.stop();
broker2 = null;
broker3.stop();
broker3 = null;
replServer1.remove();
replServer1 = null;
debugInfo("Create again replServer1");
replServer1 = createReplicationServer(changelog1ID, false, testCase);
// To search the replication server db later in these tests, we need
// to attach the search backend to the replication server just created.
b = (ReplicationBackend)DirectoryServer.getBackend("replicationChanges");
b.setServer(replServer1);
debugInfo("Delay to allow DS to reconnect to replServer1");
long genIdAfterRestart =
replServer1.getGenerationId(baseDn.toNormalizedString());