mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

lutoff
22.06.2007 7c94a02ef7ed3965c644e2ed27966a9fb0eadb60
    * Add the ability to programmatically call the CLI
* Fix some NullPointerException in trustStore management
* Fix a bug in the certificate nickname handling
* Add unit tests
1 files added
2 files modified
392 ■■■■■ changed files
opends/src/server/org/opends/server/admin/client/cli/DsServiceCliMain.java 23 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/admin/client/cli/DsServiceCliParser.java 44 ●●●● patch | view | raw | blame | history
opends/tests/unit-tests-testng/src/server/org/opends/server/admin/client/cli/DsserviceTestCase.java 325 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/admin/client/cli/DsServiceCliMain.java
@@ -86,7 +86,7 @@
  public static void main(String[] args)
  {
    int retCode = mainCLI(args, System.out, System.err);
    int retCode = mainCLI(args, true, System.out, System.err);
    if(retCode != 0)
    {
@@ -105,7 +105,7 @@
  public static int mainCLI(String[] args)
  {
    return mainCLI(args, System.out, System.err);
    return mainCLI(args, true, System.out, System.err);
  }
  /**
@@ -114,18 +114,18 @@
   *
   * @param  args              The command-line arguments provided to this
   *                           program.
   * @param initializeServer   Indicates whether to initialize the server.
   * @param  outStream         The output stream to use for standard output, or
   *                           <CODE>null</CODE> if standard output is not
   *                           needed.
   * @param  errStream         The output stream to use for standard error, or
   *                           <CODE>null</CODE> if standard error is not
   *                           needed.
   *
   * @return The error code.
   */
  public static int mainCLI(String[] args, OutputStream outStream,
      OutputStream errStream)
  public static int mainCLI(String[] args, boolean initializeServer,
      OutputStream outStream, OutputStream errStream)
  {
    PrintStream out;
    if (outStream == null)
@@ -148,7 +148,7 @@
    }
    DsServiceCliMain dsServiceCli = new DsServiceCliMain(out, err);
    return dsServiceCli.execute(args);
    return dsServiceCli.execute(args,initializeServer);
  }
  /**
@@ -157,10 +157,11 @@
   *
   * @param  args              The command-line arguments provided to this
   *                           program.
   * @param  initializeServer  Indicates whether to initialize the server.
   *
   * @return The error code.
   */
  public int execute(String[] args)
  public int execute(String[] args, boolean initializeServer)
  {
    // Create the command-line argument parser for use with this
    // program.
@@ -281,7 +282,13 @@
    }
    ADSContext adsContext = new ADSContext(ctx);
    DirectoryServer.bootstrapClient();
    // Should we initialize the server in client mode?
    if (initializeServer)
    {
      // Bootstrap and initialize directory data structures.
      DirectoryServer.bootstrapClient();
    }
    // perform the subCommand
    ADSContextException adsException = null ;
    try
opends/src/server/org/opends/server/admin/client/cli/DsServiceCliParser.java
@@ -554,17 +554,32 @@
      try
      {
        FileInputStream fos = new FileInputStream(trustStorePathArg.getValue());
        String trustStorePasswordValue = null;
        String trustStorePasswordStringValue = null;
        char[] trustStorePasswordValue = null;
        if (trustStorePasswordArg.isPresent())
        {
          trustStorePasswordValue = trustStorePasswordArg.getValue();
          trustStorePasswordStringValue = trustStorePasswordArg.getValue();
        }
        else if (trustStorePasswordFileArg.isPresent())
        {
          trustStorePasswordValue = trustStorePasswordFileArg.getValue();
          trustStorePasswordStringValue = trustStorePasswordFileArg.getValue();
        }
        if (trustStorePasswordStringValue !=  null)
        {
          trustStorePasswordStringValue = System
              .getProperty("javax.net.ssl.trustStorePassword");
        }
        if (trustStorePasswordStringValue !=  null)
        {
          trustStorePasswordValue = trustStorePasswordStringValue.toCharArray();
        }
        truststore = KeyStore.getInstance(KeyStore.getDefaultType());
        truststore.load(fos, trustStorePasswordValue.toCharArray());
        truststore.load(fos, trustStorePasswordValue);
        fos.close();
      }
      catch (KeyStoreException e)
      {
@@ -596,7 +611,6 @@
      }
    }
    truststoreManager = new ApplicationTrustManager(truststore);
    truststoreManager.setHost(getHostName());
    return truststoreManager;
  }
