package alien4cloud.security;
import static org.junit.Assert.*;
import java.util.Arrays;
import javax.annotation.Resource;
import alien4cloud.security.model.User;
import alien4cloud.security.users.UserService;
import alien4cloud.security.users.rest.CreateUserRequest;
import alien4cloud.security.users.InMemoryUserDao;
import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.MethodSorters;
import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import alien4cloud.security.spring.Alien4CloudAuthenticationProvider;
/**
* @author luc boutier
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:spring-security-test.xml")
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class SecurityTest {
@Resource
private Alien4CloudAuthenticationProvider alienAuthenticationProvider;
@Resource
private UserService userService;
@Resource
private InMemoryUserDao userDao;
@Test
public void testSuccessLoginUserRoleFromDelegate() {
testLoginSuccess("user", "user", new String[] { "ROLE_USER" });
}
@Test
public void testSuccessLoginAdminRoleFromDelegate() {
testLoginSuccess("admin", "admin", new String[] { "ROLE_USER", "ROLE_ADMIN" });
}
@Test(expected = BadCredentialsException.class)
public void testBadCredentialsFromDelegate() {
alienAuthenticationProvider.authenticate(new UsernamePasswordAuthenticationToken("admin", "wrongpass"));
}
@Test
public void testCreateUserAndAuthenticate() {
CreateUserRequest request = new CreateUserRequest();
request.setUsername("guy");
request.setPassword("password");
userService.createUser(request.getUsername(), request.getEmail(), request.getFirstName(), request.getLastName(), request.getRoles(),
request.getPassword());
}
public void testLoginSuccess(String userName, String password, String[] expectedAuthorities) {
assertNull(userDao.find(userName));
Authentication authentication = alienAuthenticationProvider.authenticate(new UsernamePasswordAuthenticationToken(userName, password));
assertTrue(authentication.isAuthenticated());
String[] authorities = new String[authentication.getAuthorities().size()];
int i = 0;
for (GrantedAuthority authority : authentication.getAuthorities()) {
authorities[i] = authority.getAuthority();
i++;
}
Arrays.sort(expectedAuthorities);
Arrays.sort(authorities);
assertArrayEquals(expectedAuthorities, authorities);
User user = userDao.find(userName);
assertNotNull(user);
assertEquals(userName, user.getUsername());
assertNull(user.getPassword());
assertArrayEquals(expectedAuthorities, user.getRoles());
assertFalse(user.isInternalDirectory());
}
}