package de.hsfulda.informatik; import com.unboundid.ldap.sdk.Attribute; import com.unboundid.ldap.sdk.Entry; import com.unboundid.ldap.sdk.LDAPException; import com.unboundid.ldap.sdk.SearchResultEntry; import org.junit.Test; import java.io.IOException; import java.security.GeneralSecurityException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; public class LdapSyncTest { private List addList; private Set delSet; @Test public void testSync() throws LDAPException, GeneralSecurityException, IOException { final List remoteEntries = new ArrayList<>(); remoteEntries.add(searchResultEntry("dn=Fd1234,dc=remote,dc=de", "fD1234", "Mustermann", "Mustermann")); remoteEntries.add(searchResultEntry("dn=fDai1235,dc=remote,dc=de", "FDai1235", "Schuster", "Schuster")); remoteEntries.add(searchResultEntry("dn=fdaI1236,dc=remote,dc=de", "fdAI1236", "Bunsen", "Bunsen")); remoteEntries.add(searchResultEntry("dn=fDeT123,dc=remote,dc=de", "FDET123", "Bauer", "Bauer")); remoteEntries.add(searchResultEntry("dn=fdw9424,dc=remote,dc=de", "fdw9424", "Hein", "Bloed")); remoteEntries.add(searchResultEntry("dn=fdXx9999,dc=remote,dc=de", "fdxX9999", "Schmidt", "Schmidt")); final AccountSource remote = new AccountSource("dc=remote,dc=de", remoteEntries); final List localEntries = new ArrayList<>(); localEntries.add(searchResultEntry("dn=Fdai1236,dc=local,dc=de", "fDai1236", "Bunsen", "Bunsen")); localEntries.add(searchResultEntry("dn=fDai1237,dc=local,dc=de", "fdAi1237", "Beaker", "Beaker")); localEntries.add(searchResultEntry("dn=fdAi1238,dc=local,dc=de", "fdaI1238", "Hopper", "Hopper")); final AccountSource local = new AccountSource("dc=local,dc=de", localEntries) { @Override public void add(List usersToBeAdded) { addList = usersToBeAdded; } @Override public void del(Set usersToBeDeleted) { delSet = usersToBeDeleted; } }; final LdapSync ldapSync = new LdapSync(remote, local); assertEquals(delSet.size(), 2); assertTrue(delSet.contains("fdai1237")); assertTrue(delSet.contains("fdai1238")); assertEquals(5, addList.size()); for (final Entry entry : addList) { assertTrue(entry.getDN().endsWith(",dc=local,dc=de")); final List objectClasses = Arrays.asList(entry.getObjectClassValues()); assertTrue(objectClasses.contains("shadowAccount")); assertTrue(objectClasses.contains("posixAccount")); assertTrue(objectClasses.contains("top")); assertTrue(objectClasses.contains("person")); assertTrue(objectClasses.contains("inetOrgPerson")); final List attributes = entry.getAttributes().stream().map(a -> a.getName()).collect(Collectors.toList()); assertTrue(attributes.contains("uid")); assertTrue(attributes.contains("cn")); assertTrue(attributes.contains("givenname")); assertTrue(attributes.contains("sn")); assertTrue(attributes.contains("uidNumber")); assertTrue(attributes.contains("gidNumber")); assertTrue(attributes.contains("homeDirectory")); assertEquals(entry.getAttributeValue("cn").toLowerCase(), entry.getAttributeValue("cn")); assertEquals(entry.getAttributeValue("uid").toLowerCase(), entry.getAttributeValue("uid")); assertEquals(entry.getDN().toLowerCase(), entry.getDN()); System.out.println(); for (final String string : entry.toLDIF()) { System.out.println(string); } } } @Test public void testUidNumber() { assertEquals(41000, (int) LdapSync.computeUid("fd1000")); assertEquals(49999, (int) LdapSync.computeUid("fd9999")); assertEquals(10141000, (int) LdapSync.computeUid("fdaa1000")); assertEquals(10149999, (int) LdapSync.computeUid("fdaa9999")); assertEquals(262641000, (int) LdapSync.computeUid("fdzz1000")); assertEquals(262649999, (int) LdapSync.computeUid("fdzz9999")); assertEquals(270000001, (int) LdapSync.computeUid("fd0000001")); assertEquals(279999999, (int) LdapSync.computeUid("fd9999999")); // test user defined mappings Map mappings; mappings = LdapSync.parseUserDefinedMappings("fdg00244:300000244,fdbla:300009999, fdfoo:300009777 , fdbar:300009888"); assertEquals(300000244, (int) LdapSync.computeUid("fdg00244", mappings)); assertEquals(300009999, (int) LdapSync.computeUid("fdbla", mappings)); assertEquals(300009777, (int) LdapSync.computeUid("fdfoo", mappings)); assertEquals(300009888, (int) LdapSync.computeUid("fdbar", mappings)); assertEquals(41000, (int) LdapSync.computeUid("fd1000", mappings)); assertEquals(49999, (int) LdapSync.computeUid("fd9999", mappings)); assertEquals(10141000, (int) LdapSync.computeUid("fdaa1000", mappings)); assertEquals(10149999, (int) LdapSync.computeUid("fdaa9999", mappings)); assertEquals(262641000, (int) LdapSync.computeUid("fdzz1000", mappings)); assertEquals(262649999, (int) LdapSync.computeUid("fdzz9999", mappings)); mappings = LdapSync.parseUserDefinedMappings("fdg00244:300000244"); assertEquals(300000244, (int) LdapSync.computeUid("fdg00244", mappings)); assertEquals( 41000, (int) LdapSync.computeUid("fd1000", mappings)); assertEquals( 49999, (int) LdapSync.computeUid("fd9999", mappings)); assertEquals( 10141000, (int) LdapSync.computeUid("fdaa1000", mappings)); assertEquals(262641000, (int) LdapSync.computeUid("fdzz1000", mappings)); assertEquals( 10041000, (int) LdapSync.computeUid("fda1000", mappings)); assertEquals(260041000, (int) LdapSync.computeUid("fdz1000", mappings)); assertEquals( 10149999, (int) LdapSync.computeUid("fdaa9999", mappings)); assertEquals(262649999, (int) LdapSync.computeUid("fdzz9999", mappings)); assertEquals(300000000, (int) LdapSync.computeUid("fdg00000", mappings)); assertEquals(300099999, (int) LdapSync.computeUid("fdg99999", mappings)); assertEquals(230049123, (int) LdapSync.computeUid("fdw9123", mappings)); mappings = LdapSync.parseUserDefinedMappings("aaabbb"); assertEquals(0, mappings.size()); mappings = LdapSync.parseUserDefinedMappings("aaa:123"); assertEquals(1, mappings.size()); mappings = LdapSync.parseUserDefinedMappings("aaa::123"); assertEquals(0, mappings.size()); mappings = LdapSync.parseUserDefinedMappings("aaa:123,,bbb:456"); assertEquals(2, mappings.size()); mappings = LdapSync.parseUserDefinedMappings("aaa:123, bbb:ccc"); assertEquals(1, mappings.size()); } private SearchResultEntry searchResultEntry(final String dn, final String cn, final String sn, final String givenname) { final Attribute[] attributes = { new Attribute("cn", cn), new Attribute("uid", cn), new Attribute("sn", sn), new Attribute("givenname", givenname), new Attribute("objectClass", "inetOrgPerson"), new Attribute("objectClass", "top"), }; return new SearchResultEntry(dn, attributes); } }