@@ -661,17 +675,21 @@
        // in a best effor mode.
        LOG.log(Level.WARNING, "Error with the keystore", e);
      }
    }
    ApplicationKeyManager akm = new ApplicationKeyManager(keyStore,
        keyStorePasswordValue.toCharArray());
    if (certNicknameArg.isPresent())
    {
      return new SelectableCertificateKeyManager(akm, certNicknameArg
          .getValue());
      ApplicationKeyManager akm = new ApplicationKeyManager(keyStore,
          keyStorePasswordValue.toCharArray());
      if (certNicknameArg.isPresent())
      {
        return new SelectableCertificateKeyManager(akm, certNicknameArg
            .getValue());
      }
      else
      {
        return akm;
      }
    }
    else
    {
      return akm;
      return null;
    }
  }
opends/tests/unit-tests-testng/src/server/org/opends/server/admin/client/cli/DsserviceTestCase.java
New file
@@ -0,0 +1,325 @@
/*
 * 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
 *
 *
 *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
 */
package org.opends.server.admin.client.cli;
import java.io.File;
import java.io.FileWriter;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import org.opends.server.TestCaseUtils;
import org.opends.server.core.DirectoryServer;
import static org.testng.Assert.*;
import static org.opends.server.admin.client.cli.DsServiceCliReturnCode.*;
/**
 * A set of test cases for the dsservice tool.
 */
