From 91ce6419b4676c6fe4f2c7382da02f35ea5a703b Mon Sep 17 00:00:00 2001
From: pgamba <pgamba@localhost>
Date: Mon, 04 Jan 2010 16:53:27 +0000
Subject: [PATCH] Fix AssuredReplicationPlugin silent failure in FakeReplicationServer subthreads
---
opends/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/AssuredReplicationPluginTest.java | 190 ++++++++++++++++++++++++++++++++++-------------
opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ExternalChangeLogTest.java | 6 +
2 files changed, 140 insertions(+), 56 deletions(-)
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ExternalChangeLogTest.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ExternalChangeLogTest.java
index 7332768..6d7ac4c 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ExternalChangeLogTest.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ExternalChangeLogTest.java
@@ -22,7 +22,7 @@
* CDDL HEADER END
*
*
- * Copyright 2006-2009 Sun Microsystems, Inc.
+ * Copyright 2006-2010 Sun Microsystems, Inc.
*/
package org.opends.server.replication;
@@ -2982,7 +2982,9 @@
{
// check the DEL entry has the right content
assertTrue(resultEntry.getDN().toNormalizedString().equalsIgnoreCase(
- "cn="+String.valueOf(firstDraftChangeNumber+0)+",cn=changelog"));
+ "cn="+String.valueOf(firstDraftChangeNumber+0)+",cn=changelog"),
+ "Result entry DN : actual=" + resultEntry.getDN().toNormalizedString() +
+ " expected=" + "cn="+String.valueOf(firstDraftChangeNumber+0)+",cn=changelog");
checkValue(resultEntry,"replicationcsn",cn1.toString());
checkValue(resultEntry,"replicaidentifier","1201");
checkValue(resultEntry,"targetdn","uid="+tn+"1," + TEST_ROOT_DN_STRING);
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/AssuredReplicationPluginTest.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/AssuredReplicationPluginTest.java
index 7ad45ce..13bfb26 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/AssuredReplicationPluginTest.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/AssuredReplicationPluginTest.java
@@ -22,7 +22,7 @@
* CDDL HEADER END
*
*
- * Copyright 2008-2009 Sun Microsystems, Inc.
+ * Copyright 2008-2010 Sun Microsystems, Inc.
*/
package org.opends.server.replication.plugin;
@@ -71,9 +71,11 @@
import org.opends.server.types.Attribute;
import org.opends.server.types.AttributeValue;
import org.testng.annotations.BeforeClass;
+import org.opends.server.types.AbstractOperation;
import org.opends.server.types.ByteString;
import org.opends.server.types.DN;
import org.opends.server.types.Entry;
+import org.opends.server.types.ResultCode;
import org.opends.server.types.SearchResultEntry;
import org.opends.server.types.SearchScope;
import org.testng.annotations.DataProvider;
@@ -171,12 +173,14 @@
*/
private void addEntry(Entry entry) throws Exception
{
+ debugInfo("AddEntry " + entry.getDN());
AddOperationBasis addOp = new AddOperationBasis(connection,
InternalClientConnection.nextOperationID(), InternalClientConnection.
nextMessageID(), null, entry.getDN(), entry.getObjectClasses(),
entry.getUserAttributes(), entry.getOperationalAttributes());
addOp.setInternalOperation(true);
addOp.run();
+ waitOpResult(addOp, ResultCode.SUCCESS);
assertNotNull(getEntry(entry.getDN(), 1000, true));
}
@@ -308,27 +312,31 @@
private boolean scenarioExecuted = false;
private ChangeNumberGenerator gen = null;
+ private String testcase;
// Constructor for RS receiving updates in SR assured mode or not assured
// The assured boolean means:
// - true: SR mode
// - false: not assured
- public FakeReplicationServer(byte groupId, int port, int serverId, boolean assured)
+ public FakeReplicationServer(byte groupId, int port, int serverId, boolean assured,
+ String testcase)
{
this.groupId = groupId;
this.port = port;
this.serverId = serverId;
+ this.testcase = testcase;
if (assured)
{
this.isAssured = true;
- this.assuredMode = AssuredMode.SAFE_READ_MODE;
}
+ this.assuredMode = AssuredMode.SAFE_READ_MODE;
}
// Constructor for RS receiving updates in SD assured mode
- public FakeReplicationServer(byte groupId, int port, int serverId, int safeDataLevel)
+ public FakeReplicationServer(byte groupId, int port, int serverId, int safeDataLevel,
+ String testcase)
{
this.groupId = groupId;
this.port = port;
@@ -337,6 +345,12 @@
this.isAssured = true;
this.assuredMode = AssuredMode.SAFE_DATA_MODE;
this.safeDataLevel = (byte) safeDataLevel;
+ this.testcase = testcase;
+ }
+
+ public void setAssured(boolean assured)
+ {
+ this.isAssured = assured;
}
/**
@@ -488,10 +502,13 @@
// Sanity checking for assured parameters
boolean receivedIsAssured = startSessionMsg.isAssured();
assertEquals(receivedIsAssured, isAssured);
- AssuredMode receivedAssuredMode = startSessionMsg.getAssuredMode();
- assertEquals(receivedAssuredMode, assuredMode);
- byte receivedSafeDataLevel = startSessionMsg.getSafeDataLevel();
- assertEquals(receivedSafeDataLevel, safeDataLevel);
+ if (isAssured)
+ {
+ AssuredMode receivedAssuredMode = startSessionMsg.getAssuredMode();
+ assertEquals(receivedAssuredMode, assuredMode);
+ byte receivedSafeDataLevel = startSessionMsg.getSafeDataLevel();
+ assertEquals(receivedSafeDataLevel, safeDataLevel);
+ }
ServerStatus receivedServerStatus = startSessionMsg.getStatus();
assertEquals(receivedServerStatus, ServerStatus.NORMAL_STATUS);
List<String> receivedReferralsURLs = startSessionMsg.getReferralsURLs();
@@ -546,7 +563,7 @@
*/
private void handleClientConnection()
{
-
+ debugInfo("handleClientConnection " + testcase + " " + scenario);
// Handle DS connexion
if (!performHandshake())
{
@@ -599,6 +616,7 @@
default:
fail("Unknown scenario: " + scenario);
}
+ debugInfo("handleClientConnection " + testcase + " " + scenario + " done");
}
/*
@@ -676,7 +694,8 @@
} catch (Exception e)
{
fail("Unexpected exception in fake replication server executeTimeoutScenario " +
- "processing: " + e);
+ "processing: " + e + " testcase= " + testcase +
+ " groupId=" + groupId);
}
}
@@ -712,9 +731,14 @@
*/
private void checkUpdateAssuredParameters(UpdateMsg updateMsg)
{
- assertEquals(updateMsg.isAssured(), isAssured);
- assertEquals(updateMsg.getAssuredMode(), assuredMode);
- assertEquals(updateMsg.getSafeDataLevel(), safeDataLevel);
+ assertEquals(updateMsg.isAssured(), isAssured,
+ "msg=" + ((updateMsg instanceof AddMsg)?
+ ((AddMsg)updateMsg).getDn():updateMsg.getChangeNumber()));
+ if (isAssured)
+ {
+ assertEquals(updateMsg.getAssuredMode(), assuredMode);
+ assertEquals(updateMsg.getSafeDataLevel(), safeDataLevel);
+ }
debugInfo("Received update assured parameters are ok.");
}
@@ -869,30 +893,50 @@
{
int TIMEOUT = 5000;
- String testcase = "testSafeDataModeTimeout";
+ String testcase = "testSafeDataModeTimeout" + rsGroupId;
try
{
// Create and start a RS expecting clients in safe data assured mode with
// safe data level 2
replicationServer = new FakeReplicationServer(rsGroupId, replServerPort, RS_SERVER_ID,
- 1);
+ 1, testcase);
+ if (rsGroupId != (byte)1)
+ replicationServer.setAssured(false);
replicationServer.start(TIMEOUT_SCENARIO);
+ long startTime = System.currentTimeMillis();
// Create a safe data assured domain
- safeDataDomainCfgEntry = createAssuredDomain(AssuredMode.SAFE_DATA_MODE, 1,
+ if (rsGroupId == (byte)1)
+ {
+ safeDataDomainCfgEntry = createAssuredDomain(AssuredMode.SAFE_DATA_MODE, 1,
TIMEOUT);
- // Wait for connection of domain to RS
- waitForConnectionToRs(testcase, replicationServer);
+ // Wait for connection of domain to RS
+ waitForConnectionToRs(testcase, replicationServer);
- // Make an LDAP update (add an entry)
- long startTime = System.currentTimeMillis(); // Time the update has been initiated
- String entry = "dn: ou=assured-sd-timeout-entry," + SAFE_DATA_DN + "\n" +
+ // Make an LDAP update (add an entry)
+ startTime = System.currentTimeMillis(); // Time the update has been initiated
+ String entry = "dn: ou=assured-sd-timeout-entry" + rsGroupId + "," + SAFE_DATA_DN + "\n" +
+ "objectClass: top\n" +
+ "objectClass: organizationalUnit\n";
+ addEntry(TestCaseUtils.entryFromLdifString(entry));
+ }
+ else
+ {
+ safeDataDomainCfgEntry = createNotAssuredDomain();
+ // Wait for connection of domain to RS
+ waitForConnectionToRs(testcase, replicationServer);
+
+ // Make an LDAP update (add an entry)
+ startTime = System.currentTimeMillis(); // Time the update has been initiated
+ String entry = "dn: ou=assured-sd-timeout-entry" + rsGroupId + "," + NOT_ASSURED_DN + "\n" +
"objectClass: top\n" +
"objectClass: organizationalUnit\n";
- addEntry(TestCaseUtils.entryFromLdifString(entry));
-
+ addEntry(TestCaseUtils.entryFromLdifString(entry));
+ }
long endTime = System.currentTimeMillis();
+ waitForScenarioExecutedOnRs(testcase, replicationServer);
+
if (rsGroupId == (byte)1)
{
// RS has same group id as DS
@@ -934,7 +978,7 @@
// No error should be seen in monitoring and update should have not been
// sent in assured mode
sleep(1000); // Sleep a while as counters are updated just after sending thread is unblocked
- DN baseDn = DN.decode(SAFE_DATA_DN);
+ DN baseDn = DN.decode(NOT_ASSURED_DN);
assertEquals(getMonitorAttrValue(baseDn, "assured-sr-sent-updates"), 0);
assertEquals(getMonitorAttrValue(baseDn, "assured-sr-acknowledged-updates"), 0);
assertEquals(getMonitorAttrValue(baseDn, "assured-sr-not-acknowledged-updates"), 0);
@@ -954,7 +998,7 @@
}
} finally
{
- endTest();
+ endTest(testcase);
}
}
@@ -969,29 +1013,51 @@
{
int TIMEOUT = 5000;
- String testcase = "testSafeReadModeTimeout";
+ String testcase = "testSafeReadModeTimeout" + rsGroupId;;
try
{
// Create and start a RS expecting clients in safe read assured mode
replicationServer = new FakeReplicationServer(rsGroupId, replServerPort, RS_SERVER_ID,
- true);
+ true, testcase);
+ if (rsGroupId != (byte)1)
+ replicationServer.setAssured(false);
replicationServer.start(TIMEOUT_SCENARIO);
- // Create a safe read assured domain
- safeReadDomainCfgEntry = createAssuredDomain(AssuredMode.SAFE_READ_MODE, 0,
- TIMEOUT);
- // Wait for connection of domain to RS
- waitForConnectionToRs(testcase, replicationServer);
+ long startTime = 0;
- // Make an LDAP update (add an entry)
- long startTime = System.currentTimeMillis(); // Time the update has been initiated
- String entry = "dn: ou=assured-sr-timeout-entry," + SAFE_READ_DN + "\n" +
+ // Create a safe data assured domain
+ if (rsGroupId == (byte)1)
+ {
+ // Create a safe read assured domain
+ safeReadDomainCfgEntry = createAssuredDomain(AssuredMode.SAFE_READ_MODE, 0,
+ TIMEOUT);
+ // Wait for connection of domain to RS
+ waitForConnectionToRs(testcase, replicationServer);
+
+ // Make an LDAP update (add an entry)
+ startTime = System.currentTimeMillis(); // Time the update has been initiated
+ String entry = "dn: ou=assured-sr-timeout-entry" + rsGroupId + "," + SAFE_READ_DN + "\n" +
"objectClass: top\n" +
"objectClass: organizationalUnit\n";
- addEntry(TestCaseUtils.entryFromLdifString(entry));
+ addEntry(TestCaseUtils.entryFromLdifString(entry));
+ }
+ else
+ {
+ safeReadDomainCfgEntry = createNotAssuredDomain();
+ // Wait for connection of domain to RS
+ waitForConnectionToRs(testcase, replicationServer);
+ // Make an LDAP update (add an entry)
+ startTime = System.currentTimeMillis(); // Time the update has been initiated
+ String entry = "dn: ou=assured-sr-timeout-entry" + rsGroupId + "," + NOT_ASSURED_DN + "\n" +
+ "objectClass: top\n" +
+ "objectClass: organizationalUnit\n";
+ addEntry(TestCaseUtils.entryFromLdifString(entry));
+ }
long endTime = System.currentTimeMillis();
+ waitForScenarioExecutedOnRs(testcase, replicationServer);
+
if (rsGroupId == (byte)1)
{
// RS has same group id as DS
@@ -1033,7 +1099,7 @@
// No error should be seen in monitoring and update should have not been
// sent in assured mode
sleep(1000); // Sleep a while as counters are updated just after sending thread is unblocked
- DN baseDn = DN.decode(SAFE_READ_DN);
+ DN baseDn = DN.decode(NOT_ASSURED_DN);
assertEquals(getMonitorAttrValue(baseDn, "assured-sr-sent-updates"), 0);
assertEquals(getMonitorAttrValue(baseDn, "assured-sr-acknowledged-updates"), 0);
assertEquals(getMonitorAttrValue(baseDn, "assured-sr-not-acknowledged-updates"), 0);
@@ -1048,12 +1114,12 @@
assertEquals(getMonitorAttrValue(baseDn, "assured-sd-sent-updates"), 0);
assertEquals(getMonitorAttrValue(baseDn, "assured-sd-acknowledged-updates"), 0);
assertEquals(getMonitorAttrValue(baseDn, "assured-sd-timeout-updates"), 0);
- errorsByServer = getErrorsByServers(baseDn, AssuredMode.SAFE_DATA_MODE);
+ errorsByServer = getErrorsByServers(baseDn, AssuredMode.SAFE_READ_MODE);
assertTrue(errorsByServer.isEmpty());
}
} finally
{
- endTest();
+ endTest(testcase);
}
}
@@ -1070,7 +1136,7 @@
{
// Create and start a RS expecting not assured clients
replicationServer = new FakeReplicationServer((byte)1, replServerPort, RS_SERVER_ID,
- false);
+ false, testcase);
replicationServer.start(NOT_ASSURED_SCENARIO);
// Create a not assured domain
@@ -1090,7 +1156,7 @@
// No more test to do here
} finally
{
- endTest();
+ endTest(testcase);
}
}
@@ -1126,8 +1192,9 @@
} while (!rs.isScenarioExecuted());
}
- private void endTest()
+ private void endTest(String testcase)
{
+ debugInfo("Ending test " + testcase);
if (replicationServer != null)
{
replicationServer.shutdown();
@@ -1164,7 +1231,7 @@
// Create and start a RS expecting clients in safe data assured mode with
// safe data level 2
replicationServer = new FakeReplicationServer((byte)1, replServerPort, RS_SERVER_ID,
- 2);
+ 2, testcase);
replicationServer.start(NO_TIMEOUT_SCENARIO);
// Create a safe data assured domain
@@ -1210,7 +1277,7 @@
} finally
{
- endTest();
+ endTest(testcase);
}
}
@@ -1228,7 +1295,7 @@
{
// Create and start a RS expecting clients in safe read assured mode
replicationServer = new FakeReplicationServer((byte)1, replServerPort, RS_SERVER_ID,
- true);
+ true, testcase);
replicationServer.start(NO_TIMEOUT_SCENARIO);
// Create a safe read assured domain
@@ -1274,7 +1341,7 @@
} finally
{
- endTest();
+ endTest(testcase);
}
}
@@ -1292,7 +1359,7 @@
{
// Create and start a RS expecting clients in safe read assured mode
replicationServer = new FakeReplicationServer(rsGroupId, replServerPort, RS_SERVER_ID,
- true);
+ true, testcase);
replicationServer.start(NO_READ);
// Create a safe read assured domain
@@ -1374,7 +1441,7 @@
// assertEquals((integer)failedServers.get(0), (integer)1);
} finally
{
- endTest();
+ endTest(testcase);
}
}
@@ -1392,7 +1459,7 @@
{
// Create and start a RS expecting clients in safe data assured mode
replicationServer = new FakeReplicationServer(rsGroupId, replServerPort, RS_SERVER_ID,
- 4);
+ 4, testcase);
replicationServer.start(NO_READ);
// Create a safe data assured domain
@@ -1423,7 +1490,7 @@
ackMsg);
} finally
{
- endTest();
+ endTest(testcase);
}
}
@@ -1442,7 +1509,7 @@
// Create and start a RS expecting clients in safe data assured mode with
// safe data level 3
replicationServer = new FakeReplicationServer((byte)1, replServerPort, RS_SERVER_ID,
- 3);
+ 3, testcase);
replicationServer.start(SAFE_DATA_MANY_ERRORS);
// Create a safe data assured domain
@@ -1579,7 +1646,7 @@
} finally
{
- endTest();
+ endTest(testcase);
}
}
@@ -1597,7 +1664,7 @@
{
// Create and start a RS expecting clients in safe read assured mode
replicationServer = new FakeReplicationServer((byte)1, replServerPort, RS_SERVER_ID,
- true);
+ true, testcase);
replicationServer.start(SAFE_READ_MANY_ERRORS);
// Create a safe read assured domain
@@ -1743,7 +1810,7 @@
} finally
{
- endTest();
+ endTest(testcase);
}
}
@@ -1758,6 +1825,7 @@
nextMessageID(), null, realDn);
delOp.setInternalOperation(true);
delOp.run();
+ waitOpResult(delOp, ResultCode.SUCCESS);
assertNull(DirectoryServer.getEntry(realDn));
}
@@ -1841,5 +1909,19 @@
return resultMap;
}
+ private void waitOpResult(AbstractOperation operation,
+ ResultCode expectedResult)
+ {
+ int ii=0;
+ while((operation.getResultCode()==ResultCode.UNDEFINED) ||
+ (operation.getResultCode()!=expectedResult))
+ {
+ sleep(50);
+ ii++;
+ if (ii>10)
+ assertEquals(operation.getResultCode(), expectedResult,
+ operation.getErrorMessage().toString());
+ }
+ }
}
--
Gitblit v1.10.0