From af5bb34cefe037646187950233e48f1797d97177 Mon Sep 17 00:00:00 2001
From: ludovicp <ludovicp@localhost>
Date: Tue, 15 Jun 2010 14:57:50 +0000
Subject: [PATCH] Add unit-tests for the Permissive Modify control
---
opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/core/ModifyOperationTestCase.java | 167 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 166 insertions(+), 1 deletions(-)
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/core/ModifyOperationTestCase.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/core/ModifyOperationTestCase.java
index 01fcd5e..0095722 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/core/ModifyOperationTestCase.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/core/ModifyOperationTestCase.java
@@ -22,7 +22,7 @@
* CDDL HEADER END
*
*
- * Copyright 2006-2009 Sun Microsystems, Inc.
+ * Copyright 2006-2010 Sun Microsystems, Inc.
*/
package org.opends.server.core;
@@ -54,9 +54,11 @@
import org.opends.server.protocols.ldap.LDAPMessage;
import org.opends.server.protocols.ldap.LDAPModification;
import org.opends.server.protocols.ldap.LDAPFilter;
+import org.opends.server.protocols.ldap.LDAPControl;
import org.opends.server.tools.LDAPModify;
import org.opends.server.tools.LDAPWriter;
import org.opends.server.types.*;
+import org.opends.server.util.ServerConstants;
import org.opends.server.workflowelement.localbackend.LocalBackendModifyOperation;
import static org.testng.Assert.*;
@@ -4612,5 +4614,168 @@
assertFalse(DirectoryServer.getEntry(DN.decode("o=test")).hasAttribute(
DirectoryServer.getAttributeType("description", true)));
}
+
+
+ /**
+ * Tests modify operation with the Permissive Modify control.
+ */
+
+ /**
+ * Test to ensure that a modify operation with the Permissive Modify control
+ * succeeds when an attempt is made to add a value that matches one
+ * that already exists.
+ *
+ * @throws Exception If an unexpected problem occurs.
+ */
+ @Test(dataProvider = "baseDNs")
+ public void testSuccessPermissiveModifyControlAddDuplicateValue(String baseDN)
+ throws Exception
+ {
+ TestCaseUtils.clearJEBackend(true,"userRoot",baseDN);
+
+ Entry entry = TestCaseUtils.makeEntry(
+ "dn: uid=test.user," + baseDN,
+ "objectClass: top",
+ "objectClass: person",
+ "objectClass: organizationalPerson",
+ "objectClass: inetOrgPerson",
+ "uid: test.user",
+ "givenName: Test",
+ "sn: User",
+ "cn: Test User",
+ "displayName: Test User",
+ "userPassword: password");
+
+ InternalClientConnection conn =
+ InternalClientConnection.getRootConnection();
+
+ AddOperation addOperation =
+ conn.processAdd(entry.getDN(), entry.getObjectClasses(),
+ entry.getUserAttributes(),
+ entry.getOperationalAttributes());
+ assertEquals(addOperation.getResultCode(), ResultCode.SUCCESS);
+
+ ArrayList<ByteString> values = new ArrayList<ByteString>();
+ values.add(ByteString.valueOf("Test"));
+ LDAPAttribute attr = new LDAPAttribute("givenName", values);
+
+ ArrayList<RawModification> mods = new ArrayList<RawModification>();
+ mods.add(new LDAPModification(ModificationType.ADD, attr));
+
+ ArrayList<Control> requestControls = new ArrayList<Control>();
+ requestControls.add(
+ new LDAPControl(ServerConstants.OID_PERMISSIVE_MODIFY_CONTROL, false));
+
+ ModifyOperation modifyOperation =
+ conn.processModify(ByteString.valueOf("uid=test.user," + baseDN),
+ mods,
+ requestControls);
+ assertTrue(modifyOperation.getResultCode() == ResultCode.SUCCESS);
+ retrieveSuccessfulOperationElements(modifyOperation);
+ }
+
+ /**
+ * Test to ensure that a modify operation with the Permissive Modify control
+ * succeeds when an attempt is made to delete a non existent value.
+ *
+ * @throws Exception If an unexpected problem occurs.
+ */
+ @Test(dataProvider = "baseDNs")
+ public void testSuccessPermissiveModifyControlRemoveNonExistentValue(String baseDN)
+ throws Exception
+ {
+ TestCaseUtils.clearJEBackend(true,"userRoot",baseDN);
+
+ Entry entry = TestCaseUtils.makeEntry(
+ "dn: uid=test.user," + baseDN,
+ "objectClass: top",
+ "objectClass: person",
+ "objectClass: organizationalPerson",
+ "objectClass: inetOrgPerson",
+ "uid: test.user",
+ "givenName: Test",
+ "sn: User",
+ "cn: Test User",
+ "displayName: Test User",
+ "userPassword: password");
+
+ InternalClientConnection conn =
+ InternalClientConnection.getRootConnection();
+
+ AddOperation addOperation =
+ conn.processAdd(entry.getDN(), entry.getObjectClasses(),
+ entry.getUserAttributes(),
+ entry.getOperationalAttributes());
+ assertEquals(addOperation.getResultCode(), ResultCode.SUCCESS);
+
+ ArrayList<ByteString> values = new ArrayList<ByteString>();
+ values.add(ByteString.valueOf("Foo"));
+ LDAPAttribute attr = new LDAPAttribute("givenName", values);
+
+ ArrayList<RawModification> mods = new ArrayList<RawModification>();
+ mods.add(new LDAPModification(ModificationType.DELETE, attr));
+
+ ArrayList<Control> requestControls = new ArrayList<Control>();
+ requestControls.add(
+ new LDAPControl(ServerConstants.OID_PERMISSIVE_MODIFY_CONTROL, false));
+
+ ModifyOperation modifyOperation =
+ conn.processModify(ByteString.valueOf("uid=test.user," + baseDN),
+ mods,
+ requestControls);
+ assertTrue(modifyOperation.getResultCode() == ResultCode.SUCCESS);
+ retrieveSuccessfulOperationElements(modifyOperation);
+ }
+
+ /**
+ * Test to ensure that a modify operation with the Permissive Modify control
+ * succeeds when an attempt is made to delete a non existent attribute.
+ *
+ * @throws Exception If an unexpected problem occurs.
+ */
+ @Test(dataProvider = "baseDNs")
+ public void testSuccessPermissiveModifyControlRemoveNonExistentAttribute(String baseDN)
+ throws Exception
+ {
+ TestCaseUtils.clearJEBackend(true,"userRoot",baseDN);
+
+ Entry entry = TestCaseUtils.makeEntry(
+ "dn: uid=test.user," + baseDN,
+ "objectClass: top",
+ "objectClass: person",
+ "objectClass: organizationalPerson",
+ "objectClass: inetOrgPerson",
+ "uid: test.user",
+ "givenName: Test",
+ "sn: User",
+ "cn: Test User",
+ "displayName: Test User",
+ "userPassword: password");
+
+ InternalClientConnection conn =
+ InternalClientConnection.getRootConnection();
+
+ AddOperation addOperation =
+ conn.processAdd(entry.getDN(), entry.getObjectClasses(),
+ entry.getUserAttributes(),
+ entry.getOperationalAttributes());
+ assertEquals(addOperation.getResultCode(), ResultCode.SUCCESS);
+
+ LDAPAttribute attr = new LDAPAttribute("displayName");
+ ArrayList<RawModification> mods = new ArrayList<RawModification>();
+ mods.add(new LDAPModification(ModificationType.DELETE, attr));
+
+ ArrayList<Control> requestControls = new ArrayList<Control>();
+ requestControls.add(
+ new LDAPControl(ServerConstants.OID_PERMISSIVE_MODIFY_CONTROL, false));
+
+ ModifyOperation modifyOperation =
+ conn.processModify(ByteString.valueOf("uid=test.user," + baseDN),
+ mods,
+ requestControls);
+ assertTrue(modifyOperation.getResultCode() == ResultCode.SUCCESS);
+ retrieveSuccessfulOperationElements(modifyOperation);
+ }
+
}
--
Gitblit v1.10.0