From c5983b95bafa6c809dc88f8921d6c7230472e229 Mon Sep 17 00:00:00 2001
From: Nicolas Capponi <nicolas.capponi@forgerock.com>
Date: Tue, 04 Mar 2014 14:52:27 +0000
Subject: [PATCH] Add support for SearchScope.SUBORDINATES to MemoryBackend
---
opendj-sdk/opendj-core/src/main/java/org/forgerock/opendj/ldap/MemoryBackend.java | 6 ++++--
opendj-sdk/opendj-core/src/test/java/org/forgerock/opendj/ldap/MemoryBackendTestCase.java | 18 ++++++++++++++++++
2 files changed, 22 insertions(+), 2 deletions(-)
diff --git a/opendj-sdk/opendj-core/src/main/java/org/forgerock/opendj/ldap/MemoryBackend.java b/opendj-sdk/opendj-core/src/main/java/org/forgerock/opendj/ldap/MemoryBackend.java
index cbc1c89..b8065b0 100644
--- a/opendj-sdk/opendj-core/src/main/java/org/forgerock/opendj/ldap/MemoryBackend.java
+++ b/opendj-sdk/opendj-core/src/main/java/org/forgerock/opendj/ldap/MemoryBackend.java
@@ -398,7 +398,8 @@
sendEntry(attributeFilter, resultHandler, baseEntry);
}
resultHandler.handleResult(newResult(ResultCode.SUCCESS));
- } else if (scope.equals(SearchScope.SINGLE_LEVEL) || scope.equals(SearchScope.WHOLE_SUBTREE)) {
+ } else if (scope.equals(SearchScope.SINGLE_LEVEL) || scope.equals(SearchScope.SUBORDINATES)
+ || scope.equals(SearchScope.WHOLE_SUBTREE)) {
searchWithSubordinates(requestContext, resultHandler, dn, matcher, attributeFilter,
request.getSizeLimit(), scope, request.getControl(
SimplePagedResultsControl.DECODER, new DecodeOptions()));
@@ -502,7 +503,8 @@
int position = 0;
for (final Entry entry : subtree.values()) {
requestContext.checkIfCancelled(false);
- if (scope.equals(SearchScope.WHOLE_SUBTREE) || entry.getName().isChildOf(dn)) {
+ if (scope.equals(SearchScope.WHOLE_SUBTREE) || entry.getName().isChildOf(dn)
+ || (scope.equals(SearchScope.SUBORDINATES) && !entry.getName().equals(dn))) {
if (matcher.matches(entry).toBoolean()) {
/*
* This entry is going to be returned to the client so it
diff --git a/opendj-sdk/opendj-core/src/test/java/org/forgerock/opendj/ldap/MemoryBackendTestCase.java b/opendj-sdk/opendj-core/src/test/java/org/forgerock/opendj/ldap/MemoryBackendTestCase.java
index c00ca54..aafd4c8 100644
--- a/opendj-sdk/opendj-core/src/test/java/org/forgerock/opendj/ldap/MemoryBackendTestCase.java
+++ b/opendj-sdk/opendj-core/src/test/java/org/forgerock/opendj/ldap/MemoryBackendTestCase.java
@@ -456,6 +456,24 @@
}
@Test
+ public void testSearchSubordinatesReturnsAllEntries() throws Exception {
+ final Connection connection = getConnection();
+ Collection<SearchResultEntry> entries = new ArrayList<SearchResultEntry>();
+ connection.search(Requests.newSearchRequest("dc=com", SearchScope.SUBORDINATES, "(objectclass=*)"), entries);
+ assertThat(entries).hasSize(numberOfEntriesInBackend - 1);
+ }
+
+ @Test
+ public void testSearchSubordinatesEntries() throws Exception {
+ int numberOfUsers = 5;
+ final Connection connection = getConnection();
+ Collection<SearchResultEntry> entries = new ArrayList<SearchResultEntry>();
+ connection.search(Requests.newSearchRequest("ou=People,dc=example,dc=com", SearchScope.SUBORDINATES,
+ "(objectclass=*)"), entries);
+ assertThat(entries).hasSize(numberOfUsers);
+ }
+
+ @Test
public void testSearchSubtreeWithSizeLimit() throws Exception {
final Connection connection = getConnection();
Collection<SearchResultEntry> entries = new ArrayList<SearchResultEntry>();
--
Gitblit v1.10.0