From 7306b37ae8ea170aa32c92b63b2d384d3f87e2d8 Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Mon, 27 Jun 2011 15:18:03 +0000
Subject: [PATCH] Unit tests for OPENDJ-217: Unpredictable failures during schema validation using SDK

---
 opendj3/opendj-ldap-sdk/src/test/java/org/forgerock/opendj/ldap/schema/SchemaBuilderTest.java |  260 ++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 253 insertions(+), 7 deletions(-)

diff --git a/opendj3/opendj-ldap-sdk/src/test/java/org/forgerock/opendj/ldap/schema/SchemaBuilderTest.java b/opendj3/opendj-ldap-sdk/src/test/java/org/forgerock/opendj/ldap/schema/SchemaBuilderTest.java
index 997f8c3..1aa4537 100644
--- a/opendj3/opendj-ldap-sdk/src/test/java/org/forgerock/opendj/ldap/schema/SchemaBuilderTest.java
+++ b/opendj3/opendj-ldap-sdk/src/test/java/org/forgerock/opendj/ldap/schema/SchemaBuilderTest.java
@@ -29,9 +29,9 @@
 
 
 import static org.fest.assertions.Assertions.assertThat;
+import static org.fest.assertions.Fail.fail;
 
-import org.forgerock.opendj.ldap.schema.Schema;
-import org.forgerock.opendj.ldap.schema.SchemaBuilder;
+import org.forgerock.i18n.LocalizedIllegalArgumentException;
 import org.testng.annotations.Test;
 
 
@@ -43,17 +43,263 @@
 {
 
   /**
+   * Tests that schema validation resolves dependencies between parent/child
+   * attribute types regardless of the order in which they were added.
+   */
+  @Test(enabled = false)
+  public void testAttributeTypeDependenciesChildThenParent()
+  {
+    final Schema schema = new SchemaBuilder(Schema.getCoreSchema())
+        .addAttributeType("( childtype-oid NAME 'childtype' SUP parenttype )",
+            false)
+        .addAttributeType(
+            "( parenttype-oid NAME 'parenttype' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )",
+            false).toSchema();
+    assertThat(schema.getAttributeType("childtype").getSyntax()).isNotNull();
+    assertThat(schema.getAttributeType("childtype").getSyntax().getOID())
+        .isEqualTo("1.3.6.1.4.1.1466.115.121.1.15");
+  }
+
+
+
+  /**
+   * Tests that schema validation resolves dependencies between parent/child
+   * attribute types regardless of the order in which they were added.
+   */
+  @Test
+  public void testAttributeTypeDependenciesParentThenChild()
+  {
+    final Schema schema = new SchemaBuilder(Schema.getCoreSchema())
+        .addAttributeType(
+            "( parenttype-oid NAME 'parenttype' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )",
+            false)
+        .addAttributeType("( childtype-oid NAME 'childtype' SUP parenttype )",
+            false).toSchema();
+    assertThat(schema.getAttributeType("childtype").getSyntax()).isNotNull();
+    assertThat(schema.getAttributeType("childtype").getSyntax().getOID())
+        .isEqualTo("1.3.6.1.4.1.1466.115.121.1.15");
+  }
+
+
+
+  /**
+   * Tests that attribute types must have a syntax or a superior.
+   */
+  @Test(enabled = false, expectedExceptions = LocalizedIllegalArgumentException.class)
+  public void testAttributeTypeNoSuperiorNoSyntax()
+  {
+    new SchemaBuilder(Schema.getCoreSchema()).addAttributeType(
+        "( parenttype-oid NAME 'parenttype' )", false);
+  }
+
+
+
+  /**
+   * Tests that schema validation handles validation failures for superior
+   * attribute types regardless of the order.
+   */
+  @Test(enabled = false)
+  public void testAttributeTypeSuperiorFailureChildThenParent()
+  {
+    final Schema schema = new SchemaBuilder(Schema.getCoreSchema())
+        .addAttributeType("( childtype-oid NAME 'childtype' SUP parenttype )",
+            false)
+        .addAttributeType("( parenttype-oid NAME 'parenttype' SUP xxx )", false)
+        .toSchema();
+
+    try
+    {
+      schema.getAttributeType("childtype");
+      fail("childtype should not be in the schema because its parent is invalid");
+    }
+    catch (final UnknownSchemaElementException e)
+    {
+      // Expected.
+    }
+
+    try
+    {
+      schema.getAttributeType("parenttype");
+      fail("parenttype should not be in the schema because it is invalid");
+    }
+    catch (final UnknownSchemaElementException e)
+    {
+      // Expected.
+    }
+  }
+
+
+
+  /**
+   * Tests that schema validation handles validation failures for superior
+   * attribute types regardless of the order.
+   */
+  @Test
+  public void testAttributeTypeSuperiorFailureParentThenChild()
+  {
+    final Schema schema = new SchemaBuilder(Schema.getCoreSchema())
+        .addAttributeType("( parenttype-oid NAME 'parenttype' SUP xxx )", false)
+        .addAttributeType("( childtype-oid NAME 'childtype' SUP parenttype )",
+            false).toSchema();
+
+    try
+    {
+      schema.getAttributeType("childtype");
+      fail("childtype should not be in the schema because its parent is invalid");
+    }
+    catch (final UnknownSchemaElementException e)
+    {
+      // Expected.
+    }
+
+    try
+    {
+      schema.getAttributeType("parenttype");
+      fail("parenttype should not be in the schema because it is invalid");
+    }
+    catch (final UnknownSchemaElementException e)
+    {
+      // Expected.
+    }
+  }
+
+
+
+  /**
    * Test for OPENDJ-156: Errors when parsing collective attribute definitions.
    */
   @Test
   public void testCollectiveAttribute()
   {
-    SchemaBuilder builder = new SchemaBuilder(Schema.getCoreSchema());
-    builder
+    final Schema schema = new SchemaBuilder(Schema.getCoreSchema())
         .addAttributeType(
-            "( 2.5.4.11.1 NAME 'c-ou' SUP ou SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 COLLECTIVE X-ORIGIN 'RFC 3671' )",
-            false);
-    Schema schema = builder.toSchema();
+            "( 2.5.4.11.1 NAME 'c-ou' "
+                + "SUP ou SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 "
+                + "COLLECTIVE X-ORIGIN 'RFC 3671' )", false).toSchema();
     assertThat(schema.getWarnings()).isEmpty();
   }
