From 3360705577c8bb82d31e593cc5890aebeca063c1 Mon Sep 17 00:00:00 2001
From: matthew_swift <matthew_swift@localhost>
Date: Wed, 05 Sep 2007 22:57:40 +0000
Subject: [PATCH] Improvements to the server-side constraint violation APIs. Now there are just two server-side constraint enforcement call-backs: isUsable and isDeleteAllowed. The first is invoked whenever a managed object is decoded (except in the case where it's about to be deleted). The second is invoked whenever a managed object is about to be deleted. With this change we will now detect constraint violations during server initialization, not just when config change/add/delete events occur.
---
opends/tests/unit-tests-testng/src/server/org/opends/server/admin/server/ConstraintTest.java | 90 +++++++++++++++++++++++++++++++++++++++-----
1 files changed, 79 insertions(+), 11 deletions(-)
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/admin/server/ConstraintTest.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/admin/server/ConstraintTest.java
index a234ff8..0f2e835 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/server/admin/server/ConstraintTest.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/admin/server/ConstraintTest.java
@@ -38,6 +38,7 @@
import org.opends.server.admin.AdminTestCase;
import org.opends.server.admin.TestCfg;
import org.opends.server.admin.TestChildCfg;
+import org.opends.server.admin.TestChildCfgDefn;
import org.opends.server.admin.TestParentCfg;
import org.opends.server.admin.client.ldap.JNDIDirContextAdaptor;
import org.opends.server.admin.std.server.RootCfg;
@@ -60,8 +61,7 @@
public final class ConstraintTest extends AdminTestCase {
// Child DN.
- private static final String TEST_CHILD_1_DN =
- "cn=test child 1,cn=test children,cn=test parent 1,cn=test parents,cn=config";
+ private static final String TEST_CHILD_1_DN = "cn=test child 1,cn=test children,cn=test parent 1,cn=test parents,cn=config";
@@ -226,6 +226,75 @@
/**
+ * Tests that retrieval can succeed.
+ *
+ * @throws Exception
+ * If the test unexpectedly fails.
+ */
+ @Test
+ public void testGetManagedObjectSuccess() throws Exception {
+ MockConstraint constraint = new MockConstraint(true, false);
+
+ try {
+ TestCaseUtils.addEntry(TEST_CHILD_1);
+ TestCfg.addConstraint(constraint);
+
+ TestParentCfg parent = getParent("test parent 1");
+ parent.getTestChild("test child 1");
+ } finally {
+ TestCfg.removeConstraint(constraint);
+
+ try {
+ deleteSubtree(TEST_CHILD_1_DN);
+ } catch (Exception e) {
+ // Do nothing.
+ }
+ }
+ }
+
+
+
+ /**
+ * Tests that retrieval can fail.
+ *
+ * @throws Exception
+ * If the test unexpectedly fails.
+ */
+ @Test
+ public void testGetManagedObjectFail() throws Exception {
+ MockConstraint constraint = new MockConstraint(false, true);
+
+ try {
+ TestCaseUtils.addEntry(TEST_CHILD_1);
+ TestCfg.addConstraint(constraint);
+
+ TestParentCfg parent = getParent("test parent 1");
+ parent.getTestChild("test child 1");
+ } catch (ConfigException e) {
+ Throwable cause = e.getCause();
+ if (cause instanceof ConstraintViolationException) {
+ ConstraintViolationException cve = (ConstraintViolationException) cause;
+ Assert.assertEquals(cve.getMessages().size(), 1);
+ Assert.assertSame(cve.getManagedObject().getManagedObjectDefinition(),
+ TestChildCfgDefn.getInstance());
+ } else {
+ // Wrong cause.
+ throw e;
+ }
+ } finally {
+ TestCfg.removeConstraint(constraint);
+
+ try {
+ deleteSubtree(TEST_CHILD_1_DN);
+ } catch (Exception e) {
+ // Do nothing.
+ }
+ }
+ }
+
+
+
+ /**
* Tests that an add constraint can succeed.
*
* @throws Exception
@@ -237,7 +306,7 @@
AddListener listener = new AddListener();
parent.addTestChildAddListener(listener);
- MockConstraint constraint = new MockConstraint(true, false, false);
+ MockConstraint constraint = new MockConstraint(true, false);
TestCfg.addConstraint(constraint);
try {
@@ -271,7 +340,7 @@
AddListener listener = new AddListener();
parent.addTestChildAddListener(listener);
- MockConstraint constraint = new MockConstraint(false, true, true);
+ MockConstraint constraint = new MockConstraint(false, true);
TestCfg.addConstraint(constraint);
try {
@@ -305,7 +374,7 @@
DeleteListener listener = new DeleteListener();
parent.addTestChildDeleteListener(listener);
- MockConstraint constraint = new MockConstraint(false, false, true);
+ MockConstraint constraint = new MockConstraint(false, true);
TestCfg.addConstraint(constraint);
try {
@@ -341,7 +410,7 @@
DeleteListener listener = new DeleteListener();
parent.addTestChildDeleteListener(listener);
- MockConstraint constraint = new MockConstraint(true, true, false);
+ MockConstraint constraint = new MockConstraint(true, false);
TestCfg.addConstraint(constraint);
try {
@@ -381,14 +450,14 @@
public void testChangeConstraintSuccess() throws Exception {
TestParentCfg parent = getParent("test parent 1");
- MockConstraint constraint = new MockConstraint(false, true, false);
- TestCfg.addConstraint(constraint);
+ MockConstraint constraint = new MockConstraint(true, false);
try {
// Add the entry.
TestCaseUtils.addEntry(TEST_CHILD_1);
TestChildCfg child = parent.getTestChild("test child 1");
+ TestCfg.addConstraint(constraint);
ChangeListener listener = new ChangeListener();
child.addChangeListener(listener);
@@ -428,15 +497,14 @@
@Test
public void testChangeConstraintFail() throws Exception {
TestParentCfg parent = getParent("test parent 1");
-
- MockConstraint constraint = new MockConstraint(true, false, true);
- TestCfg.addConstraint(constraint);
+ MockConstraint constraint = new MockConstraint(false, true);
try {
// Add the entry.
TestCaseUtils.addEntry(TEST_CHILD_1);
TestChildCfg child = parent.getTestChild("test child 1");
+ TestCfg.addConstraint(constraint);
ChangeListener listener = new ChangeListener();
child.addChangeListener(listener);
--
Gitblit v1.10.0