/* * 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 com.forgerock.opendj.ldap.tools; import static org.fest.assertions.Assertions.assertThat; import static org.forgerock.opendj.ldap.TestCaseUtils.loopbackWithDynamicPort; import static org.forgerock.opendj.ldap.LDAPListener.LDAP_DECODE_OPTIONS; import java.io.IOException; import java.util.Collections; import org.forgerock.opendj.ldap.IntermediateResponseHandler; import org.forgerock.opendj.ldap.LDAPClientContext; import org.forgerock.opendj.ldap.LDAPListener; import org.forgerock.opendj.ldap.LdapException; import org.forgerock.opendj.ldap.LdapResultHandler; import org.forgerock.opendj.ldap.ResultCode; import org.forgerock.opendj.ldap.SearchResultHandler; import org.forgerock.opendj.ldap.ServerConnection; import org.forgerock.opendj.ldap.ServerConnectionFactory; import org.forgerock.opendj.ldap.requests.AbandonRequest; import org.forgerock.opendj.ldap.requests.AddRequest; import org.forgerock.opendj.ldap.requests.BindRequest; import org.forgerock.opendj.ldap.requests.CompareRequest; import org.forgerock.opendj.ldap.requests.DeleteRequest; import org.forgerock.opendj.ldap.requests.ExtendedRequest; import org.forgerock.opendj.ldap.requests.ModifyDNRequest; import org.forgerock.opendj.ldap.requests.ModifyRequest; import org.forgerock.opendj.ldap.requests.SearchRequest; import org.forgerock.opendj.ldap.requests.UnbindRequest; import org.forgerock.opendj.ldap.responses.BindResult; import org.forgerock.opendj.ldap.responses.CompareResult; import org.forgerock.opendj.ldap.responses.ExtendedResult; import org.forgerock.opendj.ldap.responses.Responses; import org.forgerock.opendj.ldap.responses.Result; import org.forgerock.util.Options; import com.forgerock.reactive.ServerConnectionFactoryAdapter; /** Mocked request handler sketelon for tools test cases. */ class ToolLdapServer implements ServerConnectionFactory { static final String DIRECTORY_MANAGER = "cn=Directory Manager"; static class ToolLdapServerConnection implements ServerConnection { @Override public void handleAbandon(final Integer requestContext, final AbandonRequest request) { throw new UnsupportedOperationException("This method should not have been called in the test."); } @Override public void handleBind(final Integer requestContext, final int version, final BindRequest request, final IntermediateResponseHandler intermediateResponseHandler, final LdapResultHandler resultHandler) { assertThat(request.getName()).isEqualTo(DIRECTORY_MANAGER); resultHandler.handleResult(Responses.newBindResult(ResultCode.SUCCESS)); } @Override public void handleConnectionClosed(final Integer requestContext, final UnbindRequest request) { throw new UnsupportedOperationException("This method should not have been called in the test."); } @Override public void handleConnectionDisconnected(final ResultCode resultCode, final String message) { throw new UnsupportedOperationException("This method should not have been called in the test."); } @Override public void handleConnectionError(final Throwable error) { throw new UnsupportedOperationException("This method should not have been called in the test."); } @Override public void handleAdd(final Integer requestContext, final AddRequest request, final IntermediateResponseHandler intermediateResponseHandler, final LdapResultHandler resultHandler) { throw new UnsupportedOperationException("This method should not have been called in the test."); } @Override public void handleCompare(final Integer requestContext, final CompareRequest request, final IntermediateResponseHandler intermediateResponseHandler, final LdapResultHandler resultHandler) { throw new UnsupportedOperationException("This method should not have been called in the test."); } @Override public void handleDelete(final Integer requestContext, final DeleteRequest request, final IntermediateResponseHandler intermediateResponseHandler, final LdapResultHandler resultHandler) { throw new UnsupportedOperationException("This method should not have been called in the test."); } @Override public void handleExtendedRequest(final Integer requestContext, final ExtendedRequest request, final IntermediateResponseHandler responseHandler, final LdapResultHandler resultHandler) { throw new UnsupportedOperationException("This method should not have been called in the test."); } @Override public void handleModify(final Integer requestContext, final ModifyRequest request, final IntermediateResponseHandler intermediateResponseHandler, final LdapResultHandler resultHandler) { throw new UnsupportedOperationException("This method should not have been called in the test."); } @Override public void handleModifyDN(final Integer requestContext, final ModifyDNRequest request, final IntermediateResponseHandler intermediateResponseHandler, final LdapResultHandler resultHandler) { throw new UnsupportedOperationException("This method should not have been called in the test."); } @Override public void handleSearch(final Integer requestContext, final SearchRequest request, final IntermediateResponseHandler intermediateResponseHandler, final SearchResultHandler entryHandler, final LdapResultHandler resultHandler) { throw new UnsupportedOperationException("This method should not have been called in the test."); } } private LDAPListener listener; @Override public ServerConnection handleAccept(final LDAPClientContext clientContext) throws LdapException { return newServerConnection(); } /** Must be overriding by client code. */ ToolLdapServerConnection newServerConnection() { return new ToolLdapServerConnection(); } void start() throws IOException { listener = new LDAPListener(Collections.singleton(loopbackWithDynamicPort()), new ServerConnectionFactoryAdapter(Options.defaultOptions().get(LDAP_DECODE_OPTIONS), this)); } void stop() { listener.close(); } String getHostName() { return listener.getSocketAddresses().iterator().next().getHostName(); } String getPort() { return Integer.toString(listener.getSocketAddresses().iterator().next().getPort()); } }