2151N/A/*
2151N/A * CDDL HEADER START
2151N/A *
2151N/A * The contents of this file are subject to the terms of the
2151N/A * Common Development and Distribution License, Version 1.0 only
2151N/A * (the "License"). You may not use this file except in compliance
2151N/A * with the License.
2151N/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.
2151N/A * See the License for the specific language governing permissions
2151N/A * and limitations under the License.
2151N/A *
2151N/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:
2151N/A * Portions Copyright [yyyy] [name of copyright owner]
2151N/A *
2151N/A * CDDL HEADER END
2151N/A *
2151N/A *
3232N/A * Copyright 2008 Sun Microsystems, Inc.
2151N/A */
2151N/Apackage org.opends.server.protocols.internal;
2151N/A
2151N/A
2151N/Aimport java.util.ArrayList;
2151N/Aimport java.util.Hashtable;
2151N/Aimport java.util.LinkedHashSet;
2151N/Aimport javax.naming.Context;
2151N/Aimport javax.naming.NamingEnumeration;
2151N/Aimport javax.naming.directory.Attribute;
2151N/Aimport javax.naming.directory.Attributes;
2151N/Aimport javax.naming.directory.BasicAttribute;
2151N/Aimport javax.naming.directory.BasicAttributes;
2151N/Aimport javax.naming.directory.DirContext;
2151N/Aimport javax.naming.directory.InitialDirContext;
2151N/Aimport javax.naming.directory.ModificationItem;
2151N/Aimport javax.naming.directory.SearchControls;
2151N/A
2151N/Aimport org.testng.annotations.BeforeClass;
2151N/Aimport org.testng.annotations.Test;
2151N/A
2151N/Aimport org.opends.server.TestCaseUtils;
2151N/Aimport org.opends.server.core.DirectoryServer;
2151N/Aimport org.opends.server.protocols.ldap.*;
2151N/Aimport org.opends.server.tools.LDAPReader;
2151N/Aimport org.opends.server.tools.LDAPWriter;
2151N/Aimport org.opends.server.types.*;
2151N/A
2151N/Aimport static org.testng.Assert.*;
2151N/A
2151N/Aimport static org.opends.server.util.ServerConstants.*;
2151N/A
2151N/A
2151N/A
2151N/A/**
2151N/A * This class provides a number of tests to cover the internal LDAP socket
2151N/A * implementation.
2151N/A */
2151N/Apublic class InternalLDAPSocketTestCase
2151N/A extends InternalTestCase
2151N/A{
2151N/A /**
2151N/A * Ensures that the Directory Server is running.
2151N/A *
2151N/A * @throws Exception If an unexpected problem occurs.
2151N/A */
2151N/A @BeforeClass()
2151N/A public void startServer()
2151N/A throws Exception
2151N/A {
2151N/A TestCaseUtils.startServer();
2151N/A }
2151N/A
2151N/A
2151N/A
2151N/A /**
2151N/A * Tests the ability to perform an add operation over the internal LDAP
2151N/A * socket.
2151N/A *
2151N/A * @throws Exception If an unexpected problem occurs.
2151N/A */
2151N/A @Test()
2151N/A public void testAddOperation()
2151N/A throws Exception
2151N/A {
2151N/A TestCaseUtils.initializeTestBackend(false);
2151N/A assertFalse(DirectoryServer.entryExists(DN.decode("o=test")));
2151N/A
2151N/A InternalLDAPSocket socket = new InternalLDAPSocket();
2151N/A LDAPReader reader = new LDAPReader(socket);
2151N/A LDAPWriter writer = new LDAPWriter(socket);
2151N/A
2151N/A BindRequestProtocolOp bindRequest =
4134N/A new BindRequestProtocolOp(ByteString.valueOf("cn=Directory Manager"),
4134N/A 3, ByteString.valueOf("password"));
2151N/A LDAPMessage message = new LDAPMessage(1, bindRequest);
2151N/A writer.writeMessage(message);
2151N/A
2151N/A message = reader.readMessage();
2151N/A assertNotNull(message);
2151N/A assertEquals(message.getBindResponseProtocolOp().getResultCode(), 0);
2151N/A
2151N/A
2151N/A ArrayList<RawAttribute> attrList = new ArrayList<RawAttribute>();
2151N/A attrList.add(RawAttribute.create("objectClass", "organization"));
2151N/A attrList.add(RawAttribute.create("o", "test"));
2151N/A
2151N/A AddRequestProtocolOp addRequest =
4134N/A new AddRequestProtocolOp(ByteString.valueOf("o=test"), attrList);
2151N/A writer.writeMessage(new LDAPMessage(2, addRequest));
2151N/A
2151N/A message = reader.readMessage();
2151N/A assertNotNull(message);
2151N/A assertEquals(message.getAddResponseProtocolOp().getResultCode(),
2151N/A LDAPResultCode.SUCCESS);
2151N/A assertTrue(DirectoryServer.entryExists(DN.decode("o=test")));
2151N/A
2151N/A reader.close();
2151N/A writer.close();
2151N/A socket.close();
2151N/A }
2151N/A
2151N/A
2151N/A
2151N/A /**
2151N/A * Tests the ability to perform an add operation over the internal LDAP
2151N/A * socket via JNDI.
2151N/A *
2151N/A * @throws Exception If an unexpected problem occurs.
2151N/A */
2151N/A @Test()
2151N/A public void testAddOperationThroughJNDI()
2151N/A throws Exception
2151N/A {
2151N/A TestCaseUtils.initializeTestBackend(false);
2151N/A assertFalse(DirectoryServer.entryExists(DN.decode("o=test")));
2151N/A
2151N/A
2151N/A Hashtable<String,String> env = new Hashtable<String,String>();
2151N/A env.put(Context.INITIAL_CONTEXT_FACTORY,
2151N/A "com.sun.jndi.ldap.LdapCtxFactory");
2151N/A env.put("java.naming.ldap.factory.socket",
2151N/A InternalLDAPSocketFactory.class.getName());
2151N/A env.put(Context.PROVIDER_URL, "ldap://doesntmatter:389/");
2151N/A env.put(Context.SECURITY_AUTHENTICATION, "simple");
2151N/A env.put(Context.SECURITY_PRINCIPAL, "cn=Directory Manager");
2151N/A env.put(Context.SECURITY_CREDENTIALS, "password");
4134N/A env.put("com.sun.jndi.ldap.connect.pool.debug", "fine");
2151N/A
2151N/A DirContext context = new InitialDirContext(env);
2151N/A
2151N/A Attributes attributes = new BasicAttributes(true);
2151N/A
2151N/A Attribute objectClass = new BasicAttribute("objectClass");
2151N/A objectClass.add("top");
2151N/A objectClass.add("organization");
2151N/A attributes.put(objectClass);
2151N/A
2151N/A Attribute o = new BasicAttribute("o");
2151N/A o.add("test");
2151N/A attributes.put(o);
2151N/A
2151N/A context.createSubcontext("o=test", attributes);
2151N/A assertTrue(DirectoryServer.entryExists(DN.decode("o=test")));
2151N/A
2151N/A context.close();
2151N/A }
2151N/A
2151N/A
2151N/A
2151N/A /**
2151N/A * Tests the ability to perform a compare operation over the internal LDAP
2151N/A * socket.
2151N/A *
2151N/A * @throws Exception If an unexpected problem occurs.
2151N/A */
2151N/A @Test()
2151N/A public void testCompareOperation()
2151N/A throws Exception
2151N/A {
2151N/A TestCaseUtils.initializeTestBackend(true);
2151N/A assertTrue(DirectoryServer.entryExists(DN.decode("o=test")));
2151N/A
2151N/A InternalLDAPSocket socket = new InternalLDAPSocket();
2151N/A LDAPReader reader = new LDAPReader(socket);
2151N/A LDAPWriter writer = new LDAPWriter(socket);
2151N/A
2151N/A BindRequestProtocolOp bindRequest =
4134N/A new BindRequestProtocolOp(ByteString.valueOf("cn=Directory Manager"),
4134N/A 3, ByteString.valueOf("password"));
2151N/A LDAPMessage message = new LDAPMessage(1, bindRequest);
2151N/A writer.writeMessage(message);
2151N/A
2151N/A message = reader.readMessage();
2151N/A assertNotNull(message);
2151N/A assertEquals(message.getBindResponseProtocolOp().getResultCode(), 0);
2151N/A
2151N/A
2151N/A CompareRequestProtocolOp compareRequest =
4134N/A new CompareRequestProtocolOp(ByteString.valueOf("o=test"), "o",
4134N/A ByteString.valueOf("test"));
2151N/A writer.writeMessage(new LDAPMessage(2, compareRequest));
2151N/A
2151N/A message = reader.readMessage();
2151N/A assertNotNull(message);
2151N/A assertEquals(message.getCompareResponseProtocolOp().getResultCode(),
2151N/A LDAPResultCode.COMPARE_TRUE);
2151N/A
2151N/A reader.close();
2151N/A writer.close();
2151N/A socket.close();
2151N/A }
2151N/A
2151N/A
2151N/A
2151N/A /**
2151N/A * Tests the ability to perform a compare operation over the internal LDAP
2151N/A * socket via JNDI.
2151N/A *
2151N/A * @throws Exception If an unexpected problem occurs.
2151N/A */
2151N/A @Test()
2151N/A public void testCompareOperationThroughJNDI()
2151N/A throws Exception
2151N/A {
2151N/A TestCaseUtils.initializeTestBackend(true);
2151N/A assertTrue(DirectoryServer.entryExists(DN.decode("o=test")));
2151N/A
2151N/A
2151N/A Hashtable<String,String> env = new Hashtable<String,String>();
2151N/A env.put(Context.INITIAL_CONTEXT_FACTORY,
2151N/A "com.sun.jndi.ldap.LdapCtxFactory");
2151N/A env.put("java.naming.ldap.factory.socket",
2151N/A InternalLDAPSocketFactory.class.getName());
2151N/A env.put(Context.PROVIDER_URL, "ldap://doesntmatter:389/");
2151N/A env.put(Context.SECURITY_AUTHENTICATION, "simple");
2151N/A env.put(Context.SECURITY_PRINCIPAL, "cn=Directory Manager");
2151N/A env.put(Context.SECURITY_CREDENTIALS, "password");
2151N/A
2151N/A DirContext context = new InitialDirContext(env);
2151N/A
2151N/A SearchControls poorlyNamedSearchControls = new SearchControls();
2151N/A poorlyNamedSearchControls.setSearchScope(SearchControls.OBJECT_SCOPE);
2151N/A poorlyNamedSearchControls.setReturningAttributes(new String[0]);
2151N/A
2151N/A NamingEnumeration results = context.search("o=test", "(o=test)",
2151N/A poorlyNamedSearchControls);
2151N/A assertTrue(results.hasMoreElements());
2151N/A assertNotNull(results.nextElement());
2151N/A assertFalse(results.hasMoreElements());
2151N/A
2151N/A context.close();
2151N/A }
2151N/A
2151N/A
2151N/A
2151N/A /**
2151N/A * Tests the ability to perform a delete operation over the internal LDAP
2151N/A * socket.
2151N/A *
2151N/A * @throws Exception If an unexpected problem occurs.
2151N/A */
2151N/A @Test()
2151N/A public void testDeleteOperation()
2151N/A throws Exception
2151N/A {
2151N/A TestCaseUtils.initializeTestBackend(true);
2151N/A assertTrue(DirectoryServer.entryExists(DN.decode("o=test")));
2151N/A
2151N/A InternalLDAPSocket socket = new InternalLDAPSocket();
2151N/A LDAPReader reader = new LDAPReader(socket);
2151N/A LDAPWriter writer = new LDAPWriter(socket);
2151N/A
2151N/A BindRequestProtocolOp bindRequest =
4134N/A new BindRequestProtocolOp(ByteString.valueOf("cn=Directory Manager"),
4134N/A 3, ByteString.valueOf("password"));
2151N/A LDAPMessage message = new LDAPMessage(1, bindRequest);
2151N/A writer.writeMessage(message);
2151N/A
2151N/A message = reader.readMessage();
2151N/A assertNotNull(message);
2151N/A assertEquals(message.getBindResponseProtocolOp().getResultCode(), 0);
2151N/A
2151N/A
2151N/A DeleteRequestProtocolOp deleteRequest =
4134N/A new DeleteRequestProtocolOp(ByteString.valueOf("o=test"));
2151N/A writer.writeMessage(new LDAPMessage(2, deleteRequest));
2151N/A
2151N/A message = reader.readMessage();
2151N/A assertNotNull(message);
2151N/A assertEquals(message.getDeleteResponseProtocolOp().getResultCode(),
2151N/A LDAPResultCode.SUCCESS);
2151N/A assertFalse(DirectoryServer.entryExists(DN.decode("o=test")));
2151N/A
2151N/A reader.close();
2151N/A writer.close();
2151N/A socket.close();
2151N/A }
2151N/A
2151N/A
2151N/A
2151N/A /**
2151N/A * Tests the ability to perform a delete operation over the internal LDAP
2151N/A * socket via JNDI.
2151N/A *
2151N/A * @throws Exception If an unexpected problem occurs.
2151N/A */
2151N/A @Test()
2151N/A public void testDeleteOperationThroughJNDI()
2151N/A throws Exception
2151N/A {
2151N/A TestCaseUtils.initializeTestBackend(true);
2151N/A assertTrue(DirectoryServer.entryExists(DN.decode("o=test")));
2151N/A
2151N/A
2151N/A Hashtable<String,String> env = new Hashtable<String,String>();
2151N/A env.put(Context.INITIAL_CONTEXT_FACTORY,
2151N/A "com.sun.jndi.ldap.LdapCtxFactory");
2151N/A env.put("java.naming.ldap.factory.socket",
2151N/A InternalLDAPSocketFactory.class.getName());
2151N/A env.put(Context.PROVIDER_URL, "ldap://doesntmatter:389/");
2151N/A env.put(Context.SECURITY_AUTHENTICATION, "simple");
2151N/A env.put(Context.SECURITY_PRINCIPAL, "cn=Directory Manager");
2151N/A env.put(Context.SECURITY_CREDENTIALS, "password");
2151N/A
2151N/A DirContext context = new InitialDirContext(env);
2151N/A
2151N/A context.destroySubcontext("o=test");
2151N/A assertFalse(DirectoryServer.entryExists(DN.decode("o=test")));
2151N/A
2151N/A context.close();
2151N/A }
2151N/A
2151N/A
2151N/A
2151N/A /**
2151N/A * Tests the ability to perform an extended operation over the internal LDAP
2151N/A * socket using the "Who Am I?" request.
2151N/A *
2151N/A * @throws Exception If an unexpected problem occurs.
2151N/A */
2151N/A @Test()
2151N/A public void testExtendedOperation()
2151N/A throws Exception
2151N/A {
2151N/A InternalLDAPSocket socket = new InternalLDAPSocket();
2151N/A LDAPReader reader = new LDAPReader(socket);
2151N/A LDAPWriter writer = new LDAPWriter(socket);
2151N/A
2151N/A BindRequestProtocolOp bindRequest =
4134N/A new BindRequestProtocolOp(ByteString.valueOf("cn=Directory Manager"),
4134N/A 3, ByteString.valueOf("password"));
2151N/A LDAPMessage message = new LDAPMessage(1, bindRequest);
2151N/A writer.writeMessage(message);
2151N/A
2151N/A message = reader.readMessage();
2151N/A assertNotNull(message);
2151N/A assertEquals(message.getBindResponseProtocolOp().getResultCode(), 0);
2151N/A
2151N/A
2151N/A ExtendedRequestProtocolOp extendedRequest =
2151N/A new ExtendedRequestProtocolOp(OID_WHO_AM_I_REQUEST);
2151N/A writer.writeMessage(new LDAPMessage(2, extendedRequest));
2151N/A
2151N/A message = reader.readMessage();
2151N/A assertNotNull(message);
2151N/A
2151N/A ExtendedResponseProtocolOp extendedResponse =
2151N/A message.getExtendedResponseProtocolOp();
2151N/A assertEquals(extendedResponse.getResultCode(), LDAPResultCode.SUCCESS);
4134N/A assertTrue(extendedResponse.getValue().toString().equalsIgnoreCase(
2151N/A "dn:cn=Directory Manager,cn=Root DNs,cn=config"));
2151N/A
2151N/A reader.close();
2151N/A writer.close();
2151N/A socket.close();
2151N/A }
2151N/A
2151N/A
2151N/A
2151N/A /**
2151N/A * Tests the ability to perform a modify operation over the internal LDAP
2151N/A * socket.
2151N/A *
2151N/A * @throws Exception If an unexpected problem occurs.
2151N/A */
2151N/A @Test()
2151N/A public void testModifyOperation()
2151N/A throws Exception
2151N/A {
2151N/A TestCaseUtils.initializeTestBackend(true);
2151N/A assertTrue(DirectoryServer.entryExists(DN.decode("o=test")));
2151N/A
2151N/A InternalLDAPSocket socket = new InternalLDAPSocket();
2151N/A LDAPReader reader = new LDAPReader(socket);
2151N/A LDAPWriter writer = new LDAPWriter(socket);
2151N/A
2151N/A BindRequestProtocolOp bindRequest =
4134N/A new BindRequestProtocolOp(ByteString.valueOf("cn=Directory Manager"),
4134N/A 3, ByteString.valueOf("password"));
2151N/A LDAPMessage message = new LDAPMessage(1, bindRequest);
2151N/A writer.writeMessage(message);
2151N/A
2151N/A message = reader.readMessage();
2151N/A assertNotNull(message);
2151N/A assertEquals(message.getBindResponseProtocolOp().getResultCode(), 0);
2151N/A
2151N/A
2151N/A ArrayList<RawModification> mods = new ArrayList<RawModification>();
2151N/A mods.add(RawModification.create(ModificationType.REPLACE, "description",
2151N/A "foo"));
2151N/A
2151N/A ModifyRequestProtocolOp modifyRequest =
4134N/A new ModifyRequestProtocolOp(ByteString.valueOf("o=test"), mods);
2151N/A writer.writeMessage(new LDAPMessage(2, modifyRequest));
2151N/A
2151N/A message = reader.readMessage();
2151N/A assertNotNull(message);
2151N/A assertEquals(message.getModifyResponseProtocolOp().getResultCode(),
2151N/A LDAPResultCode.SUCCESS);
2151N/A
2151N/A reader.close();
2151N/A writer.close();
2151N/A socket.close();
2151N/A }
2151N/A
2151N/A
2151N/A
2151N/A /**
2151N/A * Tests the ability to perform a modify operation over the internal LDAP
2151N/A * socket via JNDI.
2151N/A *
2151N/A * @throws Exception If an unexpected problem occurs.
2151N/A */
2151N/A @Test()
2151N/A public void testModifyOperationThroughJNDI()
2151N/A throws Exception
2151N/A {
2151N/A TestCaseUtils.initializeTestBackend(true);
2151N/A assertTrue(DirectoryServer.entryExists(DN.decode("o=test")));
2151N/A
2151N/A
2151N/A Hashtable<String,String> env = new Hashtable<String,String>();
2151N/A env.put(Context.INITIAL_CONTEXT_FACTORY,
2151N/A "com.sun.jndi.ldap.LdapCtxFactory");
2151N/A env.put("java.naming.ldap.factory.socket",
2151N/A InternalLDAPSocketFactory.class.getName());
2151N/A env.put(Context.PROVIDER_URL, "ldap://doesntmatter:389/");
2151N/A env.put(Context.SECURITY_AUTHENTICATION, "simple");
2151N/A env.put(Context.SECURITY_PRINCIPAL, "cn=Directory Manager");
2151N/A env.put(Context.SECURITY_CREDENTIALS, "password");
2151N/A
2151N/A DirContext context = new InitialDirContext(env);
2151N/A
2151N/A ModificationItem[] mods =
2151N/A {
2151N/A new ModificationItem(DirContext.REPLACE_ATTRIBUTE,
2151N/A new BasicAttribute("description", "foo"))
2151N/A };
2151N/A
2151N/A context.modifyAttributes("o=test", mods);
2151N/A context.close();
2151N/A }
2151N/A
2151N/A
2151N/A
2151N/A /**
2151N/A * Tests the ability to perform a modify DN operation over the internal LDAP
2151N/A * socket.
2151N/A *
2151N/A * @throws Exception If an unexpected problem occurs.
2151N/A */
2151N/A @Test()
2151N/A public void testModifyDNOperation()
2151N/A throws Exception
2151N/A {
2151N/A TestCaseUtils.initializeTestBackend(true);
2151N/A TestCaseUtils.addEntry(
2151N/A "dn: ou=People,o=test",
2151N/A "objectClass: top",
2151N/A "objectClass: organizationalUnit",
2151N/A "ou: People");
2151N/A
2151N/A assertTrue(DirectoryServer.entryExists(DN.decode("ou=People,o=test")));
2151N/A assertFalse(DirectoryServer.entryExists(DN.decode("ou=Users,o=test")));
2151N/A
2151N/A InternalLDAPSocket socket = new InternalLDAPSocket();
2151N/A LDAPReader reader = new LDAPReader(socket);
2151N/A LDAPWriter writer = new LDAPWriter(socket);
2151N/A
2151N/A BindRequestProtocolOp bindRequest =
4134N/A new BindRequestProtocolOp(ByteString.valueOf("cn=Directory Manager"),
4134N/A 3, ByteString.valueOf("password"));
2151N/A LDAPMessage message = new LDAPMessage(1, bindRequest);
2151N/A writer.writeMessage(message);
2151N/A
2151N/A message = reader.readMessage();
2151N/A assertNotNull(message);
2151N/A assertEquals(message.getBindResponseProtocolOp().getResultCode(), 0);
2151N/A
2151N/A
2151N/A ModifyDNRequestProtocolOp modifyDNRequest =
4134N/A new ModifyDNRequestProtocolOp(ByteString.valueOf("ou=People,o=test"),
4134N/A ByteString.valueOf("ou=Users"), true);
2151N/A writer.writeMessage(new LDAPMessage(2, modifyDNRequest));
2151N/A
2151N/A message = reader.readMessage();
2151N/A assertNotNull(message);
2151N/A assertEquals(message.getModifyDNResponseProtocolOp().getResultCode(),
2151N/A LDAPResultCode.SUCCESS);
2151N/A
2151N/A assertFalse(DirectoryServer.entryExists(DN.decode("ou=People,o=test")));
2151N/A assertTrue(DirectoryServer.entryExists(DN.decode("ou=Users,o=test")));
2151N/A
2151N/A reader.close();
2151N/A writer.close();
2151N/A socket.close();
2151N/A }
2151N/A
2151N/A
2151N/A
2151N/A /**
2151N/A * Tests the ability to perform a modify DN operation over the internal LDAP
2151N/A * socket via JNDI.
2151N/A *
2151N/A * @throws Exception If an unexpected problem occurs.
2151N/A */
2151N/A @Test()
2151N/A public void testModifyDNOperationThroughJNDI()
2151N/A throws Exception
2151N/A {
2151N/A TestCaseUtils.initializeTestBackend(true);
2151N/A TestCaseUtils.addEntry(
2151N/A "dn: ou=People,o=test",
2151N/A "objectClass: top",
2151N/A "objectClass: organizationalUnit",
2151N/A "ou: People");
2151N/A
2151N/A assertTrue(DirectoryServer.entryExists(DN.decode("ou=People,o=test")));
2151N/A assertFalse(DirectoryServer.entryExists(DN.decode("ou=Users,o=test")));
2151N/A
2151N/A
2151N/A Hashtable<String,String> env = new Hashtable<String,String>();
2151N/A env.put(Context.INITIAL_CONTEXT_FACTORY,
2151N/A "com.sun.jndi.ldap.LdapCtxFactory");
2151N/A env.put("java.naming.ldap.factory.socket",
2151N/A InternalLDAPSocketFactory.class.getName());
2151N/A env.put(Context.PROVIDER_URL, "ldap://doesntmatter:389/");
2151N/A env.put(Context.SECURITY_AUTHENTICATION, "simple");
2151N/A env.put(Context.SECURITY_PRINCIPAL, "cn=Directory Manager");
2151N/A env.put(Context.SECURITY_CREDENTIALS, "password");
2151N/A
2151N/A DirContext context = new InitialDirContext(env);
2151N/A
2151N/A context.rename("ou=People,o=test", "ou=Users,o=test");
2151N/A
2151N/A assertFalse(DirectoryServer.entryExists(DN.decode("ou=People,o=test")));
2151N/A assertTrue(DirectoryServer.entryExists(DN.decode("ou=Users,o=test")));
2151N/A
2151N/A context.close();
2151N/A }
2151N/A
2151N/A
2151N/A
2151N/A /**
2151N/A * Tests the ability to perform a search operation over the internal LDAP
2151N/A * socket.
2151N/A *
2151N/A * @throws Exception If an unexpected problem occurs.
2151N/A */
2151N/A @Test()
2151N/A public void testSearchOperation()
2151N/A throws Exception
2151N/A {
2151N/A TestCaseUtils.initializeTestBackend(true);
2151N/A assertTrue(DirectoryServer.entryExists(DN.decode("o=test")));
2151N/A
2151N/A InternalLDAPSocket socket = new InternalLDAPSocket();
2151N/A LDAPReader reader = new LDAPReader(socket);
2151N/A LDAPWriter writer = new LDAPWriter(socket);
2151N/A
2151N/A BindRequestProtocolOp bindRequest =
4134N/A new BindRequestProtocolOp(ByteString.valueOf("cn=Directory Manager"),
4134N/A 3, ByteString.valueOf("password"));
2151N/A LDAPMessage message = new LDAPMessage(1, bindRequest);
2151N/A writer.writeMessage(message);
2151N/A
2151N/A message = reader.readMessage();
2151N/A assertNotNull(message);
2151N/A assertEquals(message.getBindResponseProtocolOp().getResultCode(), 0);
2151N/A
2151N/A
2151N/A SearchRequestProtocolOp searchRequest =
4134N/A new SearchRequestProtocolOp(ByteString.valueOf("o=test"),
2151N/A SearchScope.BASE_OBJECT,
2151N/A DereferencePolicy.NEVER_DEREF_ALIASES,
2151N/A 0, 0, false,
2151N/A LDAPFilter.decode("(objectClass=*)"),
2151N/A new LinkedHashSet<String>());
2151N/A writer.writeMessage(new LDAPMessage(2, searchRequest));
2151N/A
2151N/A message = reader.readMessage();
2151N/A assertNotNull(message);
2151N/A assertEquals(message.getSearchResultEntryProtocolOp().getDN(),
2151N/A DN.decode("o=test"));
2151N/A
2151N/A message = reader.readMessage();
2151N/A assertNotNull(message);
2151N/A assertEquals(message.getSearchResultDoneProtocolOp().getResultCode(),
2151N/A LDAPResultCode.SUCCESS);
2151N/A
2151N/A reader.close();
2151N/A writer.close();
2151N/A socket.close();
2151N/A }
2151N/A
2151N/A
2151N/A
2151N/A /**
2151N/A * Tests the ability to perform a searcj operation over the internal LDAP
2151N/A * socket via JNDI.
2151N/A *
2151N/A * @throws Exception If an unexpected problem occurs.
2151N/A */
2151N/A @Test()
2151N/A public void testSearchOperationThroughJNDI()
2151N/A throws Exception
2151N/A {
2151N/A TestCaseUtils.initializeTestBackend(true);
2151N/A assertTrue(DirectoryServer.entryExists(DN.decode("o=test")));
2151N/A
2151N/A
2151N/A Hashtable<String,String> env = new Hashtable<String,String>();
2151N/A env.put(Context.INITIAL_CONTEXT_FACTORY,
2151N/A "com.sun.jndi.ldap.LdapCtxFactory");
2151N/A env.put("java.naming.ldap.factory.socket",
2151N/A InternalLDAPSocketFactory.class.getName());
2151N/A env.put(Context.PROVIDER_URL, "ldap://doesntmatter:389/");
2151N/A env.put(Context.SECURITY_AUTHENTICATION, "simple");
2151N/A env.put(Context.SECURITY_PRINCIPAL, "cn=Directory Manager");
2151N/A env.put(Context.SECURITY_CREDENTIALS, "password");
2151N/A
2151N/A DirContext context = new InitialDirContext(env);
2151N/A
2151N/A SearchControls poorlyNamedSearchControls = new SearchControls();
2151N/A poorlyNamedSearchControls.setSearchScope(SearchControls.OBJECT_SCOPE);
2151N/A
2151N/A NamingEnumeration results = context.search("o=test", "(objectClass=*)",
2151N/A poorlyNamedSearchControls);
2151N/A assertTrue(results.hasMoreElements());
2151N/A assertNotNull(results.nextElement());
2151N/A assertFalse(results.hasMoreElements());
2151N/A
2151N/A context.close();
2151N/A }
2151N/A}
2151N/A