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