/** * 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; import com.google.common.collect.ImmutableList; import org.junit.Before; import org.junit.Test; import org.seedstack.seed.security.Realm; import org.seedstack.seed.security.RoleMapping; import org.seedstack.seed.security.RolePermissionResolver; import org.seedstack.seed.security.SecurityConfig; import org.seedstack.seed.security.internal.authorization.EmptyRolePermissionResolver; import org.seedstack.seed.security.internal.authorization.SameRoleMapping; import org.seedstack.seed.security.internal.realms.ConfigurationRealm; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Map; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; public class SecurityConfigurerUnitTest { SecurityConfigurer underTest; SecurityConfig configuration; Map<Class<?>, Collection<Class<?>>> securityClasses; @Before public void before() { configuration = mock(SecurityConfig.class); securityClasses = new HashMap<>(); Collection<Class<?>> classes = new ArrayList<>(); classes.add(Realm.class); securityClasses.put(Realm.class, classes); } @Test(expected = IllegalArgumentException.class) public void constructor_should_throw_IllegalArgumentException_if_no_realm_class_provided() { securityClasses = new HashMap<>(); underTest = new SecurityConfigurer(configuration, securityClasses, null); } @Test public void getConfigurationRealms_should_use_default_realm_if_no_realm_defined_in_configuration() { underTest = new SecurityConfigurer(configuration, securityClasses, null); Collection<RealmConfiguration> realms = underTest.getConfigurationRealms(); assertEquals(1, realms.size()); assertEquals(ConfigurationRealm.class, realms.iterator().next().getRealmClass()); assertEquals("ConfigurationRealm", realms.iterator().next().getName()); } @Test(expected = IllegalArgumentException.class) public void getConfigurationRealms_should_throw_IllegalArgumentException_if_no_realm_class_correspond_to_configuration() { when(configuration.getRealms()).thenReturn(ImmutableList.of(new SecurityConfig.RealmConfig().setName("toto"))); underTest = new SecurityConfigurer(configuration, securityClasses, null); underTest.getConfigurationRealms(); } @Test public void getConfigurationRealms_should_return_a_configurationRealm() { when(configuration.getRealms()).thenReturn(ImmutableList.of(new SecurityConfig.RealmConfig().setName("Realm"))); underTest = new SecurityConfigurer(configuration, securityClasses, null); underTest.getConfigurationRealms().iterator().next(); RealmConfiguration realm = underTest.getConfigurationRealms().iterator().next(); assertEquals(Realm.class, realm.getRealmClass()); assertEquals("Realm", realm.getName()); assertEquals(SameRoleMapping.class, realm.getRoleMappingClass()); assertEquals(EmptyRolePermissionResolver.class, realm.getRolePermissionResolverClass()); } @Test(expected = IllegalArgumentException.class) public void getConfigurationRealms_should_throw_IllegalArgumentException_if_no_class_for_component_given() { when(configuration.getRealms()).thenReturn(ImmutableList.of(new SecurityConfig.RealmConfig().setName("Realm").setRoleMapper("RoleMapping"))); underTest = new SecurityConfigurer(configuration, securityClasses, null); RealmConfiguration realm = underTest.getConfigurationRealms().iterator().next(); assertEquals(RoleMapping.class, realm.getRoleMappingClass()); } @Test(expected = IllegalArgumentException.class) public void getConfigurationRealms_should_throw_IllegalArgumentException_if_no_class_for_component_match_property() { Collection<Class<?>> roleMappingClasses = new ArrayList<>(); roleMappingClasses.add(RoleMapping.class); securityClasses.put(RoleMapping.class, roleMappingClasses); when(configuration.getRealms()).thenReturn(ImmutableList.of(new SecurityConfig.RealmConfig().setName("Realm").setRoleMapper("toto"))); underTest = new SecurityConfigurer(configuration, securityClasses, null); RealmConfiguration realm = underTest.getConfigurationRealms().iterator().next(); assertEquals(RoleMapping.class, realm.getRoleMappingClass()); } @Test public void getConfigurationRealms_should_return_a_configurationRealm_with_one_roleMaping() { Collection<Class<?>> roleMappingClasses = new ArrayList<>(); roleMappingClasses.add(RoleMapping.class); securityClasses.put(RoleMapping.class, roleMappingClasses); when(configuration.getRealms()).thenReturn(ImmutableList.of(new SecurityConfig.RealmConfig().setName("Realm").setRoleMapper("RoleMapping"))); underTest = new SecurityConfigurer(configuration, securityClasses, null); RealmConfiguration realm = underTest.getConfigurationRealms().iterator().next(); assertEquals(RoleMapping.class, realm.getRoleMappingClass()); } @Test public void getConfigurationRealms_should_return_a_configurationRealm_with_one_rolePermissionResolver() { Collection<Class<?>> rolePermissionResolverClasses = new ArrayList<>(); rolePermissionResolverClasses.add(RolePermissionResolver.class); securityClasses.put(RolePermissionResolver.class, rolePermissionResolverClasses); when(configuration.getRealms()).thenReturn(ImmutableList.of(new SecurityConfig.RealmConfig().setName("Realm").setPermissionResolver("RolePermissionResolver"))); underTest = new SecurityConfigurer(configuration, securityClasses, null); RealmConfiguration realm = underTest.getConfigurationRealms().iterator().next(); assertEquals(RolePermissionResolver.class, realm.getRolePermissionResolverClass()); } }