From bb917d0ac64be191c867a2e0432412a2e24d0080 Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Mon, 26 Sep 2011 22:04:48 +0000
Subject: [PATCH] Fix OPENDJ-278: ldapSubentry entries should have an implicit scope of { base="" } when no subtree specification is specified
---
opendj-sdk/opends/src/server/org/opends/server/types/SubEntry.java | 5 ++---
opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/core/SubentryManagerTestCase.java | 37 +++++++++++++++++++++++++++++++++----
2 files changed, 35 insertions(+), 7 deletions(-)
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/SubEntry.java b/opendj-sdk/opends/src/server/org/opends/server/types/SubEntry.java
index 86944a3..7855c12 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/SubEntry.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/SubEntry.java
@@ -246,9 +246,8 @@
{
// There is none for some reason eg this could be
// old Draft based ldapSubEntry so create a dummy.
- this.subTreeSpec = new SubtreeSpecification(
- DN.NULL_DN, null, -1, -1,
- null, null, null);
+ this.subTreeSpec = new SubtreeSpecification(entry.getDN().getParent(),
+ null, -1, -1, null, null, null);
}
// Determine if this subentry is collective attribute subentry.
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/core/SubentryManagerTestCase.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/core/SubentryManagerTestCase.java
index 8f8fb61..8dad866 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/core/SubentryManagerTestCase.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/core/SubentryManagerTestCase.java
@@ -58,6 +58,7 @@
private Entry testEntry;
private Entry ldapSubentry;
+ private Entry legacyLdapSubentry;
private Entry collectiveSubentry;
@BeforeClass
@@ -73,6 +74,7 @@
{
TestCaseUtils.deleteEntry(collectiveSubentry.getDN());
TestCaseUtils.deleteEntry(ldapSubentry.getDN());
+ TestCaseUtils.deleteEntry(legacyLdapSubentry.getDN());
SubentryManager manager = DirectoryServer.getSubentryManager();
assertNotNull(manager);
@@ -99,13 +101,15 @@
assertNotNull(manager);
List<SubEntry> subentryList = manager.getSubentries(testEntry.getDN());
assertNotNull(subentryList);
- assertEquals(subentryList.size(), 1);
+ assertEquals(subentryList.size(), 2);
assertEquals(subentryList.get(0).getDN(), ldapSubentry.getDN());
+ assertEquals(subentryList.get(1).getDN(), legacyLdapSubentry.getDN());
subentryList.clear();
subentryList = manager.getSubentries(testEntry);
assertNotNull(subentryList);
- assertEquals(subentryList.size(), 1);
+ assertEquals(subentryList.size(), 2);
assertEquals(subentryList.get(0).getEntry(), ldapSubentry);
+ assertEquals(subentryList.get(1).getEntry(), legacyLdapSubentry);
subentryList.clear();
subentryList = manager.getCollectiveSubentries(testEntry.getDN());
assertNotNull(subentryList);
@@ -116,6 +120,15 @@
assertNotNull(subentryList);
assertEquals(subentryList.size(), 1);
assertEquals(subentryList.get(0).getEntry(), collectiveSubentry);
+ subentryList.clear();
+ subentryList = manager.getSubentries(legacyLdapSubentry.getDN().getParent());
+ assertNotNull(subentryList);
+ assertEquals(subentryList.size(), 1);
+ assertEquals(subentryList.get(0).getEntry(), legacyLdapSubentry);
+ subentryList.clear();
+ subentryList = manager.getSubentries(legacyLdapSubentry.getDN().getParent().getParent());
+ assertNotNull(subentryList);
+ assertEquals(subentryList.size(), 0);
}
@Test
@@ -571,8 +584,10 @@
"uid=rogasawara," + NEWBASE + "," + SUFFIX)));
assertTrue(DirectoryServer.getSubentryManager().getCollectiveSubentries(
DN.decode("uid=rogasawara," + NEWBASE + "," + SUFFIX)).isEmpty());
- assertTrue(DirectoryServer.getSubentryManager().getSubentries(
- DN.decode("uid=rogasawara," + NEWBASE + "," + SUFFIX)).isEmpty());
+
+ // The legacyLdapSubentry should still apply.
+ assertEquals(DirectoryServer.getSubentryManager().getSubentries(
+ DN.decode("uid=rogasawara," + NEWBASE + "," + SUFFIX)).size(), 1);
// Move it back.
String oldPath = TestCaseUtils.createTempFile(
@@ -740,6 +755,20 @@
assertEquals(addOperation.getResultCode(), ResultCode.SUCCESS);
assertNotNull(DirectoryServer.getEntry(ldapSubentry.getDN()));
+ // Add test legacy subentry.
+ legacyLdapSubentry = TestCaseUtils.makeEntry(
+ "dn: cn=Legacy Subentry," + SUFFIX,
+ "objectClass: top",
+ "objectclass: ldapSubentry",
+ "cn: Legacy Subentry");
+ addOperation =
+ connection.processAdd(legacyLdapSubentry.getDN(),
+ legacyLdapSubentry.getObjectClasses(),
+ legacyLdapSubentry.getUserAttributes(),
+ legacyLdapSubentry.getOperationalAttributes());
+ assertEquals(addOperation.getResultCode(), ResultCode.SUCCESS);
+ assertNotNull(DirectoryServer.getEntry(legacyLdapSubentry.getDN()));
+
// Add test collective subentry.
collectiveSubentry = TestCaseUtils.makeEntry(
"dn: cn=Collective Subentry," + SUFFIX,
--
Gitblit v1.10.0