| | |
| | | * 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; |
| | |
| | | { |
| | | 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"); |
| | | } |
| | | |
| | | |
| | |
| | | //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==" |
| | | ); |
| | | } |
| | | } |