/*
* *****************************************************************************
* Cloud Foundry
* Copyright (c) [2009-2015] Pivotal Software, Inc. All Rights Reserved.
* This product is licensed to you under the Apache License, Version 2.0 (the "License").
* You may not use this product except in compliance with the License.
*
* This product includes a number of subcomponents with
* separate copyright notices and license terms. Your use of these
* subcomponents is subject to the terms and conditions of the
* subcomponent's license, as noted in the LICENSE file.
* *****************************************************************************
*/
package org.cloudfoundry.identity.uaa.provider.ldap;
import org.cloudfoundry.identity.uaa.provider.ldap.extension.DefaultTlsDirContextAuthenticationStrategy;
import org.cloudfoundry.identity.uaa.provider.ldap.extension.ExternalTlsDirContextAuthenticationStrategy;
import org.junit.Test;
import org.springframework.ldap.core.support.SimpleDirContextAuthenticationStrategy;
import java.util.HashMap;
import java.util.Map;
import static org.cloudfoundry.identity.uaa.provider.ldap.ProcessLdapProperties.EXTERNAL;
import static org.cloudfoundry.identity.uaa.provider.ldap.ProcessLdapProperties.LDAP_SOCKET_FACTORY;
import static org.cloudfoundry.identity.uaa.provider.ldap.ProcessLdapProperties.LDAP_SSL_SOCKET_FACTORY;
import static org.cloudfoundry.identity.uaa.provider.ldap.ProcessLdapProperties.NONE;
import static org.cloudfoundry.identity.uaa.provider.ldap.ProcessLdapProperties.SIMPLE;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
public class ProcessLdapPropertiesTest {
@Test
public void testProcess() throws Exception {
Map<String,String> properties = new HashMap<>();
ProcessLdapProperties process = new ProcessLdapProperties("ldap://localhost:389", false, NONE);
assertNull(process.process(properties).get(LDAP_SOCKET_FACTORY));
assertEquals(ProcessLdapProperties.EXPIRY_CHECKING_SOCKET_FACTORY, process.process(properties).get(LDAP_SSL_SOCKET_FACTORY));
assertEquals(ProcessLdapProperties.EXPIRY_CHECKING_SOCKET_FACTORY, process.getSSLSocketFactory().getClass().getName());
process.setDisableSslVerification(true);
assertNull(process.process(properties).get(LDAP_SOCKET_FACTORY));
process.setBaseUrl("ldaps://localhost:636");
assertEquals(ProcessLdapProperties.SKIP_SSL_VERIFICATION_SOCKET_FACTORY, process.process(properties).get(LDAP_SOCKET_FACTORY));
assertEquals(ProcessLdapProperties.SKIP_SSL_VERIFICATION_SOCKET_FACTORY, process.process(properties).get(LDAP_SSL_SOCKET_FACTORY));
assertEquals(ProcessLdapProperties.SKIP_SSL_VERIFICATION_SOCKET_FACTORY, process.getSSLSocketFactory().getClass().getName());
}
@Test
public void process_whenSslValidationIsEnabled() throws Exception {
Map<String,String> properties = new HashMap<>();
ProcessLdapProperties process = new ProcessLdapProperties("ldap://localhost:389", false, NONE);
assertNull(process.process(properties).get(LDAP_SOCKET_FACTORY));
assertEquals(ProcessLdapProperties.EXPIRY_CHECKING_SOCKET_FACTORY, process.process(properties).get(LDAP_SSL_SOCKET_FACTORY));
assertEquals(ProcessLdapProperties.EXPIRY_CHECKING_SOCKET_FACTORY, process.getSSLSocketFactory().getClass().getName());
process.setDisableSslVerification(false);
assertNull(process.process(properties).get(LDAP_SOCKET_FACTORY));
assertEquals(ProcessLdapProperties.EXPIRY_CHECKING_SOCKET_FACTORY, process.process(properties).get(LDAP_SSL_SOCKET_FACTORY));
assertEquals(ProcessLdapProperties.EXPIRY_CHECKING_SOCKET_FACTORY, process.getSSLSocketFactory().getClass().getName());
process.setBaseUrl("ldaps://localhost:636");
assertEquals(ProcessLdapProperties.EXPIRY_CHECKING_SOCKET_FACTORY, process.process(properties).get(LDAP_SOCKET_FACTORY));
assertEquals(ProcessLdapProperties.EXPIRY_CHECKING_SOCKET_FACTORY, process.process(properties).get(LDAP_SSL_SOCKET_FACTORY));
assertEquals(ProcessLdapProperties.EXPIRY_CHECKING_SOCKET_FACTORY, process.getSSLSocketFactory().getClass().getName());
}
@Test
public void test_authentication_strategy() throws Exception {
ProcessLdapProperties process = new ProcessLdapProperties("ldap://localhost:389", false, null);
assertEquals(SimpleDirContextAuthenticationStrategy.class, process.getAuthenticationStrategy().getClass());
process = new ProcessLdapProperties("ldap://localhost:389", false, NONE);
assertEquals(SimpleDirContextAuthenticationStrategy.class, process.getAuthenticationStrategy().getClass());
process = new ProcessLdapProperties("ldap://localhost:389", false, SIMPLE);
assertEquals(DefaultTlsDirContextAuthenticationStrategy.class, process.getAuthenticationStrategy().getClass());
process = new ProcessLdapProperties("ldap://localhost:389", false, EXTERNAL);
assertEquals(ExternalTlsDirContextAuthenticationStrategy.class, process.getAuthenticationStrategy().getClass());
}
@Test(expected = IllegalArgumentException.class)
public void invalid_authentication_strategy() throws Exception {
ProcessLdapProperties process = new ProcessLdapProperties("ldap://localhost:389", false, "asdadasda");
process.getAuthenticationStrategy();
}
}