From 883c4b7810dcabba4ebe2924ca0757485f5312da Mon Sep 17 00:00:00 2001
From: kenneth_suter <kenneth_suter@localhost>
Date: Fri, 15 Jun 2007 21:55:02 +0000
Subject: [PATCH] - Add a few more unit tests for important classes.  This also includes some plumbing for getting the quicksetup tests' workspace server configured enough so that it is startable and stoppable  for testing.

---
 opends/src/quicksetup/org/opends/quicksetup/CurrentInstallStatus.java |  331 +++---------------------------------------------------
 1 files changed, 21 insertions(+), 310 deletions(-)

diff --git a/opends/src/quicksetup/org/opends/quicksetup/CurrentInstallStatus.java b/opends/src/quicksetup/org/opends/quicksetup/CurrentInstallStatus.java
index 220c7f5..6c7a61e 100644
--- a/opends/src/quicksetup/org/opends/quicksetup/CurrentInstallStatus.java
+++ b/opends/src/quicksetup/org/opends/quicksetup/CurrentInstallStatus.java
@@ -27,13 +27,11 @@
 
 package org.opends.quicksetup;
 
-import java.io.BufferedReader;
 import java.io.File;
-import java.io.FileReader;
 import java.io.IOException;
 import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.Set;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
 import org.opends.quicksetup.i18n.ResourceProvider;
 import org.opends.quicksetup.util.Utils;
