From 0d750fcfd5d533d22bbf6bbb8a8570230603bafb Mon Sep 17 00:00:00 2001
From: Ludovic Poitou <ludovic.poitou@forgerock.com>
Date: Thu, 23 Oct 2014 09:02:10 +0000
Subject: [PATCH] Port to the DJ3 dev branch the unit-test to verify fix for OPENDJ-1586
---
opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/IsMemberOfVirtualAttributeProviderTestCase.java | 97 ++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 97 insertions(+), 0 deletions(-)
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/IsMemberOfVirtualAttributeProviderTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/IsMemberOfVirtualAttributeProviderTestCase.java
index ca70ec3..823560e 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/IsMemberOfVirtualAttributeProviderTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/IsMemberOfVirtualAttributeProviderTestCase.java
@@ -882,6 +882,103 @@
assertEquals(deleteOperation.getResultCode(), ResultCode.SUCCESS);
}
+ /**
+ * Tests the {@code processSearch} method when dealing with nested groups.
+ * This is a test for issue OPENDJ-1586. Before the fix the method would
+ * only return the direct members of the groups. Now it should return
+ * all.
+ *
+ * @throws Exception If an unexpected problem occurs.
+ */
+ @Test
+ public void testProcessSearchWithNestedGroup() throws Exception
+ {
+ TestCaseUtils.initializeTestBackend(true);
+ TestCaseUtils.addEntries(
+ "dn: ou=People,o=test",
+ "objectClass: top",
+ "objectClass: organizationalUnit",
+ "ou: People",
+ "",
+ "dn: uid=test.user,ou=People,o=test",
+ "objectClass: top",
+ "objectClass: person",
+ "objectClass: organizationalPerson",
+ "objectClass: inetOrgPerson",
+ "uid: test.user",
+ "givenName: Test",
+ "sn: User",
+ "cn: Test User",
+ "userPassword: password",
+ "",
+ "dn: uid=test.user2,ou=People,o=test",
+ "objectClass: top",
+ "objectClass: person",
+ "objectClass: organizationalPerson",
+ "objectClass: inetOrgPerson",
+ "uid: test.user2",
+ "givenName: Test",
+ "sn: User2",
+ "cn: Test User2",
+ "userPassword: password",
+ "",
+ "dn: ou=Groups,o=test",
+ "objectClass: top",
+ "objectClass: organizationalUnit",
+ "ou: Groups",
+ "",
+ "dn: cn=Test Group 1,ou=Groups,o=test",
+ "objectClass: top",
+ "objectClass: groupOfNames",
+ "cn: Test Group 1",
+ "member: uid=test.user,ou=People,o=test",
+ "",
+ "dn: cn=Test Group 2,ou=Groups,o=test",
+ "objectClass: top",
+ "objectClass: groupOfNames",
+ "cn: Test Group 2",
+ "member: uid=test.user2,ou=People,o=test",
+ "",
+ "dn: cn=Test Group 3,ou=Groups,o=test",
+ "objectClass: top",
+ "objectClass: groupOfNames",
+ "cn: Test Group 3",
+ "member: cn=Test Group 1,ou=Groups,o=test");
+
+ IsMemberOfVirtualAttributeProvider provider =
+ new IsMemberOfVirtualAttributeProvider();
+
+ VirtualAttributeRule rule =
+ new VirtualAttributeRule(isMemberOfType, provider,
+ Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
+ Collections.<DN>emptySet(),
+ Collections.<SearchFilter>emptySet(),
+ VirtualAttributeCfgDefn.ConflictBehavior.
+ VIRTUAL_OVERRIDES_REAL);
+
+ SearchRequest request = newSearchRequest(DN.valueOf("o=test"), SearchScope.WHOLE_SUBTREE,
+ "isMemberOf=cn=Test Group 3,ou=Groups,o=test");
+ InternalClientConnection conn = getRootConnection();
+ InternalSearchOperation searchOperation = new InternalSearchOperation(
+ conn, nextOperationID(), nextMessageID(), request, null);
+ provider.processSearch(rule, new LocalBackendSearchOperation(searchOperation));
+
+ List<SearchResultEntry> entries = searchOperation.getSearchEntries();
+ assertEquals(entries.size(), 2, "Expecting 2 entries, but got " + entries.size());
+ // First direct members
+ assertEquals(entries.get(0).getName(), DN.valueOf("cn=test group 1,ou=groups,o=test"));
+ // Then indirect members
+ assertEquals(entries.get(1).getName(), DN.valueOf("uid=test.user,ou=people,o=test"));
+
+ DeleteOperation deleteOperation =
+ conn.processDelete(DN.valueOf("cn=test group 1,ou=groups,o=test"));
+ assertEquals(deleteOperation.getResultCode(), ResultCode.SUCCESS);
+
+ deleteOperation =
+ conn.processDelete(DN.valueOf("cn=test group 2,ou=groups,o=test"));
+ assertEquals(deleteOperation.getResultCode(), ResultCode.SUCCESS);
+
+ }
/**
--
Gitblit v1.10.0