From 28215a00c6a6c49ab982f51dee97d501ce954ad3 Mon Sep 17 00:00:00 2001
From: Jean-Noël Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Thu, 10 Sep 2015 13:54:09 +0000
Subject: [PATCH] Fixed random tests
---
opendj-server-legacy/src/test/java/org/opends/server/replication/SchemaReplicationTest.java | 193 ++++++++++++++++++++++++------------------------
1 files changed, 96 insertions(+), 97 deletions(-)
diff --git a/opendj-server-legacy/src/test/java/org/opends/server/replication/SchemaReplicationTest.java b/opendj-server-legacy/src/test/java/org/opends/server/replication/SchemaReplicationTest.java
index f3122be..70c23a9 100644
--- a/opendj-server-legacy/src/test/java/org/opends/server/replication/SchemaReplicationTest.java
+++ b/opendj-server-legacy/src/test/java/org/opends/server/replication/SchemaReplicationTest.java
@@ -28,15 +28,18 @@
import java.io.File;
import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.net.SocketTimeoutException;
import java.util.ArrayList;
import java.util.List;
+import java.util.concurrent.Callable;
import org.assertj.core.api.Assertions;
import org.forgerock.i18n.LocalizableMessage;
import org.forgerock.i18n.slf4j.LocalizedLogger;
-import org.forgerock.opendj.ldap.ModificationType;
+import org.forgerock.opendj.ldap.ResultCode;
import org.opends.server.TestCaseUtils;
-import org.opends.server.admin.std.server.SynchronizationProviderCfg;
import org.opends.server.api.SynchronizationProvider;
import org.opends.server.core.DirectoryServer;
import org.opends.server.core.ModifyOperation;
@@ -46,30 +49,34 @@
import org.opends.server.replication.protocol.ModifyMsg;
import org.opends.server.replication.protocol.ReplicationMsg;
import org.opends.server.replication.service.ReplicationBroker;
-import org.opends.server.types.*;
-import org.forgerock.opendj.ldap.ResultCode;
+import org.opends.server.types.Attribute;
+import org.opends.server.types.Attributes;
+import org.opends.server.types.DN;
+import org.opends.server.types.Modification;
+import org.opends.server.types.Operation;
+import org.opends.server.types.RawModification;
+import org.opends.server.util.TestTimer;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
+import static java.util.concurrent.TimeUnit.*;
+
+import static org.forgerock.opendj.ldap.ModificationType.*;
+import static org.opends.server.core.DirectoryServer.*;
+import static org.opends.server.util.CollectionUtils.*;
import static org.testng.Assert.*;
-/**
- * Test for the schema replication.
- */
+/** Test for the schema replication. */
@SuppressWarnings("javadoc")
public class SchemaReplicationTest extends ReplicationTestCase
{
-
private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass();
-
private List<Modification> rcvdMods;
private int replServerPort;
- /**
- * Set up the environment for performing the tests in this Class.
- */
+ /** Set up the environment for performing the tests in this Class. */
@Override
@BeforeClass
public void setUp() throws Exception
@@ -107,10 +114,7 @@
configureReplication(replServerLdif, domainLdif);
}
- /**
- * Checks that changes done to the schema are pushed to the replicationServer
- * clients.
- */
+ /** Checks that changes done to the schema are pushed to the replicationServer clients. */
@Test
public void pushSchemaChange() throws Exception
{
@@ -128,45 +132,18 @@
// Modify the schema
Attribute attr = Attributes.create("attributetypes",
"( 2.5.44.77.33 NAME 'dummy' )");
- List<Modification> mods = new ArrayList<>();
- Modification mod = new Modification(ModificationType.ADD, attr);
- mods.add(mod);
- ModifyOperation modOp = connection.processModify(baseDN, mods);
- assertEquals(modOp.getResultCode(), ResultCode.SUCCESS,
- "The original operation failed");
+ Modification mod = new Modification(ADD, attr);
+ processModify(baseDN, mod);
// See if the client has received the msg
- ReplicationMsg msg = broker.receive();
- Assertions.assertThat(msg).isInstanceOf(ModifyMsg.class);
- ModifyMsg modMsg = (ModifyMsg) msg;
+ ModifyMsg modMsg = receiveModifyMsg(broker);
+ assertModReceived(mod, baseDN, modMsg);
- Operation receivedOp = modMsg.createOperation(connection);
- assertEquals(modMsg.getDN(), baseDN, "The received message is not for cn=schema");
- Assertions.assertThat(receivedOp).isInstanceOf(ModifyOperation.class);
- ModifyOperation receivedModifyOperation = (ModifyOperation) receivedOp;
-
- this.rcvdMods = new ArrayList<>();
- for (RawModification m : receivedModifyOperation.getRawModifications())
- {
- this.rcvdMods.add(m.toModification());
- }
-
- assertTrue(this.rcvdMods.contains(mod),
- "The received mod does not contain the original change");
-
- /*
- * Now cleanup the schema for the next test
- */
- mod = new Modification(ModificationType.DELETE, attr);
- mods.clear();
- mods.add(mod);
- modOp = connection.processModify(baseDN, mods);
- assertEquals(modOp.getResultCode(), ResultCode.SUCCESS,
- "The original operation failed");
+ /* Now cleanup the schema for the next test */
+ processModify(baseDN, new Modification(DELETE, attr));
// See if the client has received the msg
- msg = broker.receive();
- Assertions.assertThat(msg).isInstanceOf(ModifyMsg.class);
+ receiveModifyMsg(broker);
}
finally
{
@@ -174,6 +151,12 @@
}
}
+ private void processModify(final DN baseDN, Modification mod)
+ {
+ ModifyOperation modOp = connection.processModify(baseDN, newArrayList(mod));
+ assertEquals(modOp.getResultCode(), ResultCode.SUCCESS);
+ }
+
/**
* Checks that changes to the schema pushed to the replicationServer
* are received and correctly replayed by replication plugin.
@@ -198,10 +181,8 @@
EntryHistorical.getEntryUUID(DirectoryServer.getEntry(baseDN)));
broker.publish(modMsg);
- boolean found = checkEntryHasAttribute(baseDN, "attributetypes",
- "( 2.5.44.77.33 NAME 'dummy' )",
- 10000, true);
- assertTrue(found, "The modification has not been correctly replayed.");
+ checkEntryHasAttributeValue(baseDN, "attributetypes", "( 2.5.44.77.33 NAME 'dummy' )", 10,
+ "The modification has not been correctly replayed.");
}
finally
{
@@ -231,73 +212,91 @@
// create a schema change Notification
Attribute attr = Attributes.create("attributetypes",
"( 2.5.44.76.35 NAME 'push' )");
- List<Modification> mods = new ArrayList<>();
- Modification mod = new Modification(ModificationType.ADD, attr);
- mods.add(mod);
+ Modification mod = new Modification(ADD, attr);
+ List<Modification> mods = newArrayList(mod);
- for (SynchronizationProvider<SynchronizationProviderCfg> provider : DirectoryServer.
- getSynchronizationProviders())
+ for (SynchronizationProvider<?> provider : getSynchronizationProviders())
{
provider.processSchemaChange(mods);
}
// receive the message on the broker side.
- ReplicationMsg msg = broker.receive();
- Assertions.assertThat(msg).isInstanceOf(ModifyMsg.class);
- ModifyMsg modMsg = (ModifyMsg) msg;
-
- Operation receivedOp = modMsg.createOperation(connection);
- assertEquals(modMsg.getDN(), baseDN, "The received message is not for cn=schema");
- Assertions.assertThat(receivedOp).isInstanceOf(ModifyOperation.class);
- ModifyOperation receivedModifyOperation = (ModifyOperation) receivedOp;
-
- this.rcvdMods = new ArrayList<>();
- for (RawModification m : receivedModifyOperation.getRawModifications())
- {
- this.rcvdMods.add(m.toModification());
- }
-
- assertTrue(this.rcvdMods.contains(mod),
- "The received mod does not contain the original change");
+ ModifyMsg modMsg = receiveModifyMsg(broker);
+ assertModReceived(mod, baseDN, modMsg);
// check that the schema files were updated with the new ServerState.
// by checking that the CSN of msg we just received has been
// added to the user schema file.
// build the string to find in the schema file
- String stateStr = modMsg.getCSN().toString();
+ final String stateStr = modMsg.getCSN().toString();
// open the schema file
- String buildRoot = System.getProperty(TestCaseUtils.PROPERTY_BUILD_ROOT);
- String buildDir = System.getProperty(TestCaseUtils.PROPERTY_BUILD_DIR,
- buildRoot + File.separator + "build");
- String path = buildDir + File.separator +
- "unit-tests" + File.separator + "package-instance" + File.separator +
- "config" + File.separator + "schema" + File.separator +
- "99-user.ldif";
+ final File schemaFile = getSchemaFile();
// it is necessary to loop on this check because the state is not
// written immediately but only every so often.
- int count = 0;
- while (true)
+ TestTimer timer = new TestTimer.Builder()
+ .maxSleep(5, SECONDS)
+ .sleepTimes(100, MILLISECONDS)
+ .toTimer();
+ timer.repeatUntilSuccess(new Callable<Void>()
{
- File file = new File(path);
- FileInputStream input = new FileInputStream(file);
- byte[] bytes = new byte[input.available()];
- input.read(bytes);
- String fileStr = new String(bytes);
- if (fileStr.contains(stateStr))
+ @Override
+ public Void call() throws Exception
{
- break;
+ String fileStr = readAsString(schemaFile);
+ assertTrue(fileStr.contains(stateStr), "The Schema persistentState (CSN:" + stateStr
+ + ") has not been saved to " + schemaFile + " : " + fileStr);
+ return null;
}
- assertTrue(count++ <= 50, "The Schema persistentState (CSN:" + stateStr
- + ") has not been saved to " + path + " : " + fileStr);
- TestCaseUtils.sleep(100);
- }
+ });
} finally
{
broker.stop();
}
logger.error(LocalizableMessage.raw("Ending replication test : pushSchemaFilesChange "));
}
+
+ private File getSchemaFile()
+ {
+ String sep = File.separator;
+ String buildRoot = System.getProperty(TestCaseUtils.PROPERTY_BUILD_ROOT);
+ String buildDir = System.getProperty(TestCaseUtils.PROPERTY_BUILD_DIR, buildRoot + sep + "target");
+ final String path = buildDir + sep
+ + "unit-tests" + sep + "package-instance" + sep + "config" + sep + "schema" + sep + "99-user.ldif";
+ return new File(path);
+ }
+
+ private ModifyMsg receiveModifyMsg(ReplicationBroker broker) throws SocketTimeoutException
+ {
+ ReplicationMsg msg = broker.receive();
+ Assertions.assertThat(msg).isInstanceOf(ModifyMsg.class);
+ return (ModifyMsg) msg;
+ }
+
+ private void assertModReceived(Modification mod, final DN baseDN, ModifyMsg modMsg) throws Exception
+ {
+ Operation receivedOp = modMsg.createOperation(connection);
+ assertEquals(modMsg.getDN(), baseDN, "The received message is not for cn=schema");
+ Assertions.assertThat(receivedOp).isInstanceOf(ModifyOperation.class);
+ ModifyOperation receivedModifyOperation = (ModifyOperation) receivedOp;
+
+ this.rcvdMods = new ArrayList<>();
+ for (RawModification m : receivedModifyOperation.getRawModifications())
+ {
+ this.rcvdMods.add(m.toModification());
+ }
+ Assertions.assertThat(this.rcvdMods)
+ .as("The received mod does not contain the original change")
+ .contains(mod);
+ }
+
+ private String readAsString(File file) throws FileNotFoundException, IOException
+ {
+ FileInputStream input = new FileInputStream(file);
+ byte[] bytes = new byte[input.available()];
+ input.read(bytes);
+ return new String(bytes);
+ }
}
--
Gitblit v1.10.0