/*
* 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/opends/resource/legal-notices/OpenDS.LICENSE
* or https://OpenDS.dev.java.net/OpenDS.LICENSE.
* 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/opends/resource/legal-notices/OpenDS.LICENSE. 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 Sun Microsystems, Inc.
*/
package org.opends.quicksetup;
import org.opends.quicksetup.util.ZipExtractor;
import org.opends.quicksetup.util.ServerController;
import org.opends.quicksetup.util.FileManager;
import org.opends.server.TestCaseUtils;
import org.opends.server.types.OperatingSystem;
import org.opends.server.types.ByteStringBuilder;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.ServerSocket;
import java.util.List;
import java.util.ArrayList;
/**
*
*/
public class TestUtilities {
/**
* The name of the system property that specifies the server build root.
*/
public static final String PROPERTY_BUILD_ROOT =
"org.opends.server.BuildRoot";
public static final String DIRECTORY_MANAGER_PASSWORD = "password";
public static Integer ldapPort;
public static Integer jmxPort;
private static boolean initialized;
static public void initServer()
throws IOException, ApplicationException, InterruptedException {
File qsServerRoot = getQuickSetupTestServerRootDir();
if (!initialized) {
if (qsServerRoot.exists()) {
stopServer();
new FileManager().deleteRecursively(qsServerRoot);
}
ZipExtractor extractor = new ZipExtractor(getInstallPackageFile());
extractor.extract(qsServerRoot);
setupServer();
initialized = true;
}
}
static public Installation getInstallation() {
return new Installation(getQuickSetupTestServerRootDir(),getQuickSetupTestServerRootDir());
}
static private void setupServer() throws IOException, InterruptedException {
ServerSocket ldapSocket = TestCaseUtils.bindFreePort();
ldapPort = ldapSocket.getLocalPort();
ldapSocket.close();
ServerSocket jmxSocket = TestCaseUtils.bindFreePort();
jmxPort = jmxSocket.getLocalPort();
jmxSocket.close();
List<String> args = new ArrayList<String>();
File root = getQuickSetupTestServerRootDir();
if (OperatingSystem.isUNIXBased(
OperatingSystem.forName(System.getProperty("os.name")))) {
args.add(new File(root, "setup").getPath());
} else {
args.add(new File(root, "setup.bat").getPath());
}
args.add("--cli");
args.add("-n");
args.add("-p");
args.add(Integer.toString(ldapPort));
args.add("-x");
args.add(Integer.toString(jmxPort));
args.add("-w");
args.add(DIRECTORY_MANAGER_PASSWORD);
args.add("-O");
ProcessBuilder pb = new ProcessBuilder(args);
Process p = pb.start();
if (p.waitFor() != 0) {
ByteStringBuilder stdOut = new ByteStringBuilder();
ByteStringBuilder stdErr = new ByteStringBuilder();
while(stdOut.append(p.getInputStream(), 512) > 0);
while(stdErr.append(p.getErrorStream(), 512) > 0);
throw new IllegalStateException(
"setup server process failed:\n" +
"exit value: " + p.exitValue() + "\n" +
"stdout contents: " + stdOut.toString() + "\n" +
"stderr contents: " + stdErr.toString());
}
}
static public void stopServer() throws ApplicationException {
ServerController controller = new ServerController(getInstallation());
controller.stopServer();
}
static public File getInstallPackageFile() throws FileNotFoundException {
File installPackageFile = null;
String buildRoot = System.getProperty(PROPERTY_BUILD_ROOT);
File buildDir = new File(buildRoot, "build");
File packageDir = new File(buildDir, "package");
if (!packageDir.exists()) {
throw new FileNotFoundException("Package directory " + packageDir +
" does not exist");
}
String[] files = packageDir.list();
if (files != null) {
for (String fileName : files) {
if (fileName.endsWith(".zip")) {
installPackageFile = new File(packageDir, fileName);
break;
}
}
} else {
throw new FileNotFoundException("No files in " + packageDir);
}
return installPackageFile;
}
static public File getQuickSetupTestWorkspace() {
String buildRoot = System.getProperty(PROPERTY_BUILD_ROOT);
File buildDir = new File(buildRoot, "build");
File unitRootDir = new File(buildDir, "unit-tests");
return new File(unitRootDir, "quicksetup");
}
static public File getQuickSetupTestServerRootDir() {
return new File(getQuickSetupTestWorkspace(), "OpenDS");
}
}