/* * 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 2013 ForgeRock AS. */ package org.forgerock.opendj.grizzly; import static org.fest.assertions.Assertions.assertThat; import org.forgerock.opendj.ldap.SdkTestCase; import org.glassfish.grizzly.StandaloneProcessor; import org.glassfish.grizzly.filterchain.BaseFilter; import org.glassfish.grizzly.filterchain.FilterChain; import org.glassfish.grizzly.filterchain.FilterChainBuilder; import org.glassfish.grizzly.filterchain.TransportFilter; import org.glassfish.grizzly.ssl.SSLFilter; import org.testng.annotations.Test; @SuppressWarnings("javadoc") public class GrizzlyUtilsTestCase extends SdkTestCase { private static final class DummyLDAPFilter extends BaseFilter { // only need type } private static final class FilterOne extends BaseFilter { // only need type } private static final class DummySSLFilter extends SSLFilter { // only need type } /** * Default filter chain contains a transport filter and a ldap filter. */ private FilterChain getDefaultFilterChain() { return FilterChainBuilder.stateless(). add(new TransportFilter()).add(new DummyLDAPFilter()).build(); } @Test public void addFilterToChain() throws Exception { final FilterChain chain = GrizzlyUtils.addFilterToChain(new FilterOne(), getDefaultFilterChain()); assertThat(chain.indexOfType(TransportFilter.class)).isEqualTo(0); assertThat(chain.indexOfType(FilterOne.class)).isEqualTo(1); assertThat(chain.indexOfType(DummyLDAPFilter.class)).isEqualTo(2); assertThat(chain.size()).isEqualTo(3); } @Test public void addSSLFilterToChain() throws Exception { final FilterChain chain = GrizzlyUtils.addFilterToChain(new DummySSLFilter(), getDefaultFilterChain()); assertThat(chain.indexOfType(TransportFilter.class)).isEqualTo(0); assertThat(chain.indexOfType(DummySSLFilter.class)).isEqualTo(1); assertThat(chain.indexOfType(DummyLDAPFilter.class)).isEqualTo(2); assertThat(chain.size()).isEqualTo(3); } @Test public void addConnectionSecurityLayerAndSSLFilterToChain() throws Exception { final FilterChain chain = GrizzlyUtils.addFilterToChain(new ConnectionSecurityLayerFilter(null, null), getDefaultFilterChain()); final FilterChain sslChain = GrizzlyUtils.addFilterToChain(new DummySSLFilter(), chain); // SSLFilter must be beneath ConnectionSecurityLayerFilter assertThat(sslChain.indexOfType(TransportFilter.class)).isEqualTo(0); assertThat(sslChain.indexOfType(DummySSLFilter.class)).isEqualTo(1); assertThat(sslChain.indexOfType(ConnectionSecurityLayerFilter.class)).isEqualTo(2); assertThat(sslChain.indexOfType(DummyLDAPFilter.class)).isEqualTo(3); assertThat(sslChain.size()).isEqualTo(4); } @Test public void buildFilterChainFromFilterChainProcessor() throws Exception { final FilterChain chain = GrizzlyUtils.buildFilterChain( FilterChainBuilder.stateless().add(new TransportFilter()).build(), new DummyLDAPFilter()); assertThat(chain.indexOfType(TransportFilter.class)).isEqualTo(0); assertThat(chain.indexOfType(DummyLDAPFilter.class)).isEqualTo(1); assertThat(chain.size()).isEqualTo(2); } @Test public void buildFilterChainFromNonFilterChainProcessor() throws Exception { final FilterChain chain = GrizzlyUtils.buildFilterChain(new StandaloneProcessor(), new DummyLDAPFilter()); assertThat(chain.indexOfType(TransportFilter.class)).isEqualTo(0); assertThat(chain.indexOfType(DummyLDAPFilter.class)).isEqualTo(1); assertThat(chain.size()).isEqualTo(2); } }