Package org.nasutekds.quicksetup

Source Code of org.nasutekds.quicksetup.TestUtilities

/*
* 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/nasutekds/resource/legal-notices/NasuTekDS.LICENSE
* or https://NasuTekDS.dev.java.net/NasuTekDS.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/nasutekds/resource/legal-notices/NasuTekDS.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.nasutekds.quicksetup;

import org.nasutekds.quicksetup.util.ZipExtractor;
import org.nasutekds.quicksetup.util.ServerController;
import org.nasutekds.quicksetup.util.FileManager;
import org.nasutekds.server.TestCaseUtils;
import org.nasutekds.server.types.OperatingSystem;
import org.nasutekds.server.types.ByteStringBuilder;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
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.nasutekds.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(), "NasuTekDS");
  }
}
TOP

Related Classes of org.nasutekds.quicksetup.TestUtilities

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.