From 76c87042a9fb3ac7f1a25cc9d836da521eb8547f Mon Sep 17 00:00:00 2001
From: sin <sin@localhost>
Date: Tue, 17 Feb 2009 16:11:27 +0000
Subject: [PATCH] issue# 3774: Sort control doesn't work for collation matching rules
---
opends/tests/unit-tests-testng/src/server/org/opends/server/schema/CollationMatchingRuleTest.java | 170 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 169 insertions(+), 1 deletions(-)
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/schema/CollationMatchingRuleTest.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/schema/CollationMatchingRuleTest.java
index ba958db..daf2750 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/server/schema/CollationMatchingRuleTest.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/schema/CollationMatchingRuleTest.java
@@ -22,24 +22,31 @@
* CDDL HEADER END
*
*
- * Copyright 2008 Sun Microsystems, Inc.
+ * Copyright 2008-2009 Sun Microsystems, Inc.
*/
package org.opends.server.schema;
+import java.util.ArrayList;
import static org.testng.Assert.*;
import java.util.List;
import org.opends.server.TestCaseUtils;
+import org.opends.server.controls.ServerSideSortRequestControl;
+import org.opends.server.controls.VLVRequestControl;
import org.opends.server.protocols.internal.InternalClientConnection;
import org.opends.server.protocols.internal.InternalSearchOperation;
import org.opends.server.protocols.ldap.LDAPFilter;
import org.opends.server.tools.LDAPModify;
import org.opends.server.types.ByteString;
+import org.opends.server.types.Control;
+import org.opends.server.types.DN;
import org.opends.server.types.DereferencePolicy;
+import org.opends.server.types.Entry;
import org.opends.server.types.ResultCode;
+import org.opends.server.types.SearchFilter;
import org.opends.server.types.SearchResultEntry;
import org.opends.server.types.SearchScope;
import org.testng.annotations.BeforeClass;
@@ -65,6 +72,10 @@
{
TestCaseUtils.startServer();
TestCaseUtils.initializeTestBackend(true);
+ user1 = DN.decode("cn=user1,dc=example,dc=com");
+ user2 = DN.decode("cn=user2,dc=example,dc=com");
+ user3 = DN.decode("cn=user3,dc=example,dc=com");
+ user4 = DN.decode("cn=user4,dc=example,dc=com");
}
@@ -363,4 +374,161 @@
//An entry must be returned for sn=quebec.
assertNotNull(e);
}
+
+ private DN user1;
+ private DN user2 ;
+ private DN user3;
+ private DN user4;
+
+
+ /**
+ * Test to verify the Sort control works well with the Collation
+ * Less-than-equal-to matching rule and French Locale.
+ */
+ @Test()
+ public void testSortControlLTERule() throws Exception
+ {
+ ArrayList<DN> expectedDNOrder = new ArrayList<DN>();
+ expectedDNOrder.add(user4);
+ expectedDNOrder.add(user3);
+ expectedDNOrder.add(user2);
+ expectedDNOrder.add(user1);
+ ArrayList<Control> requestControls = new ArrayList<Control>();
+ requestControls.add(new ServerSideSortRequestControl("displayname:fr"));
+ ValidateSortControl(expectedDNOrder,
+ requestControls,
+ "displayname:fr-FR.6:=A*");
+ }
+
+
+ /**
+ * Test to verify the Sort control works with Collation equality
+ * matching rule and Spanish locale.
+ */
+ @Test()
+ public void testSortControlEQRule() throws Exception
+ {
+ ArrayList<DN> expectedDNOrder = new ArrayList<DN>();
+ expectedDNOrder.add(user4);
+ expectedDNOrder.add(user3);
+ expectedDNOrder.add(user2);
+ expectedDNOrder.add(user1);
+ ArrayList<Control> requestControls = new ArrayList<Control>();
+ requestControls.add(new ServerSideSortRequestControl("displayname:es"));
+ ValidateSortControl(expectedDNOrder,
+ requestControls,
+ "displayname:es.6:=A*");
+ }
+
+
+ /**
+ * Test to verify the Sort control works with Collation greater
+ * than matching rule and English locale in a descending order.
+ */
+ @Test()
+ public void testSortControlGTRule() throws Exception
+ {
+ ArrayList<DN> expectedDNOrder = new ArrayList<DN>();
+ expectedDNOrder.add(user1);
+ expectedDNOrder.add(user2);
+ expectedDNOrder.add(user3);
+ expectedDNOrder.add(user4);
+ ArrayList<Control> requestControls = new ArrayList<Control>();
+ requestControls.add(new ServerSideSortRequestControl("-displayname:en"));
+ ValidateSortControl(expectedDNOrder,
+ requestControls,
+ "displayname:en-US.6:=A*");
+ }
+
+
+
+ /**
+ * Tests the Sort control with the VLV control using a collation equality
+ * matching rule.
+ */
+ @Test()
+ public void testVLVSortControl() throws Exception
+ {
+ ArrayList<DN> expectedDNOrder = new ArrayList<DN>();
+ expectedDNOrder.add(user4);
+ expectedDNOrder.add(user3);
+ expectedDNOrder.add(user2);
+ expectedDNOrder.add(user1);
+ ArrayList<Control> requestControls = new ArrayList<Control>();
+ requestControls.add(new ServerSideSortRequestControl("displayname:fr"));
+ requestControls.add(new VLVRequestControl(0, 4, 1, 0));
+ ValidateSortControl(expectedDNOrder,
+ requestControls,
+ "objectclass=inetOrgPerson");
+ }
+
+
+
+ private void ValidateSortControl(ArrayList<DN> expectedDNOrder,
+ ArrayList<Control> requestControls,
+ String searchFilter) throws Exception
+ {
+ try
+ {
+ populateEntriesForControl();
+ InternalClientConnection conn =
+ InternalClientConnection.getRootConnection();
+
+ InternalSearchOperation internalSearch =
+ new InternalSearchOperation(conn, InternalClientConnection.nextOperationID(),
+ InternalClientConnection.nextMessageID(), requestControls,
+ DN.decode("dc=example,dc=com"), SearchScope.WHOLE_SUBTREE,
+ DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0, false,
+ SearchFilter.createFilterFromString(searchFilter),
+ null, null);
+
+ internalSearch.run();
+ assertEquals(internalSearch.getResultCode(), ResultCode.SUCCESS);
+ ArrayList<DN> returnedDNOrder = new ArrayList<DN>();
+ for (Entry e : internalSearch.getSearchEntries())
+ {
+ returnedDNOrder.add(e.getDN());
+ }
+ assertEquals(returnedDNOrder, expectedDNOrder);
+ }
+ finally
+ {
+ TestCaseUtils.clearJEBackend(false, "userRoot", "dc=example,dc=com");
+ }
+ }
+
+
+ private void populateEntriesForControl() throws Exception
+ {
+ TestCaseUtils.clearJEBackend(true, "userRoot", "dc=example,dc=com");
+ TestCaseUtils.addEntries(
+ "dn: cn=user1,dc=example,dc=com",
+ "objectclass: inetorgperson",
+ "cn: user1",
+ "sn: user1",
+ "uid: user1",
+ "displayname:: QXVy4oiawqlsaWVuNA==",
+ "",
+ "dn: cn=user2,dc=example,dc=com",
+ "objectclass: inetorgperson",
+ "cn: user2",
+ "sn: user2",
+ "uid: user2",
+ "displayname:: QXVy4oiawqlsaWVuMw==",
+ "",
+ "dn: cn=user3,dc=example,dc=com",
+ "objectclass: inetorgperson",
+ "cn: user3",
+ "sn: user3",
+ "uid: user3",
+ "displayname:: QXVy4oiawqlsaWVuMg==",
+ "",
+ "dn: cn=user4,dc=example,dc=com",
+ "objectclass: inetorgperson",
+ "cn: user4",
+ "sn: user4",
+ "uid: user4",
+ "displayname:: QXVy4oiawqlsaWVuMQ=="
+ );
+ }
}
--
Gitblit v1.10.0