@@ -50,26 +48,15 @@
 
 public class CurrentInstallStatus
 {
+  static private final Logger LOG =
+          Logger.getLogger(CurrentInstallStatus.class.getName());
+
   private boolean isInstalled;
 
   private boolean canOverwriteCurrentInstall;
 
   private String installationMsg;
 
-  private String configFileContents;
-
-  private Set<String> directoryManagerDns;
-
-  private Set<String> dbPaths;
-
-  private Set<String> logPaths;
-
-  private String ldapUrl;
-
-  private String ldapsUrl;
-
-  private static boolean lockPathInitialized;
-
   /**
    * The constructor of a CurrentInstallStatus object.
    *
@@ -81,10 +68,11 @@
       isInstalled = false;
     } else
     {
+      Installation installation = Installation.getLocal();
       boolean dbFileExists = false;
       ArrayList<String> msgs = new ArrayList<String>();
 
-      if (isServerRunning())
+      if (installation.getStatus().isServerRunning())
       {
         msgs.add(getMsg("installstatus-serverrunning", new String[]
             { String.valueOf(getPort()) }));
@@ -160,217 +148,14 @@
     return installationMsg;
   }
 
-  /**
-   * Returns the list of directory manager dns as they appear in the
-   * configuration file.
-   *
-   * @return the list of directory manager dns as they appear in the
-   * configuration file.
-   */
-  public Set<String> getDirectoryManagerDns()
-  {
-    if (directoryManagerDns == null)
-    {
-      directoryManagerDns = new HashSet<String>();
-      String directoryManagerDnAttr = "ds-cfg-alternate-bind-dn";
-      updateSetWithValues(directoryManagerDns, directoryManagerDnAttr);
-    }
-    return directoryManagerDns;
-  }
-
-  /**
-   * Returns the list of paths where the databases are installed as they appear
-   * in the configuration file.
-   *
-   * @return the list of paths where the databases are installed as they appear
-   * in the configuration file.
-   */
-  public Set<String> getDatabasePaths()
-  {
-    if (dbPaths == null)
-    {
-      dbPaths = new HashSet<String>();
-      String dbFileAttr = "ds-cfg-backend-directory";
-      updateSetWithValues(dbPaths, dbFileAttr);
-    }
-    return dbPaths;
-  }
-
-  /**
-   * Returns the list of paths where the logs files are located as they appear
-   * in the configuration file.
-   *
-   * @return the list of paths where the logs files are located as they appear
-   * in the configuration file.
-   */
-  public Set<String> getLogPaths()
-  {
-    if (logPaths == null)
-    {
-      logPaths = new HashSet<String>();
-      String logFileAttr = "ds-cfg-log-file";
-      updateSetWithValues(logPaths, logFileAttr);
-    }
-    return logPaths;
-  }
-
-  /**
-   * Returns if the server is running on the given path.  The location
-   * of the 'locks' directory which is required for this method is
-   * determined by getting the installation path from the classpath.
-   * NOTE: this method is to be called only when the OpenDS.jar class has
-   * already been loaded as it uses classes in that jar.
-   *
-   * LIMITATIONS:
-   * If the locks directory does not exist the mechanism fails if the server is
-   * stopped.  However if the server.lock does not exist AND the server is not
-   * running the mechanism should work most of the times (see failing case 3).
-   *
-   * The cases where this mechanism does not work are:
-   *
-   * 1. The user deletes/renames the locks directory.
-   * 2. The user deletes/renames the server.lock file AND the server is running.
-   * 3. The server is not running but the user that is running the code does not
-   * have file system access rights.
-   * 4. The server is not running and another process has a lock on the file.
-   * @return <CODE>true</CODE> if the server is running and <CODE>false</CODE>
-   * otherwise.
-   */
-  public static boolean isServerRunning() {
-    File locksDir = new File(Utils.getInstallPathFromClasspath(),
-            org.opends.server.util.ServerConstants.LOCKS_DIRECTORY);
-    return isServerRunning(locksDir);
-  }
-
-  /**
-   * Returns if the server is running on the given path.
-   * NOTE: this method is to be called only when the OpenDS.jar class has
-   * already been loaded as it uses classes in that jar.
-   * @param locksDir File representing the location of the server's 'locks'
-   * directory
-   * @return <CODE>true</CODE> if the server is running and <CODE>false</CODE>
-   * otherwise.
-   */
-  public static boolean isServerRunning(File locksDir)
-  {
-    boolean isServerRunning;
-    if (!lockPathInitialized)
-    {
-      System.setProperty(
-        org.opends.server.util.ServerConstants.PROPERTY_LOCK_DIRECTORY,
-        Utils.getPath(locksDir));
-      lockPathInitialized = true;
-    }
-    String lockFile =
-      org.opends.server.core.LockFileManager.getServerLockFileName();
-    StringBuilder failureReason = new StringBuilder();
-    try
-    {
-      if (org.opends.server.core.LockFileManager.acquireExclusiveLock(lockFile,
-          failureReason))
-      {
-        org.opends.server.core.LockFileManager.releaseLock(lockFile,
-            failureReason);
-        isServerRunning = false;
-      }
-      else
-      {
-        isServerRunning = true;
-      }
-    }
-    catch (Throwable t)
-    {
-      // Assume that if we cannot acquire the lock file the server is
-      // running.
-      isServerRunning = true;
-    }
-    return isServerRunning;
-  }
-
-  /**
-   * Provides the ldap url to the server (assumes we are calling this locally).
-   *
-   * @return the ldap url to the server.
-   */
-  public String getLdapUrl()
-  {
-    if (ldapUrl == null)
-    {
-      if (getPort() != -1)
-      {
-        ldapUrl = "ldap://localhost:"+getPort();
-      }
-    }
-    return ldapUrl;
-  }
-
-  /**
-   * Provides the ldap secure url to the server (assumes we are calling this
-   * locally).
-   *
-   * @return the ldap secure url to the server.
-   */
-  public String getLdapsUrl()
-  {
-    if (ldapsUrl == null)
-    {
-      if (getSecurePort() != -1)
-      {
-        ldapsUrl = "ldaps://localhost:"+getSecurePort();
-      }
-    }
-    return ldapsUrl;
-  }
-
-  /**
-   * Provides the LDAP port as is specified in the config.ldif file.
-   *
-   * @return the LDAP port specified in the config.ldif file.
-   */
   private int getPort()
   {
-    return getPort("ds-cfg-listen-port");
-  }
-
-  /**
-   * Provides the LDAP secure port as is specified in the config.ldif file.
-   *
-   * @return the LDAP secure port specified in the config.ldif file.
-   */
-  private int getSecurePort()
-  {
-    // TODO find out which is the attribute for this port.
-    return getPort("ds-cfg-listen-secure-port");
-  }
-
-  private int getPort(String portAttr)
-  {
     int port = -1;
-
-    int index = getConfigFileContents().indexOf("cn=ldap connection handler");
-
-    if (index != -1)
-    {
-      String attrWithPoints = portAttr+":";
-      int index1 = getConfigFileContents().indexOf(attrWithPoints, index);
-      if (index1 != -1)
-      {
-        int index2 =
-            getConfigFileContents().indexOf(Constants.LINE_SEPARATOR, index1);
-        if (index2 != -1)
-        {
-          String sPort =
-              getConfigFileContents().substring(attrWithPoints.length() +
-                  index1,
-                  index2).trim();
-          try
-          {
-            port = Integer.parseInt(sPort);
-          } catch (NumberFormatException nfe)
-          {
-          }
-        }
-      }
+    try {
+      port = Installation.getLocal().getCurrentConfiguration().
+              getPort();
+    } catch (IOException ioe) {
+      LOG.log(Level.INFO, "Failed to get port", ioe);
     }
     return port;
   }
@@ -384,7 +169,8 @@
   private boolean dbFilesExist()
   {
     boolean dbFilesExist = false;
-    File dbDir = new File(Utils.getInstallPathFromClasspath(), "db");
+
+    File dbDir = Installation.getLocal().getDatabasesDirectory();
     File[] children = dbDir.listFiles();
     if ((children != null) && (children.length > 0))
     {
@@ -403,53 +189,16 @@
    */
   private boolean isConfigFileModified()
   {
-    boolean isConfigFileModified = getPort() != 389;
-
-    if (!isConfigFileModified)
-    {
-      // TODO: this is not really stable
-      isConfigFileModified =
-          getConfigFileContents().indexOf("# cddl header start") == -1;
+    boolean mod = false;
+    try {
+      mod = Installation.getLocal().getCurrentConfiguration()
+              .hasBeenModified();
+    } catch (IOException ioe) {
+      LOG.log(Level.INFO, "failed to determine if config modified", ioe);
     }
-
-    return isConfigFileModified;
+    return mod;
   }
 
-  /**
-   * Provides the contents of the config.ldif file in a String.
-   *
-   * @return a String representing the contents of the config.ldif file.
-   */
-  private String getConfigFileContents()
-  {
-    if (configFileContents == null)
-    {
-      StringBuilder buf = new StringBuilder();
-      try
-      {
-        Installation installation = getInstallationFromClassPath();
-        FileReader reader =
-                new FileReader(installation.getCurrentConfigurationFile());
-        BufferedReader in = new BufferedReader(reader);
-        String line;
-        // We do not care about encoding: we are just interested in the ports
-        while ((line = in.readLine()) != null)
-        {
-          buf.append(line).append(Constants.LINE_SEPARATOR);
-        }
-        reader.close();
-      } catch (IOException ioe)
-      {
-      }
-      configFileContents = buf.toString().toLowerCase();
-    }
-    return configFileContents;
-  }
-
-  /**
-   * The following three methods are just commodity methods to get localized
-   * messages.
-   */
   private String getMsg(String key)
   {
     return getI18n().getMsg(key);
@@ -465,42 +214,4 @@
     return ResourceProvider.getInstance();
   }
 
-  private void updateSetWithValues(Set<String> set, String attrName)
-  {
-    attrName += ":";
-    int index1 = getConfigFileContents().indexOf(attrName);
-    while (index1 != -1)
-    {
-      int index2 = getConfigFileContents().indexOf(
-            Constants.LINE_SEPARATOR, index1);
-      String value;
-      if (index2 > (index1 + attrName.length()))
-      {
-        value = getConfigFileContents().substring(attrName.length() + index1,
-              index2).trim();
-      }
-      else if (getConfigFileContents().length() > (index1 + attrName.length()))
-      {
-        // Assume end of file
-        value = getConfigFileContents().substring(
-            attrName.length() + index1).trim();
-      }
-      else
-      {
-        value = null;
-      }
-
-      if ((value != null) && (value.length() > 0))
-      {
-        set.add(value);
-      }
-
-      index1 = getConfigFileContents().indexOf(attrName,
-          index1 + attrName.length());
-    }
-  }
-
-  private Installation getInstallationFromClassPath() {
-    return new Installation(Utils.getInstallPathFromClasspath());
-  }
 }

--
Gitblit v1.10.0