/** * Copyright (c) 2013-2016, The SeedStack authors <http://seedstack.org> * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ package org.seedstack.seed.security.internal.realms; import org.junit.Before; import org.junit.Test; import org.mockito.internal.util.reflection.Whitebox; import org.seedstack.seed.security.AuthenticationInfo; import org.seedstack.seed.security.AuthenticationToken; import org.seedstack.seed.security.IncorrectCredentialsException; import org.seedstack.seed.security.SecurityConfig; import org.seedstack.seed.security.UnknownAccountException; import org.seedstack.seed.security.UnsupportedTokenException; import org.seedstack.seed.security.UsernamePasswordToken; import org.seedstack.seed.security.internal.realms.ConfigurationRealm.ConfigurationUser; import org.seedstack.seed.security.principals.PrincipalProvider; import org.seedstack.seed.security.principals.Principals; import java.util.Collections; import java.util.Set; import static org.assertj.core.api.Assertions.assertThat; public class ConfigurationRealmUnitTest { private ConfigurationRealm underTest; private Set<ConfigurationUser> users; String username = "username"; String password = "password"; String role1 = "role1"; String role2 = "role2"; @Before @SuppressWarnings("unchecked") public void before() { underTest = new ConfigurationRealm(); users = (Set<ConfigurationUser>) Whitebox.getInternalState(underTest, "users"); ConfigurationUser user = new ConfigurationUser(username); Whitebox.setInternalState(user, "password", password); user.getRoles().add(role1); user.getRoles().add(role2); users.add(user); users.add(new ConfigurationUser("toto")); } @Test public void getRealmRoles_nominal() { PrincipalProvider<String> identity = Principals.identityPrincipal(username); Set<String> foundRoles = underTest.getRealmRoles(identity, Collections.emptyList()); assertThat(foundRoles).hasSize(2); assertThat(foundRoles).contains(role1); assertThat(foundRoles).contains(role2); } @Test public void getRealmRoles_returns_empty_if_user_unknown() { String username = "titi"; PrincipalProvider<String> identity = Principals.identityPrincipal(username); Set<String> foundRoles = underTest.getRealmRoles(identity, Collections.emptyList()); assertThat(foundRoles).isEmpty(); } @Test public void getAuthenticationInfo_nominal() { UsernamePasswordToken token = new UsernamePasswordToken(username, password); AuthenticationInfo authInfo = underTest.getAuthenticationInfo(token); assertThat(authInfo.getIdentityPrincipal().getPrincipal()).isEqualTo("username"); } @Test(expected = IncorrectCredentialsException.class) public void getAuthenticationInfo_throws_exception_if_incorrect_password() { UsernamePasswordToken token = new UsernamePasswordToken(username, ""); underTest.getAuthenticationInfo(token); } @Test(expected = UnknownAccountException.class) public void getAuthenticationInfo_throws_exception_if_null_user() { UsernamePasswordToken token = new UsernamePasswordToken(null, password); underTest.getAuthenticationInfo(token); } @Test(expected = UnsupportedTokenException.class) public void getAuthenticationInfo_throws_exception_if_token_not_compliant() { AuthenticationToken token = new AuthenticationToken() { @Override public Object getPrincipal() { return null; } @Override public Object getCredentials() { return null; } }; underTest.getAuthenticationInfo(token); } @Test public void readConfiguration_empty_props() { underTest.readConfiguration(new SecurityConfig()); } @Test public void readConfiguration_with_users() { SecurityConfig securityConfig = new SecurityConfig() .addUser("Obiwan", new SecurityConfig.UserConfig().setPassword("yodarulez").addRole("SEED.JEDI")) .addUser("Anakin", new SecurityConfig.UserConfig().setPassword("imsodark")); underTest.readConfiguration(securityConfig); assertThat(users).hasSize(2); assertThat(users).containsOnly(new ConfigurationUser("Obiwan"), new ConfigurationUser("Anakin")); } }