From 06d198918c48ef1090f42746396d26d5f2e882be Mon Sep 17 00:00:00 2001
From: Jean-Noël Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Wed, 01 Jun 2016 09:51:51 +0000
Subject: [PATCH] OPENDJ-3004 Migrate DITStructureRule

---
 opendj-server-legacy/src/test/java/org/opends/server/backends/SchemaBackendTestCase.java |   90 +++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 83 insertions(+), 7 deletions(-)

diff --git a/opendj-server-legacy/src/test/java/org/opends/server/backends/SchemaBackendTestCase.java b/opendj-server-legacy/src/test/java/org/opends/server/backends/SchemaBackendTestCase.java
index 245c348..ee55c0a 100644
--- a/opendj-server-legacy/src/test/java/org/opends/server/backends/SchemaBackendTestCase.java
+++ b/opendj-server-legacy/src/test/java/org/opends/server/backends/SchemaBackendTestCase.java
@@ -46,6 +46,7 @@
 import org.forgerock.opendj.ldap.schema.ObjectClass;
 import org.forgerock.opendj.ldap.schema.Schema;
 import org.forgerock.opendj.ldap.schema.SchemaBuilder;
+import org.forgerock.opendj.ldap.schema.UnknownSchemaElementException;
 import org.forgerock.util.Utils;
 import org.opends.server.TestCaseUtils;
 import org.opends.server.core.AddOperation;
@@ -3181,8 +3182,7 @@
    * @throws  Exception  If an unexpected problem occurs.
    */
   @Test
-  public void testAddDITStructureRuleSuccessful()
-         throws Exception
+  public void testAddDITStructureRuleSuccessful() throws Exception
   {
     String ldif = toLdif(
          "dn: cn=schema",
@@ -3207,13 +3207,49 @@
     int ruleID = 999001;
     assertSchemaHasDITStructureRule(ruleID, false);
 
-    runModify(argsNotPermissive(), ldif, System.err, SUCCESS);
-    assertSchemaHasDITStructureRule(ruleID, true);
+    try
+    {
+      runModify(argsNotPermissive(), ldif, System.err, SUCCESS);
+      assertSchemaHasDITStructureRule(ruleID, true);
+    }
+    finally
+    {
+      // delete in reverse order
+      String ldif2 = toLdif(
+           "dn: cn=schema",
+           "changetype: modify",
+           "delete: ditStructureRules",
+           "ditStructureRules: ( 999001 " +
+                "NAME 'testAddDITStructureRuleSuccessful' " +
+                "FORM testAddDITStructureRuleSuccessfulNF " +
+                "X-ORIGIN 'SchemaBackendTestCase' )",
+          "-",
+          "delete: nameForms",
+          "nameForms: ( testaddditstructurerulesuccessfulnf-oid " +
+               "NAME 'testAddDITStructureRuleSuccessfulNF' " +
+               "OC testAddDITStructureRuleSuccessfulOC MUST cn " +
+               "X-ORIGIN 'SchemaBackendTestCase' )",
+           "-",
+           "delete: objectClasses",
+           "objectClasses:  ( testaddditstructurerulesuccessfuloc-oid " +
+                "NAME 'testAddDITStructureRuleSuccessfulOC' SUP top " +
+                "STRUCTURAL MUST cn X-ORIGIN 'SchemaBackendTestCase')");
+      runModify(argsNotPermissive(), ldif2, System.err, SUCCESS);
+      assertSchemaHasDITStructureRule(ruleID, false);
+    }
   }
 
   private void assertSchemaHasDITStructureRule(int ruleID, boolean expected)
   {
-    assertEquals(DirectoryServer.getSchema().getDITStructureRulesByID().containsKey(ruleID), expected);
+    try
+    {
+      DirectoryServer.getSchema().getDITStructureRule(ruleID);
+      assertTrue(expected, "Expected to find a DITStructureRule with ruleID " + ruleID);
+    }
+    catch (UnknownSchemaElementException e)
+    {
+      assertFalse(expected, e.getMessage());
+    }
   }
 
   /**
@@ -3383,7 +3419,7 @@
     int ruleID = 999004;
     assertSchemaHasDITStructureRule(ruleID, false);
 
-    runModify(argsNotPermissive(), ldif, INVALID_ATTRIBUTE_SYNTAX);
+    runModify(argsNotPermissive(), ldif, CONSTRAINT_VIOLATION);
     assertSchemaHasDITStructureRule(ruleID, false);
   }
 
@@ -3420,11 +3456,51 @@
     int ruleID = 999005;
     assertSchemaHasDITStructureRule(ruleID, false);
 
-    runModify(argsNotPermissive(), ldif, INVALID_ATTRIBUTE_SYNTAX);
+    runModify(argsNotPermissive(), ldif, CONSTRAINT_VIOLATION);
     assertSchemaHasDITStructureRule(ruleID, false);
   }
 
   /**
+   * Tests the addition of a new DITContentRule with a conflicting rule identifier.
+   *
+   * @throws Exception
+   *           If an unexpected problem occurs.
+   */
+  @Test
+  public void testAddDITStructureRuleConflictingRuleID() throws Exception
+  {
+    String ldif = toLdif(
+        "dn: cn=schema",
+        "changetype: modify",
+        "add: nameForms",
+        "nameForms: ( 1.3.6.1.1.10.15.100 NAME 'domainNameForm' OC domain MUST ( dc ) )",
+        "-",
+        "add: dITStructureRules",
+        "dITStructureRules: ( 1 NAME 'dummyStructureRule' FORM domainNameForm )");
+    runModify(argsNotPermissive(), ldif, ATTRIBUTE_OR_VALUE_EXISTS);
+  }
+
+  /**
+   * Tests the addition of a new DITContentRule with a conflicting rule identifier.
+   *
+   * @throws Exception
+   *           If an unexpected problem occurs.
+   */
+  @Test
+  public void testAddDITStructureRuleConflictingRuleIDWithPermissiveControl() throws Exception
+  {
+    String ldif = toLdif(
+        "dn: cn=schema",
+        "changetype: modify",
+        "add: nameForms",
+        "nameForms: ( 1.3.6.1.1.10.15.100 NAME 'domainNameForm' OC domain MUST ( dc ) )",
+        "-",
+        "add: dITStructureRules",
+        "dITStructureRules: ( 1 NAME 'dummyStructureRule' FORM domainNameForm )");
+    runModify(argsPermissive(), ldif, UNWILLING_TO_PERFORM);
+  }
+
+  /**
    * Tests the behavior of the schema backend when attempting to add a new
    * DIT structure rule that references a name form which is OBSOLETE.
    *

--
Gitblit v1.10.0