blob: b2de0c329cffed0775234079c9cb613bce16f638 [file] [log] [blame]
package org.apache.archiva.redback.rest.services;
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import org.apache.archiva.redback.rest.api.model.ApplicationRoles;
import org.apache.archiva.redback.rest.api.model.Role;
import org.apache.archiva.redback.rest.api.model.User;
import org.apache.archiva.redback.rest.api.services.RoleManagementService;
import org.apache.archiva.redback.rest.api.services.UserService;
import org.apache.commons.lang3.StringUtils;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import javax.ws.rs.ForbiddenException;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
/**
* @author Olivier Lamy
*/
@RunWith( SpringJUnit4ClassRunner.class )
@ContextConfiguration(
locations = { "classpath:/spring-context.xml" } )
public class RoleManagementServiceTest
extends AbstractRestServicesTest
{
@Ignore
@Test
public void roleExist()
throws Exception
{
assertTrue( getRoleManagementService( authorizationHeader ).roleExists( "guest" ) );
assertFalse( getRoleManagementService( authorizationHeader ).roleExists( "foo" ) );
}
@Test( expected = ForbiddenException.class )
public void roleExistBadAuthz()
throws Exception
{
try
{
assertTrue( getRoleManagementService( null ).roleExists( "guest" ) );
}
catch ( ForbiddenException e )
{
assertEquals( 403, e.getResponse().getStatus() );
throw e;
}
}
@Test
public void createUserThenAssignRole()
throws Exception
{
try
{
User user = new User( "toto", "toto the king", "toto@toto.fr", false, false );
user.setPassword( "foo123" );
UserService userService = getUserService( authorizationHeader );
userService.createUser( user );
user = userService.getUser( "toto" );
user.setPasswordChangeRequired( false );
userService.updateUser( user );
assertNotNull( user );
assertEquals( "toto the king", user.getFullName() );
assertEquals( "toto@toto.fr", user.getEmail() );
// should fail toto doesn't have karma
try
{
getUserService( encode( "toto", "foo123" ) ).getUsers();
fail( "should fail with 403" );
}
catch ( ForbiddenException e )
{
assertEquals( 403, e.getResponse().getStatus() );
}
// assign the role and retry
getRoleManagementService( authorizationHeader ).assignRole( "user-administrator", "toto" );
userService.removeFromCache( "toto" );
getUserService( encode( "toto", "foo123" ) ).getUsers();
List<Role> roles = getRoleManagementService( authorizationHeader ).getEffectivelyAssignedRoles( "toto" );
log.info( "toto roles: {}", roles );
assertTrue( roles.contains( new Role( "User Administrator" ) ) );
}
finally
{
getUserService( authorizationHeader ).deleteUser( "toto" );
getUserService( authorizationHeader ).removeFromCache( "toto" );
assertNull( getUserService( authorizationHeader ).getUser( "toto" ) );
}
}
@Test
public void allRoles()
throws Exception
{
List<Role> roles = getRoleManagementService( authorizationHeader ).getAllRoles();
log.info( "all roles" );
for ( Role role : roles )
{
log.info( "role: {}", role );
}
}
@Test
public void getRole()
throws Exception
{
Role role = getRoleManagementService( authorizationHeader ).getRole( "User Administrator" );
log.info( "role: {}", role );
}
@Test
public void updateRoleDescription()
throws Exception
{
String name = "User Administrator";
Role role = getRoleManagementService( authorizationHeader ).getRole( name );
assertTrue( StringUtils.isEmpty( role.getDescription() ) );
getRoleManagementService( authorizationHeader ).updateRoleDescription( name, "foo" );
role = getRoleManagementService( authorizationHeader ).getRole( name );
assertEquals( "foo", role.getDescription() );
getRoleManagementService( authorizationHeader ).updateRoleDescription( name, null );
role = getRoleManagementService( authorizationHeader ).getRole( name );
assertTrue( StringUtils.isEmpty( role.getDescription() ) );
}
@Test
public void updateRoleUsers()
throws Exception
{
String name = "User Administrator";
Role role = getRoleManagementService( authorizationHeader ).getRole( name );
assertEquals( 0, role.getUsers().size() );
role.setUsers( Arrays.asList( getUserService( authorizationHeader ).getUser( "admin" ) ) );
getRoleManagementService( authorizationHeader ).updateRoleUsers( role );
role = getRoleManagementService( authorizationHeader ).getRole( name );
assertEquals( 1, role.getUsers().size() );
role.setRemovedUsers( Arrays.asList( getUserService( authorizationHeader ).getUser( "admin" ) ) );
role.setUsers( Collections.<User>emptyList() );
getRoleManagementService( authorizationHeader ).updateRoleUsers( role );
role = getRoleManagementService( authorizationHeader ).getRole( name );
assertEquals( 0, role.getUsers().size() );
}
@Test
public void applicationRoles()
throws Exception
{
RoleManagementService roleManagementService = getRoleManagementService( authorizationHeader );
List<Role> allRoles = roleManagementService.getAllRoles();
assertNotNull( allRoles );
int initialSize = allRoles.size();
roleManagementService.createTemplatedRole( "archiva-repository-observer", "internal" );
allRoles = roleManagementService.getAllRoles();
assertNotNull( allRoles );
assertEquals( initialSize + 1, allRoles.size() );
assertRoleExist( "Repository Observer - internal", allRoles );
roleManagementService.createTemplatedRole( "archiva-repository-manager", "internal" );
allRoles = roleManagementService.getAllRoles();
assertNotNull( allRoles );
assertEquals( initialSize + 2, allRoles.size() );
assertRoleExist( "Repository Manager - internal", allRoles );
roleManagementService.createTemplatedRole( "archiva-repository-observer", "snapshots" );
allRoles = roleManagementService.getAllRoles();
assertNotNull( allRoles );
assertEquals( initialSize + 3, allRoles.size() );
assertRoleExist( "Repository Observer - snapshots", allRoles );
roleManagementService.createTemplatedRole( "archiva-repository-manager", "snapshots" );
allRoles = roleManagementService.getAllRoles();
assertNotNull( allRoles );
assertEquals( initialSize + 4, allRoles.size() );
assertRoleExist( "Repository Manager - snapshots", allRoles );
List<ApplicationRoles> applicationRoleList = roleManagementService.getApplicationRoles( "guest" );
assertNotNull( applicationRoleList );
for ( ApplicationRoles applicationRoles : applicationRoleList )
{
log.info( "applicationRoles: {}", applicationRoles );
}
}
private void assertRoleExist( String roleName, List<Role> allRoles )
{
for ( Role role : allRoles )
{
if ( StringUtils.equals( roleName, role.getName() ) )
{
return;
}
}
fail( "role " + roleName + " not exists" );
}
}