From 8312e8e46d34547a69090a971db426d8df058e9f Mon Sep 17 00:00:00 2001
From: Violette Roche-Montane <violette.roche-montane@forgerock.com>
Date: Tue, 18 Jun 2013 09:36:39 +0000
Subject: [PATCH] Modified test cases on upgrade tool.

---
 opends/tests/unit-tests-testng/src/server/org/opends/server/tools/UpgradeTestCase.java |  252 ++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 212 insertions(+), 40 deletions(-)

diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/tools/UpgradeTestCase.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/tools/UpgradeTestCase.java
index b07510c..feaaf67 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/server/tools/UpgradeTestCase.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/tools/UpgradeTestCase.java
@@ -26,15 +26,24 @@
  */
 package org.opends.server.tools;
 
+import java.io.ByteArrayOutputStream;
+import java.io.File;
 import java.io.IOException;
+import java.io.PrintStream;
+import java.util.LinkedList;
+import java.util.List;
 
+import org.opends.messages.Message;
 import org.opends.server.TestCaseUtils;
 import org.opends.server.config.ConfigException;
+import org.opends.server.core.DirectoryServer;
 import org.opends.server.tools.upgrade.UpgradeCli;
 import org.opends.server.types.DirectoryException;
 import org.opends.server.types.InitializationException;
 import org.testng.annotations.Test;
 
