/*!
* 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-2016 Pentaho Corporation.. All rights reserved.
*/
package org.pentaho.test.platform.plugin.services.security.userrole.memory;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.Before;
import org.junit.Test;
import org.pentaho.platform.engine.security.DefaultRoleComparator;
import org.pentaho.platform.engine.security.DefaultUsernameComparator;
import org.pentaho.platform.plugin.services.security.userrole.memory.InMemoryUserRoleListService;
import org.pentaho.platform.plugin.services.security.userrole.memory.PentahoUserMap;
import org.pentaho.platform.plugin.services.security.userrole.memory.PentahoUserMapEditor;
import org.pentaho.platform.plugin.services.security.userrole.memory.UserRoleListEnhancedUserMap;
import org.pentaho.platform.plugin.services.security.userrole.memory.UserRoleListEnhancedUserMapEditor;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
import java.io.ByteArrayInputStream;
import java.util.Arrays;
import java.util.List;
import java.util.Properties;
import static org.junit.Assert.*;
@SuppressWarnings( "nls" )
public class InMemoryUserRoleListServiceTest {
private static final Log logger = LogFactory.getLog( InMemoryUserRoleListServiceTest.class );
InMemoryUserRoleListService dao;
public InMemoryUserRoleListServiceTest() {
super();
}
@Before
public void setUp() throws Exception {
dao = new InMemoryUserRoleListService();
dao.setUserRoleListEnhancedUserMap( makeUserRoleListEnhancedUserMap() );
dao.setAllRoles( makeAllAuthorities() );
Properties prop = new Properties();
prop.load( new ByteArrayInputStream( "scott=wombat,ROLE_THREE,ROLE_ONE,enabled\r\nmarissa=koala,ROLE_ONE,ROLE_TWO,enabled".getBytes() ) );
InMemoryUserDetailsManager wrapped = new InMemoryUserDetailsManager( prop );
//wrapped.setUserMap( makeUserMap() );
//wrapped.afterPropertiesSet();
dao.setUserDetailsService( wrapped );
dao.afterPropertiesSet();
}
protected List<String> makeAllAuthorities() {
return Arrays.asList( new String[] { "ROLE_ONE", "ROLE_TWO", "ROLE_THREE" } );
}
@Test
public void testGetAllUserNames() throws Exception {
List<String> allUserNames = dao.getAllUsers();
assertTrue( "User list should not be empty", allUserNames.size() > 0 ); //$NON-NLS-1$
for ( String username : allUserNames ) {
if ( logger.isDebugEnabled() ) {
logger.debug( "testGetAllUserNames(): User name: " + username ); //$NON-NLS-1$
}
assertTrue( "User name must be marissa or scott", ( username.equals( "marissa" ) || username.equals( "scott" ) ) ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
}
@Test
public void testGetAllUserNamesSorted() throws Exception {
dao.setUsernameComparator( new DefaultUsernameComparator() );
List<String> usernames = dao.getAllUsers();
if ( logger.isDebugEnabled() ) {
logger.debug( "testGetAllUserNamesSorted(): Usernames: " + usernames ); //$NON-NLS-1$
}
assertTrue( usernames.indexOf( "marissa" ) < usernames.indexOf( "scott" ) );
}
@Test
public void testGetAllAuthorities() throws Exception {
List<String> allAuthorities = dao.getAllRoles();
assertTrue( "Authority list should contain three roles", allAuthorities.size() == 3 ); //$NON-NLS-1$
for ( String role : allAuthorities ) {
if ( logger.isDebugEnabled() ) {
logger.debug( "testGetAllAuthorities(): Authority: " + role ); //$NON-NLS-1$
}
assertTrue( "Authority name must be ROLE_ONE, ROLE_TWO or ROLE_THREE", ( //$NON-NLS-1$
role.equals( "ROLE_ONE" ) //$NON-NLS-1$
|| role.equals( "ROLE_TWO" ) //$NON-NLS-1$
|| role.equals( "ROLE_THREE" ) //$NON-NLS-1$
) );
}
}
@Test
public void testGetAllAuthoritiesSorted() throws Exception {
dao.setRoleComparator( new DefaultRoleComparator() );
List<String> authorities = dao.getAllRoles();
if ( logger.isDebugEnabled() ) {
logger.debug( "testGetAllAuthoritiesSorted(): Authorities: " + authorities ); //$NON-NLS-1$
}
assertTrue( authorities.indexOf( "ROLE_THREE" ) < authorities.indexOf( "ROLE_TWO" ) );
}
@Test
public void testGetAllUserNamesInRole() throws Exception {
List<String> allUserNames = dao.getUsersInRole( null, "ROLE_ONE" ); //$NON-NLS-1$
assertTrue( "Two users should be in the role ROLE_ONE", allUserNames.size() == 2 ); //$NON-NLS-1$
for ( String username : allUserNames ) {
if ( logger.isDebugEnabled() ) {
logger.debug( "testGetAllUserNamesInRole(): User name: " + username ); //$NON-NLS-1$
}
assertTrue( "User name must be marissa or scott", ( username.equals( "marissa" ) || username.equals( "scott" ) ) ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
}
@Test
public void testGetAllUserNamesInRoleSorted() throws Exception {
dao.setUsernameComparator( new DefaultUsernameComparator() );
List<String> usernames = dao.getUsersInRole( null, "ROLE_ONE" );
if ( logger.isDebugEnabled() ) {
logger.debug( "testGetAllUserNamesInRoleSorted(): Usernames: " + usernames ); //$NON-NLS-1$
}
assertTrue( usernames.indexOf( "marissa" ) < usernames.indexOf( "scott" ) );
}
@Test
public void testGetRolesForUser() throws Exception {
List<String> userAuths = dao.getRolesForUser( null, "marissa" ); //$NON-NLS-1$
if ( logger.isDebugEnabled() ) {
logger.debug( "testGetRolesForUser(): Roles: " + userAuths ); //$NON-NLS-1$
}
assertNotNull( userAuths );
assertTrue( userAuths.size() == 2 );
assertEquals( userAuths.get( 0 ), "ROLE_ONE" ); //$NON-NLS-1$
assertEquals( userAuths.get( 1 ), "ROLE_TWO" ); //$NON-NLS-1$
}
@Test
public void testGetRolesForUserSorted() throws Exception {
dao.setRoleComparator( new DefaultRoleComparator() );
List<String> authorities = dao.getRolesForUser( null, "scott" ); //$NON-NLS-1$
if ( logger.isDebugEnabled() ) {
logger.debug( "testGetRolesForUser(): Roles: " + authorities ); //$NON-NLS-1$
}
assertTrue( authorities.indexOf( "ROLE_ONE" ) < authorities.indexOf( "ROLE_THREE" ) );
}
private UserRoleListEnhancedUserMap makeUserRoleListEnhancedUserMap() {
UserRoleListEnhancedUserMapEditor editor = new UserRoleListEnhancedUserMapEditor();
editor.setAsText( "marissa=koala,ROLE_ONE,ROLE_TWO,enabled\r\nscott=wombat,ROLE_ONE,ROLE_THREE,enabled" ); //$NON-NLS-1$
return (UserRoleListEnhancedUserMap) editor.getValue();
}
private PentahoUserMap makeUserMap() {
PentahoUserMapEditor editor = new PentahoUserMapEditor();
editor.setAsText( "scott=wombat,ROLE_THREE,ROLE_ONE,enabled\r\nmarissa=koala,ROLE_ONE,ROLE_TWO,enabled" ); //$NON-NLS-1$
return (PentahoUserMap) editor.getValue();
}
}