package co.codewizards.cloudstore.rest.server.ldap; import static org.assertj.core.api.Assertions.*; import net.jcip.annotations.NotThreadSafe; import org.junit.After; import org.junit.Before; import org.junit.Test; import co.codewizards.cloudstore.core.config.Config; import co.codewizards.cloudstore.core.otp.OneTimePadRegistry; @NotThreadSafe public class LdapClientProviderTest { private LdapClientProvider provider; private DnTemplatePropertyHelper helper; @Before public void setUp(){ helper = new DnTemplatePropertyHelper(10); } @After public void cleanUp(){ helper.removePatterns(); System.clearProperty(Config.SYSTEM_PROPERTY_PREFIX + LdapClientProvider.LDAP_QUERY); System.clearProperty(Config.SYSTEM_PROPERTY_PREFIX + LdapClientProvider.LDAP_QUERY_DN); System.clearProperty(Config.SYSTEM_PROPERTY_PREFIX + LdapClientProvider.LDAP_ADMIN_DN); } @Test(expected = IllegalStateException.class) public void when_query_is_empty_and_templates_list_is_empty_then_provider_can_be_created_but_throws_ISE_when_getClient_called(){ setSystemProperty(LdapClientProvider.LDAP_QUERY, ""); helper.setPatterns(); provider = new LdapClientProvider(); provider.getClient(); } @Test public void when_templates_are_proper_and_query_is_empty_then_simple_client_is_created(){ setSystemProperty(LdapClientProvider.LDAP_QUERY, ""); String template = "cn=${login}+sn=secret, ou=users, dc=example, dc=com"; helper.setPatterns(template); provider = new LdapClientProvider(); assertThat(provider.getClient()).isNotNull().isInstanceOf(SimpleLdapClient.class); } @Test public void when_query_is_not_empty_and_other_required_properties_are_set_then_query_client_is_created(){ setSystemProperty(LdapClientProvider.LDAP_QUERY, "(|(cn=${login})(&(email=${login})(objectClass=inetOrgPerson))(emailAlias=${login}))"); setSystemProperty(LdapClientProvider.LDAP_QUERY_DN, "ou=users, dc=example, dc=com"); setSystemProperty(LdapClientProvider.LDAP_ADMIN_DN, "cn=admin"); OneTimePadRegistry registry = new OneTimePadRegistry("NOT_EXISTING_FILE_ONLY_FOR_TESTS"); registry.encryptAndStorePassword("password".toCharArray()); provider = new LdapClientProvider(registry); assertThat(provider.getClient()).isNotNull().isInstanceOf(QueryLdapClient.class); } private void setSystemProperty(String property, String value){ System.setProperty(Config.SYSTEM_PROPERTY_PREFIX + property, value); } }