You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

148 lines
7.0 KiB

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<Entry> addList;
private Set<String> delSet;
@Test
public void testSync() throws LDAPException, GeneralSecurityException, IOException {
final List<SearchResultEntry> 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=fdXx9999,dc=remote,dc=de", "fdxX9999", "Schmidt", "Schmidt"));
final AccountSource remote = new AccountSource("dc=remote,dc=de", remoteEntries);
final List<SearchResultEntry> 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<Entry> usersToBeAdded) {
addList = usersToBeAdded;
}
@Override
public void del(Set<String> usersToBeDeleted) {
delSet = usersToBeDeleted;
}
};
final LdapSync ldapSync = new LdapSync(remote, local);
assertEquals(delSet.size(), 2);
assertTrue(delSet.contains("fdai1237"));
assertTrue(delSet.contains("fdai1238"));
assertEquals(addList.size(), 4);
for (final Entry entry : addList) {
assertTrue(entry.getDN().endsWith(",dc=local,dc=de"));
final List<String> 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<String> 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"));
// test user defined mappings
Map<String, Integer> 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(10149999, (int) LdapSync.computeUid("fdaa9999", mappings));
assertEquals(262641000, (int) LdapSync.computeUid("fdzz1000", mappings));
assertEquals(262649999, (int) LdapSync.computeUid("fdzz9999", 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);
}
}