From 23a954009f2051abbfa38c5695f2a181af1cea2f Mon Sep 17 00:00:00 2001
From: boli <boli@localhost>
Date: Mon, 18 Sep 2006 22:07:39 +0000
Subject: [PATCH] Added the ability to run unit tests in parallel on the same machine by randomly choosing the ports the test server uses. The startServer() method picks 3 unused ports and writes them out to config-changes.ldif. It replaces the tokens "#ldapport#", "#jmxport#", and "#ldapsport#" with the port numbers. The getServerLdapPort etc. methods will return the ports assigned to those listeners.
---
opends/tests/unit-tests-testng/src/server/org/opends/server/TestCaseUtils.java | 89 +++++++++++++++++++++++++++++++++++++++-----
opends/tests/unit-tests-testng/resource/config-changes.ldif | 4 +-
2 files changed, 80 insertions(+), 13 deletions(-)
diff --git a/opends/tests/unit-tests-testng/resource/config-changes.ldif b/opends/tests/unit-tests-testng/resource/config-changes.ldif
index 9695bc4..2982515 100644
--- a/opends/tests/unit-tests-testng/resource/config-changes.ldif
+++ b/opends/tests/unit-tests-testng/resource/config-changes.ldif
@@ -1,12 +1,12 @@
dn: cn=LDAP Connection Handler,cn=Connection Handlers,cn=config
changeType: modify
replace: ds-cfg-listen-port
-ds-cfg-listen-port: 32389
+ds-cfg-listen-port: #ldapport#
dn: cn=JMX Connection Handler,cn=Connection Handlers,cn=config
changeType: modify
replace: ds-cfg-listen-port
-ds-cfg-listen-port: 33689
+ds-cfg-listen-port: #jmxport#
dn: cn=File-Based Access Logger,cn=Loggers,cn=config
changetype: modify
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/TestCaseUtils.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/TestCaseUtils.java
index 45733f5..d14c47f 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/server/TestCaseUtils.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/TestCaseUtils.java
@@ -30,15 +30,11 @@
import org.opends.server.types.LDIFImportConfig;
import org.opends.server.util.LDIFReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.StringReader;
+import java.io.*;
import java.util.List;
import java.util.ArrayList;
+import java.net.ServerSocket;
+import java.net.InetSocketAddress;
import org.opends.server.backends.MemoryBackend;
import org.opends.server.config.ConfigException;
@@ -83,6 +79,21 @@
private static MemoryBackend memoryBackend = null;
/**
+ * The LDAP port the server is bound to on start.
+ */
+ private static int serverLdapPort;
+
+ /**
+ * The JMX port the server is bound to on start.
+ */
+ private static int serverJmxPort;
+
+ /**
+ * The LDAPS port the server is bound to on start.
+ */
+ private static int serverLdapsPort;
+
+ /**
* Starts the Directory Server so that it will be available for use while
* running the unit tests. This will only actually start the server once, so
* subsequent attempts to start it will be ignored because it will already be
@@ -138,9 +149,54 @@
new File(testConfigDir, "schema"));
copyDirectory(new File(resourceDir, "MakeLDIF"),
new File(testConfigDir, "MakeLDIF"));
- copyFile (new File(testResourceDir, "config-changes.ldif"),
- new File(testConfigDir, "config-changes.ldif"));
+ // Find some free ports for the listeners and write them to the
+ // config-chamges.ldif file.
+ ServerSocket serverLdapSocket = null;
+ ServerSocket serverJmxSocket = null;
+ ServerSocket serverLdapsSocket = null;
+
+ serverLdapSocket = new ServerSocket();
+ serverLdapSocket.setReuseAddress(true);
+ serverLdapSocket.bind(new InetSocketAddress("127.0.0.1", 0));
+ serverLdapPort = serverLdapSocket.getLocalPort();
+
+ serverJmxSocket = new ServerSocket();
+ serverJmxSocket.setReuseAddress(true);
+ serverJmxSocket.bind(new InetSocketAddress("127.0.0.1", 0));
+ serverJmxPort = serverJmxSocket.getLocalPort();
+
+ serverLdapsSocket = new ServerSocket();
+ serverLdapsSocket.setReuseAddress(true);
+ serverLdapsSocket.bind(new InetSocketAddress("127.0.0.1", 0));
+ serverLdapsPort = serverLdapsSocket.getLocalPort();
+
+ BufferedReader reader = new BufferedReader(new FileReader(
+ new File(testResourceDir,
+ "config-changes.ldif")
+ ));
+ FileOutputStream outFile = new FileOutputStream(
+ new File(testConfigDir, "config-changes.ldif"));
+ PrintStream writer = new PrintStream(outFile);
+
+ String line = reader.readLine();
+
+ while(line != null)
+ {
+ line = line.replaceAll("#ldapport#", String.valueOf(serverLdapPort));
+ line = line.replaceAll("#jmxport#", String.valueOf(serverJmxPort));
+ line = line.replaceAll("#ldapsport#", String.valueOf(serverLdapsPort));
+
+ writer.println(line);
+ line = reader.readLine();
+ }
+
+ writer.close();
+ outFile.close();
+
+ serverLdapSocket.close();
+ serverJmxSocket.close();
+ serverLdapsSocket.close();
// Actually start the server and set a variable that will prevent us from
// needing to do it again.
@@ -312,7 +368,7 @@
*/
public static long getServerLdapPort()
{
- return 32389;
+ return serverLdapPort;
}
/**
@@ -323,7 +379,18 @@
*/
public static long getServerJmxPort()
{
- return 33689;
+ return serverJmxPort;
+ }
+
+ /**
+ * Get teh LDAPS port the test environment Directory Server instance is
+ * running on
+ *
+ * @return The port number.
+ */
+ public static long getServerLdapsPort()
+ {
+ return serverLdapsPort;
}
/**
--
Gitblit v1.10.0