package org.constretto.internal.store.ldap; import org.constretto.ConstrettoBuilder; import org.constretto.ConstrettoConfiguration; import org.constretto.annotation.Configuration; import org.constretto.model.TaggedPropertySet; import org.junit.Rule; import org.junit.Test; import org.zapodot.junit.ldap.EmbeddedLdapRule; import org.zapodot.junit.ldap.EmbeddedLdapRuleBuilder; import javax.naming.directory.DirContext; import java.util.Arrays; import java.util.Collection; import java.util.List; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; /** * @author zapodot at gmail dot com */ public class LdapConfigurationStoreEmbeddedLdapTest { @Rule public EmbeddedLdapRule embeddedLdapRule = EmbeddedLdapRuleBuilder.newInstance() .bindingToPort(LDAP_PORT) .usingDomainDsn("dc=constretto,dc=org") .importingLdifs("constretto.ldif") .build(); public static final int LDAP_PORT = 27389; public static class ConfigurableType { @Configuration("cn") public List<String> names; @Configuration("sidekick.cn") public String sideKickName; } @Test public void testParseConfigurationUsingAddDsn() throws Exception { final DirContext dirContext = embeddedLdapRule.dirContext(); final LdapConfigurationStore configurationStore = LdapConfigurationStoreBuilder.usingDirContext(dirContext) .addDsn("cn=Kaare Nilsen,dc=constretto,dc=org") .addDsnWithKey("sidekick", "cn=Jon-Anders Teigen,dc=constretto,dc=org") .done(); final Collection<TaggedPropertySet> propertySets = configurationStore.parseConfiguration(); assertEquals(1, propertySets.size()); ConstrettoConfiguration constrettoConfiguration = createConfiguration(configurationStore); final ConfigurableType configurationObject = constrettoConfiguration.as(ConfigurableType.class); assertTrue(configurationObject.names.containsAll(Arrays.asList("Kaare Nilsen", "Kåre Nilsen"))); assertEquals("Jon-Anders Teigen", configurationObject.sideKickName); } @Test public void testDsnMultiValue() throws Exception { final DirContext initialDirContext = embeddedLdapRule.dirContext(); final ConstrettoConfiguration configuration = new ConstrettoBuilder(false) .createLdapConfigurationStore(initialDirContext) .addDsn("cn=role_developer,ou=groups,dc=constretto,dc=org") .done() .getConfiguration(); final List<String> members = configuration.evaluateToList(String.class, "uniqueMember"); assertEquals(2, members.size()); } @Test public void testParseConfigurationUsingSearch() throws Exception { final DirContext initialDirContext = embeddedLdapRule.dirContext(); final ConstrettoConfiguration configuration = new ConstrettoBuilder(false) .createLdapConfigurationStore(initialDirContext) .addUsingSearch( "dc=constretto,dc=org", "(&(cn=K*)(objectClass=inetOrgPerson))", "uid") .done() .getConfiguration(); assertTrue(configuration.evaluateToList(String.class, "kaarenilsen.cn") .containsAll(Arrays.asList("Kaare Nilsen", "Kåre Nilsen"))); } private ConstrettoConfiguration createConfiguration(LdapConfigurationStore configurationStore) { return new ConstrettoBuilder(false).addConfigurationStore( configurationStore).getConfiguration(); } }