From 738bf70d921471e9fce48fe37fcc15d951081253 Mon Sep 17 00:00:00 2001
From: matthew_swift <matthew_swift@localhost>
Date: Thu, 19 Jul 2007 08:55:15 +0000
Subject: [PATCH] Add support for deregistering relations from managed object definitions and use it in unit tests for better cleanup after tests have completed (previously admin framework unit tests were leaving mock relations registered with the root configuration).

---
 opends/src/server/org/opends/server/admin/AbstractManagedObjectDefinition.java                    |   19 ++++++
 opends/tests/unit-tests-testng/src/server/org/opends/server/admin/MockLDAPProfile.java            |    6 +-
 opends/tests/unit-tests-testng/src/server/org/opends/server/admin/server/ListenerTest.java        |   13 ++--
 opends/tests/unit-tests-testng/src/server/org/opends/server/admin/server/DefaultBehaviorTest.java |    3 
 opends/tests/unit-tests-testng/src/server/org/opends/server/admin/server/DNBuilderTest.java       |    7 +-
 opends/tests/unit-tests-testng/src/server/org/opends/server/admin/TestCfg.java                    |   68 +++++++++++++++++++---
 opends/tests/unit-tests-testng/src/server/org/opends/server/admin/client/ldap/LDAPClientTest.java |   16 ++---
 7 files changed, 101 insertions(+), 31 deletions(-)

