/*! * This program is free software; you can redistribute it and/or modify it under the * terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software * Foundation. * * You should have received a copy of the GNU Lesser General Public License along with this * program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html * or from the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU Lesser General Public License for more details. * * Copyright (c) 2002-2013 Pentaho Corporation.. All rights reserved. */ package org.pentaho.test.platform.security.userroledao; import org.apache.log4j.Logger; import org.junit.Test; import org.junit.runner.RunWith; import org.pentaho.platform.api.mt.ITenant; import org.pentaho.platform.repository2.unified.DefaultUnifiedRepositoryBase; import org.pentaho.platform.security.userroledao.service.UserRoleDaoUserDetailsService; import org.pentaho.platform.security.userroledao.service.UserRoleDaoUserRoleListService; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import static org.junit.Assert.*; /** * Unit test for {@link UserRoleDaoUserRoleListService}. * * @author mlowery */ @RunWith( SpringJUnit4ClassRunner.class ) @SuppressWarnings( "nls" ) public class UserRoleDaoUserRoleListServiceIT extends DefaultUnifiedRepositoryBase { public static final int DEFAULT_ROLE_COUNT = 4; public static final int DEFAULT_USER_COUNT = 1; // admin public static final String MAIN_TENANT_1 = "maintenant1"; public static final String MAIN_TENANT_2 = "maintenant2"; private Logger logger = Logger.getLogger( UserRoleDaoUserRoleListServiceIT.class ); private ITenant mainTenant_1; private ITenant mainTenant_2; public static final String PASSWORD_2 = "password2"; //$NON-NLS-1$ public static final String PASSWORD_3 = "password3"; //$NON-NLS-1$ public static final String PASSWORD_4 = "password4"; //$NON-NLS-1$ public static final String PASSWORD_5 = "password5"; //$NON-NLS-1$ public static final String PASSWORD_6 = "password6"; //$NON-NLS-1$ public static final String PASSWORD_7 = "password7"; //$NON-NLS-1$ public static final String PASSWORD_8 = "password8"; //$NON-NLS-1$ public static final String USER_2 = "jim"; //$NON-NLS-1$ public static final String USER_3 = "sally"; //$NON-NLS-1$ public static final String USER_4 = "suzy"; //$NON-NLS-1$ public static final String USER_5 = "nancy"; //$NON-NLS-1$ public static final String USER_6 = "john"; //$NON-NLS-1$ public static final String USER_7 = "jane"; //$NON-NLS-1$ public static final String USER_8 = "jerry"; //$NON-NLS-1$ public static final String ROLE_1 = "SalesMgr"; //$NON-NLS-1$ public static final String ROLE_2 = "IT"; //$NON-NLS-1$ public static final String ROLE_3 = "Sales"; //$NON-NLS-1$ public static final String ROLE_4 = "Developer"; //$NON-NLS-1$ public static final String ROLE_5 = "CEO"; //$NON-NLS-1$ public static final String ROLE_6 = "Finance"; //$NON-NLS-1$ public static final String ROLE_7 = "Marketing"; //$NON-NLS-1$ public static final String USER_DESCRIPTION_2 = "User Description 2"; //$NON-NLS-1$ public static final String USER_DESCRIPTION_3 = "User Description 3"; //$NON-NLS-1$ public static final String USER_DESCRIPTION_4 = "User Description 4"; //$NON-NLS-1$ public static final String USER_DESCRIPTION_5 = "User Description 5"; //$NON-NLS-1$ public static final String USER_DESCRIPTION_6 = "User Description 6"; //$NON-NLS-1$ public static final String USER_DESCRIPTION_7 = "User Description 7"; //$NON-NLS-1$ public static final String USER_DESCRIPTION_8 = "User Description 8"; //$NON-NLS-1$ public static final String ROLE_DESCRIPTION_1 = "Role Description 1"; //$NON-NLS-1$ public static final String ROLE_DESCRIPTION_2 = "Role Description 2"; //$NON-NLS-1$ public static final String ROLE_DESCRIPTION_3 = "Role Description 3"; //$NON-NLS-1$ public static final String ROLE_DESCRIPTION_4 = "Role Description 4"; //$NON-NLS-1$ public static final String ROLE_DESCRIPTION_5 = "Role Description 5"; //$NON-NLS-1$ public static final String ROLE_DESCRIPTION_6 = "Role Description 6"; //$NON-NLS-1$ public static final String ROLE_DESCRIPTION_7 = "Role Description 7"; //$NON-NLS-1$ @Test public void testGetAllAuthorities() { loginAsSysTenantAdmin(); mainTenant_1 = tenantManager.createTenant( systemTenant, MAIN_TENANT_1, tenantAdminRoleName, tenantAuthenticatedRoleName, ANONYMOUS_ROLE_NAME ); userRoleDao.createUser( mainTenant_1, USERNAME_ADMIN, PASSWORD, "", new String[]{ tenantAdminRoleName } ); mainTenant_2 = tenantManager.createTenant( systemTenant, MAIN_TENANT_2, tenantAdminRoleName, tenantAuthenticatedRoleName, ANONYMOUS_ROLE_NAME ); userRoleDao.createUser( mainTenant_2, USERNAME_ADMIN, PASSWORD, "", new String[]{ tenantAdminRoleName } ); login( USERNAME_ADMIN, mainTenant_1, new String[]{ tenantAdminRoleName, tenantAuthenticatedRoleName } ); userRoleDao.createRole( mainTenant_1, ROLE_1, ROLE_DESCRIPTION_1, null ); userRoleDao.createRole( mainTenant_1, ROLE_2, ROLE_DESCRIPTION_2, null ); userRoleDao.createRole( mainTenant_1, ROLE_3, ROLE_DESCRIPTION_3, null ); logout(); login( USERNAME_ADMIN, mainTenant_2, new String[]{ tenantAdminRoleName, tenantAuthenticatedRoleName } ); userRoleDao.createRole( mainTenant_2, ROLE_4, ROLE_DESCRIPTION_4, null ); userRoleDao.createRole( mainTenant_2, ROLE_5, ROLE_DESCRIPTION_5, null ); userRoleDao.createRole( mainTenant_2, ROLE_6, ROLE_DESCRIPTION_6, null ); userRoleDao.createRole( mainTenant_2, ROLE_7, ROLE_DESCRIPTION_7, null ); List<String> systemRoles = Arrays.asList( USERNAME_ADMIN ); List<String> extraRoles = Arrays.asList( AUTHENTICATED_ROLE_NAME, ANONYMOUS_ROLE_NAME ); String adminRole = USERNAME_ADMIN; UserRoleDaoUserDetailsService userDetailsService = new UserRoleDaoUserDetailsService(); UserRoleDaoUserRoleListService service = new UserRoleDaoUserRoleListService( userRoleDao, userDetailsService, userNameUtils, systemRoles, extraRoles, adminRole ); userDetailsService.setUserRoleDao( userRoleDao ); logout(); login( USERNAME_ADMIN, mainTenant_1, new String[]{ tenantAdminRoleName, tenantAuthenticatedRoleName } ); List<String> allRolesForDefaultTenant = service.getAllRoles(); List<String> allRolesForTenant = service.getAllRoles( mainTenant_2 ); logger.info( "allRolesForDefaultTenant.size() ==" + allRolesForDefaultTenant.size() ); logger.info( "allRolesForTenant.size() ==" + allRolesForTenant.size() ); assertTrue( allRolesForDefaultTenant.size() == 2 + DEFAULT_ROLE_COUNT ); assertEquals( 3 + DEFAULT_ROLE_COUNT, allRolesForTenant.size() ); logout(); login( USERNAME_ADMIN, mainTenant_2, new String[]{ tenantAdminRoleName, tenantAuthenticatedRoleName } ); allRolesForDefaultTenant = service.getAllRoles(); allRolesForTenant = service.getAllRoles( mainTenant_1 ); assertTrue( allRolesForDefaultTenant.size() == 3 + DEFAULT_ROLE_COUNT ); assertEquals( 2 + DEFAULT_ROLE_COUNT, allRolesForTenant.size() ); allRolesForTenant = service.getAllRoles( mainTenant_2 ); assertEquals( 3 + DEFAULT_ROLE_COUNT, allRolesForTenant.size() ); allRolesForTenant = service.getAllRoles( mainTenant_1 ); assertEquals( 2 + DEFAULT_ROLE_COUNT, allRolesForTenant.size() ); logout(); login( USERNAME_ADMIN, mainTenant_1, new String[]{ tenantAdminRoleName, tenantAuthenticatedRoleName } ); allRolesForTenant = service.getAllRoles( mainTenant_1 ); assertEquals( 2 + DEFAULT_ROLE_COUNT, allRolesForTenant.size() ); allRolesForTenant = service.getAllRoles( mainTenant_2 ); assertEquals( 3 + DEFAULT_ROLE_COUNT, allRolesForTenant.size() ); cleanupUserAndRoles( mainTenant_1 ); cleanupUserAndRoles( mainTenant_2 ); } @Test public void testGetAllUsernames() { loginAsSysTenantAdmin(); mainTenant_1 = tenantManager.createTenant( systemTenant, MAIN_TENANT_1, tenantAdminRoleName, tenantAuthenticatedRoleName, ANONYMOUS_ROLE_NAME ); userRoleDao.createUser( mainTenant_1, USERNAME_ADMIN, PASSWORD, "", new String[]{ tenantAdminRoleName } ); mainTenant_2 = tenantManager.createTenant( systemTenant, MAIN_TENANT_2, tenantAdminRoleName, tenantAuthenticatedRoleName, ANONYMOUS_ROLE_NAME ); userRoleDao.createUser( mainTenant_2, USERNAME_ADMIN, PASSWORD, "", new String[]{ tenantAdminRoleName } ); login( USERNAME_ADMIN, mainTenant_1, new String[]{ tenantAdminRoleName, tenantAuthenticatedRoleName } ); userRoleDao.createUser( mainTenant_1, USER_2, PASSWORD_2, USER_DESCRIPTION_2, null ); userRoleDao.createUser( mainTenant_1, USER_3, PASSWORD_3, USER_DESCRIPTION_3, null ); userRoleDao.createUser( null, userNameUtils.getPrincipleId( mainTenant_1, USER_4 ), PASSWORD_4, USER_DESCRIPTION_4, null ); userRoleDao.createUser( null, USER_5, PASSWORD_5, USER_DESCRIPTION_5, null ); userRoleDao.createUser( null, userNameUtils.getPrincipleId( mainTenant_1, USER_6 ), PASSWORD_6, USER_DESCRIPTION_6, null ); logout(); login( USERNAME_ADMIN, mainTenant_2, new String[]{ tenantAdminRoleName, tenantAuthenticatedRoleName } ); userRoleDao.createUser( mainTenant_2, USER_7, PASSWORD_7, USER_DESCRIPTION_7, null ); userRoleDao.createUser( null, USER_8, PASSWORD_8, USER_DESCRIPTION_8, null ); UserRoleDaoUserDetailsService userDetailsService = new UserRoleDaoUserDetailsService(); userDetailsService.setUserRoleDao( userRoleDao ); List<String> systemRoles = Arrays.asList( USERNAME_ADMIN ); List<String> extraRoles = Arrays.asList( AUTHENTICATED_ROLE_NAME, ANONYMOUS_ROLE_NAME ); String adminRole = USERNAME_ADMIN; UserRoleDaoUserRoleListService service = new UserRoleDaoUserRoleListService( userRoleDao, userDetailsService, userNameUtils, systemRoles, extraRoles, adminRole ); service.setUserRoleDao( userRoleDao ); service.setUserDetailsService( userDetailsService ); logout(); login( USERNAME_ADMIN, mainTenant_1, new String[]{ tenantAdminRoleName, tenantAuthenticatedRoleName } ); List<String> allUserForDefaultTenant = service.getAllUsers(); List<String> allUserForTenant = service.getAllUsers( mainTenant_2 ); assertEquals( 5 + DEFAULT_USER_COUNT, allUserForDefaultTenant.size() ); assertEquals( 2 + DEFAULT_USER_COUNT, allUserForTenant.size() ); logout(); login( USERNAME_ADMIN, mainTenant_2, new String[]{ tenantAdminRoleName, tenantAuthenticatedRoleName } ); allUserForDefaultTenant = service.getAllUsers(); allUserForTenant = service.getAllUsers( mainTenant_1 ); assertTrue( allUserForDefaultTenant.size() == 2 + DEFAULT_USER_COUNT ); assertEquals( 5 + DEFAULT_USER_COUNT, allUserForTenant.size() ); allUserForTenant = service.getAllUsers( mainTenant_1 ); assertEquals( 5 + DEFAULT_USER_COUNT, allUserForTenant.size() ); allUserForTenant = service.getAllUsers( mainTenant_2 ); assertEquals( 2 + DEFAULT_USER_COUNT, allUserForTenant.size() ); logout(); login( USERNAME_ADMIN, mainTenant_1, new String[]{ tenantAdminRoleName, tenantAuthenticatedRoleName } ); allUserForTenant = service.getAllUsers( mainTenant_1 ); assertEquals( 5 + DEFAULT_USER_COUNT, allUserForTenant.size() ); allUserForTenant = service.getAllUsers( mainTenant_2 ); assertEquals( 2 + DEFAULT_USER_COUNT, allUserForTenant.size() ); cleanupUserAndRoles( mainTenant_1 ); cleanupUserAndRoles( mainTenant_2 ); } @Test public void testGetAuthoritiesForUser() { loginAsSysTenantAdmin(); mainTenant_1 = tenantManager.createTenant( systemTenant, MAIN_TENANT_1, tenantAdminRoleName, tenantAuthenticatedRoleName, ANONYMOUS_ROLE_NAME ); userRoleDao.createUser( mainTenant_1, USERNAME_ADMIN, PASSWORD, "", new String[]{ tenantAdminRoleName } ); mainTenant_2 = tenantManager.createTenant( systemTenant, MAIN_TENANT_2, tenantAdminRoleName, tenantAuthenticatedRoleName, ANONYMOUS_ROLE_NAME ); userRoleDao.createUser( mainTenant_2, USERNAME_ADMIN, PASSWORD, "", new String[]{ tenantAdminRoleName } ); login( USERNAME_ADMIN, mainTenant_1, new String[]{ tenantAdminRoleName, tenantAuthenticatedRoleName } ); userRoleDao.createUser( mainTenant_1, USER_2, PASSWORD_2, USER_DESCRIPTION_2, null ); userRoleDao.createUser( null, userNameUtils.getPrincipleId( mainTenant_1, USER_3 ), PASSWORD_3, USER_DESCRIPTION_3, null ); userRoleDao.createUser( null, USER_4, PASSWORD_4, USER_DESCRIPTION_4, null ); logout(); login( USERNAME_ADMIN, mainTenant_2, new String[]{ tenantAdminRoleName, tenantAuthenticatedRoleName } ); userRoleDao.createUser( mainTenant_2, USER_5, PASSWORD_5, USER_DESCRIPTION_5, null ); userRoleDao.createUser( null, userNameUtils.getPrincipleId( mainTenant_2, USER_6 ), PASSWORD_6, USER_DESCRIPTION_6, null ); logout(); login( USERNAME_ADMIN, mainTenant_1, new String[]{ tenantAdminRoleName, tenantAuthenticatedRoleName } ); userRoleDao.createRole( mainTenant_1, ROLE_1, ROLE_DESCRIPTION_1, null ); userRoleDao.createRole( null, roleNameUtils.getPrincipleId( mainTenant_1, ROLE_2 ), ROLE_DESCRIPTION_2, null ); userRoleDao.createRole( null, ROLE_3, ROLE_DESCRIPTION_3, null ); logout(); login( USERNAME_ADMIN, mainTenant_2, new String[]{ tenantAdminRoleName, tenantAuthenticatedRoleName } ); userRoleDao.createRole( mainTenant_2, ROLE_4, ROLE_DESCRIPTION_4, null ); userRoleDao.setUserRoles( null, USER_5, new String[]{ ROLE_4 } ); userRoleDao.setUserRoles( null, userNameUtils.getPrincipleId( mainTenant_2, USER_6 ), new String[]{ ROLE_4 } ); logout(); login( USERNAME_ADMIN, mainTenant_1, new String[]{ tenantAdminRoleName, tenantAuthenticatedRoleName } ); userRoleDao.setUserRoles( mainTenant_1, USER_2, new String[]{ ROLE_1, ROLE_2, ROLE_3 } ); List<String> systemRoles = Arrays.asList( USERNAME_ADMIN ); try { userRoleDao.setUserRoles( mainTenant_1, USER_3, new String[]{ ROLE_2, ROLE_3, ROLE_4 } ); } catch ( Throwable th ) { assertNotNull( th ); } try { userRoleDao.setUserRoles( mainTenant_1, USER_4, new String[]{ ROLE_2, ROLE_4 } ); fail( "Exception should be thrown" ); } catch ( Throwable th ) { assertNotNull( th ); } UserRoleDaoUserDetailsService userDetailsService = new UserRoleDaoUserDetailsService(); userDetailsService.setUserRoleDao( userRoleDao ); userDetailsService.setDefaultRole( tenantAuthenticatedRoleName ); List<String> extraRoles = Arrays.asList( AUTHENTICATED_ROLE_NAME, ANONYMOUS_ROLE_NAME ); String adminRole = USERNAME_ADMIN; UserRoleDaoUserRoleListService service = new UserRoleDaoUserRoleListService( userRoleDao, userDetailsService, userNameUtils, systemRoles, extraRoles, adminRole ); service.setUserDetailsService( userDetailsService ); logout(); login( USERNAME_ADMIN, mainTenant_1, new String[]{ tenantAdminRoleName, tenantAuthenticatedRoleName } ); List<String> rolesForUser_2 = service.getRolesForUser( mainTenant_1, USER_2 ); List<String> rolesForUser_2_1 = service.getRolesForUser( null, USER_2 ); List<String> rolesForUser_2_1_1 = service.getRolesForUser( null, userNameUtils.getPrincipleId( mainTenant_1, USER_2 ) ); List<String> rolesForUser_3 = service.getRolesForUser( mainTenant_1, USER_3 ); List<String> rolesForUser_4 = service.getRolesForUser( mainTenant_1, USER_4 ); assertTrue( rolesForUser_2.size() == 4 ); assertTrue( rolesForUser_2_1.size() == 4 ); assertTrue( rolesForUser_2_1_1.size() == 4 ); assertTrue( rolesForUser_3.size() == 3 ); assertTrue( rolesForUser_4.size() == 2 ); cleanupUserAndRoles( mainTenant_1 ); cleanupUserAndRoles( mainTenant_2 ); } @Test public void testGetUsernamesInRole() { loginAsSysTenantAdmin(); mainTenant_1 = tenantManager.createTenant( systemTenant, MAIN_TENANT_1, tenantAdminRoleName, tenantAuthenticatedRoleName, ANONYMOUS_ROLE_NAME ); userRoleDao.createUser( mainTenant_1, USERNAME_ADMIN, PASSWORD, "", new String[]{ tenantAdminRoleName } ); mainTenant_2 = tenantManager.createTenant( systemTenant, MAIN_TENANT_2, tenantAdminRoleName, tenantAuthenticatedRoleName, ANONYMOUS_ROLE_NAME ); userRoleDao.createUser( mainTenant_2, USERNAME_ADMIN, PASSWORD, "", new String[]{ tenantAdminRoleName } ); login( USERNAME_ADMIN, mainTenant_1, new String[]{ tenantAdminRoleName, tenantAuthenticatedRoleName } ); userRoleDao.createUser( mainTenant_1, USER_2, PASSWORD_2, USER_DESCRIPTION_2, null ); userRoleDao.createUser( null, USER_3, PASSWORD_3, USER_DESCRIPTION_3, null ); userRoleDao.createUser( null, userNameUtils.getPrincipleId( mainTenant_1, USER_4 ), PASSWORD_4, USER_DESCRIPTION_4, null ); userRoleDao.createUser( mainTenant_1, USER_5, PASSWORD_5, USER_DESCRIPTION_5, null ); userRoleDao.createUser( mainTenant_1, USER_6, PASSWORD_6, USER_DESCRIPTION_6, null ); logout(); login( USERNAME_ADMIN, mainTenant_2, new String[]{ tenantAdminRoleName, tenantAuthenticatedRoleName } ); userRoleDao.createUser( mainTenant_2, USER_7, PASSWORD_7, USER_DESCRIPTION_7, null ); userRoleDao.createUser( mainTenant_2, USER_8, PASSWORD_8, USER_DESCRIPTION_8, null ); logout(); login( USERNAME_ADMIN, mainTenant_1, new String[]{ tenantAdminRoleName, tenantAuthenticatedRoleName } ); userRoleDao.createRole( mainTenant_1, ROLE_1, ROLE_DESCRIPTION_1, null ); userRoleDao.createRole( null, ROLE_2, ROLE_DESCRIPTION_2, null ); userRoleDao.createRole( null, roleNameUtils.getPrincipleId( mainTenant_1, ROLE_3 ), ROLE_DESCRIPTION_3, null ); logout(); login( USERNAME_ADMIN, mainTenant_2, new String[]{ tenantAdminRoleName, tenantAuthenticatedRoleName } ); userRoleDao.createRole( mainTenant_2, ROLE_4, ROLE_DESCRIPTION_4, null ); logout(); login( USERNAME_ADMIN, mainTenant_1, new String[]{ tenantAdminRoleName, tenantAuthenticatedRoleName } ); userRoleDao.setRoleMembers( null, ROLE_1, new String[]{ USER_2, USER_3, USER_4 } ); userRoleDao.setRoleMembers( mainTenant_1, ROLE_2, new String[]{ USER_5, USER_6, USER_7 } ); userRoleDao.setRoleMembers( null, roleNameUtils.getPrincipleId( mainTenant_1, ROLE_3 ), new String[]{ USER_2, USER_4, USER_6 } ); logout(); login( USERNAME_ADMIN, mainTenant_2, new String[]{ tenantAdminRoleName, tenantAuthenticatedRoleName } ); userRoleDao.setRoleMembers( null, ROLE_4, new String[]{ USER_3, USER_5, USER_7 } ); logout(); login( USERNAME_ADMIN, mainTenant_1, new String[]{ tenantAdminRoleName, tenantAuthenticatedRoleName } ); UserRoleDaoUserDetailsService userDetailsService = new UserRoleDaoUserDetailsService(); userDetailsService.setUserRoleDao( userRoleDao ); userDetailsService.setDefaultRole( tenantAuthenticatedRoleName ); List<String> systemRoles = new ArrayList<String>(); systemRoles.add( USERNAME_ADMIN ); List<String> extraRoles = Arrays.asList( AUTHENTICATED_ROLE_NAME, ANONYMOUS_ROLE_NAME ); String adminRole = USERNAME_ADMIN; UserRoleDaoUserRoleListService service = new UserRoleDaoUserRoleListService( userRoleDao, userDetailsService, userNameUtils, systemRoles, extraRoles, adminRole ); List<String> usersInRole_1 = service.getUsersInRole( mainTenant_1, ROLE_1 ); List<String> usersInRole_2 = service.getUsersInRole( null, ROLE_2 ); List<String> usersInRole_3 = service.getUsersInRole( null, roleNameUtils.getPrincipleId( mainTenant_1, ROLE_3 ) ); logout(); login( USERNAME_ADMIN, mainTenant_2, new String[]{ tenantAdminRoleName, tenantAuthenticatedRoleName } ); List<String> usersInRole_4 = service.getUsersInRole( mainTenant_2, ROLE_4 ); assertTrue( usersInRole_1.size() == 3 ); assertTrue( usersInRole_2.size() == 2 ); assertTrue( usersInRole_3.size() == 3 ); assertTrue( usersInRole_4.size() == 1 ); logout(); cleanupUserAndRoles( mainTenant_1 ); cleanupUserAndRoles( mainTenant_2 ); } }