+
+
+
+  /**
+   * Tests that schema validation resolves dependencies between parent/child
+   * object classes regardless of the order in which they were added.
+   */
+  @Test
+  public void testObjectClassDependenciesChildThenParent()
+  {
+    final Schema schema = new SchemaBuilder(Schema.getCoreSchema())
+        .addObjectClass(
+            "( childtype-oid NAME 'childtype' SUP parenttype STRUCTURAL MUST sn )",
+            false)
+        .addObjectClass(
+            "( parenttype-oid NAME 'parenttype' SUP top STRUCTURAL MUST cn )",
+            false).toSchema();
+
+    final AttributeType cn = schema.getAttributeType("cn");
+    final AttributeType sn = schema.getAttributeType("sn");
+
+    assertThat(schema.getObjectClass("childtype").isRequired(cn)).isTrue();
+    assertThat(schema.getObjectClass("childtype").isRequired(sn)).isTrue();
+  }
+
+
+
+  /**
+   * Tests that schema validation resolves dependencies between parent/child
+   * object classes regardless of the order in which they were added.
+   */
+  @Test
+  public void testObjectClassDependenciesParentThenChild()
+  {
+    final Schema schema = new SchemaBuilder(Schema.getCoreSchema())
+        .addObjectClass(
+            "( parenttype-oid NAME 'parenttype' SUP top STRUCTURAL MUST cn )",
+            false)
+        .addObjectClass(
+            "( childtype-oid NAME 'childtype' SUP parenttype STRUCTURAL MUST sn )",
+            false).toSchema();
+
+    final AttributeType cn = schema.getAttributeType("cn");
+    final AttributeType sn = schema.getAttributeType("sn");
+
+    assertThat(schema.getObjectClass("childtype").isRequired(cn)).isTrue();
+    assertThat(schema.getObjectClass("childtype").isRequired(sn)).isTrue();
+  }
+
+
+
+  /**
+   * Tests that schema validation handles validation failures for superior
+   * object classes regardless of the order.
+   */
+  @Test(enabled = false)
+  public void testObjectClassSuperiorFailureChildThenParent()
+  {
+    final Schema schema = new SchemaBuilder(Schema.getCoreSchema())
+        .addObjectClass(
+            "( childtype-oid NAME 'childtype' SUP parenttype STRUCTURAL MUST sn )",
+            false)
+        .addObjectClass(
+            "( parenttype-oid NAME 'parenttype' SUP top STRUCTURAL MUST xxx )",
+            false).toSchema();
+
+    try
+    {
+      schema.getObjectClass("childtype");
+      fail("childtype should not be in the schema because its parent is invalid");
+    }
+    catch (final UnknownSchemaElementException e)
+    {
+      // Expected.
+    }
+
+    try
+    {
+      schema.getObjectClass("parenttype");
+      fail("parenttype should not be in the schema because it is invalid");
+    }
+    catch (final UnknownSchemaElementException e)
+    {
+      // Expected.
+    }
+  }
+
+
+
+  /**
+   * Tests that schema validation handles validation failures for superior
+   * object classes regardless of the order.
+   */
+  @Test
+  public void testObjectClassSuperiorFailureParentThenChild()
+  {
+    final Schema schema = new SchemaBuilder(Schema.getCoreSchema())
+        .addObjectClass(
+            "( parenttype-oid NAME 'parenttype' SUP top STRUCTURAL MUST xxx )",
+            false)
+        .addObjectClass(
+            "( childtype-oid NAME 'childtype' SUP parenttype STRUCTURAL MUST sn )",
+            false).toSchema();
+
+    try
+    {
+      schema.getObjectClass("childtype");
+      fail("childtype should not be in the schema because its parent is invalid");
+    }
+    catch (final UnknownSchemaElementException e)
+    {
+      // Expected.
+    }
+
+    try
+    {
+      schema.getObjectClass("parenttype");
+      fail("parenttype should not be in the schema because it is invalid");
+    }
+    catch (final UnknownSchemaElementException e)
+    {
+      // Expected.
+    }
+  }
 }

--
Gitblit v1.10.0