diff --git a/opends/src/server/org/opends/server/admin/AbstractManagedObjectDefinition.java b/opends/src/server/org/opends/server/admin/AbstractManagedObjectDefinition.java
index 81853cc..d6795e6 100644
--- a/opends/src/server/org/opends/server/admin/AbstractManagedObjectDefinition.java
+++ b/opends/src/server/org/opends/server/admin/AbstractManagedObjectDefinition.java
@@ -633,6 +633,25 @@
 
 
   /**
+   * Deregister a relation definition from the managed object
+   * definition.
+   * <p>
+   * This method <b>must not</b> be called by applications and is
+   * only intended for internal testing.
+   *
+   * @param d
+   *          The relation definition to be deregistered.
+   */
+  protected final void deregisterRelationDefinition(RelationDefinition d) {
+    String name = d.getName();
+
+    relationDefinitions.remove(name);
+    allRelationDefinitions.remove(name);
+  }
+
+
+
+  /**
    * Register a property definition with the managed object definition,
    * overriding any existing property definition with the same name.
    * <p>
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/admin/MockLDAPProfile.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/admin/MockLDAPProfile.java
index a46b778..7fa2c05 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/server/admin/MockLDAPProfile.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/admin/MockLDAPProfile.java
@@ -96,7 +96,7 @@
   @Override
   public String getInstantiableRelationChildRDNType(
       InstantiableRelationDefinition<?, ?> r) {
-    if (r == TestCfg.RD_TEST_ONE_TO_MANY_PARENT
+    if (r == TestCfg.getTestOneToManyParentRelationDefinition()
         || r == TestParentCfgDefn.getInstance()
             .getTestChildrenRelationDefinition()) {
       return "cn";
@@ -129,9 +129,9 @@
    */
   @Override
   public String getRelationRDNSequence(RelationDefinition<?, ?> r) {
-    if (r == TestCfg.RD_TEST_ONE_TO_MANY_PARENT) {
+    if (r == TestCfg.getTestOneToManyParentRelationDefinition()) {
       return "cn=test parents,cn=config";
-    } else if (r == TestCfg.RD_TEST_ONE_TO_ZERO_OR_ONE_PARENT) {
+    } else if (r == TestCfg.getTestOneToZeroOrOneParentRelationDefinition()) {
       return "cn=optional test parent,cn=config";
     } else if (r == TestParentCfgDefn.getInstance()
         .getTestChildrenRelationDefinition()) {
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/admin/TestCfg.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/admin/TestCfg.java
index b4226f9..61587d0 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/server/admin/TestCfg.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/admin/TestCfg.java
@@ -37,30 +37,23 @@
  */
 public final class TestCfg {
 
-  // Prevent instantiation.
-  private TestCfg() {
-    // No implementation required.
-  }
-
   /**
    * A one-to-many relation between the root and test-parent
    * components.
    */
-  public static final InstantiableRelationDefinition<TestParentCfgClient, TestParentCfg> RD_TEST_ONE_TO_MANY_PARENT;
+  private static final InstantiableRelationDefinition<TestParentCfgClient, TestParentCfg> RD_TEST_ONE_TO_MANY_PARENT;
 
   /**
    * A one-to-zero-or-one relation between the root and a test-parent
    * component.
    */
-  public static final OptionalRelationDefinition<TestParentCfgClient, TestParentCfg> RD_TEST_ONE_TO_ZERO_OR_ONE_PARENT;
+  private static final OptionalRelationDefinition<TestParentCfgClient, TestParentCfg> RD_TEST_ONE_TO_ZERO_OR_ONE_PARENT;
 
   // Create a one-to-many relation for test-parent components.
   static {
     RD_TEST_ONE_TO_MANY_PARENT = new InstantiableRelationDefinition<TestParentCfgClient, TestParentCfg>(
         RootCfgDefn.getInstance(), "test-one-to-many-parent",
         "test-one-to-many-parents", TestParentCfgDefn.getInstance());
-    RootCfgDefn.getInstance().registerRelationDefinition(
-        RD_TEST_ONE_TO_MANY_PARENT);
   }
 
   // Create a one-to-many relation for test-parent components.
@@ -68,8 +61,65 @@
     RD_TEST_ONE_TO_ZERO_OR_ONE_PARENT = new OptionalRelationDefinition<TestParentCfgClient, TestParentCfg>(
         RootCfgDefn.getInstance(), "test-one-to-zero-or-one-parent",
         TestParentCfgDefn.getInstance());
+
+  }
+
+
+
+  /**
+   * Deregisters the test configurations from the administration
+   * framework.
+   */
+  public static void cleanup() {
+    RootCfgDefn.getInstance().deregisterRelationDefinition(
+        RD_TEST_ONE_TO_MANY_PARENT);
+    RootCfgDefn.getInstance().deregisterRelationDefinition(
+        RD_TEST_ONE_TO_MANY_PARENT);
+  }
+
+
+
+  /**
+   * Gets the one-to-many relation between the root and test-parent
+   * components.
+   * <p>
+   * Unit tests which call this method <b>must</b> call
+   * {@link #cleanup()} on completion.
+   *
+   * @return Returns the one-to-many relation between the root and
+   *         test-parent components.
+   */
+  public static InstantiableRelationDefinition<TestParentCfgClient, TestParentCfg> getTestOneToManyParentRelationDefinition() {
+    // Ensure that the relation is registered.
+    RootCfgDefn.getInstance().registerRelationDefinition(
+        RD_TEST_ONE_TO_MANY_PARENT);
+    return RD_TEST_ONE_TO_MANY_PARENT;
+  }
+
+
+
+  /**
+   * Gets the one-to-zero-or-one relation between the root and a
+   * test-parent component.
+   * <p>
+   * Unit tests which call this method <b>must</b> call
+   * {@link #cleanup()} on completion.
+   *
+   * @return Returns the one-to-zero-or-one relation between the root
+   *         and a test-parent component.
+   */
+  public static OptionalRelationDefinition<TestParentCfgClient, TestParentCfg> getTestOneToZeroOrOneParentRelationDefinition() {
+    // Ensure that the relation is registered.
     RootCfgDefn.getInstance().registerRelationDefinition(
         RD_TEST_ONE_TO_ZERO_OR_ONE_PARENT);
+    return RD_TEST_ONE_TO_ZERO_OR_ONE_PARENT;
+  }
+
+
+
+  // Prevent instantiation.
+  private TestCfg() {
+    // No implementation required.
   }
 
 }
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/admin/client/ldap/LDAPClientTest.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/admin/client/ldap/LDAPClientTest.java
index 69f031a..1fb6f8f 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/server/admin/client/ldap/LDAPClientTest.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/admin/client/ldap/LDAPClientTest.java
@@ -45,6 +45,7 @@
 import org.opends.server.admin.ManagedObjectAlreadyExistsException;
 import org.opends.server.admin.ManagedObjectNotFoundException;
 import org.opends.server.admin.MockLDAPProfile;
+import org.opends.server.admin.TestCfg;
 import org.opends.server.admin.TestChildCfgClient;
 import org.opends.server.admin.TestChildCfgDefn;
 import org.opends.server.admin.TestParentCfgClient;
@@ -280,6 +281,7 @@
   @AfterClass
   public void tearDown() {
     LDAPProfile.getInstance().popWrapper();
+    TestCfg.cleanup();
   }
 
 
@@ -814,8 +816,7 @@
       CommunicationException {
     ManagedObject<RootCfgClient> root = context
         .getRootConfigurationManagedObject();
-    return root.createChild(
-        org.opends.server.admin.TestCfg.RD_TEST_ONE_TO_MANY_PARENT,
+    return root.createChild(TestCfg.getTestOneToManyParentRelationDefinition(),
         TestParentCfgDefn.getInstance(), name, null).getConfiguration();
   }
 
@@ -829,9 +830,8 @@
       CommunicationException {
     ManagedObject<RootCfgClient> root = context
         .getRootConfigurationManagedObject();
-    return root.getChild(
-        org.opends.server.admin.TestCfg.RD_TEST_ONE_TO_MANY_PARENT, name)
-        .getConfiguration();
+    return root.getChild(TestCfg.getTestOneToManyParentRelationDefinition(),
+        name).getConfiguration();
   }
 
 
@@ -842,8 +842,7 @@
       CommunicationException {
     ManagedObject<RootCfgClient> root = context
         .getRootConfigurationManagedObject();
-    return root
-        .listChildren(org.opends.server.admin.TestCfg.RD_TEST_ONE_TO_MANY_PARENT);
+    return root.listChildren(TestCfg.getTestOneToManyParentRelationDefinition());
   }
 
 
@@ -855,7 +854,6 @@
       CommunicationException {
     ManagedObject<RootCfgClient> root = context
         .getRootConfigurationManagedObject();
-    root.removeChild(
-        org.opends.server.admin.TestCfg.RD_TEST_ONE_TO_MANY_PARENT, name);
+    root.removeChild(TestCfg.getTestOneToManyParentRelationDefinition(), name);
   }
 }
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/admin/server/DNBuilderTest.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/admin/server/DNBuilderTest.java
index 1f1c6c7..8668350 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/server/admin/server/DNBuilderTest.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/admin/server/DNBuilderTest.java
@@ -78,6 +78,7 @@
   @AfterClass
   public void tearDown() {
     LDAPProfile.getInstance().popWrapper();
+    TestCfg.cleanup();
   }
 
 
@@ -95,7 +96,7 @@
     ManagedObjectPath<? extends ConfigurationClient, ? extends Configuration> path = ManagedObjectPath
         .emptyPath();
 
-    path = path.child(TestCfg.RD_TEST_ONE_TO_MANY_PARENT, "test-parent-1");
+    path = path.child(TestCfg.getTestOneToManyParentRelationDefinition(), "test-parent-1");
     path = path.child(TestParentCfgDefn.getInstance()
         .getTestChildrenRelationDefinition(), "test-child-1");
 
@@ -143,7 +144,7 @@
 
     };
 
-    path = path.child(TestCfg.RD_TEST_ONE_TO_MANY_PARENT, "test-parent-1");
+    path = path.child(TestCfg.getTestOneToManyParentRelationDefinition(), "test-parent-1");
     path = path.child(r2);
 
     // Now serialize it.
@@ -176,7 +177,7 @@
     ManagedObjectPath<? extends ConfigurationClient, ? extends Configuration> path = ManagedObjectPath
         .emptyPath();
 
-    path = path.child(TestCfg.RD_TEST_ONE_TO_MANY_PARENT, "test-parent-1");
+    path = path.child(TestCfg.getTestOneToManyParentRelationDefinition(), "test-parent-1");
     path = path.child(TestParentCfgDefn.getInstance()
         .getOptionalTestChildRelationDefinition());
 
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/admin/server/DefaultBehaviorTest.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/admin/server/DefaultBehaviorTest.java
index b1ff264..d0667ce 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/server/admin/server/DefaultBehaviorTest.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/admin/server/DefaultBehaviorTest.java
@@ -308,6 +308,7 @@
   @AfterClass
   public void tearDown() throws Exception {
     LDAPProfile.getInstance().popWrapper();
+    TestCfg.cleanup();
 
     // Remove test entries.
     deleteSubtree("cn=test parents,cn=config");
@@ -849,7 +850,7 @@
       ConfigException {
     ServerManagementContext ctx = ServerManagementContext.getInstance();
     ServerManagedObject<RootCfg> root = ctx.getRootConfigurationManagedObject();
-    TestParentCfg parent = root.getChild(TestCfg.RD_TEST_ONE_TO_MANY_PARENT,
+    TestParentCfg parent = root.getChild(TestCfg.getTestOneToManyParentRelationDefinition(),
         name).getConfiguration();
     return parent;
   }
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/admin/server/ListenerTest.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/admin/server/ListenerTest.java
index 17f6659..f9e4c6a 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/server/admin/server/ListenerTest.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/admin/server/ListenerTest.java
@@ -135,6 +135,7 @@
   @AfterClass
   public void tearDown() {
     LDAPProfile.getInstance().popWrapper();
+    TestCfg.cleanup();
   }
 
 
@@ -152,7 +153,7 @@
     ServerManagementContext ctx = ServerManagementContext.getInstance();
     ServerManagedObject<RootCfg> root = ctx.getRootConfigurationManagedObject();
     ConfigurationAddListener<TestParentCfg> listener = new TestParentAddListener();
-    root.registerAddListener(TestCfg.RD_TEST_ONE_TO_MANY_PARENT, listener);
+    root.registerAddListener(TestCfg.getTestOneToManyParentRelationDefinition(), listener);
 
     // Make sure that the relation entry does not exist.
     DN relationDN = DN.decode("cn=test parents,cn=config");
@@ -257,7 +258,7 @@
     ServerManagementContext ctx = ServerManagementContext.getInstance();
     ServerManagedObject<RootCfg> root = ctx.getRootConfigurationManagedObject();
     ConfigurationAddListener<TestParentCfg> listener = new TestParentAddListener();
-    root.registerAddListener(TestCfg.RD_TEST_ONE_TO_MANY_PARENT, listener);
+    root.registerAddListener(TestCfg.getTestOneToManyParentRelationDefinition(), listener);
 
     // Add the relation entry.
     String[] entry = new String[] {
@@ -313,7 +314,7 @@
     ServerManagementContext ctx = ServerManagementContext.getInstance();
     ServerManagedObject<RootCfg> root = ctx.getRootConfigurationManagedObject();
     ConfigurationAddListener<TestParentCfg> listener = new TestParentAddListener();
-    root.registerAddListener(TestCfg.RD_TEST_ONE_TO_ZERO_OR_ONE_PARENT,
+    root.registerAddListener(TestCfg.getTestOneToZeroOrOneParentRelationDefinition(),
         listener);
 
     // Make sure that the relation entry exists.
@@ -356,7 +357,7 @@
     ServerManagementContext ctx = ServerManagementContext.getInstance();
     ServerManagedObject<RootCfg> root = ctx.getRootConfigurationManagedObject();
     ConfigurationDeleteListener<TestParentCfg> listener = new TestParentDeleteListener();
-    root.registerDeleteListener(TestCfg.RD_TEST_ONE_TO_MANY_PARENT, listener);
+    root.registerDeleteListener(TestCfg.getTestOneToManyParentRelationDefinition(), listener);
 
     // Make sure that the relation entry does not exist.
     DN relationDN = DN.decode("cn=test parents,cn=config");
@@ -461,7 +462,7 @@
     ServerManagementContext ctx = ServerManagementContext.getInstance();
     ServerManagedObject<RootCfg> root = ctx.getRootConfigurationManagedObject();
     ConfigurationDeleteListener<TestParentCfg> listener = new TestParentDeleteListener();
-    root.registerDeleteListener(TestCfg.RD_TEST_ONE_TO_MANY_PARENT, listener);
+    root.registerDeleteListener(TestCfg.getTestOneToManyParentRelationDefinition(), listener);
 
     // Add the relation entry.
     String[] entry = new String[] {
@@ -517,7 +518,7 @@
     ServerManagementContext ctx = ServerManagementContext.getInstance();
     ServerManagedObject<RootCfg> root = ctx.getRootConfigurationManagedObject();
     ConfigurationDeleteListener<TestParentCfg> listener = new TestParentDeleteListener();
-    root.registerDeleteListener(TestCfg.RD_TEST_ONE_TO_ZERO_OR_ONE_PARENT,
+    root.registerDeleteListener(TestCfg.getTestOneToZeroOrOneParentRelationDefinition(),
         listener);
 
     // Make sure that the relation entry exists.

--
Gitblit v1.10.0