/*
|
* CDDL HEADER START
|
*
|
* The contents of this file are subject to the terms of the
|
* Common Development and Distribution License, Version 1.0 only
|
* (the "License"). You may not use this file except in compliance
|
* with the License.
|
*
|
* You can obtain a copy of the license at
|
* trunk/opendj3/legal-notices/CDDLv1_0.txt
|
* or http://forgerock.org/license/CDDLv1.0.html.
|
* See the License for the specific language governing permissions
|
* and limitations under the License.
|
*
|
* When distributing Covered Code, include this CDDL HEADER in each
|
* file and include the License file at
|
* trunk/opendj3/legal-notices/CDDLv1_0.txt. If applicable,
|
* add the following below this CDDL HEADER, with the fields enclosed
|
* by brackets "[]" replaced with your own identifying information:
|
* Portions Copyright [yyyy] [name of copyright owner]
|
*
|
* CDDL HEADER END
|
*
|
*
|
* Copyright 2009-2010 Sun Microsystems, Inc.
|
*/
|
|
package org.forgerock.opendj.ldap;
|
|
|
|
import java.io.File;
|
import java.io.FileWriter;
|
import java.io.IOException;
|
import java.net.InetSocketAddress;
|
import java.net.ServerSocket;
|
|
import org.forgerock.opendj.ldap.Connection;
|
import org.forgerock.opendj.ldap.ConnectionFactory;
|
import org.forgerock.opendj.ldap.Connections;
|
|
|
|
/**
|
* This class defines some utility functions which can be used by test cases.
|
*/
|
public final class TestCaseUtils
|
{
|
/**
|
* The name of the system property that specifies the ldap port. Set this
|
* property when running the server if you want to use a given port number,
|
* otherwise a port is chosen randomly at test startup time.
|
*/
|
public static final String PROPERTY_LDAP_PORT = "org.forgerock.opendj.test.LdapPort";
|
|
/**
|
* Port number that's used by the server. Need to be used by the test cases to
|
* create connections.
|
*/
|
public static final int port;
|
|
static
|
{
|
final String ldapPort = System.getProperty(PROPERTY_LDAP_PORT);
|
if (ldapPort != null)
|
{
|
port = Integer.valueOf(ldapPort);
|
}
|
else
|
{
|
port = findFreePort();
|
}
|
}
|
|
|
|
/**
|
* Creates a temporary text file with the specified contents. It will be
|
* marked for automatic deletion when the JVM exits.
|
*
|
* @param lines
|
* The file contents.
|
* @return The absolute path to the file that was created.
|
* @throws Exception
|
* If an unexpected problem occurs.
|
*/
|
public static String createTempFile(final String... lines) throws Exception
|
{
|
final File f = File.createTempFile("LDIFBasedTestCase", ".txt");
|
f.deleteOnExit();
|
|
final FileWriter w = new FileWriter(f);
|
for (final String s : lines)
|
{
|
w.write(s + System.getProperty("line.separator"));
|
}
|
|
w.close();
|
|
return f.getAbsolutePath();
|
}
|
|
|
|
/**
|
* Finds a free server socket port on the local host.
|
*
|
* @return The free port.
|
*/
|
public static int findFreePort()
|
{
|
try
|
{
|
ServerSocket serverLdapSocket = new ServerSocket();
|
serverLdapSocket.setReuseAddress(true);
|
serverLdapSocket.bind(new InetSocketAddress("127.0.0.1", 0));
|
final int port = serverLdapSocket.getLocalPort();
|
serverLdapSocket.close();
|
return port;
|
}
|
catch (IOException e)
|
{
|
throw new RuntimeException(e);
|
}
|
}
|
|
|
|
/**
|
* Returns an internal client connection to the running ldap server.
|
*
|
* @return The internal client connection.
|
* @throws Exception
|
* When an error occurs.
|
*/
|
public static Connection getInternalConnection() throws Exception
|
{
|
startServer();
|
final ConnectionFactory factory = Connections.newInternalConnectionFactory(
|
LDAPServer.getInstance(), null);
|
return factory.getConnection();
|
}
|
|
|
|
/**
|
* Returns the port which the test server listens on.
|
*
|
* @return The LDAP port.
|
*/
|
public static int getLdapPort()
|
{
|
return port;
|
}
|
|
|
|
/**
|
* Starts the test ldap server.
|
*
|
* @throws Exception
|
* If an error occurs when starting the server.
|
*/
|
public static void startServer() throws Exception
|
{
|
LDAPServer.getInstance().start(port);
|
}
|
|
|
|
/**
|
* Stops the test ldap server.
|
*/
|
public static void stopServer()
|
{
|
LDAPServer.getInstance().stop();
|
}
|
}
|