383N/A/*
383N/A * CDDL HEADER START
383N/A *
383N/A * The contents of this file are subject to the terms of the
383N/A * Common Development and Distribution License, Version 1.0 only
383N/A * (the "License"). You may not use this file except in compliance
383N/A * with the License.
383N/A *
6982N/A * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
6982N/A * or http://forgerock.org/license/CDDLv1.0.html.
383N/A * See the License for the specific language governing permissions
383N/A * and limitations under the License.
383N/A *
383N/A * When distributing Covered Code, include this CDDL HEADER in each
6982N/A * file and include the License file at legal-notices/CDDLv1_0.txt.
6982N/A * If applicable, add the following below this CDDL HEADER, with the
6982N/A * fields enclosed by brackets "[]" replaced with your own identifying
6982N/A * information:
383N/A * Portions Copyright [yyyy] [name of copyright owner]
383N/A *
383N/A * CDDL HEADER END
383N/A *
383N/A *
4352N/A * Copyright 2006-2009 Sun Microsystems, Inc.
6105N/A * Portions Copyright 2011-2013 ForgeRock AS
383N/A */
383N/Apackage org.opends.server.tools;
383N/A
383N/Aimport java.io.File;
383N/Aimport java.io.FileWriter;
383N/Aimport java.util.ArrayList;
6105N/Aimport java.util.Arrays;
6105N/Aimport java.util.List;
383N/A
3888N/Aimport org.testng.annotations.AfterClass;
383N/Aimport org.testng.annotations.BeforeClass;
383N/Aimport org.testng.annotations.DataProvider;
383N/Aimport org.testng.annotations.Test;
383N/A
383N/Aimport org.opends.server.TestCaseUtils;
383N/Aimport org.opends.server.core.AddOperation;
383N/Aimport org.opends.server.core.DirectoryServer;
383N/Aimport org.opends.server.protocols.internal.InternalClientConnection;
383N/Aimport org.opends.server.types.Entry;
383N/Aimport org.opends.server.types.ResultCode;
383N/A
383N/Aimport static org.testng.Assert.*;
383N/Aimport static org.opends.server.util.ServerConstants.*;
383N/A
383N/A
383N/A
383N/A/**
383N/A * A set of test cases for the LDAPSearch tool.
383N/A */
383N/Apublic class LDAPSearchTestCase
383N/A extends ToolsTestCase
383N/A{
383N/A // The path to a file containing an invalid bind password.
383N/A private String invalidPasswordFile;
383N/A
383N/A // The path to a file containing a valid bind password.
383N/A private String validPasswordFile;
383N/A
383N/A
383N/A
383N/A /**
383N/A * Ensures that the Directory Server is running and performs other necessary
383N/A * setup.
383N/A *
383N/A * @throws Exception If an unexpected problem occurs.
383N/A */
383N/A @BeforeClass()
383N/A public void startServerAndCreatePasswordFiles()
383N/A throws Exception
383N/A {
383N/A TestCaseUtils.startServer();
4352N/A
3888N/A TestCaseUtils.dsconfig(
3888N/A "set-sasl-mechanism-handler-prop",
3888N/A "--handler-name", "DIGEST-MD5",
3888N/A "--set", "server-fqdn:" + "127.0.0.1");
4352N/A
383N/A File pwFile = File.createTempFile("valid-bind-password-", ".txt");
383N/A pwFile.deleteOnExit();
383N/A FileWriter fileWriter = new FileWriter(pwFile);
383N/A fileWriter.write("password" + System.getProperty("line.separator"));
383N/A fileWriter.close();
383N/A validPasswordFile = pwFile.getAbsolutePath();
383N/A
383N/A pwFile = File.createTempFile("invalid-bind-password-", ".txt");
383N/A pwFile.deleteOnExit();
383N/A fileWriter = new FileWriter(pwFile);
383N/A fileWriter.write("wrongPassword" + System.getProperty("line.separator"));
383N/A fileWriter.close();
383N/A invalidPasswordFile = pwFile.getAbsolutePath();
383N/A }
383N/A
383N/A
3888N/A @AfterClass
3888N/A public void tearDown() throws Exception {
4352N/A
3888N/A TestCaseUtils.dsconfig(
3888N/A "set-sasl-mechanism-handler-prop",
3888N/A "--handler-name", "DIGEST-MD5",
3888N/A "--remove", "server-fqdn:" + "127.0.0.1");
3888N/A }
383N/A
383N/A /**
383N/A * Retrieves sets of invalid arguments that may not be used to initialize
383N/A * the LDAPSearch tool.
383N/A *
383N/A * @return Sets of invalid arguments that may not be used to initialize the
383N/A * LDAPSearch tool.
383N/A */
383N/A @DataProvider(name = "invalidArgs")
383N/A public Object[][] getInvalidArgumentLists()
383N/A {
497N/A ArrayList<String[]> argLists = new ArrayList<String[]>();
497N/A ArrayList<String> reasonList = new ArrayList<String>();
383N/A
497N/A String[] args = {};
383N/A argLists.add(args);
497N/A reasonList.add("No arguments");
383N/A
6105N/A List<String> options =
6105N/A Arrays.asList("-b", "-D", "-w", "-j", "-Y", "-i", "-K", "-P", "-W",
6105N/A "-h", "-p", "-V", "-f", "-J", "-z", "-l", "-s", "-a", "-o", "-c",
6105N/A "--assertionFilter", "--matchedValuesFilter");
6105N/A for (String option : options)
383N/A {
6105N/A args = new String[] { option };
6105N/A argLists.add(args);
6105N/A reasonList.add("No value for '" + option + "' argument");
6105N/A }
383N/A
497N/A args = new String[]
383N/A {
383N/A "-I"
383N/A };
383N/A argLists.add(args);
497N/A reasonList.add("Invalid short argument");
383N/A
497N/A args = new String[]
383N/A {
383N/A "--invalidLongArgument"
383N/A };
383N/A argLists.add(args);
497N/A reasonList.add("Invalid long argument");
383N/A
497N/A args = new String[]
383N/A {
383N/A "(objectClass=*)"
383N/A };
383N/A argLists.add(args);
497N/A reasonList.add("No base DN");
383N/A
497N/A args = new String[]
383N/A {
383N/A "-b", ""
383N/A };
383N/A argLists.add(args);
497N/A reasonList.add("No filter");
383N/A
497N/A args = new String[]
383N/A {
383N/A "-b", "",
383N/A "(invalidfilter)"
383N/A };
383N/A argLists.add(args);
497N/A reasonList.add("Invalid search filter");
383N/A
497N/A args = new String[]
383N/A {
383N/A "-b", "",
383N/A "--assertionFilter", "(invalidfilter)",
383N/A "(objectClass=*)"
383N/A };
383N/A argLists.add(args);
497N/A reasonList.add("Invalid assertion filter");
383N/A
497N/A args = new String[]
383N/A {
383N/A "-b", "",
383N/A "--matchedValuesFilter", "(invalidfilter)",
383N/A "(objectClass=*)"
383N/A };
383N/A argLists.add(args);
497N/A reasonList.add("Invalid matched values filter");
383N/A
497N/A args = new String[]
383N/A {
383N/A "-D", "cn=Directory Manager",
383N/A "-j", "no.such.file",
383N/A "-b", "",
383N/A "(objectClass=*)"
383N/A };
383N/A argLists.add(args);
497N/A reasonList.add("Invalid bind password file path");
383N/A
497N/A args = new String[]
383N/A {
383N/A "-D", "cn=Directory Manager",
383N/A "-w", "password",
383N/A "-j", validPasswordFile,
383N/A "-b", "",
383N/A "(objectClass=*)"
383N/A };
383N/A argLists.add(args);
497N/A reasonList.add("Both bind password and bind password file");
383N/A
497N/A args = new String[]
383N/A {
383N/A "-b", "",
383N/A "-V", "nonnumeric",
383N/A "(objectClass=*)"
383N/A };
383N/A argLists.add(args);
497N/A reasonList.add("Non-numeric LDAP version");
383N/A
497N/A args = new String[]
383N/A {
383N/A "-b", "",
383N/A "-V", "1",
383N/A "(objectClass=*)"
383N/A };
383N/A argLists.add(args);
497N/A reasonList.add("Invalid LDAP version");
383N/A
497N/A args = new String[]
383N/A {
383N/A "-b", "",
383N/A "-f", "no.such.file"
383N/A };
383N/A argLists.add(args);
497N/A reasonList.add("Invalid filter file path");
383N/A
497N/A args = new String[]
383N/A {
383N/A "-b", "",
383N/A "-J", "1.2.3.4:invalidcriticality",
383N/A "(objectClass=*)"
383N/A };
383N/A argLists.add(args);
497N/A reasonList.add("Invalid control criticality");
383N/A
497N/A args = new String[]
383N/A {
383N/A "-b", "",
383N/A "-s", "invalid",
383N/A "(objectClass=*)"
383N/A };
383N/A argLists.add(args);
497N/A reasonList.add("Invalid scope");
383N/A
497N/A args = new String[]
383N/A {
383N/A "-b", "",
383N/A "-a", "invalid",
383N/A "(objectClass=*)"
383N/A };
383N/A argLists.add(args);
497N/A reasonList.add("Invalid dereference policy");
383N/A
497N/A args = new String[]
383N/A {
383N/A "-b", "",
383N/A "-C", "invalid",
383N/A "(objectClass=*)"
383N/A };
383N/A argLists.add(args);
497N/A reasonList.add("Invalid psearch descriptor");
383N/A
497N/A args = new String[]
383N/A {
383N/A "-b", "",
383N/A "-C", "ps:invalid",
383N/A "(objectClass=*)"
383N/A };
383N/A argLists.add(args);
497N/A reasonList.add("Invalid psearch changetype");
383N/A
497N/A args = new String[]
383N/A {
383N/A "-b", "",
383N/A "-C", "ps:add,delete,modify,modifydn,invalid",
383N/A "(objectClass=*)"
383N/A };
383N/A argLists.add(args);
497N/A reasonList.add("Invalid psearch changetype in list");
383N/A
497N/A args = new String[]
383N/A {
383N/A "-b", "",
383N/A "-C", "ps:all:invalid",
383N/A "(objectClass=*)"
383N/A };
383N/A argLists.add(args);
497N/A reasonList.add("Invalid psearch changesOnly");
383N/A
497N/A args = new String[]
383N/A {
383N/A "-b", "",
383N/A "-C", "ps:all:1:invalid",
383N/A "(objectClass=*)"
383N/A };
383N/A argLists.add(args);
497N/A reasonList.add("Invalid psearch entryChangeControls");
383N/A
497N/A args = new String[]
383N/A {
383N/A "-p", "nonnumeric",
383N/A "-b", "",
383N/A "(objectClass=*)"
383N/A };
383N/A argLists.add(args);
497N/A reasonList.add("Non-numeric port");
383N/A
497N/A args = new String[]
383N/A {
383N/A "-p", "999999",
383N/A "-b", "",
383N/A "(objectClass=*)"
383N/A };
383N/A argLists.add(args);
497N/A reasonList.add("Port value out of range");
383N/A
497N/A args = new String[]
383N/A {
383N/A "-z", "nonnumeric",
383N/A "-b", "",
383N/A "(objectClass=*)"
383N/A };
383N/A argLists.add(args);
497N/A reasonList.add("Non-numeric size limit");
383N/A
497N/A args = new String[]
383N/A {
383N/A "-l", "nonnumeric",
383N/A "-b", "",
383N/A "(objectClass=*)"
383N/A };
383N/A argLists.add(args);
497N/A reasonList.add("Non-numeric time limit");
383N/A
497N/A args = new String[]
383N/A {
383N/A "-r",
383N/A "-b", "",
383N/A "-K", "key.store.file",
383N/A "(objectClass=*)"
383N/A };
383N/A argLists.add(args);
497N/A reasonList.add("SASL external without SSL or StartTLS");
383N/A
497N/A args = new String[]
383N/A {
383N/A "-Z",
383N/A "-r",
383N/A "-b", "",
383N/A "(objectClass=*)"
383N/A };
383N/A argLists.add(args);
497N/A reasonList.add("SASL external without a keystore file");
383N/A
383N/A
497N/A Object[][] returnArray = new Object[argLists.size()][2];
383N/A for (int i=0; i < argLists.size(); i++)
383N/A {
383N/A returnArray[i][0] = argLists.get(i);
497N/A returnArray[i][1] = reasonList.get(i);
383N/A }
383N/A return returnArray;
383N/A }
383N/A
383N/A
383N/A
383N/A /**
383N/A * Tests the LDAPSearch tool with sets of invalid arguments.
383N/A *
497N/A * @param args The set of arguments to use for the LDAPSearch tool.
497N/A * @param invalidReason The reason that the set of arguments is not valid.
383N/A */
383N/A @Test(dataProvider = "invalidArgs")
497N/A public void testInvalidArguments(String[] args, String invalidReason)
383N/A {
497N/A assertFalse(LDAPSearch.mainSearch(args, false, null, null) == 0,
497N/A "Should have been invalid because: " + invalidReason);
383N/A }
383N/A
383N/A
383N/A
383N/A /**
383N/A * Tests a simple LDAPv2 search.
383N/A */
383N/A @Test()
383N/A public void testSimpleLDAPv2Search()
383N/A {
383N/A String[] args =
383N/A {
383N/A "-h", "127.0.0.1",
383N/A "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
383N/A "-V", "2",
383N/A "-D", "cn=Directory Manager",
383N/A "-w", "password",
383N/A "-b", "",
383N/A "-s", "base",
2663N/A "--noPropertiesFile",
383N/A "(objectClass=*)"
383N/A };
383N/A
383N/A assertEquals(LDAPSearch.mainSearch(args, false, null, System.err), 0);
383N/A }
383N/A
383N/A
383N/A
383N/A /**
383N/A * Tests a simple LDAPv3 search.
383N/A */
383N/A @Test()
383N/A public void testSimpleLDAPv3Search()
383N/A {
383N/A String[] args =
383N/A {
383N/A "-h", "127.0.0.1",
383N/A "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
383N/A "-V", "3",
383N/A "-D", "cn=Directory Manager",
383N/A "-w", "password",
383N/A "-b", "",
383N/A "-s", "base",
2663N/A "--noPropertiesFile",
383N/A "(objectClass=*)"
383N/A };
383N/A
383N/A assertEquals(LDAPSearch.mainSearch(args, false, null, System.err), 0);
383N/A }
383N/A
383N/A
383N/A
383N/A /**
1924N/A * Tests a simple search with verbose output.
1924N/A */
1924N/A @Test()
1924N/A public void testSimpleVerboseSearch()
1924N/A {
1924N/A String[] args =
1924N/A {
1924N/A "-h", "127.0.0.1",
1924N/A "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
1924N/A "-v",
1924N/A "-D", "cn=Directory Manager",
1924N/A "-w", "password",
1924N/A "-b", "",
1924N/A "-s", "base",
2663N/A "--noPropertiesFile",
1924N/A "(objectClass=*)"
1924N/A };
1924N/A
1924N/A assertEquals(LDAPSearch.mainSearch(args, false, null, System.err), 0);
1924N/A }
1924N/A
1924N/A
1924N/A
1924N/A /**
1060N/A * Tests a simple invocation using the "--dry-run" option with a valid argument
962N/A * set.
962N/A */
962N/A @Test()
962N/A public void testNoOpSearchValidArguments()
962N/A {
962N/A String[] args =
962N/A {
962N/A "-h", "doesnt.need.to.resolve",
962N/A "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
962N/A "-V", "3",
962N/A "-D", "cn=Directory Manager",
962N/A "-w", "password",
962N/A "-b", "",
962N/A "-s", "base",
1060N/A "--dry-run",
2663N/A "--noPropertiesFile",
962N/A "(objectClass=*)"
962N/A };
962N/A
962N/A assertEquals(LDAPSearch.mainSearch(args, false, null, System.err), 0);
962N/A }
962N/A
962N/A
962N/A
962N/A /**
1060N/A * Tests a simple invocation using the "--dry-run" option with an invalid
962N/A * argument set.
962N/A */
962N/A @Test()
962N/A public void testNoOpSearchInvalidArguments()
962N/A {
962N/A String[] args =
962N/A {
962N/A "-h", "doesnt.need.to.resolve",
962N/A "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
962N/A "-V", "3",
962N/A "-D", "cn=Directory Manager",
962N/A "-w", "password",
962N/A "-b", "",
962N/A "-s", "invalid",
1060N/A "--dry-run",
2663N/A "--noPropertiesFile",
962N/A "(objectClass=*)"
962N/A };
962N/A
962N/A assertFalse(LDAPSearch.mainSearch(args, false, null, System.err) == 0);
962N/A }
962N/A
962N/A
962N/A
962N/A /**
383N/A * Tests a simple LDAP search over SSL using blind trust.
383N/A */
383N/A @Test()
383N/A public void testSimpleSearchSSLBlindTrust()
383N/A {
383N/A String[] args =
383N/A {
383N/A "-h", "127.0.0.1",
383N/A "-p", String.valueOf(TestCaseUtils.getServerLdapsPort()),
383N/A "-Z",
383N/A "-X",
383N/A "-b", "",
383N/A "-s", "base",
2663N/A "--noPropertiesFile",
383N/A "(objectClass=*)"
383N/A };
383N/A
383N/A assertEquals(LDAPSearch.mainSearch(args, false, null, System.err), 0);
383N/A }
383N/A
383N/A
383N/A
383N/A /**
383N/A * Tests a simple LDAP search over SSL using a trust store.
383N/A */
383N/A @Test()
383N/A public void testSimpleSearchSSLTrustStore()
383N/A {
3824N/A String trustStorePath = DirectoryServer.getInstanceRoot() + File.separator +
383N/A "config" + File.separator + "client.truststore";
383N/A
383N/A String[] args =
383N/A {
383N/A "-h", "127.0.0.1",
383N/A "-p", String.valueOf(TestCaseUtils.getServerLdapsPort()),
383N/A "-Z",
383N/A "-P", trustStorePath,
383N/A "-b", "",
383N/A "-s", "base",
2663N/A "--noPropertiesFile",
383N/A "(objectClass=*)"
383N/A };
383N/A
383N/A assertEquals(LDAPSearch.mainSearch(args, false, null, System.err), 0);
383N/A }
383N/A
383N/A
383N/A
383N/A /**
383N/A * Tests a simple LDAP search using StartTLS with blind trust.
383N/A */
383N/A @Test()
383N/A public void testSimpleSearchStartTLSBlindTrust()
383N/A {
383N/A String[] args =
383N/A {
383N/A "-h", "127.0.0.1",
383N/A "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
383N/A "-q",
383N/A "-X",
383N/A "-b", "",
383N/A "-s", "base",
2663N/A "--noPropertiesFile",
383N/A "(objectClass=*)"
383N/A };
383N/A
383N/A assertEquals(LDAPSearch.mainSearch(args, false, null, System.err), 0);
383N/A }
383N/A
383N/A
383N/A
383N/A /**
383N/A * Tests a simple LDAP search using StartTLS with a trust store.
383N/A */
383N/A @Test()
383N/A public void testSimpleSearchStartTLSTrustStore()
383N/A {
3824N/A String trustStorePath = DirectoryServer.getInstanceRoot() + File.separator +
383N/A "config" + File.separator + "client.truststore";
383N/A
383N/A String[] args =
383N/A {
383N/A "-h", "127.0.0.1",
383N/A "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
383N/A "-q",
383N/A "-P", trustStorePath,
383N/A "-b", "",
383N/A "-s", "base",
2663N/A "--noPropertiesFile",
383N/A "(objectClass=*)"
383N/A };
383N/A
383N/A assertEquals(LDAPSearch.mainSearch(args, false, null, System.err), 0);
383N/A }
383N/A
383N/A
383N/A
383N/A /**
383N/A * Tests a simple LDAP search over SSL using a trust store and SASL EXTERNAL
383N/A * authentication.
383N/A *
383N/A * @throws Exception If an unexpected problem occurs.
383N/A */
383N/A @Test()
383N/A public void testSimpleSearchSSLTrustStoreSASLExternal()
383N/A throws Exception
383N/A {
383N/A TestCaseUtils.initializeTestBackend(true);
383N/A
383N/A Entry e = TestCaseUtils.makeEntry(
383N/A "dn: cn=Test User,o=test",
383N/A "objectClass: top",
383N/A "objectClass: person",
383N/A "objectClass: organizationalPerson",
383N/A "objectClass: inetOrgPerson",
383N/A "cn: Test User",
383N/A "givenName: Test",
383N/A "sn: User");
383N/A
383N/A InternalClientConnection conn =
383N/A InternalClientConnection.getRootConnection();
383N/A AddOperation addOperation =
383N/A conn.processAdd(e.getDN(), e.getObjectClasses(), e.getUserAttributes(),
383N/A e.getOperationalAttributes());
383N/A assertEquals(addOperation.getResultCode(), ResultCode.SUCCESS);
383N/A
383N/A
3824N/A String keyStorePath = DirectoryServer.getInstanceRoot() + File.separator +
383N/A "config" + File.separator + "client.keystore";
3824N/A String trustStorePath = DirectoryServer.getInstanceRoot() + File.separator +
383N/A "config" + File.separator + "client.truststore";
383N/A
383N/A String[] args =
383N/A {
383N/A "-h", "127.0.0.1",
383N/A "-p", String.valueOf(TestCaseUtils.getServerLdapsPort()),
383N/A "-Z",
383N/A "-K", keyStorePath,
383N/A "-W", "password",
383N/A "-P", trustStorePath,
383N/A "-r",
383N/A "-b", "",
383N/A "-s", "base",
2663N/A "--noPropertiesFile",
383N/A "(objectClass=*)"
383N/A };
383N/A
383N/A assertEquals(LDAPSearch.mainSearch(args, false, null, System.err), 0);
383N/A }
383N/A
383N/A
383N/A
383N/A /**
867N/A * Tests a simple LDAP search over SSL using a trust store and SASL EXTERNAL
867N/A * authentication when explicitly specifying a valid client certificate.
867N/A *
867N/A * @throws Exception If an unexpected problem occurs.
867N/A */
867N/A @Test()
867N/A public void testSimpleSearchSSLTrustStoreSASLExternalValidClientCert()
867N/A throws Exception
867N/A {
867N/A TestCaseUtils.initializeTestBackend(true);
867N/A
867N/A Entry e = TestCaseUtils.makeEntry(
867N/A "dn: cn=Test User,o=test",
867N/A "objectClass: top",
867N/A "objectClass: person",
867N/A "objectClass: organizationalPerson",
867N/A "objectClass: inetOrgPerson",
867N/A "cn: Test User",
867N/A "givenName: Test",
867N/A "sn: User");
867N/A
867N/A InternalClientConnection conn =
867N/A InternalClientConnection.getRootConnection();
867N/A AddOperation addOperation =
867N/A conn.processAdd(e.getDN(), e.getObjectClasses(), e.getUserAttributes(),
867N/A e.getOperationalAttributes());
867N/A assertEquals(addOperation.getResultCode(), ResultCode.SUCCESS);
867N/A
867N/A
3824N/A String keyStorePath = DirectoryServer.getInstanceRoot() + File.separator +
867N/A "config" + File.separator + "client.keystore";
3824N/A String trustStorePath = DirectoryServer.getInstanceRoot() + File.separator +
867N/A "config" + File.separator + "client.truststore";
867N/A
867N/A String[] args =
867N/A {
867N/A "-h", "127.0.0.1",
867N/A "-p", String.valueOf(TestCaseUtils.getServerLdapsPort()),
867N/A "-Z",
867N/A "-K", keyStorePath,
867N/A "-W", "password",
867N/A "-N", "client-cert",
867N/A "-P", trustStorePath,
867N/A "-r",
867N/A "-b", "",
867N/A "-s", "base",
2663N/A "--noPropertiesFile",
867N/A "(objectClass=*)"
867N/A };
867N/A
867N/A assertEquals(LDAPSearch.mainSearch(args, false, null, System.err), 0);
867N/A }
867N/A
867N/A
867N/A
867N/A /**
867N/A * Tests a simple LDAP search over SSL using a trust store and SASL EXTERNAL
867N/A * authentication when explicitly specifying an invalid client certificate.
867N/A *
867N/A * @throws Exception If an unexpected problem occurs.
867N/A */
867N/A @Test()
867N/A public void testSimpleSearchSSLTrustStoreSASLExternalInvalidClientCert()
867N/A throws Exception
867N/A {
867N/A TestCaseUtils.initializeTestBackend(true);
867N/A
867N/A Entry e = TestCaseUtils.makeEntry(
867N/A "dn: cn=Test User,o=test",
867N/A "objectClass: top",
867N/A "objectClass: person",
867N/A "objectClass: organizationalPerson",
867N/A "objectClass: inetOrgPerson",
867N/A "cn: Test User",
867N/A "givenName: Test",
867N/A "sn: User");
867N/A
867N/A InternalClientConnection conn =
867N/A InternalClientConnection.getRootConnection();
867N/A AddOperation addOperation =
867N/A conn.processAdd(e.getDN(), e.getObjectClasses(), e.getUserAttributes(),
867N/A e.getOperationalAttributes());
867N/A assertEquals(addOperation.getResultCode(), ResultCode.SUCCESS);
867N/A
867N/A
3824N/A String keyStorePath = DirectoryServer.getInstanceRoot() + File.separator +
867N/A "config" + File.separator + "client.keystore";
3824N/A String trustStorePath = DirectoryServer.getInstanceRoot() + File.separator +
867N/A "config" + File.separator + "client.truststore";
867N/A
867N/A String[] args =
867N/A {
867N/A "-h", "127.0.0.1",
867N/A "-p", String.valueOf(TestCaseUtils.getServerLdapsPort()),
867N/A "-Z",
867N/A "-K", keyStorePath,
867N/A "-W", "password",
867N/A "-N", "invalid",
867N/A "-P", trustStorePath,
867N/A "-r",
867N/A "-b", "",
867N/A "-s", "base",
2663N/A "--noPropertiesFile",
867N/A "(objectClass=*)"
867N/A };
867N/A
867N/A assertFalse(LDAPSearch.mainSearch(args, false, null, null) == 0);
867N/A }
867N/A
867N/A
867N/A
867N/A /**
383N/A * Tests a simple LDAP search using StartTLS with a trust store and SASL
383N/A * EXTERNAL authentication.
383N/A *
383N/A * @throws Exception If an unexpected problem occurs.
383N/A */
383N/A @Test()
383N/A public void testSimpleSearchStartTLSTrustStoreSASLExternal()
383N/A throws Exception
383N/A {
383N/A TestCaseUtils.initializeTestBackend(true);
383N/A
383N/A Entry e = TestCaseUtils.makeEntry(
383N/A "dn: cn=Test User,o=test",
383N/A "objectClass: top",
383N/A "objectClass: person",
383N/A "objectClass: organizationalPerson",
383N/A "objectClass: inetOrgPerson",
383N/A "cn: Test User",
383N/A "givenName: Test",
383N/A "sn: User");
383N/A
383N/A InternalClientConnection conn =
383N/A InternalClientConnection.getRootConnection();
383N/A AddOperation addOperation =
383N/A conn.processAdd(e.getDN(), e.getObjectClasses(), e.getUserAttributes(),
383N/A e.getOperationalAttributes());
383N/A assertEquals(addOperation.getResultCode(), ResultCode.SUCCESS);
383N/A
383N/A
3824N/A String keyStorePath = DirectoryServer.getInstanceRoot() + File.separator +
383N/A "config" + File.separator + "client.keystore";
3824N/A String trustStorePath = DirectoryServer.getInstanceRoot() + File.separator +
383N/A "config" + File.separator + "client.truststore";
383N/A
383N/A String[] args =
383N/A {
383N/A "-h", "127.0.0.1",
383N/A "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
383N/A "-q",
383N/A "-K", keyStorePath,
383N/A "-W", "password",
383N/A "-P", trustStorePath,
383N/A "-r",
383N/A "-b", "",
383N/A "-s", "base",
2663N/A "--noPropertiesFile",
383N/A "(objectClass=*)"
383N/A };
383N/A
383N/A assertEquals(LDAPSearch.mainSearch(args, false, null, System.err), 0);
383N/A }
383N/A
383N/A
383N/A
383N/A /**
383N/A * Tests a simple search operation using CRAM-MD5 authentication.
383N/A *
383N/A * @throws Exception If an unexpected problem occurs.
383N/A */
383N/A @Test()
383N/A public void testCRAMMD5()
383N/A throws Exception
383N/A {
383N/A TestCaseUtils.initializeTestBackend(true);
383N/A
383N/A Entry e = TestCaseUtils.makeEntry(
383N/A "dn: uid=test.user,o=test",
383N/A "objectClass: top",
383N/A "objectClass: person",
383N/A "objectClass: organizationalPerson",
383N/A "objectClass: inetOrgPerson",
383N/A "uid: test.user",
383N/A "givenName: Test",
383N/A "sn: User",
383N/A "cn: Test User",
383N/A "userPassword: password",
549N/A "ds-pwp-password-policy-dn: cn=Clear UserPassword Policy," +
383N/A "cn=Password Policies,cn=config");
383N/A
383N/A InternalClientConnection conn =
383N/A InternalClientConnection.getRootConnection();
383N/A AddOperation addOperation =
383N/A conn.processAdd(e.getDN(), e.getObjectClasses(), e.getUserAttributes(),
383N/A e.getOperationalAttributes());
383N/A assertEquals(addOperation.getResultCode(), ResultCode.SUCCESS);
383N/A
383N/A
383N/A String[] args =
383N/A {
383N/A "-h", "127.0.0.1",
383N/A "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
383N/A "-o", "mech=CRAM-MD5",
383N/A "-o", "authid=u:test.user",
383N/A "-w", "password",
383N/A "-b", "",
383N/A "-s", "base",
2663N/A "--noPropertiesFile",
383N/A "(objectClass=*)"
383N/A };
383N/A
383N/A assertEquals(LDAPSearch.mainSearch(args, false, null, System.err), 0);
383N/A }
383N/A
383N/A
383N/A
383N/A /**
383N/A * Tests a simple search operation using CRAM-MD5 authentication.
383N/A *
383N/A * @throws Exception If an unexpected problem occurs.
383N/A */
383N/A @Test()
383N/A public void testDigestMD5()
383N/A throws Exception
383N/A {
383N/A TestCaseUtils.initializeTestBackend(true);
383N/A
383N/A Entry e = TestCaseUtils.makeEntry(
383N/A "dn: uid=test.user,o=test",
383N/A "objectClass: top",
383N/A "objectClass: person",
383N/A "objectClass: organizationalPerson",
383N/A "objectClass: inetOrgPerson",
383N/A "uid: test.user",
383N/A "givenName: Test",
383N/A "sn: User",
383N/A "cn: Test User",
383N/A "userPassword: password",
549N/A "ds-pwp-password-policy-dn: cn=Clear UserPassword Policy," +
383N/A "cn=Password Policies,cn=config");
383N/A
383N/A InternalClientConnection conn =
383N/A InternalClientConnection.getRootConnection();
383N/A AddOperation addOperation =
383N/A conn.processAdd(e.getDN(), e.getObjectClasses(), e.getUserAttributes(),
383N/A e.getOperationalAttributes());
383N/A assertEquals(addOperation.getResultCode(), ResultCode.SUCCESS);
383N/A
383N/A
383N/A String[] args =
383N/A {
383N/A "-h", "127.0.0.1",
383N/A "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
383N/A "-o", "mech=DIGEST-MD5",
383N/A "-o", "authid=u:test.user",
383N/A "-o", "authzid=u:test.user",
383N/A "-w", "password",
383N/A "-b", "",
383N/A "-s", "base",
2663N/A "--noPropertiesFile",
383N/A "(objectClass=*)"
383N/A };
383N/A
383N/A assertEquals(LDAPSearch.mainSearch(args, false, null, System.err), 0);
383N/A }
383N/A
383N/A
383N/A
383N/A /**
383N/A * Tests a simple search operation using PLAIN authentication.
383N/A *
383N/A * @throws Exception If an unexpected problem occurs.
383N/A */
383N/A @Test()
383N/A public void testPLAIN()
383N/A throws Exception
383N/A {
383N/A String[] args =
383N/A {
383N/A "-h", "127.0.0.1",
383N/A "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
383N/A "-o", "mech=PLAIN",
383N/A "-o", "authid=dn:cn=Directory Manager",
383N/A "-w", "password",
383N/A "-b", "",
383N/A "-s", "base",
3634N/A "--noPropertiesFile",
383N/A "(objectClass=*)"
383N/A };
383N/A
383N/A assertEquals(LDAPSearch.mainSearch(args, false, null, System.err), 0);
383N/A }
383N/A
383N/A
383N/A
383N/A /**
383N/A * Tests a search with a malformed bind DN.
383N/A */
383N/A @Test()
383N/A public void testMalformedBindDN()
383N/A {
383N/A String[] args =
383N/A {
383N/A "-h", "127.0.0.1",
383N/A "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
383N/A "-D", "malformed",
383N/A "-w", "password",
383N/A "-b", "",
383N/A "-s", "base",
2663N/A "--noPropertiesFile",
383N/A "(objectClass=*)"
383N/A };
383N/A
383N/A assertFalse(LDAPSearch.mainSearch(args, false, null, null) == 0);
383N/A }
383N/A
383N/A
383N/A
383N/A /**
383N/A * Tests a search with a nonexistent bind DN.
383N/A */
383N/A @Test()
383N/A public void testNonExistentBindDN()
383N/A {
383N/A String[] args =
383N/A {
383N/A "-h", "127.0.0.1",
383N/A "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
383N/A "-D", "cn=Does Not Exist",
383N/A "-w", "password",
383N/A "-b", "",
383N/A "-s", "base",
2663N/A "--noPropertiesFile",
383N/A "(objectClass=*)"
383N/A };
383N/A
383N/A assertFalse(LDAPSearch.mainSearch(args, false, null, null) == 0);
383N/A }
383N/A
383N/A
383N/A
383N/A /**
383N/A * Tests a search with an invalid password.
383N/A */
383N/A @Test()
383N/A public void testInvalidBindPassword()
383N/A {
383N/A String[] args =
383N/A {
383N/A "-h", "127.0.0.1",
383N/A "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
383N/A "-D", "cn=Directory Manager",
383N/A "-w", "wrongPassword",
383N/A "-b", "",
383N/A "-s", "base",
2663N/A "--noPropertiesFile",
383N/A "(objectClass=*)"
383N/A };
383N/A
383N/A assertFalse(LDAPSearch.mainSearch(args, false, null, null) == 0);
383N/A }
383N/A
383N/A
383N/A
383N/A /**
383N/A * Tests a search with a valid password read from a file.
383N/A *
383N/A * @throws Exception If an unexpected problem occurs.
383N/A */
383N/A @Test()
383N/A public void testValidPasswordFromFile()
383N/A throws Exception
383N/A {
383N/A String[] args =
383N/A {
383N/A "-h", "127.0.0.1",
383N/A "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
383N/A "-D", "cn=Directory Manager",
383N/A "-j", validPasswordFile,
383N/A "-b", "",
383N/A "-s", "base",
2663N/A "--noPropertiesFile",
383N/A "(objectClass=*)"
383N/A };
383N/A
383N/A assertEquals(LDAPSearch.mainSearch(args, false, null, System.err), 0);
383N/A }
383N/A
383N/A
383N/A
383N/A /**
383N/A * Tests a search with an invalid password read from a file.
383N/A *
383N/A * @throws Exception If an unexpected problem occurs.
383N/A */
383N/A @Test()
383N/A public void testInvalidPasswordFromFile()
383N/A throws Exception
383N/A {
383N/A String[] args =
383N/A {
383N/A "-h", "127.0.0.1",
383N/A "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
383N/A "-D", "cn=Directory Manager",
383N/A "-j", invalidPasswordFile,
383N/A "-b", "",
383N/A "-s", "base",
2663N/A "--noPropertiesFile",
383N/A "(objectClass=*)"
383N/A };
383N/A
383N/A assertFalse(LDAPSearch.mainSearch(args, false, null, null) == 0);
383N/A }
383N/A
383N/A
383N/A
383N/A /**
383N/A * Tests a search with a malformed base DN.
383N/A */
383N/A @Test()
383N/A public void testMalformedBaseDN()
383N/A {
383N/A String[] args =
383N/A {
383N/A "-h", "127.0.0.1",
383N/A "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
383N/A "-b", "malformed",
383N/A "-s", "base",
2663N/A "--noPropertiesFile",
383N/A "(objectClass=*)"
383N/A };
383N/A
383N/A assertFalse(LDAPSearch.mainSearch(args, false, null, null) == 0);
383N/A }
383N/A
383N/A
383N/A
383N/A /**
383N/A * Tests a search with a nonexistent base DN.
383N/A */
383N/A @Test()
383N/A public void testNonExistentBaseDN()
383N/A {
383N/A String[] args =
383N/A {
383N/A "-h", "127.0.0.1",
383N/A "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
383N/A "-b", "o=does not exist",
383N/A "-s", "base",
2663N/A "--noPropertiesFile",
383N/A "(objectClass=*)"
383N/A };
383N/A
383N/A assertFalse(LDAPSearch.mainSearch(args, false, null, null) == 0);
383N/A }
383N/A
383N/A
383N/A
383N/A /**
383N/A * Retrieves the set of valid search scopes.
383N/A *
383N/A * @return The set of valid search scopes.
383N/A */
383N/A @DataProvider(name = "scopes")
383N/A public Object[][] getSearchScopes()
383N/A {
383N/A return new Object[][]
383N/A {
383N/A new Object[] { "base" },
383N/A new Object[] { "one" },
383N/A new Object[] { "sub" },
383N/A new Object[] { "subordinate" },
383N/A };
383N/A }
383N/A
383N/A
383N/A
383N/A /**
383N/A * Tests searches with the various allowed search scopes.
383N/A *
383N/A * @param scope The scope to use for the search.
383N/A *
383N/A * @throws Exception If an unexpected problem occurs.
383N/A */
383N/A @Test(dataProvider = "scopes")
383N/A public void testSearchScopes(String scope)
383N/A throws Exception
383N/A {
383N/A TestCaseUtils.initializeTestBackend(true);
383N/A
383N/A String[] args =
383N/A {
383N/A "-h", "127.0.0.1",
383N/A "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
383N/A "-b", "o=test",
383N/A "-s", scope,
2663N/A "--noPropertiesFile",
383N/A "(objectClass=*)"
383N/A };
383N/A
383N/A assertEquals(LDAPSearch.mainSearch(args, false, null, System.err), 0);
383N/A }
383N/A
383N/A
383N/A
383N/A /**
383N/A * Retrieves the set of valid alias dereferencing policies.
383N/A *
383N/A * @return The set of valid alias dereferencing policies.
383N/A */
383N/A @DataProvider(name = "derefPolicies")
383N/A public Object[][] getDerefPolicies()
383N/A {
383N/A return new Object[][]
383N/A {
383N/A new Object[] { "never" },
383N/A new Object[] { "always" },
383N/A new Object[] { "search" },
383N/A new Object[] { "find" },
383N/A };
383N/A }
383N/A
383N/A
383N/A
383N/A /**
383N/A * Tests searches with the various allowed dereference policy values.
383N/A *
383N/A * @param derefPolicy The alias dereferencing policy for the search.
383N/A *
383N/A * @throws Exception If an unexpected problem occurs.
383N/A */
383N/A @Test(dataProvider = "derefPolicies")
383N/A public void testDerefPolicies(String derefPolicy)
383N/A throws Exception
383N/A {
383N/A TestCaseUtils.initializeTestBackend(true);
383N/A
383N/A String[] args =
383N/A {
383N/A "-h", "127.0.0.1",
383N/A "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
383N/A "-b", "o=test",
383N/A "-s", "base",
383N/A "-a", derefPolicy,
2663N/A "--noPropertiesFile",
383N/A "(objectClass=*)"
383N/A };
383N/A
383N/A assertEquals(LDAPSearch.mainSearch(args, false, null, System.err), 0);
383N/A }
383N/A
383N/A
383N/A
383N/A /**
383N/A * Tests with the typesOnly option.
383N/A */
383N/A @Test()
383N/A public void testTypesOnly()
383N/A throws Exception
383N/A {
383N/A TestCaseUtils.initializeTestBackend(true);
383N/A
383N/A String[] args =
383N/A {
383N/A "-h", "127.0.0.1",
383N/A "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
383N/A "-b", "o=test",
383N/A "-s", "base",
383N/A "-A",
2663N/A "--noPropertiesFile",
383N/A "(objectClass=*)"
383N/A };
383N/A
383N/A assertEquals(LDAPSearch.mainSearch(args, false, null, System.err), 0);
383N/A }
383N/A
383N/A
383N/A
383N/A /**
383N/A * Tests with the reportAuthzID option for an unauthenticated search.
383N/A */
383N/A @Test()
383N/A public void testReportAuthzIDUnauthenticated()
383N/A throws Exception
383N/A {
383N/A TestCaseUtils.initializeTestBackend(true);
383N/A
383N/A String[] args =
383N/A {
383N/A "-h", "127.0.0.1",
383N/A "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
383N/A "-b", "o=test",
383N/A "-s", "base",
383N/A "--reportAuthzID",
2663N/A "--noPropertiesFile",
383N/A "(objectClass=*)"
383N/A };
383N/A
383N/A assertEquals(LDAPSearch.mainSearch(args, false, null, System.err), 0);
383N/A }
383N/A
383N/A
383N/A
383N/A /**
383N/A * Tests with the reportAuthzID option for an authenticated search.
383N/A */
383N/A @Test()
383N/A public void testReportAuthzIDAuthenticated()
383N/A throws Exception
383N/A {
383N/A TestCaseUtils.initializeTestBackend(true);
383N/A
383N/A String[] args =
383N/A {
383N/A "-h", "127.0.0.1",
383N/A "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
383N/A "-D", "cn=Directory Manager",
383N/A "-w", "password",
383N/A "-b", "o=test",
383N/A "-s", "base",
383N/A "--reportAuthzID",
2663N/A "--noPropertiesFile",
383N/A "(objectClass=*)"
383N/A };
383N/A
383N/A assertEquals(LDAPSearch.mainSearch(args, false, null, System.err), 0);
383N/A }
383N/A
383N/A
383N/A
383N/A /**
383N/A * Tests with the usePasswordPolicyControl option for an authenticated search.
383N/A */
383N/A @Test()
383N/A public void testUsePasswordPolicyControl()
383N/A throws Exception
383N/A {
383N/A TestCaseUtils.initializeTestBackend(true);
383N/A
383N/A String[] args =
383N/A {
383N/A "-h", "127.0.0.1",
383N/A "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
383N/A "-D", "cn=Directory Manager",
383N/A "-w", "password",
383N/A "-b", "o=test",
383N/A "-s", "base",
383N/A "--usePasswordPolicyControl",
2663N/A "--noPropertiesFile",
383N/A "(objectClass=*)"
383N/A };
383N/A
383N/A assertEquals(LDAPSearch.mainSearch(args, false, null, System.err), 0);
383N/A }
383N/A
383N/A
383N/A
383N/A /**
383N/A * Tests with the account usability control for an authenticated search.
383N/A */
383N/A @Test()
383N/A public void testAccountUsabilityControl()
383N/A throws Exception
383N/A {
383N/A TestCaseUtils.initializeTestBackend(true);
383N/A
383N/A String[] args =
383N/A {
383N/A "-h", "127.0.0.1",
383N/A "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
383N/A "-D", "cn=Directory Manager",
383N/A "-w", "password",
383N/A "-b", "o=test",
383N/A "-s", "base",
383N/A "-J", OID_ACCOUNT_USABLE_CONTROL + ":true",
2663N/A "--noPropertiesFile",
383N/A "(objectClass=*)"
383N/A };
383N/A
383N/A assertEquals(LDAPSearch.mainSearch(args, false, null, System.err), 0);
383N/A }
383N/A
383N/A
383N/A
383N/A /**
556N/A * Tests with the account usability control with an alternate name for an
556N/A * authenticated search.
556N/A */
556N/A @Test()
556N/A public void testAccountUsabilityControlAltName()
556N/A throws Exception
556N/A {
556N/A TestCaseUtils.initializeTestBackend(true);
556N/A
556N/A String[] args =
556N/A {
556N/A "-h", "127.0.0.1",
556N/A "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
556N/A "-D", "cn=Directory Manager",
556N/A "-w", "password",
556N/A "-b", "o=test",
556N/A "-s", "base",
556N/A "-J", "accountusable:true",
2663N/A "--noPropertiesFile",
556N/A "(objectClass=*)"
556N/A };
556N/A
556N/A assertEquals(LDAPSearch.mainSearch(args, false, null, System.err), 0);
556N/A }
556N/A
556N/A
556N/A
556N/A /**
383N/A * Tests with the LDAP assertion control in which the assertion is true.
383N/A */
383N/A @Test()
383N/A public void testLDAPAssertionControlTrue()
383N/A throws Exception
383N/A {
383N/A TestCaseUtils.initializeTestBackend(true);
383N/A
383N/A String[] args =
383N/A {
383N/A "-h", "127.0.0.1",
383N/A "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
383N/A "-D", "cn=Directory Manager",
383N/A "-w", "password",
383N/A "-b", "o=test",
383N/A "-s", "base",
383N/A "--assertionFilter", "(objectClass=top)",
2663N/A "--noPropertiesFile",
383N/A "(objectClass=*)"
383N/A };
383N/A
383N/A assertEquals(LDAPSearch.mainSearch(args, false, null, System.err), 0);
383N/A }
383N/A
383N/A
383N/A
383N/A /**
383N/A * Tests with the LDAP assertion control in which the assertion is false.
383N/A */
383N/A @Test()
383N/A public void testLDAPAssertionControlFalse()
383N/A throws Exception
383N/A {
383N/A TestCaseUtils.initializeTestBackend(true);
383N/A
383N/A String[] args =
383N/A {
383N/A "-h", "127.0.0.1",
383N/A "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
383N/A "-D", "cn=Directory Manager",
383N/A "-w", "password",
383N/A "-b", "o=test",
383N/A "-s", "base",
383N/A "--assertionFilter", "(objectClass=doesNotMatch)",
2663N/A "--noPropertiesFile",
383N/A "(objectClass=*)"
383N/A };
383N/A
383N/A assertFalse(LDAPSearch.mainSearch(args, false, null, null) == 0);
383N/A }
383N/A
383N/A
383N/A
383N/A /**
383N/A * Tests with the LDAP matched values control.
383N/A */
383N/A @Test()
383N/A public void testMatchedValuesControl()
383N/A throws Exception
383N/A {
383N/A TestCaseUtils.initializeTestBackend(true);
383N/A
383N/A String[] args =
383N/A {
383N/A "-h", "127.0.0.1",
383N/A "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
383N/A "-D", "cn=Directory Manager",
383N/A "-w", "password",
383N/A "-b", "o=test",
383N/A "-s", "base",
383N/A "--matchedValuesFilter", "(objectClass=*person)",
2663N/A "--noPropertiesFile",
383N/A "(objectClass=*)",
383N/A "objectClass"
383N/A };
383N/A
383N/A assertEquals(LDAPSearch.mainSearch(args, false, null, System.err), 0);
383N/A }
383N/A
383N/A
383N/A
383N/A /**
556N/A * Tests the use of the LDAP subentries control.
556N/A *
556N/A * @throws Exception If an unexpected problem occurs.
556N/A */
556N/A @Test()
556N/A public void testSubentriesControl()
556N/A throws Exception
556N/A {
556N/A TestCaseUtils.initializeTestBackend(true);
556N/A
556N/A Entry e = TestCaseUtils.makeEntry("dn: cn=test,o=test",
556N/A "objectClass: top",
556N/A "objectClass: ldapSubEntry",
556N/A "cn: test");
556N/A
556N/A InternalClientConnection conn =
556N/A InternalClientConnection.getRootConnection();
556N/A AddOperation addOperation =
556N/A conn.processAdd(e.getDN(), e.getObjectClasses(), e.getUserAttributes(),
556N/A e.getOperationalAttributes());
556N/A assertEquals(addOperation.getResultCode(), ResultCode.SUCCESS);
556N/A
556N/A String[] args =
556N/A {
844N/A "-D", "cn=Directory Manager",
844N/A "-w", "password",
556N/A "-h", "127.0.0.1",
556N/A "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
556N/A "-b", "o=test",
556N/A "-s", "sub",
556N/A "--countEntries",
2663N/A "--noPropertiesFile",
556N/A "(objectClass=*)"
556N/A };
556N/A
4352N/A assertEquals(LDAPSearch.mainSearch(args, false, true, null, System.err), 1);
556N/A
556N/A args = new String[]
556N/A {
844N/A "-D", "cn=Directory Manager",
844N/A "-w", "password",
556N/A "-h", "127.0.0.1",
556N/A "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
556N/A "-b", "o=test",
556N/A "-s", "sub",
556N/A "--countEntries",
2663N/A "--noPropertiesFile",
4848N/A "--subEntries",
556N/A "(objectClass=*)"
556N/A };
556N/A
4848N/A assertEquals(LDAPSearch.mainSearch(args, false, true, null, System.err), 1);
556N/A
556N/A args = new String[]
556N/A {
844N/A "-D", "cn=Directory Manager",
844N/A "-w", "password",
556N/A "-h", "127.0.0.1",
556N/A "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
4848N/A "-b", "cn=test,o=test",
4848N/A "-s", "base",
556N/A "--countEntries",
2663N/A "--noPropertiesFile",
556N/A "(objectClass=*)"
556N/A };
556N/A
4848N/A assertEquals(LDAPSearch.mainSearch(args, false, true, null, System.err), 1);
556N/A }
556N/A
556N/A
556N/A
556N/A /**
553N/A * Tests the inclusion of multiple arbitrary controls in the request to the
553N/A * server.
553N/A *
553N/A * @throws Exception If an unexpectd problem occurs.
553N/A */
553N/A @Test()
553N/A public void testMultipleRequestControls()
553N/A throws Exception
553N/A {
553N/A TestCaseUtils.initializeTestBackend(true);
553N/A
553N/A String[] args =
553N/A {
553N/A "-h", "127.0.0.1",
553N/A "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
553N/A "-D", "cn=Directory Manager",
553N/A "-w", "password",
553N/A "-b", "o=test",
553N/A "-s", "base",
553N/A "-J", OID_ACCOUNT_USABLE_CONTROL + ":true",
553N/A "-J", OID_MANAGE_DSAIT_CONTROL + ":false",
2663N/A "--noPropertiesFile",
553N/A "(objectClass=*)"
553N/A };
553N/A
553N/A assertEquals(LDAPSearch.mainSearch(args, false, null, System.err), 0);
553N/A }
553N/A
553N/A
553N/A
553N/A /**
763N/A * Tests the use of the simple paged results control.
763N/A *
763N/A * @throws Exception If an unexpectd problem occurs.
763N/A */
763N/A @Test()
763N/A public void testSimplePagedResults()
763N/A throws Exception
763N/A {
763N/A TestCaseUtils.clearJEBackend(true, "userRoot", "dc=example,dc=com");
763N/A
763N/A TestCaseUtils.addEntries(
763N/A "dn: cn=device 1,dc=example,dc=com",
763N/A "objectClass: top",
763N/A "objectClass: device",
763N/A "cn: device 1",
763N/A "",
763N/A "dn: cn=device 2,dc=example,dc=com",
763N/A "objectClass: top",
763N/A "objectClass: device",
763N/A "cn: device 2",
763N/A "",
763N/A "dn: cn=device 3,dc=example,dc=com",
763N/A "objectClass: top",
763N/A "objectClass: device",
763N/A "cn: device 3",
763N/A "",
763N/A "dn: cn=device 4,dc=example,dc=com",
763N/A "objectClass: top",
763N/A "objectClass: device",
763N/A "cn: device 4",
763N/A "",
763N/A "dn: cn=device 5,dc=example,dc=com",
763N/A "objectClass: top",
763N/A "objectClass: device",
763N/A "cn: device 5");
763N/A
763N/A String[] args =
763N/A {
763N/A "-h", "127.0.0.1",
763N/A "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
763N/A "-D", "cn=Directory Manager",
763N/A "-w", "password",
763N/A "-b", "dc=example,dc=com",
763N/A "-s", "one",
763N/A "--simplePageSize", "2",
763N/A "--countEntries",
2663N/A "--noPropertiesFile",
763N/A "(objectClass=*)"
763N/A };
763N/A
4352N/A assertEquals(LDAPSearch.mainSearch(args, false, true, null, System.err), 5);
763N/A }
763N/A
763N/A
763N/A
763N/A /**
1211N/A * Tests the use of both the server-side sort control and the simple paged
1211N/A * results control.
1211N/A *
1211N/A * @throws Exception If an unexpectd problem occurs.
1211N/A */
1211N/A @Test()
1211N/A public void testSortWithPagedResults()
1211N/A throws Exception
1211N/A {
1211N/A TestCaseUtils.clearJEBackend(true, "userRoot", "dc=example,dc=com");
1211N/A
1211N/A TestCaseUtils.addEntries(
1211N/A "dn: uid=albert.zimmerman,dc=example,dc=com",
1211N/A "objectClass: top",
1211N/A "objectClass: person",
1211N/A "objectClass: organizationalPerson",
1211N/A "objectClass: inetOrgPerson",
1211N/A "uid: albert.zimmerman",
1211N/A "givenName: Albert",
1211N/A "sn: Zimmerman",
1211N/A "cn: Albert Zimmerman",
1211N/A "",
1211N/A "dn: uid=albert.smith,dc=example,dc=com",
1211N/A "objectClass: top",
1211N/A "objectClass: person",
1211N/A "objectClass: organizationalPerson",
1211N/A "objectClass: inetOrgPerson",
1211N/A "uid: albert.smith",
1211N/A "givenName: Albert",
1211N/A "sn: Smith",
1211N/A "cn: Albert Smith",
1211N/A "",
1211N/A "dn: uid=aaron.zimmerman,dc=example,dc=com",
1211N/A "objectClass: top",
1211N/A "objectClass: person",
1211N/A "objectClass: organizationalPerson",
1211N/A "objectClass: inetOrgPerson",
1211N/A "uid: albert.zimmerman",
1211N/A "givenName: Aaron",
1211N/A "givenName: Zeke",
1211N/A "sn: Zimmerman",
1211N/A "cn: Aaron Zimmerman",
1211N/A "",
1211N/A "dn: uid=mary.jones,dc=example,dc=com",
1211N/A "objectClass: top",
1211N/A "objectClass: person",
1211N/A "objectClass: organizationalPerson",
1211N/A "objectClass: inetOrgPerson",
1211N/A "uid: mary.jones",
1211N/A "givenName: Mary",
1211N/A "sn: Jones",
1211N/A "cn: Mary Jones",
1211N/A "",
1211N/A "dn: uid=margaret.jones,dc=example,dc=com",
1211N/A "objectClass: top",
1211N/A "objectClass: person",
1211N/A "objectClass: organizationalPerson",
1211N/A "objectClass: inetOrgPerson",
1211N/A "uid: margaret.jones",
1211N/A "givenName: Margaret",
1211N/A "givenName: Maggie",
1211N/A "sn: Jones",
1211N/A "sn: Smith",
1211N/A "cn: Maggie Jones-Smith",
1211N/A "",
1211N/A "dn: uid=aaccf.johnson,dc=example,dc=com",
1211N/A "objectClass: top",
1211N/A "objectClass: person",
1211N/A "objectClass: organizationalPerson",
1211N/A "objectClass: inetOrgPerson",
1211N/A "uid: aaccf.johnson",
1211N/A "givenName: Aaccf",
1211N/A "sn: Johnson",
1211N/A "cn: Aaccf Johnson",
1211N/A "",
1211N/A "dn: uid=sam.zweck,dc=example,dc=com",
1211N/A "objectClass: top",
1211N/A "objectClass: person",
1211N/A "objectClass: organizationalPerson",
1211N/A "objectClass: inetOrgPerson",
1211N/A "uid: sam.zweck",
1211N/A "givenName: Sam",
1211N/A "sn: Zweck",
1211N/A "cn: Sam Zweck",
1211N/A "",
1211N/A "dn: uid=lowercase.mcgee,dc=example,dc=com",
1211N/A "objectClass: top",
1211N/A "objectClass: person",
1211N/A "objectClass: organizationalPerson",
1211N/A "objectClass: inetOrgPerson",
1211N/A "uid: lowercase.mcgee",
1211N/A "givenName: lowercase",
1211N/A "sn: mcgee",
1211N/A "cn: lowercase mcgee",
1211N/A "",
1211N/A "dn: uid=zorro,dc=example,dc=com",
1211N/A "objectClass: top",
1211N/A "objectClass: person",
1211N/A "objectClass: organizationalPerson",
1211N/A "objectClass: inetOrgPerson",
1211N/A "uid: zorro",
1211N/A "sn: Zorro",
1211N/A "cn: Zorro");
1211N/A
1211N/A String[] pagedArgs =
1211N/A {
1211N/A "-h", "127.0.0.1",
1211N/A "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
1211N/A "-D", "cn=Directory Manager",
1211N/A "-w", "password",
1211N/A "-b", "dc=example,dc=com",
1211N/A "-s", "sub",
1211N/A "-S", "givenName",
1211N/A "--simplePageSize", "2",
1211N/A "--countEntries",
2663N/A "--noPropertiesFile",
1211N/A "(objectClass=*)"
1211N/A };
1211N/A
1211N/A String[] unpagedArgs =
1211N/A {
1211N/A "-h", "127.0.0.1",
1211N/A "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
1211N/A "-D", "cn=Directory Manager",
1211N/A "-w", "password",
1211N/A "-b", "dc=example,dc=com",
1211N/A "-s", "sub",
1211N/A "-S", "givenName",
1211N/A "--countEntries",
2663N/A "--noPropertiesFile",
1211N/A "(objectClass=*)"
1211N/A };
1211N/A
4352N/A assertEquals(
4352N/A LDAPSearch.mainSearch(pagedArgs, false, true, null, System.err),
4352N/A LDAPSearch.mainSearch(unpagedArgs, false, true, null, System.err));
1211N/A }
1211N/A
1211N/A
1211N/A
1211N/A /**
1211N/A * Tests the use of the server-side sort control with valid sort criteria.
1211N/A *
1211N/A * @throws Exception If an unexpectd problem occurs.
1211N/A */
1211N/A @Test()
1211N/A public void testSortValidGivenNameAscending()
1211N/A throws Exception
1211N/A {
1211N/A TestCaseUtils.clearJEBackend(true, "userRoot", "dc=example,dc=com");
1211N/A
1211N/A TestCaseUtils.addEntries(
1211N/A "dn: uid=albert.zimmerman,dc=example,dc=com",
1211N/A "objectClass: top",
1211N/A "objectClass: person",
1211N/A "objectClass: organizationalPerson",
1211N/A "objectClass: inetOrgPerson",
1211N/A "uid: albert.zimmerman",
1211N/A "givenName: Albert",
1211N/A "sn: Zimmerman",
1211N/A "cn: Albert Zimmerman",
1211N/A "",
1211N/A "dn: uid=albert.smith,dc=example,dc=com",
1211N/A "objectClass: top",
1211N/A "objectClass: person",
1211N/A "objectClass: organizationalPerson",
1211N/A "objectClass: inetOrgPerson",
1211N/A "uid: albert.smith",
1211N/A "givenName: Albert",
1211N/A "sn: Smith",
1211N/A "cn: Albert Smith",
1211N/A "",
1211N/A "dn: uid=aaron.zimmerman,dc=example,dc=com",
1211N/A "objectClass: top",
1211N/A "objectClass: person",
1211N/A "objectClass: organizationalPerson",
1211N/A "objectClass: inetOrgPerson",
1211N/A "uid: albert.zimmerman",
1211N/A "givenName: Aaron",
1211N/A "givenName: Zeke",
1211N/A "sn: Zimmerman",
1211N/A "cn: Aaron Zimmerman");
1211N/A
1211N/A String[] args =
1211N/A {
1211N/A "-h", "127.0.0.1",
1211N/A "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
1211N/A "-D", "cn=Directory Manager",
1211N/A "-w", "password",
1211N/A "-b", "dc=example,dc=com",
1211N/A "-s", "sub",
1211N/A "-S", "givenName",
2663N/A "--noPropertiesFile",
1211N/A "(objectClass=*)"
1211N/A };
1211N/A
1211N/A assertEquals(LDAPSearch.mainSearch(args, false, null, System.err), 0);
1211N/A }
1211N/A
1211N/A
1211N/A
1211N/A /**
1211N/A * Tests the use of the server-side sort control with valid sort criteria.
1211N/A *
1211N/A * @throws Exception If an unexpectd problem occurs.
1211N/A */
1211N/A @Test()
1211N/A public void testSortValidGivenNameDescending()
1211N/A throws Exception
1211N/A {
1211N/A TestCaseUtils.clearJEBackend(true, "userRoot", "dc=example,dc=com");
1211N/A
1211N/A TestCaseUtils.addEntries(
1211N/A "dn: uid=albert.zimmerman,dc=example,dc=com",
1211N/A "objectClass: top",
1211N/A "objectClass: person",
1211N/A "objectClass: organizationalPerson",
1211N/A "objectClass: inetOrgPerson",
1211N/A "uid: albert.zimmerman",
1211N/A "givenName: Albert",
1211N/A "sn: Zimmerman",
1211N/A "cn: Albert Zimmerman",
1211N/A "",
1211N/A "dn: uid=albert.smith,dc=example,dc=com",
1211N/A "objectClass: top",
1211N/A "objectClass: person",
1211N/A "objectClass: organizationalPerson",
1211N/A "objectClass: inetOrgPerson",
1211N/A "uid: albert.smith",
1211N/A "givenName: Albert",
1211N/A "sn: Smith",
1211N/A "cn: Albert Smith",
1211N/A "",
1211N/A "dn: uid=aaron.zimmerman,dc=example,dc=com",
1211N/A "objectClass: top",
1211N/A "objectClass: person",
1211N/A "objectClass: organizationalPerson",
1211N/A "objectClass: inetOrgPerson",
1211N/A "uid: albert.zimmerman",
1211N/A "givenName: Aaron",
1211N/A "givenName: Zeke",
1211N/A "sn: Zimmerman",
1211N/A "cn: Aaron Zimmerman");
1211N/A
1211N/A String[] args =
1211N/A {
1211N/A "-h", "127.0.0.1",
1211N/A "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
1211N/A "-D", "cn=Directory Manager",
1211N/A "-w", "password",
1211N/A "-b", "dc=example,dc=com",
1211N/A "-s", "sub",
1211N/A "-S", "-givenName",
2663N/A "--noPropertiesFile",
1211N/A "(objectClass=*)"
1211N/A };
1211N/A
1211N/A assertEquals(LDAPSearch.mainSearch(args, false, null, System.err), 0);
1211N/A }
1211N/A
1211N/A
1211N/A
1211N/A /**
1211N/A * Tests the use of the server-side sort control with valid sort criteria.
1211N/A *
1211N/A * @throws Exception If an unexpectd problem occurs.
1211N/A */
1211N/A @Test()
1211N/A public void testSortValidGivenNameAscendingCaseExactOrderingMatch()
1211N/A throws Exception
1211N/A {
1211N/A TestCaseUtils.clearJEBackend(true, "userRoot", "dc=example,dc=com");
1211N/A
1211N/A TestCaseUtils.addEntries(
1211N/A "dn: uid=albert.zimmerman,dc=example,dc=com",
1211N/A "objectClass: top",
1211N/A "objectClass: person",
1211N/A "objectClass: organizationalPerson",
1211N/A "objectClass: inetOrgPerson",
1211N/A "uid: albert.zimmerman",
1211N/A "givenName: Albert",
1211N/A "sn: Zimmerman",
1211N/A "cn: Albert Zimmerman",
1211N/A "",
1211N/A "dn: uid=albert.smith,dc=example,dc=com",
1211N/A "objectClass: top",
1211N/A "objectClass: person",
1211N/A "objectClass: organizationalPerson",
1211N/A "objectClass: inetOrgPerson",
1211N/A "uid: albert.smith",
1211N/A "givenName: Albert",
1211N/A "sn: Smith",
1211N/A "cn: Albert Smith",
1211N/A "",
1211N/A "dn: uid=aaron.zimmerman,dc=example,dc=com",
1211N/A "objectClass: top",
1211N/A "objectClass: person",
1211N/A "objectClass: organizationalPerson",
1211N/A "objectClass: inetOrgPerson",
1211N/A "uid: albert.zimmerman",
1211N/A "givenName: Aaron",
1211N/A "givenName: Zeke",
1211N/A "sn: Zimmerman",
1211N/A "cn: Aaron Zimmerman");
1211N/A
1211N/A String[] args =
1211N/A {
1211N/A "-h", "127.0.0.1",
1211N/A "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
1211N/A "-D", "cn=Directory Manager",
1211N/A "-w", "password",
1211N/A "-b", "dc=example,dc=com",
1211N/A "-s", "sub",
1211N/A "-S", "givenName:caseExactOrderingMatch",
2663N/A "--noPropertiesFile",
1211N/A "(objectClass=*)"
1211N/A };
1211N/A
1211N/A assertEquals(LDAPSearch.mainSearch(args, false, null, System.err), 0);
1211N/A }
1211N/A
1211N/A
1211N/A
1211N/A /**
1211N/A * Tests the use of the server-side sort control with valid sort criteria.
1211N/A *
1211N/A * @throws Exception If an unexpectd problem occurs.
1211N/A */
1211N/A @Test()
1211N/A public void testSortValidSnAscendingGivenNameAscending()
1211N/A throws Exception
1211N/A {
1211N/A TestCaseUtils.clearJEBackend(true, "userRoot", "dc=example,dc=com");
1211N/A
1211N/A TestCaseUtils.addEntries(
1211N/A "dn: uid=albert.zimmerman,dc=example,dc=com",
1211N/A "objectClass: top",
1211N/A "objectClass: person",
1211N/A "objectClass: organizationalPerson",
1211N/A "objectClass: inetOrgPerson",
1211N/A "uid: albert.zimmerman",
1211N/A "givenName: Albert",
1211N/A "sn: Zimmerman",
1211N/A "cn: Albert Zimmerman",
1211N/A "",
1211N/A "dn: uid=albert.smith,dc=example,dc=com",
1211N/A "objectClass: top",
1211N/A "objectClass: person",
1211N/A "objectClass: organizationalPerson",
1211N/A "objectClass: inetOrgPerson",
1211N/A "uid: albert.smith",
1211N/A "givenName: Albert",
1211N/A "sn: Smith",
1211N/A "cn: Albert Smith",
1211N/A "",
1211N/A "dn: uid=aaron.zimmerman,dc=example,dc=com",
1211N/A "objectClass: top",
1211N/A "objectClass: person",
1211N/A "objectClass: organizationalPerson",
1211N/A "objectClass: inetOrgPerson",
1211N/A "uid: albert.zimmerman",
1211N/A "givenName: Aaron",
1211N/A "givenName: Zeke",
1211N/A "sn: Zimmerman",
1211N/A "cn: Aaron Zimmerman");
1211N/A
1211N/A String[] args =
1211N/A {
1211N/A "-h", "127.0.0.1",
1211N/A "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
1211N/A "-D", "cn=Directory Manager",
1211N/A "-w", "password",
1211N/A "-b", "dc=example,dc=com",
1211N/A "-s", "sub",
1211N/A "-S", "sn,givenName",
2663N/A "--noPropertiesFile",
1211N/A "(objectClass=*)"
1211N/A };
1211N/A
1211N/A assertEquals(LDAPSearch.mainSearch(args, false, null, System.err), 0);
1211N/A }
1211N/A
1211N/A
1211N/A
1211N/A /**
1211N/A * Tests the use of the server-side sort control with valid sort criteria.
1211N/A *
1211N/A * @throws Exception If an unexpectd problem occurs.
1211N/A */
1211N/A @Test()
1211N/A public void testSortValidSnAscendingGivenNameDescending()
1211N/A throws Exception
1211N/A {
1211N/A TestCaseUtils.clearJEBackend(true, "userRoot", "dc=example,dc=com");
1211N/A
1211N/A TestCaseUtils.addEntries(
1211N/A "dn: uid=albert.zimmerman,dc=example,dc=com",
1211N/A "objectClass: top",
1211N/A "objectClass: person",
1211N/A "objectClass: organizationalPerson",
1211N/A "objectClass: inetOrgPerson",
1211N/A "uid: albert.zimmerman",
1211N/A "givenName: Albert",
1211N/A "sn: Zimmerman",
1211N/A "cn: Albert Zimmerman",
1211N/A "",
1211N/A "dn: uid=albert.smith,dc=example,dc=com",
1211N/A "objectClass: top",
1211N/A "objectClass: person",
1211N/A "objectClass: organizationalPerson",
1211N/A "objectClass: inetOrgPerson",
1211N/A "uid: albert.smith",
1211N/A "givenName: Albert",
1211N/A "sn: Smith",
1211N/A "cn: Albert Smith",
1211N/A "",
1211N/A "dn: uid=aaron.zimmerman,dc=example,dc=com",
1211N/A "objectClass: top",
1211N/A "objectClass: person",
1211N/A "objectClass: organizationalPerson",
1211N/A "objectClass: inetOrgPerson",
1211N/A "uid: albert.zimmerman",
1211N/A "givenName: Aaron",
1211N/A "givenName: Zeke",
1211N/A "sn: Zimmerman",
1211N/A "cn: Aaron Zimmerman");
1211N/A
1211N/A String[] args =
1211N/A {
1211N/A "-h", "127.0.0.1",
1211N/A "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
1211N/A "-D", "cn=Directory Manager",
1211N/A "-w", "password",
1211N/A "-b", "dc=example,dc=com",
1211N/A "-s", "sub",
1211N/A "-S", "sn,-givenName",
2663N/A "--noPropertiesFile",
1211N/A "(objectClass=*)"
1211N/A };
1211N/A
1211N/A assertEquals(LDAPSearch.mainSearch(args, false, null, System.err), 0);
1211N/A }
1211N/A
1211N/A
1211N/A
1211N/A /**
1211N/A * Tests the use of the server-side sort control with an empty sort order.
1211N/A *
1211N/A * @throws Exception If an unexpectd problem occurs.
1211N/A */
1211N/A @Test()
1211N/A public void testSortEmptySortOrder()
1211N/A throws Exception
1211N/A {
1211N/A TestCaseUtils.clearJEBackend(true, "userRoot", "dc=example,dc=com");
1211N/A
1211N/A String[] args =
1211N/A {
1211N/A "-h", "127.0.0.1",
1211N/A "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
1211N/A "-D", "cn=Directory Manager",
1211N/A "-w", "password",
1211N/A "-b", "dc=example,dc=com",
1211N/A "-s", "sub",
1211N/A "-S", "",
2663N/A "--noPropertiesFile",
1211N/A "(objectClass=*)"
1211N/A };
1211N/A
1211N/A assertFalse(LDAPSearch.mainSearch(args, false, null, null) == 0);
1211N/A }
1211N/A
1211N/A
1211N/A
1211N/A /**
1211N/A * Tests the use of the server-side sort control with a sort order containing
1211N/A * a key with no attribute type.
1211N/A *
1211N/A * @throws Exception If an unexpectd problem occurs.
1211N/A */
1211N/A @Test()
1211N/A public void testSortSortOrderMissingType()
1211N/A throws Exception
1211N/A {
1211N/A TestCaseUtils.clearJEBackend(true, "userRoot", "dc=example,dc=com");
1211N/A
1211N/A String[] args =
1211N/A {
1211N/A "-h", "127.0.0.1",
1211N/A "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
1211N/A "-D", "cn=Directory Manager",
1211N/A "-w", "password",
1211N/A "-b", "dc=example,dc=com",
1211N/A "-s", "sub",
1211N/A "-S", "-,sn",
2663N/A "--noPropertiesFile",
1211N/A "(objectClass=*)"
1211N/A };
1211N/A
1211N/A assertFalse(LDAPSearch.mainSearch(args, false, null, null) == 0);
1211N/A }
1211N/A
1211N/A
1211N/A
1211N/A /**
1211N/A * Tests the use of the server-side sort control with a sort order containing
1211N/A * a key with a colon but no matching rule.
1211N/A *
1211N/A * @throws Exception If an unexpectd problem occurs.
1211N/A */
1211N/A @Test()
1211N/A public void testSortSortOrderMissingMatchingRule()
1211N/A throws Exception
1211N/A {
1211N/A TestCaseUtils.clearJEBackend(true, "userRoot", "dc=example,dc=com");
1211N/A
1211N/A String[] args =
1211N/A {
1211N/A "-h", "127.0.0.1",
1211N/A "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
1211N/A "-D", "cn=Directory Manager",
1211N/A "-w", "password",
1211N/A "-b", "dc=example,dc=com",
1211N/A "-s", "sub",
1211N/A "-S", "-sn:",
2663N/A "--noPropertiesFile",
1211N/A "(objectClass=*)"
1211N/A };
1211N/A
1211N/A assertFalse(LDAPSearch.mainSearch(args, false, null, null) == 0);
1211N/A }
1211N/A
1211N/A
1211N/A
1211N/A /**
1211N/A * Tests the use of the server-side sort control with an undefined attribute.
1211N/A *
1211N/A * @throws Exception If an unexpectd problem occurs.
1211N/A */
1211N/A @Test()
1211N/A public void testSortUndefinedAttribute()
1211N/A throws Exception
1211N/A {
1211N/A TestCaseUtils.clearJEBackend(true, "userRoot", "dc=example,dc=com");
6105N/A
1211N/A String[] args =
1211N/A {
1211N/A "-h", "127.0.0.1",
1211N/A "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
1211N/A "-D", "cn=Directory Manager",
1211N/A "-w", "password",
1211N/A "-b", "dc=example,dc=com",
1211N/A "-s", "sub",
1211N/A "-S", "undefined",
2663N/A "--noPropertiesFile",
1211N/A "(objectClass=*)"
1211N/A };
1211N/A
6105N/A assertEquals(LDAPSearch.mainSearch(args, false, null, null), 0);
1211N/A }
1211N/A
1211N/A
1211N/A
1211N/A /**
1211N/A * Tests the use of the server-side sort control with an undefined ordering
1211N/A * rule.
1211N/A *
1211N/A * @throws Exception If an unexpectd problem occurs.
1211N/A */
1211N/A @Test()
1211N/A public void testSortUndefinedOrderingRule()
1211N/A throws Exception
1211N/A {
1211N/A TestCaseUtils.clearJEBackend(true, "userRoot", "dc=example,dc=com");
1211N/A
1211N/A String[] args =
1211N/A {
1211N/A "-h", "127.0.0.1",
1211N/A "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
1211N/A "-D", "cn=Directory Manager",
1211N/A "-w", "password",
1211N/A "-b", "dc=example,dc=com",
1211N/A "-s", "sub",
1211N/A "-S", "givenName:undefined",
2663N/A "--noPropertiesFile",
1211N/A "(objectClass=*)"
1211N/A };
1211N/A
1211N/A assertFalse(LDAPSearch.mainSearch(args, false, null, null) == 0);
1211N/A }
1211N/A
5419N/A /**
5419N/A * Tests the use of a control with an empty value.
5419N/A * We use the ManageDSAIt control for this.
5419N/A *
5419N/A * @throws Exception If an unexpected problem occurs.
5419N/A */
5419N/A @Test()
5419N/A public void testControlNoValue()
5419N/A throws Exception
5419N/A {
5419N/A TestCaseUtils.initializeTestBackend(true);
5419N/A
5419N/A String[] args =
5419N/A {
5419N/A "-h", "127.0.0.1",
5419N/A "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
5419N/A "-D", "cn=Directory Manager",
5419N/A "-w", "password",
5419N/A "-b", "o=test",
5419N/A "-s", "base",
5419N/A "-J", "managedsait:false:",
5419N/A "--noPropertiesFile",
5419N/A "(objectClass=*)",
5419N/A "dn"
5419N/A };
5419N/A
6105N/A assertEquals(LDAPSearch.mainSearch(args, false, null, null), 0);
5419N/A }
5419N/A
1211N/A
1211N/A
1211N/A /**
1224N/A * Tests the use of the virtual list view control without the server-side sort
1224N/A * control.
1224N/A *
1224N/A * @throws Exception If an unexpected problem occurs.
1224N/A */
1224N/A @Test()
1224N/A public void testVLVWithoutSort()
1224N/A throws Exception
1224N/A {
5419N/A // Test is supposed to fail in parsing arguments. But we do not
5419N/A // want it to fail because there no backend to search in.
5419N/A TestCaseUtils.clearJEBackend(true, "userRoot", "dc=example,dc=com");
5419N/A
1224N/A String[] args =
1224N/A {
1224N/A "-h", "127.0.0.1",
1224N/A "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
1224N/A "-D", "cn=Directory Manager",
1224N/A "-w", "password",
1224N/A "-b", "dc=example,dc=com",
1224N/A "-s", "sub",
1224N/A "-G", "0:9:1:0",
2663N/A "--noPropertiesFile",
1224N/A "(objectClass=*)"
1224N/A };
1224N/A
1224N/A assertFalse(LDAPSearch.mainSearch(args, false, null, null) == 0);
1224N/A }
1224N/A
1224N/A
1224N/A
1224N/A /**
1224N/A * Tests the use of the server-side sort control with both the simple paged
1224N/A * results and virtual list view controls.
1224N/A *
1224N/A * @throws Exception If an unexpectd problem occurs.
1224N/A */
1224N/A @Test()
1224N/A public void testSortWithVLVAndPagedResults()
1224N/A throws Exception
1224N/A {
1224N/A TestCaseUtils.clearJEBackend(true, "userRoot", "dc=example,dc=com");
1224N/A
1224N/A String[] args =
1224N/A {
1224N/A "-h", "127.0.0.1",
1224N/A "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
1224N/A "-D", "cn=Directory Manager",
1224N/A "-w", "password",
1224N/A "-b", "dc=example,dc=com",
1224N/A "-s", "sub",
1224N/A "-S", "sn,givenName",
1224N/A "--simplePageSize", "2",
1224N/A "-G", "0:3:1:0",
2663N/A "--noPropertiesFile",
1224N/A "(objectClass=*)"
1224N/A };
1224N/A
1224N/A assertFalse(LDAPSearch.mainSearch(args, false, null, null) == 0);
1224N/A }
1224N/A
1224N/A
1224N/A
1224N/A /**
1224N/A * Tests the use of the virtual list view control with an invalid descriptor
1224N/A * with no colons.
1224N/A *
1224N/A * @throws Exception If an unexpected problem occurs.
1224N/A */
1224N/A @Test()
1224N/A public void testVLVInvalidDescriptorNoColons()
1224N/A throws Exception
1224N/A {
1224N/A String[] args =
1224N/A {
1224N/A "-h", "127.0.0.1",
1224N/A "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
1224N/A "-D", "cn=Directory Manager",
1224N/A "-w", "password",
1224N/A "-b", "dc=example,dc=com",
1224N/A "-s", "sub",
1224N/A "-S", "sn,givenName",
1224N/A "-G", "invalid",
2663N/A "--noPropertiesFile",
1224N/A "(objectClass=*)"
1224N/A };
1224N/A
1224N/A assertFalse(LDAPSearch.mainSearch(args, false, null, null) == 0);
1224N/A }
1224N/A
1224N/A
1224N/A
1224N/A /**
1224N/A * Tests the use of the virtual list view control with an invalid descriptor
1224N/A * with two colons.
1224N/A *
1224N/A * @throws Exception If an unexpected problem occurs.
1224N/A */
1224N/A @Test()
1224N/A public void testVLVInvalidDescriptorTwoColons()
1224N/A throws Exception
1224N/A {
1224N/A String[] args =
1224N/A {
1224N/A "-h", "127.0.0.1",
1224N/A "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
1224N/A "-D", "cn=Directory Manager",
1224N/A "-w", "password",
1224N/A "-b", "dc=example,dc=com",
1224N/A "-s", "sub",
1224N/A "-S", "sn,givenName",
1224N/A "-G", "invalid:9:invalid",
2663N/A "--noPropertiesFile",
1224N/A "(objectClass=*)"
1224N/A };
1224N/A
1224N/A assertFalse(LDAPSearch.mainSearch(args, false, null, null) == 0);
1224N/A }
1224N/A
1224N/A
1224N/A
1224N/A /**
1224N/A * Tests the use of the virtual list view control with an invalid descriptor
1224N/A * with three colons.
1224N/A *
1224N/A * @throws Exception If an unexpected problem occurs.
1224N/A */
1224N/A @Test()
1224N/A public void testVLVInvalidDescriptorThreeColons()
1224N/A throws Exception
1224N/A {
1224N/A String[] args =
1224N/A {
1224N/A "-h", "127.0.0.1",
1224N/A "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
1224N/A "-D", "cn=Directory Manager",
1224N/A "-w", "password",
1224N/A "-b", "dc=example,dc=com",
1224N/A "-s", "sub",
1224N/A "-S", "sn,givenName",
1224N/A "-G", "invalid:9:1:0",
2663N/A "--noPropertiesFile",
1224N/A "(objectClass=*)"
1224N/A };
1224N/A
1224N/A assertFalse(LDAPSearch.mainSearch(args, false, null, null) == 0);
1224N/A }
1224N/A
1224N/A
1224N/A
1224N/A /**
1224N/A * Tests the use of both the server-side sort control and the virtual list
1224N/A * view control.
1224N/A *
1224N/A * @throws Exception If an unexpectd problem occurs.
1224N/A */
1224N/A @Test()
1224N/A public void testSortWithVLV()
1224N/A throws Exception
1224N/A {
1224N/A TestCaseUtils.clearJEBackend(true, "userRoot", "dc=example,dc=com");
1224N/A
1224N/A TestCaseUtils.addEntries(
1224N/A "dn: uid=albert.zimmerman,dc=example,dc=com",
1224N/A "objectClass: top",
1224N/A "objectClass: person",
1224N/A "objectClass: organizationalPerson",
1224N/A "objectClass: inetOrgPerson",
1224N/A "uid: albert.zimmerman",
1224N/A "givenName: Albert",
1224N/A "sn: Zimmerman",
1224N/A "cn: Albert Zimmerman",
1224N/A "",
1224N/A "dn: uid=albert.smith,dc=example,dc=com",
1224N/A "objectClass: top",
1224N/A "objectClass: person",
1224N/A "objectClass: organizationalPerson",
1224N/A "objectClass: inetOrgPerson",
1224N/A "uid: albert.smith",
1224N/A "givenName: Albert",
1224N/A "sn: Smith",
1224N/A "cn: Albert Smith",
1224N/A "",
1224N/A "dn: uid=aaron.zimmerman,dc=example,dc=com",
1224N/A "objectClass: top",
1224N/A "objectClass: person",
1224N/A "objectClass: organizationalPerson",
1224N/A "objectClass: inetOrgPerson",
1224N/A "uid: albert.zimmerman",
1224N/A "givenName: Aaron",
1224N/A "givenName: Zeke",
1224N/A "sn: Zimmerman",
1224N/A "cn: Aaron Zimmerman",
1224N/A "",
1224N/A "dn: uid=mary.jones,dc=example,dc=com",
1224N/A "objectClass: top",
1224N/A "objectClass: person",
1224N/A "objectClass: organizationalPerson",
1224N/A "objectClass: inetOrgPerson",
1224N/A "uid: mary.jones",
1224N/A "givenName: Mary",
1224N/A "sn: Jones",
1224N/A "cn: Mary Jones",
1224N/A "",
1224N/A "dn: uid=margaret.jones,dc=example,dc=com",
1224N/A "objectClass: top",
1224N/A "objectClass: person",
1224N/A "objectClass: organizationalPerson",
1224N/A "objectClass: inetOrgPerson",
1224N/A "uid: margaret.jones",
1224N/A "givenName: Margaret",
1224N/A "givenName: Maggie",
1224N/A "sn: Jones",
1224N/A "sn: Smith",
1224N/A "cn: Maggie Jones-Smith",
1224N/A "",
1224N/A "dn: uid=aaccf.johnson,dc=example,dc=com",
1224N/A "objectClass: top",
1224N/A "objectClass: person",
1224N/A "objectClass: organizationalPerson",
1224N/A "objectClass: inetOrgPerson",
1224N/A "uid: aaccf.johnson",
1224N/A "givenName: Aaccf",
1224N/A "sn: Johnson",
1224N/A "cn: Aaccf Johnson",
1224N/A "",
1224N/A "dn: uid=sam.zweck,dc=example,dc=com",
1224N/A "objectClass: top",
1224N/A "objectClass: person",
1224N/A "objectClass: organizationalPerson",
1224N/A "objectClass: inetOrgPerson",
1224N/A "uid: sam.zweck",
1224N/A "givenName: Sam",
1224N/A "sn: Zweck",
1224N/A "cn: Sam Zweck",
1224N/A "",
1224N/A "dn: uid=lowercase.mcgee,dc=example,dc=com",
1224N/A "objectClass: top",
1224N/A "objectClass: person",
1224N/A "objectClass: organizationalPerson",
1224N/A "objectClass: inetOrgPerson",
1224N/A "uid: lowercase.mcgee",
1224N/A "givenName: lowercase",
1224N/A "sn: mcgee",
1224N/A "cn: lowercase mcgee",
1224N/A "",
1224N/A "dn: uid=zorro,dc=example,dc=com",
1224N/A "objectClass: top",
1224N/A "objectClass: person",
1224N/A "objectClass: organizationalPerson",
1224N/A "objectClass: inetOrgPerson",
1224N/A "uid: zorro",
1224N/A "sn: Zorro",
1224N/A "cn: Zorro");
1224N/A
1224N/A String[] args =
1224N/A {
1224N/A "-h", "127.0.0.1",
1224N/A "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
1224N/A "-D", "cn=Directory Manager",
1224N/A "-w", "password",
1224N/A "-b", "dc=example,dc=com",
1224N/A "-s", "sub",
1224N/A "-S", "givenName",
1224N/A "-G", "1:3:1:0",
2663N/A "--noPropertiesFile",
1224N/A "(objectClass=*)"
1224N/A };
1224N/A
1224N/A assertEquals(LDAPSearch.mainSearch(args, false, null, System.err), 0);
1224N/A }
1224N/A
1224N/A
1224N/A
1224N/A /**
383N/A * Tests the LDAPSearch tool with the "--help" option.
383N/A */
383N/A @Test()
383N/A public void testHelp()
383N/A {
383N/A String[] args = { "--help" };
383N/A assertEquals(LDAPSearch.mainSearch(args, false, null, null), 0);
383N/A
383N/A args = new String[] { "-H" };
383N/A assertEquals(LDAPSearch.mainSearch(args, false, null, null), 0);
921N/A
921N/A args = new String[] { "-?" };
921N/A assertEquals(LDAPSearch.mainSearch(args, false, null, null), 0);
383N/A }
383N/A}
383N/A