/**
* 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.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Key;
import com.google.inject.TypeLiteral;
import org.apache.shiro.realm.Realm;
import org.junit.Before;
import org.junit.Test;
import org.mockito.internal.util.reflection.Whitebox;
import org.seedstack.seed.security.SecurityConfig;
import org.seedstack.seed.security.internal.authorization.ConfigurationRoleMapping;
import org.seedstack.seed.security.internal.authorization.ConfigurationRolePermissionResolver;
import org.seedstack.seed.security.internal.realms.ConfigurationRealm;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Set;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class SecurityInternalModuleIntegrationTest {
SecurityInternalModule underTest;
SecurityConfigurer securityConfigurer;
SecurityGuiceConfigurer securityGuiceConfigurer;
@Before
public void before() {
securityConfigurer = mock(SecurityConfigurer.class);
securityGuiceConfigurer = mock(SecurityGuiceConfigurer.class);
underTest = new SecurityInternalModule(securityConfigurer, new HashMap<>());
}
@Test
public void configure_should_bind_wanted_components() {
SecurityConfig conf = new SecurityConfig();
conf.addUser("Obiwan", new SecurityConfig.UserConfig().setPassword("mdp").addRole("jedi"));
when(securityConfigurer.getSecurityConfiguration()).thenReturn(conf);
RealmConfiguration confRealm = new RealmConfiguration("ConfigurationRealm", ConfigurationRealm.class);
confRealm.setRoleMappingClass(ConfigurationRoleMapping.class);
confRealm.setRolePermissionResolverClass(ConfigurationRolePermissionResolver.class);
Collection<RealmConfiguration> confRealms = new ArrayList<>();
confRealms.add(confRealm);
when(securityConfigurer.getConfigurationRealms()).thenReturn(confRealms);
Injector injector = Guice.createInjector(underTest, new DefaultSecurityModule(securityGuiceConfigurer));
//Verify realm
Set<Realm> exposedRealms = injector.getInstance(Key.get(new TypeLiteral<Set<Realm>>() {}));
assertTrue(exposedRealms.size() > 0);
Realm exposedRealm = exposedRealms.iterator().next();
assertEquals(ShiroRealmAdapter.class, exposedRealm.getClass());
ConfigurationRealm innerRealm = (ConfigurationRealm) ((ShiroRealmAdapter) exposedRealm).getRealm();
Set<?> configurationUsers = (Set<?>) Whitebox.getInternalState(innerRealm, "users");
assertTrue(configurationUsers.size() > 0);
Object roleMapping = Whitebox.getInternalState(innerRealm, "roleMapping");
assertNotNull(roleMapping);
assertEquals(ConfigurationRoleMapping.class, roleMapping.getClass());
Object rolePermissionResolver = Whitebox.getInternalState(innerRealm, "rolePermissionResolver");
assertNotNull(rolePermissionResolver);
assertEquals(ConfigurationRolePermissionResolver.class, rolePermissionResolver.getClass());
}
}