package com.constellio.model.conf.ldap.services; import static org.assertj.core.api.Assertions.assertThat; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Set; import javax.naming.ldap.LdapContext; import org.junit.Test; import com.constellio.model.conf.LDAPTestConfig; import com.constellio.model.conf.ldap.LDAPDirectoryType; import com.constellio.model.conf.ldap.user.LDAPGroup; import com.constellio.model.conf.ldap.user.LDAPUser; import com.constellio.sdk.tests.ConstellioTest; import com.constellio.sdk.tests.annotations.InternetTest; @InternetTest public class LDAPServicesAcceptanceTest extends ConstellioTest { @Test public void givenValidLdapConnexionInfoThenConnectToServer() { LdapContext ldapContext = getValidContext(); assertThat(ldapContext).isNotNull(); } private LdapContext getValidContext() { return new LDAPServicesImpl() .connectToLDAP(LDAPTestConfig.getDomains(), LDAPTestConfig.getLDAPDevServerUrl(), LDAPTestConfig.getUser(), LDAPTestConfig.getPassword(), false, true); } @Test public void whenSearchingGroupThenReturnValidGroupAttributes() throws Exception { LdapContext ldapContext = getValidContext(); String ouWithGroup1AndGroup2 = "OU=ouWithGroup1AndGroup2,OU=testSynchronization,DC=test,DC=doculibre,DC=ca"; String ouWithGroup3AndGroup4 = "OU=ouWithGroup3AndGroup4,OU=testSynchronization,DC=test,DC=doculibre,DC=ca"; Set<LDAPGroup> groups = new LDAPServicesImpl() .getAllGroups(ldapContext, Arrays.asList(new String[] { ouWithGroup1AndGroup2, ouWithGroup3AndGroup4 })); assertThat(groups.size()).isEqualTo(4); List<String> groupsNames = new ArrayList<>(); for (LDAPGroup group : groups) { groupsNames.add(group.getSimpleName()); } assertThat(groupsNames).contains("group1", "group2", "group3", "group4"); } @Test public void whenSearchingMoreThan1000GroupsThenReturnAllGroups() throws Exception { LdapContext ldapContext = getValidContext(); String ouWith2997groups = "OU=Departement2,OU=doculibre,DC=test,DC=doculibre,DC=ca"; Set<LDAPGroup> groups = new LDAPServicesImpl().getAllGroups(ldapContext, Arrays.asList(new String[] { ouWith2997groups })); assertThat(groups.size()).isEqualTo(2997); } @Test public void whenSearchingMoreThan1000UsersThenReturnAllUsers() throws Exception { LdapContext ldapContext = getValidContext(); String ouWith3001Users = "OU=Departement1,OU=doculibre,DC=test,DC=doculibre,DC=ca"; List<String> users = new LDAPServicesImpl() .searchUsersIdsFromContext(LDAPDirectoryType.ACTIVE_DIRECTORY, ldapContext, ouWith3001Users, LDAPTestConfig.getUserFilterGroupsList()); assertThat(users.size()).isEqualTo(3001); } @Test public void whenSearchingGroupsFromTwoContextsThenReturnAllGroupsFromBothContexts() throws Exception { LdapContext ldapContext = getValidContext(); String allTestGroupsOU = "OU=testSynchronization,DC=test,DC=doculibre,DC=ca"; Set<LDAPGroup> groups = new LDAPServicesImpl().getAllGroups(ldapContext, Arrays.asList(new String[] { allTestGroupsOU })); LDAPGroup subgroupLevel1 = null; for (LDAPGroup group : groups) { if (group.getSimpleName().equals("subgroupLevel1")) { subgroupLevel1 = group; break; } } assertThat(subgroupLevel1).isNotNull(); assertThat(subgroupLevel1.getDistinguishedName()) .isEqualTo("CN=subgroupLevel1,OU=testSynchronization,DC=test,DC=doculibre,DC=ca"); for (String userId : subgroupLevel1.getMembers()) { System.out.println("===========================user:" + userId); LDAPUser ldapUser = new LDAPServicesImpl().getUser(LDAPDirectoryType.ACTIVE_DIRECTORY, userId, ldapContext); System.out.println(ldapUser); } System.out.println(subgroupLevel1); } @Test public void whenDnForUserThenOk() throws Exception { LdapContext ldapContext = getValidContext(); String ouWith3001Users = "OU=Departement1,OU=doculibre,DC=test,DC=doculibre,DC=ca"; String dn = new LDAPServicesImpl().dnForUser(ldapContext, "username0", Arrays.asList(ouWith3001Users)); assertThat(dn).isEqualTo("CN=username0,OU=Departement1,OU=doculibre,DC=test,DC=doculibre,DC=ca"); System.out.println(dn); } }