From cffe1147ee676e86de422418b60408475fa06f41 Mon Sep 17 00:00:00 2001
From: Jean-Noël Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Tue, 10 May 2016 12:54:09 +0000
Subject: [PATCH] OPENDJ-3008 Copying Schema using SchemaBuilder loses optional attributes of ObjectClasses
---
opendj-core/src/test/java/org/forgerock/opendj/ldap/schema/ObjectClassBuilderTestCase.java | 51 +++++++++++++++++++++++++++++++++++++++++++--------
opendj-core/src/main/java/org/forgerock/opendj/ldap/schema/ObjectClass.java | 2 +-
2 files changed, 44 insertions(+), 9 deletions(-)
diff --git a/opendj-core/src/main/java/org/forgerock/opendj/ldap/schema/ObjectClass.java b/opendj-core/src/main/java/org/forgerock/opendj/ldap/schema/ObjectClass.java
index d5bf022..350ba45 100644
--- a/opendj-core/src/main/java/org/forgerock/opendj/ldap/schema/ObjectClass.java
+++ b/opendj-core/src/main/java/org/forgerock/opendj/ldap/schema/ObjectClass.java
@@ -67,7 +67,7 @@
this.type = oc.objectClassType;
this.superiorClasses.addAll(oc.superiorClassOIDs);
this.requiredAttributes.addAll(oc.requiredAttributeOIDs);
- this.optionalAttributes.addAll(optionalAttributes);
+ this.optionalAttributes.addAll(oc.optionalAttributeOIDs);
}
Builder(final String oid, final SchemaBuilder builder) {
diff --git a/opendj-core/src/test/java/org/forgerock/opendj/ldap/schema/ObjectClassBuilderTestCase.java b/opendj-core/src/test/java/org/forgerock/opendj/ldap/schema/ObjectClassBuilderTestCase.java
index 8229015..d31b293 100644
--- a/opendj-core/src/test/java/org/forgerock/opendj/ldap/schema/ObjectClassBuilderTestCase.java
+++ b/opendj-core/src/test/java/org/forgerock/opendj/ldap/schema/ObjectClassBuilderTestCase.java
@@ -29,6 +29,7 @@
import static org.forgerock.opendj.ldap.schema.Schema.*;
import static org.forgerock.opendj.ldap.schema.SchemaConstants.*;
+@SuppressWarnings("javadoc")
public class ObjectClassBuilderTestCase extends AbstractSchemaTestCase {
@DataProvider
@@ -39,20 +40,20 @@
return new Object[][] {
// Basic object class
{ "1.2.3.4", false, singletonList("MyObjectClass"), emptySet(), singleton("cn"),
- singleton(TOP_OBJECTCLASS_NAME), STRUCTURAL, "MyObjectClass description.", "New extra property",
- "New extra value", false },
+ singleton(TOP_OBJECTCLASS_NAME), STRUCTURAL, "MyObjectClass description.",
+ "X-New-extra-property", "New extra value", false },
// Allowed overrides existing core schema object class groupOfNames
{ "2.5.6.9", false, singletonList("groupOfFirstNames"), emptySet(), singleton("cn"),
- singleton(TOP_OBJECTCLASS_NAME), AUXILIARY, "MyObjectClass description.", "New extra property",
- "New extra value", true },
+ singleton(TOP_OBJECTCLASS_NAME), AUXILIARY, "MyObjectClass description.",
+ "X-New-extra-property", "New extra value", true },
// No name provided, should be validated
{ "1.2.3.4", false, emptyList(), singleton("name"), singleton("cn"),
- singleton(TOP_OBJECTCLASS_NAME), STRUCTURAL, "MyObjectClass description.", "New extra property",
- "New extra value", false },
+ singleton(TOP_OBJECTCLASS_NAME), STRUCTURAL, "MyObjectClass description.",
+ "X-New-extra-property", "New extra value", false },
// Empty description, should be validated
{ "1.2.3.4", false, emptyList(), singleton("name"), singleton("cn"),
- singleton(TOP_OBJECTCLASS_NAME), STRUCTURAL, "", "New extra property",
- "New extra value", false },
+ singleton(TOP_OBJECTCLASS_NAME), STRUCTURAL, "",
+ "X-New-extra-property", "New extra value", false },
};
}
@@ -78,6 +79,40 @@
assertThat(schema.getWarnings()).isEmpty();
final ObjectClass oc = schema.getObjectClass(oid);
+ validate(oc,
+ oid,
+ isObsolete,
+ names,
+ optionalAttributeOIDs,
+ requiredAttributesOIDs,
+ superiorClassOIDs,
+ type,
+ description,
+ extraPropertyName,
+ extraPropertyValue);
+
+ final ObjectClass copiedOC = new SchemaBuilder(schema)
+ .buildObjectClass(oid + "-oid") // triggers a lazy copy of the original schema
+ .addToSchema()
+ .toSchema()
+ .getObjectClass(oid);
+ validate(copiedOC,
+ oid,
+ isObsolete,
+ names,
+ optionalAttributeOIDs,
+ requiredAttributesOIDs,
+ superiorClassOIDs,
+ type,
+ description,
+ extraPropertyName,
+ extraPropertyValue);
+ }
+
+ private void validate(final ObjectClass oc, final String oid, final boolean isObsolete, final List<String> names,
+ final Set<String> optionalAttributeOIDs, final Set<String> requiredAttributesOIDs,
+ final Set<String> superiorClassOIDs, final ObjectClassType type, final String description,
+ final String extraPropertyName, final String extraPropertyValue) throws Exception {
assertThat(oc).isNotNull();
assertThat(oc.getOID()).isEqualTo(oid);
assertThat(oc.getDescription()).isEqualTo(description);
--
Gitblit v1.10.0