public class DsserviceTestCase
{
  // The path to a file containing an invalid bind password.
  private String invalidPasswordFile;
  // The path to a file containing a valid bind password.
  private String validPasswordFile;
  /**
   * Ensures that the Directory Server is running and performs other necessary
   * setup.
   *
   * @throws  Exception  If an unexpected problem occurs.
   */
  @BeforeClass()
  public void before()
         throws Exception
  {
    TestCaseUtils.startServer();
    File pwFile = File.createTempFile("valid-bind-password-", ".txt");
    pwFile.deleteOnExit();
    FileWriter fileWriter = new FileWriter(pwFile);
    fileWriter.write("password" + System.getProperty("line.separator"));
    fileWriter.close();
    validPasswordFile = pwFile.getAbsolutePath();
    pwFile = File.createTempFile("invalid-bind-password-", ".txt");
    pwFile.deleteOnExit();
    fileWriter = new FileWriter(pwFile);
    fileWriter.write("wrongPassword" + System.getProperty("line.separator"));
    fileWriter.close();
    invalidPasswordFile = pwFile.getAbsolutePath();
    String[] args =
    {
      "create-ads",
      "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
      "-w", "password",
      "admin"
    };
    assertEquals(DsServiceCliMain.mainCLI(args, false, System.out, System.err),
        ReturnCode.SUCCESSFUL.getReturnCode());
  }
  /**
   * Ensures ADS is removed
   * @throws  Exception  If an unexpected problem occurs.
   */
  @AfterClass()
  public void afterClass()
         throws Exception
  {
    String[] args =
    {
      "delete-ads",
      "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
      "-w", "password",
      "admin"
    };
    assertEquals(DsServiceCliMain.mainCLI(args, false, System.out, System.err),
        ReturnCode.SUCCESSFUL.getReturnCode());
  }
  /**
   * Tests list-groups with a malformed bind DN.
   */
  @Test()
  public void testMalformedBindDN()
  {
    String[] args =
    {
      "list-groups",
      "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
      "-D", "malformed",
      "-w", "password"
    };
    assertFalse(DsServiceCliMain.mainCLI(args, false, null, null)
        == ReturnCode.SUCCESSFUL.getReturnCode());
  }
  /**
   * Tests list-groups with a nonexistent bind DN.
   */
  @Test()
  public void testNonExistentBindDN()
  {
    String[] args =
    {
      "list-groups",
      "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
      "-D", "cn=Does Not Exist",
      "-w", "password"
    };
    assertFalse(DsServiceCliMain.mainCLI(args, false, System.out, System.err)
        == ReturnCode.SUCCESSFUL.getReturnCode());
  }
  /**
   * Tests list-groups with an invalid password.
   */
  @Test()
  public void testInvalidBindPassword()
  {
    String[] args =
    {
      "list-groups",
      "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
      "-D", "cn=Directory Manager",
      "-w", "wrongPassword"
    };
    assertFalse(DsServiceCliMain.mainCLI(args, false, System.out, System.err)
        == ReturnCode.SUCCESSFUL.getReturnCode());
  }
  /**
   * Tests list-groups with a valid password read from a file.
   *
   * @throws  Exception  If an unexpected problem occurs.
   */
  @Test()
  public void testValidPasswordFromFile()
         throws Exception
  {
    String[] args =
    {
      "list-groups",
      "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
      "-D", "cn=Directory Manager",
      "-j", validPasswordFile,
    };
    assertEquals(DsServiceCliMain.mainCLI(args, false, System.out, System.err),
        ReturnCode.SUCCESSFUL.getReturnCode());
  }
  /**
   * Tests list-groups with an invalid password read from a file.
   *
   * @throws  Exception  If an unexpected problem occurs.
   */
  @Test()
  public void testInvalidPasswordFromFile()
         throws Exception
  {
    String[] args =
    {
      "list-groups",
      "-p", String.valueOf(TestCaseUtils.getServerLdapPort()),
      "-D", "cn=Directory Manager",
      "-j",invalidPasswordFile
    };
    assertFalse(DsServiceCliMain.mainCLI(args, false, System.out, System.err)
        == ReturnCode.SUCCESSFUL.getReturnCode());
  }
  /**
   * Tests a list-groups over SSL using blind trust.
   */
  @Test()
  public void testListGroupsSSLBlindTrust()
  {
    String[] args =
    {
      "list-groups",
      "-p", String.valueOf(TestCaseUtils.getServerLdapsPort()),
      "-w", "password",
      "-Z",
      "-X"
    };
    assertEquals(DsServiceCliMain.mainCLI(args, false, System.out, System.err),
        ReturnCode.SUCCESSFUL.getReturnCode());
  }
  /**
   * Tests a list-groups over SSL using a trust store.
   */
  @Test()
  public void testListGroupsSSLTrustStore()
  {
    String trustStorePath = DirectoryServer.getServerRoot() + File.separator +
                            "config" + File.separator + "client.truststore";
    String[] args =
    {
      "list-groups",
      "-p", String.valueOf(TestCaseUtils.getServerLdapsPort()),
      "-w", "password",
      "-Z",
      "-P", trustStorePath
    };
    assertEquals(DsServiceCliMain.mainCLI(args, false, System.out, System.err),
        ReturnCode.SUCCESSFUL.getReturnCode());
  }
  /**
   * Tests a list-groups using StartTLS with blind trust.
   */
  @Test(enabled=false)
  public void testListGroupsStartTLSBlindTrust()
  {
    String[] args =
    {
      "list-groups",
      "-p", String.valueOf(TestCaseUtils.getServerLdapsPort()),
      "-w", "password",
      "-q",
      "-X"
    };
    assertEquals(DsServiceCliMain.mainCLI(args, false, null, System.err),
        ReturnCode.SUCCESSFUL.getReturnCode());
  }
  /**
   * Tests a list-groups using StartTLS with a trust store.
   */
  @Test(enabled=false)
  public void testListGroupsStartTLSTrustStore()
  {
    String trustStorePath = DirectoryServer.getServerRoot() + File.separator +
                            "config" + File.separator + "client.truststore";
    String[] args =
    {
      "list-groups",
      "-p", String.valueOf(TestCaseUtils.getServerLdapsPort()),
      "-w", "password",
      "-q",
      "-P", trustStorePath
    };
    assertEquals(DsServiceCliMain.mainCLI(args, false, null, System.err),
        ReturnCode.SUCCESSFUL.getReturnCode());
  }
  /**
   * Tests the dsservice with the "--help" option.
   */
  @Test()
  public void testHelp()
  {
    String[] args = { "--help" };
    assertEquals(DsServiceCliMain.mainCLI(args, false, null, null),
        ReturnCode.SUCCESSFUL.getReturnCode());
    args = new String[] { "-H" };
    assertEquals(DsServiceCliMain.mainCLI(args, false, null, null),
        ReturnCode.SUCCESSFUL.getReturnCode());
    args = new String[] { "-?" };
    assertEquals(DsServiceCliMain.mainCLI(args, false, null, null),
        ReturnCode.SUCCESSFUL.getReturnCode());
  }
}