From ed0ae491be5928897b1e8bd5b41d0426dbd08081 Mon Sep 17 00:00:00 2001
From: Nicolas Capponi <nicolas.capponi@forgerock.com>
Date: Wed, 21 Sep 2016 15:15:44 +0000
Subject: [PATCH] OPENDJ-2413 Add test class for EmbeddedDirectoryServer class
---
opendj-server-legacy/src/test/java/org/opends/server/TestCaseUtils.java | 37 ++-
opendj-server-legacy/src/main/java/org/opends/server/core/DirectoryServer.java | 3
opendj-server-legacy/src/main/java/org/opends/server/util/embedded/EmbeddedDirectoryServer.java | 70 +++++-
opendj-server-legacy/src/main/java/org/opends/server/util/embedded/ImportParameters.java | 20 +-
opendj-server-legacy/src/main/java/org/opends/server/util/embedded/ConnectionParameters.java | 20 +-
opendj-server-legacy/src/main/java/org/opends/server/util/StaticUtils.java | 2
opendj-server-legacy/src/main/java/org/opends/server/util/embedded/ConfigParameters.java | 20 +-
opendj-server-legacy/tests/unit-tests-testng/resource/test-import-file.ldif | 18 +
opendj-server-legacy/src/main/java/org/opends/server/tools/dsreplication/LocalPurgeHistorical.java | 5
opendj-server-legacy/src/main/java/org/opends/server/util/embedded/SetupParameters.java | 20 +-
opendj-server-legacy/src/main/java/org/opends/server/util/embedded/RebuildIndexParameters.java | 36 +--
opendj-server-legacy/src/main/java/org/opends/server/util/embedded/UpgradeParameters.java | 20 +-
opendj-server-legacy/src/test/java/org/opends/server/util/EmbeddedDirectoryServerTestCase.java | 284 ++++++++++++++++++++++++++++
opendj-server-legacy/src/main/java/org/opends/server/util/embedded/ReplicationParameters.java | 20 +-
14 files changed, 461 insertions(+), 114 deletions(-)
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/core/DirectoryServer.java b/opendj-server-legacy/src/main/java/org/opends/server/core/DirectoryServer.java
index cf90034..25c492d 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/core/DirectoryServer.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/core/DirectoryServer.java
@@ -1223,6 +1223,9 @@
directoryServer.disabledPrivileges = new LinkedHashSet<>(0);
directoryServer.returnBindErrorMessages = false;
directoryServer.idleTimeLimit = 0L;
+
+ // make sure the timer thread is started in case it was stopped before
+ TimeThread.start();
}
}
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/tools/dsreplication/LocalPurgeHistorical.java b/opendj-server-legacy/src/main/java/org/opends/server/tools/dsreplication/LocalPurgeHistorical.java
index 4617729..82bc01a 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/tools/dsreplication/LocalPurgeHistorical.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/tools/dsreplication/LocalPurgeHistorical.java
@@ -16,7 +16,8 @@
*/
package org.opends.server.tools.dsreplication;
-import static org.opends.server.util.embedded.ConfigParameters.Builder.configParams;
+import static org.opends.server.util.embedded.ConfigParameters.configParams;
+import static org.opends.server.util.embedded.EmbeddedDirectoryServer.defineServerForStartStopOperations;
import static org.opends.messages.AdminToolMessages.*;
import org.forgerock.i18n.LocalizableMessage;
@@ -88,7 +89,7 @@
try
{
- EmbeddedDirectoryServer server = EmbeddedDirectoryServer.defineServerForStartStopOperations(
+ EmbeddedDirectoryServer server = defineServerForStartStopOperations(
configParams()
.configurationFile(configFile)
.disableConnectionHandlers(true)
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/util/StaticUtils.java b/opendj-server-legacy/src/main/java/org/opends/server/util/StaticUtils.java
index 82e04b8..5a7c773 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/util/StaticUtils.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/util/StaticUtils.java
@@ -2507,7 +2507,7 @@
if (fileEntry.isDirectory())
{
- targetFile.mkdir();
+ targetFile.mkdirs();
continue;
}
extractFileFromZip(zipStream, targetFile);
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/ConfigParameters.java b/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/ConfigParameters.java
index 08e2832..40fb33f 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/ConfigParameters.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/ConfigParameters.java
@@ -30,6 +30,16 @@
// private constructor to force usage of the associated Builder
}
+ /**
+ * Creates a builder for the configuration parameters.
+ *
+ * @return a builder
+ */
+ public static Builder configParams()
+ {
+ return new Builder();
+ }
+
String getServerRootDirectory()
{
return serverRootDirectory;
@@ -64,16 +74,6 @@
}
/**
- * Creates a builder for the configuration parameters.
- *
- * @return a builder
- */
- public static Builder configParams()
- {
- return new Builder();
- }
-
- /**
* Generates the parameters from this builder.
* <p>
* After this call, the builder is reset and can be used to generate other parameters.
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/ConnectionParameters.java b/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/ConnectionParameters.java
index 212f0d5..61d32cc 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/ConnectionParameters.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/ConnectionParameters.java
@@ -33,6 +33,16 @@
// private constructor to force usage of the associated Builder
}
+ /**
+ * Creates a builder for the connection parameters.
+ *
+ * @return a builder
+ */
+ public static Builder connectionParams()
+ {
+ return new Builder();
+ }
+
String getAdminPassword()
{
return adminPassword;
@@ -81,16 +91,6 @@
}
/**
- * Creates a builder for the connection parameters.
- *
- * @return a builder
- */
- public static Builder connectionParams()
- {
- return new Builder();
- }
-
- /**
* Generates the parameters from this builder.
* <p>
* After this call, the builder is reset and can be used to generate other parameters.
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/EmbeddedDirectoryServer.java b/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/EmbeddedDirectoryServer.java
index e10a13e..9071b5e 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/EmbeddedDirectoryServer.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/EmbeddedDirectoryServer.java
@@ -31,8 +31,12 @@
import org.forgerock.opendj.ldap.Connection;
import org.forgerock.opendj.ldap.DN;
import org.forgerock.opendj.ldap.LDAPConnectionFactory;
+import org.forgerock.opendj.ldap.requests.Requests;
+import org.forgerock.opendj.ldap.requests.SimpleBindRequest;
import org.forgerock.opendj.server.config.client.RootCfgClient;
+import org.forgerock.util.Options;
import org.forgerock.util.Pair;
+import org.forgerock.util.Reject;
import org.opends.quicksetup.TempLogFile;
import org.opends.server.core.DirectoryServer;
import org.opends.server.protocols.internal.InternalClientConnection;
@@ -44,6 +48,7 @@
import org.opends.server.types.DirectoryEnvironmentConfig;
import org.opends.server.types.DirectoryException;
import org.opends.server.types.InitializationException;
+import org.opends.server.util.ServerConstants;
import org.opends.server.util.StaticUtils;
/**
@@ -54,6 +59,9 @@
{
private static final String EMBEDDED_OPEN_DJ_PREFIX = "embeddedOpenDJ";
+ private static final String QUICKSETUP_ROOT_PROPERTY = "org.opends.quicksetup.Root";
+ private static final String QUICKSETUP_INSTANCE_PROPERTY = "org.opends.quicksetup.Root";
+
/** The parameters for install and instance directories, and configuration file of the server. */
private final ConfigParameters configParams;
@@ -89,15 +97,19 @@
this.connectionParams = connParams;
this.outStream = out;
this.errStream = err;
- this.ldapConnectionFactory = connectionParams != null ?
- new LDAPConnectionFactory(connectionParams.getHostname(), connectionParams.getLdapPort())
- : null;
-
- //System.setProperty("org.opends.quicksetup.Root", configParams.getServerRootDirectory());
- //System.setProperty(ServerConstants.PROPERTY_SERVER_ROOT, configParams.getServerRootDirectory());
- //System.setProperty(ServerConstants.PROPERTY_INSTANCE_ROOT, configParams.getServerInstanceDirectory());
- // from LicenseFile.java - provided by AM OpenDJUpgrader.java
- //System.setProperty("INSTALL_ROOT", configParams.getServerInstanceDirectory());
+ if (connectionParams != null)
+ {
+ SimpleBindRequest authRequest = Requests.newSimpleBindRequest(
+ connectionParams.getBindDn(), connectionParams.getBindPassword().toCharArray());
+ ldapConnectionFactory = new LDAPConnectionFactory(
+ connectionParams.getHostname(),
+ connectionParams.getLdapPort(),
+ Options.defaultOptions().set(LDAPConnectionFactory.AUTHN_BIND_REQUEST, authRequest));
+ }
+ else
+ {
+ ldapConnectionFactory = null;
+ }
}
/**
@@ -244,6 +256,8 @@
/**
* Imports LDIF data to the directory server, overwriting existing data.
+ * <p>
+ * The import is implemented only for online use.
*
* @param parameters
* The import parameters.
@@ -252,6 +266,7 @@
*/
public void importData(ImportParameters parameters) throws EmbeddedDirectoryServerException
{
+ checkServerIsRunning();
checkConnectionParameters();
int returnCode = ImportLDIF.mainImportLDIF(
parameters.toCommandLineArguments(configParams.getConfigurationFile(), connectionParams),
@@ -351,6 +366,8 @@
public void setup(SetupParameters parameters) throws EmbeddedDirectoryServerException
{
checkConnectionParameters();
+ System.setProperty(QUICKSETUP_ROOT_PROPERTY, configParams.getServerRootDirectory());
+ System.setProperty(QUICKSETUP_INSTANCE_PROPERTY, configParams.getServerInstanceDirectory());
int returnCode = InstallDS.mainCLI(parameters.toCommandLineArguments(connectionParams), outStream, errStream,
TempLogFile.newTempLogFile(EMBEDDED_OPEN_DJ_PREFIX));
@@ -363,6 +380,9 @@
/**
* Setups this server from the provided archive.
+ * <p>
+ * As the DJ archive includes the "opendj" directory, it is mandatory to have
+ * the root directory named "opendj".
*
* @param openDJZipFile
* The OpenDJ server archive.
@@ -376,7 +396,14 @@
checkConnectionParameters();
try
{
- StaticUtils.extractZipArchive(openDJZipFile, new File(configParams.getServerRootDirectory()));
+ File serverRoot = new File(configParams.getServerRootDirectory());
+ if (!serverRoot.getName().equals("opendj"))
+ {
+ throw new EmbeddedDirectoryServerException(LocalizableMessage.raw("Wrong server root directory" + serverRoot));
+ }
+ // the directory where the zip file is extracted should be one level up from the server root.
+ File deployDirectory = serverRoot.getParentFile();
+ StaticUtils.extractZipArchive(openDJZipFile, deployDirectory);
}
catch (IOException e)
{
@@ -388,6 +415,8 @@
/**
* Rebuilds all the indexes of this server.
+ * <p>
+ * This operation is done offline, hence the server must be stopped when calling this method.
*
* @param parameters
* The parameters for rebuilding the indexes.
@@ -396,8 +425,9 @@
*/
public void rebuildIndex(RebuildIndexParameters parameters) throws EmbeddedDirectoryServerException
{
+ checkServerIsNotRunning();
int returnCode = RebuildIndex.mainRebuildIndex(
- parameters.toCommandLineArguments(), !isRunning(), outStream, errStream);
+ parameters.toCommandLineArguments(configParams.getConfigurationFile()), !isRunning(), outStream, errStream);
if (returnCode != 0)
{
@@ -590,6 +620,24 @@
}
}
+ private void checkServerIsRunning() throws EmbeddedDirectoryServerException
+ {
+ if (!isRunning())
+ {
+ throw new EmbeddedDirectoryServerException(LocalizableMessage.raw(
+ "This operation is only available when server is online"));
+ }
+ }
+
+ private void checkServerIsNotRunning() throws EmbeddedDirectoryServerException
+ {
+ if (isRunning())
+ {
+ throw new EmbeddedDirectoryServerException(LocalizableMessage.raw(
+ "This operation is only available when server is offline"));
+ }
+ }
+
/**
* Retrieves the management context, and optionally a connection if the server is running, in order to
* give access to the configuration of the server.
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/ImportParameters.java b/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/ImportParameters.java
index f024577..2449d96 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/ImportParameters.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/ImportParameters.java
@@ -29,6 +29,16 @@
}
/**
+ * Creates a builder for the import parameters.
+ *
+ * @return a builder
+ */
+ public static Builder importParams()
+ {
+ return new Builder();
+ }
+
+ /**
* Generates command-line arguments from the parameters.
*
* @return command-line arguments
@@ -64,16 +74,6 @@
}
/**
- * Creates a builder for the import parameters.
- *
- * @return a builder
- */
- public static Builder importParams()
- {
- return new Builder();
- }
-
- /**
* Generates the parameters from this builder.
* <p>
* After this call, the builder is reset and can be used to generate other parameters.
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/RebuildIndexParameters.java b/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/RebuildIndexParameters.java
index 818639b..8c8769c 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/RebuildIndexParameters.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/RebuildIndexParameters.java
@@ -20,7 +20,6 @@
*/
public final class RebuildIndexParameters
{
- private String configurationFile;
private String baseDN;
private RebuildIndexParameters()
@@ -29,11 +28,21 @@
}
/**
+ * Creates a builder for the rebuild index parameters.
+ *
+ * @return a builder
+ */
+ public static Builder rebuildIndexParams()
+ {
+ return new Builder();
+ }
+
+ /**
* Generates command-line arguments from the parameters.
*
* @return command-line arguments
*/
- String[] toCommandLineArguments()
+ String[] toCommandLineArguments(String configurationFile)
{
return new String[] {
"--configFile", configurationFile,
@@ -56,16 +65,6 @@
}
/**
- * Creates a builder for the rebuild index parameters.
- *
- * @return a builder
- */
- public static Builder rebuildIndexParams()
- {
- return new Builder();
- }
-
- /**
* Generates the parameters from this builder.
* <p>
* After this call, the builder is reset and can be used to generate other parameters.
@@ -80,19 +79,6 @@
}
/**
- * Sets the configuration file of the server.
- *
- * @param file
- * the configuration file
- * @return this builder
- */
- public Builder configurationFile(String file)
- {
- params.configurationFile = file;
- return this;
- }
-
- /**
* Sets the base Dn for user information in the directory server.
*
* @param baseDN
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/ReplicationParameters.java b/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/ReplicationParameters.java
index 9ddba17..28934fc 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/ReplicationParameters.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/ReplicationParameters.java
@@ -31,6 +31,16 @@
}
/**
+ * Creates a builder for the replication parameters.
+ *
+ * @return a builder
+ */
+ public static Builder replicationParams()
+ {
+ return new Builder();
+ }
+
+ /**
* Generates the command-line arguments for enabling replication, from the parameters.
*
* @return command-line arguments
@@ -138,16 +148,6 @@
}
/**
- * Creates a builder for the replication parameters.
- *
- * @return a builder
- */
- public static Builder replicationParams()
- {
- return new Builder();
- }
-
- /**
* Generates the parameters from this builder.
* <p>
* After this call, the builder is reset and can be used to generate other parameters.
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/SetupParameters.java b/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/SetupParameters.java
index 86c4df1..0edd54e 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/SetupParameters.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/SetupParameters.java
@@ -30,6 +30,16 @@
}
/**
+ * Creates a builder for the setup parameters.
+ *
+ * @return a builder
+ */
+ public static Builder setupParams()
+ {
+ return new Builder();
+ }
+
+ /**
* Generates command-line arguments from the parameters.
*
* @return command-line arguments
@@ -82,16 +92,6 @@
}
/**
- * Creates a builder for the setup parameters.
- *
- * @return a builder
- */
- public static Builder setupParams()
- {
- return new Builder();
- }
-
- /**
* Generates the parameters from this builder.
* <p>
* After this call, the builder is reset and can be used to generate other parameters.
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/UpgradeParameters.java b/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/UpgradeParameters.java
index 2d235d3..44e042b 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/UpgradeParameters.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/UpgradeParameters.java
@@ -31,6 +31,16 @@
}
/**
+ * Starts construction of the upgrade parameters.
+ *
+ * @return this builder
+ */
+ public static Builder upgradeParams()
+ {
+ return new Builder();
+ }
+
+ /**
* Generates command-line arguments from the parameters.
*
* @return command-line arguments
@@ -62,16 +72,6 @@
}
/**
- * Starts construction of the upgrade parameters.
- *
- * @return this builder
- */
- public static Builder upgradeParams()
- {
- return new Builder();
- }
-
- /**
* Returns the fully initialized parameters.
*
* @return the parameters
diff --git a/opendj-server-legacy/src/test/java/org/opends/server/TestCaseUtils.java b/opendj-server-legacy/src/test/java/org/opends/server/TestCaseUtils.java
index 74f1534..0cee274 100644
--- a/opendj-server-legacy/src/test/java/org/opends/server/TestCaseUtils.java
+++ b/opendj-server-legacy/src/test/java/org/opends/server/TestCaseUtils.java
@@ -17,7 +17,9 @@
*/
package org.opends.server;
-import static org.opends.server.util.embedded.ConfigParameters.Builder.configParams;
+import static org.opends.server.util.embedded.EmbeddedDirectoryServer.defineServer;
+import static org.opends.server.util.embedded.ConnectionParameters.connectionParams;
+import static org.opends.server.util.embedded.ConfigParameters.configParams;
import static org.opends.server.loggers.TextAccessLogPublisher.getStartupTextAccessPublisher;
import static org.opends.server.loggers.TextErrorLogPublisher.getToolStartupTextErrorPublisher;
import static org.opends.server.loggers.TextHTTPAccessLogPublisher.getStartupTextHTTPAccessPublisher;
@@ -104,6 +106,7 @@
import org.opends.server.types.LDIFImportConfig;
import org.forgerock.opendj.ldap.schema.Schema;
import org.opends.server.util.BuildVersion;
+import org.opends.server.util.DynamicConstants;
import org.opends.server.util.LDIFReader;
import org.opends.server.util.embedded.EmbeddedDirectoryServer;
import org.testng.Assert;
@@ -112,7 +115,6 @@
import static org.mockito.Mockito.*;
import static org.opends.server.protocols.internal.InternalClientConnection.*;
-import static org.opends.server.util.embedded.ConnectionParameters.Builder.*;
import static org.opends.server.util.ServerConstants.*;
import static org.opends.server.util.StaticUtils.*;
import static org.testng.Assert.*;
@@ -218,7 +220,7 @@
private static int serverRestarts;
/** The paths to directories and files used in the tests. */
- private static TestPaths paths;
+ private static TestPaths paths = new TestPaths();
/** The ports used in the tests. */
private static TestPorts ports;
@@ -308,7 +310,7 @@
}
InvocationCounterPlugin.resetStartupCalled();
- initializePathsPortsAndServer();
+ initializePortsAndServer();
deployDirectoryDirsAndFiles();
@@ -334,12 +336,11 @@
}
}
- private static void initializePathsPortsAndServer() throws Exception
+ private static void initializePortsAndServer() throws Exception
{
- paths = new TestPaths();
ports = new TestPorts();
hostname = InetAddress.getLocalHost().getHostName();
- server = EmbeddedDirectoryServer.defineServer(
+ server = defineServer(
configParams()
.serverRootDirectory(paths.testInstallRoot.getPath())
.serverInstanceDirectory(paths.testInstanceRoot.getPath())
@@ -1129,19 +1130,25 @@
*/
public static File getTestResource(String filename)
{
- String buildRoot = System.getProperty(PROPERTY_BUILD_ROOT);
- File testResourceDir = new File(buildRoot + File.separator + "tests" +
- File.separator + "unit-tests-testng" +
- File.separator + "resource");
-
+ File testResourceDir = new File(paths.testSrcRoot, "resource");
return new File(testResourceDir, filename);
}
public static File getUnitTestRootPath()
{
- final String buildRoot = System.getProperty(PROPERTY_BUILD_ROOT);
- final String path = System.getProperty(PROPERTY_BUILD_DIR, buildRoot + File.separator + "target");
- return new File(path, "unit-tests");
+ return paths.unitRoot;
+ }
+
+ /** Get the complete path to the OpenDJ archive. */
+ public static File getOpenDJArchivePath()
+ {
+ String qualifier = DynamicConstants.VERSION_QUALIFIER;
+ String openDJArchiveName =
+ DynamicConstants.SHORT_NAME.toLowerCase()
+ + "-"
+ + DynamicConstants.VERSION_NUMBER_STRING
+ + (qualifier != null && !qualifier.isEmpty() ? "-" + qualifier : "");
+ return getBuildRoot().toPath().resolve("target/package").resolve(openDJArchiveName + ".zip").toFile();
}
/** Prevent instantiation. */
diff --git a/opendj-server-legacy/src/test/java/org/opends/server/util/EmbeddedDirectoryServerTestCase.java b/opendj-server-legacy/src/test/java/org/opends/server/util/EmbeddedDirectoryServerTestCase.java
new file mode 100644
index 0000000..9d9c437
--- /dev/null
+++ b/opendj-server-legacy/src/test/java/org/opends/server/util/EmbeddedDirectoryServerTestCase.java
@@ -0,0 +1,284 @@
+/*
+ * The contents of this file are subject to the terms of the Common Development and
+ * Distribution License (the License). You may not use this file except in compliance with the
+ * License.
+ *
+ * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
+ * specific language governing permission and limitations under the License.
+ *
+ * When distributing Covered Software, include this CDDL Header Notice in each file and include
+ * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
+ * Header, with the fields enclosed by brackets [] replaced by your own identifying
+ * information: "Portions Copyright [year] [name of copyright owner]".
+ *
+ * Copyright 2016 ForgeRock AS.
+ */
+package org.opends.server.util;
+
+import static org.opends.server.util.embedded.ConfigParameters.configParams;
+import static org.opends.server.util.embedded.ConnectionParameters.connectionParams;
+import static org.opends.server.util.embedded.EmbeddedDirectoryServer.defineServer;
+import static org.opends.server.util.embedded.ImportParameters.importParams;
+import static org.opends.server.util.embedded.UpgradeParameters.upgradeParams;
+import static org.opends.server.util.embedded.RebuildIndexParameters.rebuildIndexParams;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.opends.server.TestCaseUtils.getServer;
+import static org.testng.Assert.*;
+
+import java.io.File;
+import java.util.SortedSet;
+
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.opendj.ldap.DN;
+import org.forgerock.opendj.server.config.client.BackendCfgClient;
+import org.forgerock.opendj.server.config.client.RootCfgClient;
+import org.opends.server.TestCaseUtils;
+import org.opends.server.core.DirectoryServer;
+import org.opends.server.types.DirectoryEnvironmentConfig;
+import org.opends.server.util.embedded.EmbeddedDirectoryServer;
+import org.opends.server.util.embedded.EmbeddedDirectoryServer.DirectoryConfigReader;
+import org.opends.server.util.embedded.EmbeddedDirectoryServer.DirectoryConfigUpdater;
+import org.opends.server.util.embedded.EmbeddedDirectoryServerException;
+import org.opends.server.util.embedded.SetupParameters;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+/**
+ * Tests for an embedded directory server.
+ */
+@Test(groups = "slow", sequential=true)
+@SuppressWarnings("javadoc")
+public class EmbeddedDirectoryServerTestCase extends UtilTestCase
+{
+ private static final String USER_ROOT = "userRoot";
+
+ @BeforeClass
+ public void setUp() throws Exception
+ {
+ TestCaseUtils.startServer();
+ TestCaseUtils.clearBackend(USER_ROOT, "dc=example,dc=com");
+ assertTrue(getServer().isRunning());
+ }
+
+ /**
+ * Make sure that the server gets restarted by the {@code TestCaseUtils.restartServer} method
+ * because it does a few things to the server that aren't covered in the out-of-the-box
+ * configuration.
+ */
+ @AfterClass
+ public void cleanUp() throws Exception
+ {
+ TestCaseUtils.restartServer();
+ }
+
+ @Test
+ public void testRestartServer() throws Exception
+ {
+ EmbeddedDirectoryServer server = getServer();
+ assertTrue(server.isRunning());
+
+ DirectoryEnvironmentConfig environmentConfig = DirectoryServer.getEnvironmentConfig();
+ assertNotNull(environmentConfig);
+
+ server.restart(getClass().getName(), LocalizableMessage.raw("testRestartServer"));
+
+ assertTrue(server.isRunning());
+ }
+
+ @Test
+ public void testStopAndStartServer() throws Exception
+ {
+ EmbeddedDirectoryServer server = getServer();
+ assertTrue(server.isRunning());
+
+ DirectoryEnvironmentConfig environmentConfig = DirectoryServer.getEnvironmentConfig();
+ assertNotNull(environmentConfig);
+
+ server.stop(getClass().getName(), LocalizableMessage.raw("testStopAndStartServer"));
+ assertFalse(server.isRunning());
+
+ server.start();
+ assertTrue(server.isRunning());
+ }
+
+ public void testReadConfigurationOffline() throws Exception
+ {
+ EmbeddedDirectoryServer server = getServer();
+ server.stop(getClass().getSimpleName(), LocalizableMessage.raw("stopping for read config test"));
+ try
+ {
+ readConfiguration(server);
+ }
+ finally
+ {
+ server.start();
+ }
+ }
+
+ private void readConfiguration(EmbeddedDirectoryServer server) throws EmbeddedDirectoryServerException
+ {
+ SortedSet<DN> dns = server.readConfiguration(new DirectoryConfigReader<SortedSet<DN>>() {
+ @Override
+ public SortedSet<DN> read(RootCfgClient rootConfig) throws Exception
+ {
+ return rootConfig.getBackend(USER_ROOT).getBaseDN();
+ }
+ });
+ assertThat(dns).containsExactly(DN.valueOf("dc=example,dc=com"));
+ }
+
+ public void testReadConfigurationOnline() throws Exception
+ {
+ readConfiguration(getServer());
+ }
+
+ public void testUpdateConfiguration() throws Exception
+ {
+ EmbeddedDirectoryServer server = getServer();
+ assertTrue(DirectoryServer.hasBackend(USER_ROOT));
+
+ toggleBackendActivation(server, false);
+ assertFalse(DirectoryServer.hasBackend(USER_ROOT));
+
+ // revert to initial configuration
+ toggleBackendActivation(server, true);
+ assertTrue(DirectoryServer.hasBackend(USER_ROOT));
+ }
+
+ private void toggleBackendActivation(EmbeddedDirectoryServer server, final boolean enabled) throws Exception
+ {
+ server.updateConfiguration(new DirectoryConfigUpdater()
+ {
+ @Override
+ public void update(RootCfgClient rootConfig) throws Exception
+ {
+ BackendCfgClient backend = rootConfig.getBackend(USER_ROOT);
+ backend.setEnabled(enabled);
+ backend.commit();
+ }
+ });
+ }
+
+ /**
+ * This test only ensures that the rebuild index process is correctly launched and does not fail.
+ * There is no assertions.
+ */
+ public void testRebuildIndexOffline() throws Exception
+ {
+ EmbeddedDirectoryServer server = getServer();
+ server.stop(getClass().getSimpleName(), LocalizableMessage.raw("stopping for rebuild index test"));
+ try
+ {
+ server.rebuildIndex(rebuildIndexParams().baseDN("dc=example,dc=com").build());
+ }
+ finally
+ {
+ server.start();
+ }
+ }
+
+ /** Rebuild index is not available online. */
+ @Test(expectedExceptions = EmbeddedDirectoryServerException.class)
+ public void testRebuildIndexOnline() throws Exception
+ {
+ getServer().rebuildIndex(rebuildIndexParams().baseDN("dc=example,dc=com").build());
+ }
+
+ /**
+ * This test only ensures that the upgrade index is correctly launched and does not fail.
+ * There is no assertions.
+ */
+ public void testUpgradeOffline() throws Exception
+ {
+ EmbeddedDirectoryServer server = getServer();
+ server.stop(getClass().getSimpleName(), LocalizableMessage.raw("stopping for upgrade test"));
+ try
+ {
+ server.upgrade(upgradeParams().isIgnoreErrors(false).build());
+ }
+ finally
+ {
+ server.start();
+ }
+ }
+
+ /**
+ * This test only ensures that the upgrade index is correctly launched and does not fail.
+ * There is no assertions.
+ */
+ public void testUpgradeOnline() throws Exception
+ {
+ getServer().upgrade(upgradeParams().isIgnoreErrors(false).build());
+ }
+
+ public void testImportDataOnline() throws Exception
+ {
+ EmbeddedDirectoryServer server = getServer();
+ server.importData(importParams()
+ .backendId("userRoot")
+ .ldifFile(TestCaseUtils.getTestResource("test-import-file.ldif").getPath())
+ .build());
+ }
+
+ /** Import data is not implemented for offline use in EmbeddedDirectoryServer.*/
+ @Test(expectedExceptions= EmbeddedDirectoryServerException.class)
+ public void testImportDataOffline() throws Exception
+ {
+ EmbeddedDirectoryServer server = getServer();
+ server.stop(getClass().getSimpleName(), LocalizableMessage.raw("stopping for import data test"));
+ try
+ {
+ server.importData(importParams()
+ .backendId("userRoot")
+ .ldifFile(TestCaseUtils.getTestResource("test-import-file.ldif").getPath())
+ .build());
+ }
+ finally
+ {
+ server.start();
+ }
+ }
+
+ public void testSetupFromArchive() throws Exception
+ {
+ EmbeddedDirectoryServer server = getServer();
+ server.stop(getClass().getSimpleName(), LocalizableMessage.raw("stopping for setup from archive test"));
+ try
+ {
+ File rootDir = TestCaseUtils.getUnitTestRootPath().toPath().resolve("embedded-setup").resolve("opendj").toFile();
+ // ensure the test starts from a clean directory
+ StaticUtils.recursiveDelete(rootDir);
+
+ final int[] ports = TestCaseUtils.findFreePorts(3);
+ EmbeddedDirectoryServer tempServer = defineServer(
+ configParams()
+ .serverRootDirectory(rootDir.getPath())
+ .configurationFile(rootDir.toPath().resolve("config").resolve("config.ldif").toString())
+ .build(),
+ connectionParams()
+ .bindDn("cn=Directory Manager")
+ .bindPassword("password")
+ .hostName("localhost")
+ .ldapPort(ports[0])
+ .adminPort(ports[1])
+ .build(),
+ System.out,
+ System.err);
+
+ tempServer.setupFromArchive(TestCaseUtils.getOpenDJArchivePath(),
+ SetupParameters.setupParams()
+ .backendType("pdb")
+ .baseDn("dc=example,dc=com")
+ .jmxPort(ports[2])
+ .build());
+ tempServer.start();
+ tempServer.stop(getClass().getSimpleName(), LocalizableMessage.raw("stopping temp server for setup test"));
+ }
+ finally
+ {
+ server.start();
+ }
+ }
+
+}
diff --git a/opendj-server-legacy/tests/unit-tests-testng/resource/test-import-file.ldif b/opendj-server-legacy/tests/unit-tests-testng/resource/test-import-file.ldif
new file mode 100644
index 0000000..4b52361
--- /dev/null
+++ b/opendj-server-legacy/tests/unit-tests-testng/resource/test-import-file.ldif
@@ -0,0 +1,18 @@
+# The contents of this file are subject to the terms of the Common Development and
+# Distribution License (the License). You may not use this file except in compliance with the
+# License.
+#
+# You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
+# specific language governing permission and limitations under the License.
+#
+# When distributing Covered Software, include this CDDL Header Notice in each file and include
+# the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
+# Header, with the fields enclosed by brackets [] replaced by your own identifying
+# information: "Portions Copyright [year] [name of copyright owner]".
+#
+# Copyright 2016 ForgeRock AS.
+dn: dc=example,dc=com
+objectClass: top
+objectClass: domain
+dc: example
+
--
Gitblit v1.10.0