From f154862f349bceea5180888b896fcb7e0aeec92a Mon Sep 17 00:00:00 2001
From: Nicolas Capponi <nicolas.capponi@forgerock.com>
Date: Mon, 30 May 2016 10:43:13 +0000
Subject: [PATCH] OPENDJ-2987 Revert previous behavior on extensibleObject object classes wrt optional attributes

---
 opendj-core/src/test/java/org/forgerock/opendj/ldap/schema/ObjectClassTestCase.java         |   14 +++++++-------
 opendj-core/src/test/java/org/forgerock/opendj/ldap/schema/EntrySchemaCheckingTestCase.java |    4 ++--
 opendj-core/src/main/java/org/forgerock/opendj/ldap/schema/ObjectClass.java                 |    6 +++++-
 3 files changed, 14 insertions(+), 10 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 f4f3451..ab36d1b 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
@@ -724,7 +724,11 @@
      *         <code>false</code> if not.
      */
     public boolean isOptional(final AttributeType attributeType) {
-        return optionalAttributes.contains(attributeType);
+        // In theory, attribute types not defined in the schema (i.e place holder attributes) should
+        // not be considered as optional.
+        // However, in practice, some parts of the server have historically relied on non-defined
+        // attributes to behave properly.
+        return isExtensibleObject || optionalAttributes.contains(attributeType);
     }
 
     /**
diff --git a/opendj-core/src/test/java/org/forgerock/opendj/ldap/schema/EntrySchemaCheckingTestCase.java b/opendj-core/src/test/java/org/forgerock/opendj/ldap/schema/EntrySchemaCheckingTestCase.java
index b2c04a1..8d16e09 100644
--- a/opendj-core/src/test/java/org/forgerock/opendj/ldap/schema/EntrySchemaCheckingTestCase.java
+++ b/opendj-core/src/test/java/org/forgerock/opendj/ldap/schema/EntrySchemaCheckingTestCase.java
@@ -958,7 +958,7 @@
     }
 
     @Test
-    public void testExtensibleObjectAcceptsAnyAttributeButNotPlaceholderAttribute() throws Exception {
+    public void testExtensibleObjectAcceptsAnyAttributeIncludingPlaceholderAttribute() throws Exception {
         // @formatter:off
         final Entry e2 = newEntry(
                 "dn: dc=example,dc=com",
@@ -979,7 +979,7 @@
             "o: example",
             "dummy: unknown attribute!!");
         // @formatter:on
-        assertDoesNotConformToSchema(e, defaultPolicy());
+        assertConformsToSchema(e, defaultPolicy());
     }
 
     /**
diff --git a/opendj-core/src/test/java/org/forgerock/opendj/ldap/schema/ObjectClassTestCase.java b/opendj-core/src/test/java/org/forgerock/opendj/ldap/schema/ObjectClassTestCase.java
index 035df63..06c9446 100644
--- a/opendj-core/src/test/java/org/forgerock/opendj/ldap/schema/ObjectClassTestCase.java
+++ b/opendj-core/src/test/java/org/forgerock/opendj/ldap/schema/ObjectClassTestCase.java
@@ -30,19 +30,19 @@
 public class ObjectClassTestCase extends AbstractSchemaTestCase {
 
     @Test
-    public void extensibleObjectShouldNotAcceptPlaceholderAttribute() {
+    public void extensibleObjectShouldAcceptPlaceholderAttribute() {
         Schema schema = getCoreSchema();
         ObjectClass extensibleObject = schema.getObjectClass(EXTENSIBLE_OBJECT_OBJECTCLASS_OID);
 
-        AttributeType dummy = schema.getAttributeType("dummy");
-        assertThat(dummy.isPlaceHolder()).isTrue();
-        assertThat(extensibleObject.isRequired(dummy)).isFalse();
-        assertThat(extensibleObject.isOptional(dummy)).isFalse();
-        assertThat(extensibleObject.isRequiredOrOptional(dummy)).isFalse();
+        AttributeType attributeType = schema.getAttributeType("dummy");
+        assertThat(attributeType.isPlaceHolder()).isTrue();
+        assertThat(extensibleObject.isRequired(attributeType)).isFalse();
+        assertThat(extensibleObject.isOptional(attributeType)).isTrue();
+        assertThat(extensibleObject.isRequiredOrOptional(attributeType)).isTrue();
     }
 
     @Test
-    public void extensibleObjectShouldAcceptAnyAttributeInTheSchema() {
+    public void extensibleObjectShouldAcceptAnyAttribute() {
         Schema schema = getCoreSchema();
         ObjectClass extensibleObject = schema.getObjectClass(EXTENSIBLE_OBJECT_OBJECTCLASS_OID);
 

--
Gitblit v1.10.0