package org.cloudfoundry.identity.uaa.provider.ldap;
import org.cloudfoundry.identity.uaa.provider.ldap.extension.ExtendedLdapUserImpl;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.springframework.ldap.core.DirContextAdapter;
import org.springframework.ldap.core.NameAwareAttributes;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import javax.naming.directory.Attributes;
import javax.naming.ldap.LdapName;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import static org.cloudfoundry.identity.uaa.provider.ldap.ExtendedLdapUserMapper.SUBSTITUTE_MAIL_ATTR_NAME;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
public class ExtendedLdapUserMapperTest {
private Attributes attrs;
private DirContextAdapter adapter;
private ExtendedLdapUserMapper mapper;
private Collection<GrantedAuthority> authorities;
private String UAA_MANAGER;
@Before
public void setUp() throws Exception {
attrs = new NameAwareAttributes();
authorities = Collections.<GrantedAuthority>emptyList();
mapper = new ExtendedLdapUserMapper();
}
@Test
public void testConfigureMailAttribute() throws Exception {
ExtendedLdapUserMapper mapper = new ExtendedLdapUserMapper();
mapper.setMailAttributeName("mail");
mapper.setMailSubstitute("{0}@substitute.org");
mapper.setMailSubstituteOverridesLdap(true);
Map<String, String[]> records = new HashMap<>();
String result = mapper.configureMailAttribute("marissa", records);
assertEquals(SUBSTITUTE_MAIL_ATTR_NAME, result);
assertEquals("marissa@substitute.org", records.get(SUBSTITUTE_MAIL_ATTR_NAME)[0]);
mapper.setMailSubstituteOverridesLdap(false);
result = mapper.configureMailAttribute("marissa", records);
assertEquals(SUBSTITUTE_MAIL_ATTR_NAME, result);
records.put("mail", new String[] {"marissa@test.org"});
result = mapper.configureMailAttribute("marissa", records);
assertEquals("mail", result);
}
@Test
public void testGivenNameAttributeNameMapping() throws Exception {
attrs.put("givenName", "Marissa");
adapter = new DirContextAdapter(attrs, new LdapName("cn=marissa,ou=Users,dc=test,dc=com"));
mapper.setGivenNameAttributeName("givenName");
ExtendedLdapUserImpl ldapUserDetails = getExtendedLdapUser();
Assert.assertThat(ldapUserDetails.getGivenName(), is("Marissa"));
}
@Test
public void testFamilyNameAttributeNameMapping() throws Exception {
attrs.put("lastName", "Lastnamerton");
adapter = new DirContextAdapter(attrs, new LdapName("cn=marissa,ou=Users,dc=test,dc=com"));
mapper.setFamilyNameAttributeName("lastName");
ExtendedLdapUserImpl ldapUserDetails = getExtendedLdapUser();
Assert.assertThat(ldapUserDetails.getFamilyName(), is("Lastnamerton"));
}
@Test
public void testPhoneNumberAttributeNameMapping() throws Exception {
attrs.put("phoneNumber", "8675309");
adapter = new DirContextAdapter(attrs, new LdapName("cn=marissa,ou=Users,dc=test,dc=com"));
mapper.setPhoneNumberAttributeName("phoneNumber");
ExtendedLdapUserImpl ldapUserDetails = getExtendedLdapUser();
Assert.assertThat(ldapUserDetails.getPhoneNumber(), is("8675309"));
}
private ExtendedLdapUserImpl getExtendedLdapUser() {
UserDetails userDetails = mapper.mapUserFromContext(adapter, "marissa", authorities);
assertThat(userDetails instanceof ExtendedLdapUserImpl, is(true));
return (ExtendedLdapUserImpl)userDetails;
}
}