package org.ovirt.engine.core.itests.ldap; import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.commons.configuration.Configuration; import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.ConfigurationUtils; import org.apache.commons.configuration.HierarchicalConfiguration; import org.apache.commons.configuration.PropertiesConfiguration; import org.apache.commons.configuration.tree.ConfigurationNode; import org.ovirt.engine.core.compat.LogCompat; import org.ovirt.engine.core.compat.LogFactoryCompat; import org.springframework.ldap.core.LdapTemplate; import org.springframework.ldap.core.support.LdapContextSource; public class LdapTestsSetup { private Configuration testProperties; private IPAGroupDaoImpl ipaGroupDao = new IPAGroupDaoImpl(); private IPAPersonDaoImpl ipaPersonDao = new IPAPersonDaoImpl(); private ADPersonDaoImpl adPersonDao = new ADPersonDaoImpl(); private ADGroupDaoImpl adGroupDao = new ADGroupDaoImpl(); private LdapTemplate ipaLdapTemplate; private LdapTemplate adLdapTemplate; private LdapContextSource ipaLdapContext; private LdapContextSource adLdapContext; private Map<String, Person> users = new HashMap<String, Person>(); private Map<String, Group> groups = new HashMap<String, Group>(); private Map<String, String> ldapConfiguration = new HashMap<String, String>(); private static LogCompat log = LogFactoryCompat.getLog(LdapTestsSetup.class); public LdapTestsSetup() { String confFile = System.getenv("LDAP_TESTER_PROPERTIES_FILE"); if (confFile == null) { confFile = "ldap.integ/ldap-test.properties"; } try { testProperties = new PropertiesConfiguration(confFile); Configuration usersSubset = testProperties.subset("users"); HierarchicalConfiguration usersConfig = ConfigurationUtils.convertToHierarchical(usersSubset); List<ConfigurationNode> childrens = usersConfig.getRootNode().getChildren(); for (ConfigurationNode node : childrens) { String name = node.getName(); users.put(name, new Person(usersSubset.subset(name))); } Configuration groupsSubset = testProperties.subset("groups"); HierarchicalConfiguration groupsConfig = ConfigurationUtils.convertToHierarchical(groupsSubset); childrens = groupsConfig.getRootNode().getChildren(); for (ConfigurationNode node : childrens) { String name = node.getName(); groups.put(name, new Group(groupsSubset.subset(name))); } Configuration ldapConfigurationSubset = testProperties.subset("configuration"); HierarchicalConfiguration ldapConfig = ConfigurationUtils.convertToHierarchical(ldapConfigurationSubset); childrens = ldapConfig.getRootNode().getChildren(); for (ConfigurationNode node : childrens) { String key = node.getName(); String value = (String) node.getValue(); ldapConfiguration.put(key, value); } } catch (ConfigurationException ex) { String message = "Problem loading configuration: " + ex.getMessage(); log.error(message); throw new IllegalStateException(message); } } public void setup() throws Exception { setIpaLdapContext(ContextSourceFactory.getIPAContextSource(ldapConfiguration)); getIpaLdapContext().afterPropertiesSet(); setAdLdapContext(ContextSourceFactory.getADContextSource(ldapConfiguration)); getAdLdapContext().afterPropertiesSet(); ipaLdapTemplate = new LdapTemplate(getIpaLdapContext()); adLdapTemplate = new LdapTemplate(getAdLdapContext()); ipaPersonDao.setLdapTemplate(ipaLdapTemplate); ipaGroupDao.setLdapTemplate(ipaLdapTemplate); adPersonDao.setLdapTemplate(adLdapTemplate); adGroupDao.setLdapTemplate(adLdapTemplate); } public void populateUsersAndGroups() throws ConfigurationException, URISyntaxException { for (Person p : users.values()) { ipaPersonDao.create(p); adPersonDao.create(p); } List<String> list = new ArrayList<String>(groups.keySet()); Collections.sort(list); for (String groupName : list ) { Group group = groups.get(groupName); ipaGroupDao.create(group); adGroupDao.create(group); System.out.println(groupName); } } public Person getUser(String userName) { return users.get(userName); } public Group getGroup(String groupName) { return groups.get(groupName); } public void cleanup() { for (Person p : users.values()) { ipaPersonDao.delete(p); adPersonDao.delete(p); } for (Group g : groups.values()) { ipaGroupDao.delete(g); adGroupDao.delete(g); } } public IPAGroupDaoImpl getIpaGroupDao() { return ipaGroupDao; } public IPAPersonDaoImpl getIpaPersonDao() { return ipaPersonDao; } public ADPersonDaoImpl getAdPersonDao() { return adPersonDao; } public ADGroupDaoImpl getAdGroupDao() { return adGroupDao; } public void setIpaLdapContext(LdapContextSource ipaLdapContext) { this.ipaLdapContext = ipaLdapContext; } public LdapContextSource getIpaLdapContext() { return ipaLdapContext; } public void setAdLdapContext(LdapContextSource adLdapContext) { this.adLdapContext = adLdapContext; } public LdapContextSource getAdLdapContext() { return adLdapContext; } }