package alien4cloud.security;
import java.util.List;
import javax.annotation.Resource;
import javax.naming.NamingException;
import javax.naming.directory.Attributes;
import javax.naming.directory.BasicAttributes;
import org.junit.Assert;
import org.mockito.Mockito;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.ldap.core.LdapTemplate;
import alien4cloud.security.spring.ldap.LdapUserDao;
import alien4cloud.security.spring.ldap.UserLdapAttributeMapper;
import alien4cloud.security.model.User;
/**
* Parent class for the LDAP tests.
*
* @author luc boutier
*/
public class AbstractLdapTest {
@Value("${ldap.mapping.id}")
private String userIdKey;
@Value("${ldap.mapping.firstname}")
private String userFirstNameKey;
@Value("${ldap.mapping.lastname}")
private String userLastNameKey;
@Value("${ldap.mapping.email}")
private String userEmailKey;
@Value("${ldap.mapping.active.key}")
private String userActiveKey;
@Value("${ldap.mapping.active.value}")
private String userActiveValue;
@Resource
protected LdapTemplate ldapTemplate;
@Resource
protected UserLdapAttributeMapper attributeMapper;
@Resource
protected LdapUserDao ldapUserDao;
public void assertUserMapper(Attributes attrUser, User user) throws NamingException {
Assert.assertEquals(attrUser.get(userIdKey).get(), user.getUsername());
Assert.assertEquals(attrUser.get(userFirstNameKey).get(), user.getFirstName());
Assert.assertEquals(attrUser.get(userLastNameKey).get(), user.getLastName());
Assert.assertEquals(attrUser.get(userEmailKey).get(), user.getEmail());
Assert.assertEquals(attrUser.get(userActiveKey).get().equals(userActiveValue), user.isEnabled());
}
public List<User> createUserList(int userCount) throws NamingException {
List<User> userList = com.google.common.collect.Lists.newArrayList();
for (int i = 0; i < userCount; i++) {
Attributes attrUser = new BasicAttributes();
attrUser.put(userIdKey, "id_" + i);
attrUser.put(userFirstNameKey, "firstName_" + i);
attrUser.put(userLastNameKey, "lastName_" + i);
attrUser.put(userEmailKey, "lastName_" + i + "@test.com");
attrUser.put(userActiveKey, userActiveValue);
User user = attributeMapper.mapFromAttributes(attrUser);
assertUserMapper(attrUser, user);
userList.add(user);
}
return userList;
}
/**
* Prepare the LDAP template mock to return a list of users.
*
* @param userCount number of users to return.
* @return The list of users that the ldap template will return.
* @throws NamingException
*/
public List<User> prepareGetAllUserMock(int userCount) throws NamingException {
List<User> userList = createUserList(userCount);
String filter = "(&(objectClass=person)(objectClass=hordePerson)(!(objectClass=CalendarResource))(accountStatus=active))";
Mockito.when(ldapTemplate.search("", filter, attributeMapper)).thenReturn(userList);
return userList;
}
public String getUserIdKey() {
return userIdKey;
}
}