/* * 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 2006-2008 Sun Microsystems, Inc. * Portions Copyright 2013-2016 ForgeRock AS. */ package com.forgerock.opendj.ldap.tools; import static com.forgerock.opendj.cli.CliMessages.ERR_ARGPARSER_NO_ARGUMENT_WITH_LONG_ID; import static com.forgerock.opendj.cli.CliMessages.ERR_ARGPARSER_NO_ARGUMENT_WITH_SHORT_ID; import static com.forgerock.opendj.cli.CliMessages.ERR_ARGPARSER_TOO_FEW_TRAILING_ARGUMENTS; import static com.forgerock.opendj.cli.CliMessages.ERR_ARG_CANNOT_DECODE_AS_INT; import static com.forgerock.opendj.cli.CliMessages.ERR_FILEARG_NO_SUCH_FILE; import static com.forgerock.opendj.cli.CliMessages.ERR_INTARG_VALUE_ABOVE_UPPER_BOUND; import static com.forgerock.opendj.cli.CliMessages.ERR_TOOL_CONFLICTING_ARGS; import static com.forgerock.opendj.ldap.CoreMessages.ERR_LDAP_FILTER_NO_EQUAL_SIGN; import static com.forgerock.opendj.ldap.tools.ToolsMessages.ERR_LDAPCOMPARE_INVALID_ATTR_STRING; import static com.forgerock.opendj.ldap.tools.ToolsMessages.ERR_TOOL_INVALID_CONTROL_STRING; import static com.forgerock.opendj.ldap.tools.ToolsTestUtils.addValueNeededLongArgs; import static com.forgerock.opendj.ldap.tools.ToolsTestUtils.addValueNeededShortArgs; import static com.forgerock.opendj.ldap.tools.ToolsTestUtils.args; import static com.forgerock.opendj.ldap.tools.ToolsTestUtils.toDataProviderArray; import static org.fest.assertions.Assertions.assertThat; import static org.forgerock.opendj.ldap.ResultCode.COMPARE_TRUE; import java.util.ArrayList; import java.util.List; import com.forgerock.opendj.ldap.controls.RealAttributesOnlyRequestControl; import org.forgerock.i18n.LocalizableMessage; import org.forgerock.opendj.ldap.Filter; import org.forgerock.opendj.ldap.IntermediateResponseHandler; import org.forgerock.opendj.ldap.LdapResultHandler; import org.forgerock.opendj.ldap.ResultCode; import org.forgerock.opendj.ldap.controls.AssertionRequestControl; import org.forgerock.opendj.ldap.controls.ProxiedAuthV2RequestControl; import org.forgerock.opendj.ldap.requests.CompareRequest; import org.forgerock.opendj.ldap.responses.CompareResult; import org.forgerock.opendj.ldap.responses.Responses; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; /** A set of test cases for the LDAPCompare tool. */ @SuppressWarnings("javadoc") @Test public class LDAPCompareTestCase extends LDAPToolsTestCase { private final class LdapCompareToolLdapServer extends ToolLdapServer { private final class LdapCompareRequestHandler extends ToolLdapServer.ToolLdapServerConnection { @Override public void handleCompare(final Integer requestContext, final CompareRequest request, final IntermediateResponseHandler intermediateResponseHandler, final LdapResultHandler resultHandler) { assertThat(request.getName().toString()).isEqualTo("uid=marvin"); assertThat(request.getAssertionValueAsString()).isEqualTo("the paranoid android"); assertThat(request.getAttributeDescription().toString()).isEqualTo("description"); assertThatControlsHaveBeenSentInRequest(request.getControls()); resultHandler.handleResult(Responses.newCompareResult(COMPARE_TRUE)); } } @Override ToolLdapServerConnection newServerConnection() { return new LdapCompareRequestHandler(); } } @Override ToolLdapServer createFakeServer() { return new LdapCompareToolLdapServer(); } /** * Retrieves sets of invalid arguments that may not be used to initialize * the LDAPCompare tool. * * @return Sets of invalid arguments that may not be used to initialize the * LDAPCompare tool. */ @DataProvider(name = "invalidArgs") public Object[][] getInvalidArgumentLists() throws Exception { final List> argLists = new ArrayList<>(); final List reasonList = new ArrayList<>(); argLists.add(args()); reasonList.add(ERR_ARGPARSER_TOO_FEW_TRAILING_ARGUMENTS.get(2)); addValueNeededShortArgs(argLists, reasonList, "D", "w", "j", "K", "P", "W", "h", "p", "J", "o"); addValueNeededLongArgs(argLists, reasonList, "assertionFilter", "hostname", "port", "control"); argLists.add(args("-I")); reasonList.add(ERR_ARGPARSER_NO_ARGUMENT_WITH_SHORT_ID.get("I")); argLists.add(args("--invalidLongArgument")); reasonList.add(ERR_ARGPARSER_NO_ARGUMENT_WITH_LONG_ID.get("invalidLongArgument")); argLists.add(args("--assertionFilter", "(invalidfilter)", "uid:test.user", "uid=test.user,o=test")); reasonList.add(ERR_LDAP_FILTER_NO_EQUAL_SIGN.get("(invalidfilter)", 1, 14)); argLists.add(args("-D", "cn=Directory Manager", "-j", "no.such.file", "uid:test.user", "uid=test.user,o=test")); reasonList.add(ERR_FILEARG_NO_SUCH_FILE.get("no.such.file", "bindPasswordFile")); argLists.add(args("-D", "cn=Directory Manager", "-w", "password", "-j", "src/test/resources/dummy-truststore", "uid:test.user", "uid=test.user,o=test")); reasonList.add(ERR_TOOL_CONFLICTING_ARGS.get("bindPassword", "bindPasswordFile")); argLists.add(args("-J", "1.2.3.4:invalidcriticality", "uid:test.user", "uid=test.user,o=test")); reasonList.add(ERR_TOOL_INVALID_CONTROL_STRING.get("1.2.3.4:invalidcriticality")); argLists.add(args("-Z", "-q", "o=test", "o=test2")); reasonList.add(ERR_TOOL_CONFLICTING_ARGS.get("useStartTLS", "useSSL")); argLists.add(args("-p", "nonnumeric", "uid:test.user", "uid=test.user,o=test")); reasonList.add(ERR_ARG_CANNOT_DECODE_AS_INT.get("nonnumeric", "port")); argLists.add(args("-p", "999999", "uid:test.user", "uid=test.user,o=test")); reasonList.add(ERR_INTARG_VALUE_ABOVE_UPPER_BOUND.get("port", 999999, 65535)); argLists.add(args("-D", "cn=Directory Manager", "-w", "password")); reasonList.add(ERR_ARGPARSER_TOO_FEW_TRAILING_ARGUMENTS.get(2)); argLists.add(args("-D", "cn=Directory Manager", "-w", "password", "uid:test.user")); reasonList.add(ERR_ARGPARSER_TOO_FEW_TRAILING_ARGUMENTS.get(2)); argLists.add(args("-D", "cn=Directory Manager", "-w", "password", "malformed", "uid=test.user,o=test")); reasonList.add(ERR_LDAPCOMPARE_INVALID_ATTR_STRING.get("malformed")); return toDataProviderArray(argLists, reasonList); } @Test public void simpleComparison() throws Exception { runToolOnMockedServer("description:the paranoid android", "uid=marvin"); } @Test public void simpleComparisonUseReturnCode() throws Exception { runToolOnMockedServer(ResultCode.COMPARE_TRUE, "-m", "description:the paranoid android", "uid=marvin"); } @Test public void simpleComparisonWithProxyAs() throws Exception { controls.add(ProxiedAuthV2RequestControl.newControl("u:arthurdent")); runToolOnMockedServer("-Y", "u:arthurdent", "description:the paranoid android", "uid=marvin"); } @Test public void comparisonWithAssertionFilter() throws Exception { controls.add(AssertionRequestControl.newControl(true, Filter.equality("initials", "FP"))); runToolOnMockedServer("--assertionFilter", "(initials=FP)", "description:the paranoid android", "uid=marvin"); } @Test public void comparisonWithAssertionFilterAndControl() throws Exception { controls.add(RealAttributesOnlyRequestControl.newControl(true)); controls.add(AssertionRequestControl.newControl(true, Filter.equality("initials", "M"))); runToolOnMockedServer("--assertionFilter", "(initials=M)", "-J", "2.16.840.1.113730.3.4.17:true", "description:the paranoid android", "uid=marvin"); } @Test public void comparisonWithAssertionFilterAndControlDryRun() throws Exception { controls.add(RealAttributesOnlyRequestControl.newControl(true)); controls.add(AssertionRequestControl.newControl(true, Filter.equality("initials", "M"))); runToolOnMockedServer("--assertionFilter", "(initials=M)", "-J", "2.16.840.1.113730.3.4.17:true", "-n", "description:the paranoid android", "uid=marvin"); } @Override ToolConsoleApplication createInstance() { return new LDAPCompare(outStream, errStream); } }