+import static org.opends.messages.ToolMessages.*;
+import static org.opends.server.tools.ToolConstants.OPTION_LONG_FORCE_UPGRADE;
 import static org.testng.Assert.*;
 
 /**
@@ -42,68 +51,231 @@
  */
 public class UpgradeTestCase extends ToolsTestCase
 {
+  private final static String configFilePath = DirectoryServer
+      .getInstanceRoot()
+      + File.separator + "config" + File.separator + "config.ldif";
+
   /**
-   * Tests the Upgrade tool with an argument that will simply cause it to
-   * display usage information.
+   * Sets the args for the upgrade tools. The configFile parameter is
+   * configured by default.<pre>
+   * usage : {@code}setArgs("--force", "--no-prompt") {@code}
+   * corresponds to command line : ./upgrade --force -n</pre>
+   *
+   * @param args
+   *          The argument you want for testing.
+   * @return An array of string containing the args.
    */
-  @Test()
-  public void testUpgradeToolHelpUsage()
+  private String[] setArgs(String... args)
   {
-    String[] args = { "--help" };
-    assertEquals(UpgradeCli.main(args, true, System.out, System.err), 0);
+    final List<String> argsList = new LinkedList<String>();
+    argsList.add("--configFile");
+    argsList.add(configFilePath);
+    if (args != null)
+    {
+      for (final String argument : args)
+      {
+        argsList.add(argument);
+      }
+    }
+    final String[] mainArgs = new String[argsList.size()];
+    argsList.toArray(mainArgs);
 
-    args = new String[] { "-H" };
-    assertEquals(LDIFDiff.mainDiff(args, true, System.out, System.err), 0);
-
-    args = new String[] { "-?" };
-    assertEquals(LDIFDiff.mainDiff(args, true, System.out, System.err), 0);
+    return mainArgs;
   }
 
   /**
-   * Tests the Upgrade tool with wrong sub-command.
+   * Returns {@code true} if the output contain the expected message.
+   *
+   * @param output
+   *          The upgrade's output.
+   * @param expectedMessage
+   *          The expected message.
+   * @return {@code true} if the output contains the expected message.
    */
-  @Test()
-  public void testUpgradeToolWrongSubcommand()
+  private boolean isOutputContainsExpectedMessage(final String output,
+      final Message expectedMessage)
   {
-    String[] args = { "-- wrong" };
-    assertEquals(UpgradeCli.main(args, true, System.out, System.err), 1);
-
-    args = new String[]{ "--wrong" };
-    assertEquals(UpgradeCli.main(args, true, System.out, System.err), 1);
+    return (output.replaceAll("\n", " ").replaceAll("%s", " ").indexOf(
+        expectedMessage.toString().replaceAll("\n", " ")
+        .replaceAll("%s", " ")) != -1);
   }
 
   /**
-   * Tests the Upgrade tool with unauthorized usage.
+   * Tests display help information.
    */
   @Test()
-  public void testUpgradeToolUnauthorizedUsage()
+  public void testUpgradeToolDisplaysHelpUsage()
   {
-    // Interactive mode is not compatible with forceUpgrade mode.
-    String[] args = { "--forceUpgrade" };
-    assertEquals(UpgradeCli.main(args, true, System.out, System.err), 1);
+    final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+    final PrintStream ps = new PrintStream(baos);
+
+    try
+    {
+      // The 'main' should exit with success code.
+      assertEquals(UpgradeCli.main(setArgs("--help"), true, ps, ps), 0);
+
+      assertTrue(isOutputContainsExpectedMessage(baos.toString(),
+          INFO_UPGRADE_DESCRIPTION_CLI.get()));
+    }
+    finally
+    {
+      ps.close();
+    }
   }
 
   /**
-   * Tests the Upgrade tool with a running server throws an error.
+   * Tests display help information.
    */
   @Test()
-  public void testUpgradeRequiresServerOffline() throws InitializationException,
-      ConfigException, DirectoryException, IOException
+  public void testUpgradeToolDisplaysHelpUsage2()
+  {
+    final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+    final PrintStream ps = new PrintStream(baos);
+
+    try
+    {
+      // The 'main' should exit with success code.
+      assertEquals(UpgradeCli.main(setArgs("-H"), true, ps, ps), 0);
+
+      assertTrue(isOutputContainsExpectedMessage(baos.toString(),
+          INFO_UPGRADE_DESCRIPTION_CLI.get()));
+    }
+    finally
+    {
+      ps.close();
+    }
+  }
+
+  /**
+   * Tests display help information.
+   */
+  @Test()
+  public void testUpgradeToolDisplaysHelpUsage3()
+  {
+    final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+    final PrintStream ps = new PrintStream(baos);
+
+    try
+    {
+      // The 'main' should exit with success code.
+      assertEquals(UpgradeCli.main(setArgs("-?"), true, ps, ps), 0);
+
+      assertTrue(isOutputContainsExpectedMessage(baos.toString(),
+          INFO_UPGRADE_DESCRIPTION_CLI.get()));
+    }
+    finally
+    {
+      ps.close();
+    }
+  }
+
+  /**
+   * Tests the upgrade tool with an invalid sub-command.
+   */
+  @Test()
+  public void testUpgradeToolDoesntAllowWrongSubcommand()
+  {
+    final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+    final PrintStream ps = new PrintStream(baos);
+
+    try
+    {
+      // The 'main' should exit with an error code.
+      assertEquals(UpgradeCli.main(setArgs("-- wrong"), true, ps, ps), 1);
+
+      assertTrue(isOutputContainsExpectedMessage(baos.toString(),
+          ERR_ERROR_PARSING_ARGS.get("")));
+    }
+    finally
+    {
+      ps.close();
+    }
+  }
+
+  /**
+   * Tests the upgrade tool with an invalid sub-command.
+   */
+  @Test()
+  public void testUpgradeToolDoesntAllowWrongSubcommand2()
+  {
+    final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+    final PrintStream ps = new PrintStream(baos);
+
+    try
+    {
+      // The 'main' should exit with an error code.
+      assertEquals(UpgradeCli.main(setArgs("--wrong"), true, ps, ps), 1);
+
+      assertTrue(isOutputContainsExpectedMessage(baos.toString(),
+          ERR_ERROR_PARSING_ARGS.get("")));
+    }
+    finally
+    {
+      ps.close();
+    }
+  }
+
+  /**
+   * The upgrade tool disallows the force sub-command used with 'interactive
+   * mode'.
+   */
+  @Test()
+  public void testUpgradeToolDoesntAllowInteractiveAndForce()
+  {
+    final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+    final PrintStream ps = new PrintStream(baos);
+    try
+    {
+      // The 'main' should exit with an error code.
+      assertEquals(UpgradeCli.main(setArgs("--force"), true, ps, ps), 1);
+
+      // Because interactive mode is not compatible with force upgrade mode.
+      final Message message =
+          ERR_UPGRADE_INCOMPATIBLE_ARGS.get(OPTION_LONG_FORCE_UPGRADE,
+              "interactive mode");
+
+      assertTrue(isOutputContainsExpectedMessage(baos.toString(), message));
+    }
+    finally
+    {
+      ps.close();
+    }
+  }
+
+  /**
+   * Upgrade tool allows use of force and no-prompt sub-commands.
+   *
+   * @throws IOException
+   * @throws DirectoryException
+   * @throws ConfigException
+   * @throws InitializationException
+   */
+  @Test()
+  public void testUpgradeToolAllowsNonInteractiveAndForce()
+      throws InitializationException, ConfigException, DirectoryException,
+      IOException
   {
     TestCaseUtils.startServer();
-    String[] args = { "" };
-    assertEquals(UpgradeCli.main(args, true, System.out, System.err), 1);
-    TestCaseUtils.shutdownServer("End of upgrade test.");
-  }
 
-  /**
-   * Tests the upgrade with an offline server and empty args fails.
-   */
-  @Test()
-  public void testUpgradeServerOfflineEmptyArgs() throws InitializationException,
-      ConfigException, DirectoryException, IOException
-  {
-    String[] args = { "" };
-    assertEquals(UpgradeCli.main(args, true, System.out, System.err), 1);
+    final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+    final PrintStream ps = new PrintStream(baos);
+    try
+    {
+      // The 'main' should exit with success code.
+      assertEquals(UpgradeCli.main(setArgs("--force", "--no-prompt"), true, ps,
+          ps), 0);
+
+      // The sub-commands have been checked ok but upgrade must exist on
+      // version's verification.
+      assertTrue(isOutputContainsExpectedMessage(baos.toString(),
+          ERR_UPGRADE_VERSION_UP_TO_DATE.get("")));
+
+    }
+    finally
+    {
+      ps.close();
+      TestCaseUtils
+          .shutdownServer("testUpgradeToolAllowsNonInteractiveAndForce");
+    }
   }
 }

--
Gitblit v1.10.0