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