/*
|
* 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 legal-notices/CDDLv1_0.txt
|
* or http://forgerock.org/license/CDDLv1.0.html.
|
* 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 legal-notices/CDDLv1_0.txt.
|
* 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 2014 ForgeRock AS.
|
*/
|
package org.forgerock.opendj.server.setup.cli;
|
|
import static com.forgerock.opendj.cli.Utils.MAX_LINE_WIDTH;
|
import static com.forgerock.opendj.cli.Utils.wrapText;
|
import static com.forgerock.opendj.cli.CliMessages.*;
|
import static org.fest.assertions.Assertions.assertThat;
|
import static org.forgerock.util.Utils.closeSilently;
|
import static org.testng.Assert.assertTrue;
|
|
import java.io.ByteArrayOutputStream;
|
import java.io.PrintStream;
|
import java.io.UnsupportedEncodingException;
|
|
import org.forgerock.i18n.LocalizableMessage;
|
import org.testng.annotations.DataProvider;
|
import org.testng.annotations.Test;
|
|
import com.forgerock.opendj.cli.ReturnCode;
|
import com.forgerock.opendj.cli.Utils;
|
|
/**
|
* This class tests the setup CLI functionality.
|
*/
|
public class SetupCliTestCase extends AbstractSetupCliTestCase {
|
|
@DataProvider(name = "validArguments")
|
Object[][] createValidArguments() throws Exception {
|
return new Object[][] {
|
{ args("--help"),
|
expectedErrOutput(INFO_SETUP_DESCRIPTION.get()) },
|
{ args("--cli", "create-directory-server", "--doNotStart", "--ldapPort", "1389",
|
"--adminConnectorPort", "4444",
|
"-D", "cn=Directory Manager", "-w", "password", "-b", "dc=example,dc=com",
|
"-a"), expectedErrOutput(LocalizableMessage.EMPTY) },
|
{ args("--cli", "--doNotStart", "--ldapPort", "1389", "--adminConnectorPort", "4444",
|
"-D", "cn=Directory Manager", "-w", "password", "-b", "dc=example,dc=com",
|
"-a", "--ldapsPort", "1636", "--generateSelfSignedCertificate"), null },
|
};
|
}
|
|
@DataProvider(name = "invalidArguments")
|
Object[][] createInValidArguments() throws Exception {
|
return new Object[][] {
|
{ args("-c"),
|
expectedErrOutput(
|
ERR_ERROR_PARSING_ARGS.get(ERR_SUBCMDPARSER_NO_GLOBAL_ARGUMENT_FOR_SHORT_ID.get("c"))) },
|
{ args("-N"), expectedErrOutput(ERR_ERROR_PARSING_ARGS.get(
|
ERR_ARGPARSER_NO_VALUE_FOR_ARGUMENT_WITH_SHORT_ID.get("N"))) },
|
};
|
}
|
|
@DataProvider(name = "validPorts")
|
Object[][] createValidPorts() throws Exception {
|
return new Object[][] {
|
{ args("--cli", "--doNotStart", "--ldapPort", "1389", "--adminConnectorPort", "4444",
|
"-D", "cn=Directory Manager", "-w", "password", "-b", "dc=example,dc=com",
|
"-a"), null },
|
{ args("--cli", "--doNotStart", "--ldapPort", "1389", "--adminConnectorPort", "4444",
|
"-D", "cn=Directory Manager", "-w", "password", "-b", "dc=example,dc=com",
|
"-a", "--ldapsPort", "1636"), null },
|
{ args("--cli", "--doNotStart", "--ldapPort", "1389", "--adminConnectorPort", "4444",
|
"-D", "cn=Directory Manager", "-w", "password", "-b", "dc=example,dc=com",
|
"-a", "--jmxPort", "1689"), null },
|
};
|
}
|
|
@DataProvider(name = "invalidPorts")
|
Object[][] createInValidPorts() throws Exception {
|
return new Object[][] {
|
{ args("--cli", "--doNotStart", "--ldapPort", "1389", "--adminConnectorPort", "4444",
|
"-D", "cn=Directory Manager", "-w", "password", "-b", "dc=example,dc=com",
|
"-a", "--jmxPort", "1389"),
|
expectedErrOutput(
|
ERR_CANNOT_INITIALIZE_ARGS.get(ERR_PORT_ALREADY_SPECIFIED.get("1389"))) },
|
{ args("--cli", "--doNotStart", "--ldapPort", "1389", "--adminConnectorPort", "4444",
|
"-D", "cn=Directory Manager", "-w", "password", "-b", "dc=example,dc=com",
|
"-a", "--ldapsPort", "1389"),
|
expectedErrOutput(
|
ERR_CANNOT_INITIALIZE_ARGS.get(ERR_PORT_ALREADY_SPECIFIED.get("1389"))) },
|
{ args("--cli", "--doNotStart", "--ldapPort", "70000", "--adminConnectorPort", "4444",
|
"-D", "cn=Directory Manager", "-w", "password", "-b", "dc=example,dc=com",
|
"-a"),
|
expectedErrOutput(ERR_ERROR_PARSING_ARGS.get(
|
ERR_ARGPARSER_VALUE_UNACCEPTABLE_FOR_LONG_ID.get(70000, "ldapPort",
|
ERR_INTARG_VALUE_ABOVE_UPPER_BOUND.get("ldapPort", 70000, 65535)))) },
|
{ args("--cli", "--doNotStart", "--ldapPort", "-1", "--adminConnectorPort", "4444",
|
"-D", "cn=Directory Manager", "-w", "password", "-b", "dc=example,dc=com",
|
"-a"),
|
expectedErrOutput(ERR_ERROR_PARSING_ARGS.get(
|
ERR_ARGPARSER_VALUE_UNACCEPTABLE_FOR_LONG_ID.get(-1, "ldapPort",
|
ERR_INTARG_VALUE_BELOW_LOWER_BOUND.get("ldapPort", -1, 1)))) },
|
};
|
}
|
|
@Test(dataProvider = "validArguments")
|
public void testRunValidArguments(String[] arguments, LocalizableMessage expectedErrOutput) throws Exception {
|
run(arguments, true, expectedErrOutput);
|
}
|
|
@Test(dataProvider = "invalidArguments")
|
public void testRunInvalidArguments(String[] arguments, LocalizableMessage expectedErrOutput) throws Exception {
|
run(arguments, false, expectedErrOutput);
|
}
|
|
@Test(dataProvider = "validPorts")
|
public void testcheckValidProvidedPorts(String[] arguments, LocalizableMessage expectedErrOutput) throws Exception {
|
run(arguments, true, expectedErrOutput);
|
}
|
|
@Test(dataProvider = "invalidPorts")
|
public void testcheckInvalidProvidedPorts(String[] arguments, LocalizableMessage expectedErrOutput)
|
throws Exception {
|
run(arguments, false, expectedErrOutput);
|
}
|
|
private void run(final String[] arguments, final boolean shouldSucceed, final LocalizableMessage expectedErrOutput)
|
throws UnsupportedEncodingException {
|
PrintStream outStream = null;
|
PrintStream errStream = null;
|
int resultCode = 0;
|
try {
|
final ByteArrayOutputStream out = new ByteArrayOutputStream();
|
outStream = new PrintStream(out);
|
final ByteArrayOutputStream err = new ByteArrayOutputStream();
|
errStream = new PrintStream(err);
|
|
final SetupCli setup = new SetupCli(outStream, errStream);
|
resultCode = setup.run(arguments);
|
|
if (shouldSucceed) {
|
if (expectedErrOutput != null) {
|
assertThat(out.toString("UTF-8")).contains(wrapText(expectedErrOutput, MAX_LINE_WIDTH));
|
}
|
assertThat(err.size()).isEqualTo(0);
|
assertThat(resultCode).isEqualTo(ReturnCode.SUCCESS.get());
|
} else {
|
assertThat(resultCode).isNotEqualTo(ReturnCode.SUCCESS.get());
|
/**
|
* If an application is interactive, all messages should be redirect to the stdout. (info, warnings,
|
* errors). Otherwise, standard messages should be displayed in the stdout(info) and errors to the
|
* stderr (warnings, errors).
|
*/
|
ByteArrayOutputStream std = setup.isInteractive() ? out : err;
|
assertThat(std.size()).isGreaterThan(0);
|
String errMsg = getUnWrappedMessage(std.toString("UTF-8"));
|
String expectedMsg = getUnWrappedMessage(expectedErrOutput.toString());
|
assertTrue(errMsg.contains(expectedMsg), errMsg + "\n >---< \n" + expectedMsg);
|
}
|
} finally {
|
closeSilently(outStream, errStream);
|
}
|
}
|
|
/** Arguments passed to the command */
|
private String[] args(String... arguments) {
|
return arguments;
|
}
|
|
/** A message the error output is expected to contain. */
|
private LocalizableMessage expectedErrOutput(LocalizableMessage val) {
|
return val;
|
}
|
|
/**
|
* Returns the message to its unwrapped form.
|
*
|
* @param st
|
* The message which need to be unwrapped.
|
* @return The unwrapped message.
|
*/
|
private String getUnWrappedMessage(final String st) {
|
return st.replaceAll(Utils.LINE_SEPARATOR, " ");
|
}
|
}
|