You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@archiva.apache.org by ma...@apache.org on 2020/11/26 21:20:34 UTC
[archiva-redback-core] 04/05: Additional tests for role service v2
This is an automated email from the ASF dual-hosted git repository.
martin_s pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/archiva-redback-core.git
commit 1ce5d0be47434a2bf110cff1ff140aee929746f7
Author: Martin Stockhammer <ma...@apache.org>
AuthorDate: Wed Nov 25 20:29:43 2020 +0100
Additional tests for role service v2
---
.../redback/rest/api/services/v2/RoleService.java | 20 +--
.../rest/services/v2/DefaultRoleService.java | 55 ++++++-
.../rest/services/v2/NativeRoleServiceTest.java | 172 ++++++++++++++++-----
3 files changed, 196 insertions(+), 51 deletions(-)
diff --git a/redback-integrations/redback-rest/redback-rest-api/src/main/java/org/apache/archiva/redback/rest/api/services/v2/RoleService.java b/redback-integrations/redback-rest/redback-rest-api/src/main/java/org/apache/archiva/redback/rest/api/services/v2/RoleService.java
index bbb2502..de25961 100644
--- a/redback-integrations/redback-rest/redback-rest-api/src/main/java/org/apache/archiva/redback/rest/api/services/v2/RoleService.java
+++ b/redback-integrations/redback-rest/redback-rest-api/src/main/java/org/apache/archiva/redback/rest/api/services/v2/RoleService.java
@@ -285,7 +285,7 @@ public interface RoleService
* @param roleId
* @param userId
*/
- @Path( "{roleId}/assign/{userId}" )
+ @Path( "{roleId}/user/{userId}" )
@PUT
@Produces( { APPLICATION_JSON } )
@RedbackAuthorization( permissions = RedbackRoleConstants.USER_MANAGEMENT_RBAC_ADMIN_OPERATION )
@@ -313,10 +313,10 @@ public interface RoleService
*
* @param templateId
* @param resource
- * @param principal
+ * @param userId
*/
- @Path( "template/{templateId}/{resource}/assign/{userId}" )
- @POST
+ @Path( "template/{templateId}/{resource}/user/{userId}" )
+ @PUT
@Produces( { APPLICATION_JSON } )
@RedbackAuthorization( permissions = RedbackRoleConstants.USER_MANAGEMENT_RBAC_ADMIN_OPERATION )
@Operation( summary = "Assigns a template role instance to a given user",
@@ -333,19 +333,19 @@ public interface RoleService
content = @Content(mediaType = APPLICATION_JSON, schema = @Schema(implementation = RedbackRestError.class )) )
}
)
- RoleInfo assignTemplatedRole( @QueryParam( "templateId" ) String templateId,
- @QueryParam( "resource" ) String resource,
- @QueryParam( "principal" ) String principal )
+ RoleInfo assignTemplatedRole( @PathParam( "templateId" ) String templateId,
+ @PathParam( "resource" ) String resource,
+ @PathParam( "userId" ) String userId )
throws RedbackServiceException;
/**
* Unassigns the role indicated by the role id from the given principal
*
* @param roleId
- * @param principal
+ * @param userId
* @throws RedbackServiceException
*/
- @Path( "{roleId}/{userId}" )
+ @Path( "{roleId}/user/{userId}" )
@DELETE
@Produces( { APPLICATION_JSON } )
@RedbackAuthorization( permissions = RedbackRoleConstants.USER_MANAGEMENT_RBAC_ADMIN_OPERATION )
@@ -363,7 +363,7 @@ public interface RoleService
content = @Content(mediaType = APPLICATION_JSON, schema = @Schema(implementation = RedbackRestError.class )) )
}
)
- RoleInfo unassignRole( @QueryParam( "roleId" ) String roleId, @QueryParam( "principal" ) String principal )
+ RoleInfo unassignRole( @PathParam( "roleId" ) String roleId, @PathParam( "userId" ) String userId )
throws RedbackServiceException;
diff --git a/redback-integrations/redback-rest/redback-rest-services/src/main/java/org/apache/archiva/redback/rest/services/v2/DefaultRoleService.java b/redback-integrations/redback-rest/redback-rest-services/src/main/java/org/apache/archiva/redback/rest/services/v2/DefaultRoleService.java
index a4077b7..a1fae18 100644
--- a/redback-integrations/redback-rest/redback-rest-services/src/main/java/org/apache/archiva/redback/rest/services/v2/DefaultRoleService.java
+++ b/redback-integrations/redback-rest/redback-rest-services/src/main/java/org/apache/archiva/redback/rest/services/v2/DefaultRoleService.java
@@ -40,6 +40,7 @@ import org.apache.archiva.redback.role.RoleManager;
import org.apache.archiva.redback.role.RoleManagerException;
import org.apache.archiva.redback.role.RoleNotFoundException;
import org.apache.archiva.redback.role.model.ModelTemplate;
+import org.apache.archiva.redback.role.util.RoleModelUtils;
import org.apache.archiva.redback.users.User;
import org.apache.archiva.redback.users.UserManager;
import org.apache.archiva.redback.users.UserManagerException;
@@ -358,33 +359,75 @@ public class DefaultRoleService extends BaseRedbackService
@Override
- public RoleInfo assignTemplatedRole( String templateId, String resource, String principal )
+ public RoleInfo assignTemplatedRole( String templateId, String resource, String userId )
throws RedbackServiceException
{
try
{
- roleManager.assignTemplatedRole( templateId, resource, principal );
+ userManager.findUser( userId );
+ roleManager.assignTemplatedRole( templateId, resource, userId );
+ String roleId = RoleModelUtils.getRoleId( templateId, resource );
+ return getRoleInfo( rbacManager.getRoleById( roleId ) );
+
+ }
+ catch ( RoleNotFoundException e ) {
+ throw new RedbackServiceException( ErrorMessage.of( MessageKeys.ERR_ROLE_NOT_FOUND, e.getMessage( ) ), 404 );
}
catch ( RoleManagerException e )
{
throw new RedbackServiceException( e.getMessage() );
}
- return null;
+ catch ( UserNotFoundException e )
+ {
+ throw new RedbackServiceException( ErrorMessage.of( MessageKeys.ERR_USER_NOT_FOUND, e.getMessage( ) ), 404 );
+ }
+ catch ( UserManagerException e )
+ {
+ throw new RedbackServiceException( ErrorMessage.of( MessageKeys.ERR_USERMANAGER_FAIL, e.getMessage( ) ) );
+ }
+ catch ( RbacObjectNotFoundException e )
+ {
+ throw new RedbackServiceException( ErrorMessage.of( MessageKeys.ERR_RBACMANAGER_FAIL, e.getMessage( ) ) );
+ }
+ catch ( RbacManagerException e )
+ {
+ throw new RedbackServiceException( ErrorMessage.of( MessageKeys.ERR_RBACMANAGER_FAIL, e.getMessage( ) ) );
+ }
}
@Override
- public RoleInfo unassignRole( String roleId, String principal )
+ public RoleInfo unassignRole( String roleId, String userId )
throws RedbackServiceException
{
try
{
- roleManager.unassignRole( roleId, principal );
+ userManager.findUser( userId );
+ roleManager.unassignRole( roleId, userId );
+ return getRoleInfo( rbacManager.getRoleById( roleId ) );
+ }
+ catch ( RoleNotFoundException e ) {
+ throw new RedbackServiceException( ErrorMessage.of( MessageKeys.ERR_ROLE_NOT_FOUND, e.getMessage( ) ), 404 );
}
catch ( RoleManagerException e )
{
throw new RedbackServiceException( e.getMessage() );
}
- return null;
+ catch ( UserNotFoundException e )
+ {
+ throw new RedbackServiceException( ErrorMessage.of( MessageKeys.ERR_USER_NOT_FOUND, e.getMessage( ) ), 404 );
+ }
+ catch ( UserManagerException e )
+ {
+ throw new RedbackServiceException( ErrorMessage.of( MessageKeys.ERR_USERMANAGER_FAIL, e.getMessage( ) ) );
+ }
+ catch ( RbacObjectNotFoundException e )
+ {
+ throw new RedbackServiceException( ErrorMessage.of( MessageKeys.ERR_RBACMANAGER_FAIL, e.getMessage( ) ) );
+ }
+ catch ( RbacManagerException e )
+ {
+ throw new RedbackServiceException( ErrorMessage.of( MessageKeys.ERR_RBACMANAGER_FAIL, e.getMessage( ) ) );
+ }
}
@Override
diff --git a/redback-integrations/redback-rest/redback-rest-services/src/test/java/org/apache/archiva/redback/rest/services/v2/NativeRoleServiceTest.java b/redback-integrations/redback-rest/redback-rest-services/src/test/java/org/apache/archiva/redback/rest/services/v2/NativeRoleServiceTest.java
index 9d4b43f..863b871 100644
--- a/redback-integrations/redback-rest/redback-rest-services/src/test/java/org/apache/archiva/redback/rest/services/v2/NativeRoleServiceTest.java
+++ b/redback-integrations/redback-rest/redback-rest-services/src/test/java/org/apache/archiva/redback/rest/services/v2/NativeRoleServiceTest.java
@@ -140,8 +140,6 @@ public class NativeRoleServiceTest extends AbstractNativeRestServices
void deleteTemplatedRole( )
{
String token = getAdminToken( );
- try
- {
given( ).spec( getRequestSpec( token ) ).contentType( JSON )
.when( )
.put( "template/archiva-repository-manager/repository05" )
@@ -158,15 +156,11 @@ public class NativeRoleServiceTest extends AbstractNativeRestServices
.when( )
.delete( "template/archiva-repository-manager/repository05" )
.then( ).statusCode( 404 );
- }
- finally
- {
given( ).spec( getRequestSpec( token ) ).contentType( JSON )
.when( )
.delete( "template/archiva-repository-observer/repository05" )
.then( ).statusCode( 200 );
- }
}
@Test
@@ -175,25 +169,25 @@ public class NativeRoleServiceTest extends AbstractNativeRestServices
String token = getAdminToken( );
given( ).spec( getRequestSpec( token ) ).contentType( JSON )
.when( )
- .put( "template/archiva-repository-observer/repository01" )
+ .put( "template/archiva-repository-observer/repository06" )
.then( ).statusCode( 201 );
try
{
given( ).spec( getRequestSpec( token ) ).contentType( JSON )
.when( )
- .head( "template/archiva-repository-observer/repository01" )
+ .head( "template/archiva-repository-observer/repository06" )
.then( ).statusCode( 200 );
given( ).spec( getRequestSpec( token ) ).contentType( JSON )
.when( )
- .head( "archiva-repository-observer.repository01" )
+ .head( "archiva-repository-observer.repository06" )
.then( ).statusCode( 200 );
}
finally
{
given( ).spec( getRequestSpec( token ) ).contentType( JSON )
.when( )
- .delete( "template/archiva-repository-observer/repository01" )
+ .delete( "template/archiva-repository-observer/repository06" )
.then( ).statusCode( 200 );
}
@@ -382,39 +376,39 @@ public class NativeRoleServiceTest extends AbstractNativeRestServices
{
given( ).spec( getRequestSpec( token ) ).contentType( JSON )
.when( )
- .put( "template/archiva-repository-manager/repository01" )
+ .put( "template/archiva-repository-manager/repository07" )
.then( ).statusCode( 201 );
given( ).spec( getRequestSpec( token ) ).contentType( JSON )
- .when( ).head( "template/archiva-repository-observer/repository01" ).then( ).statusCode( 200 );
+ .when( ).head( "template/archiva-repository-observer/repository07" ).then( ).statusCode( 200 );
Response response = given( ).spec( getRequestSpec( token ) ).contentType( JSON )
- .when( ).post( "template/archiva-repository-manager/repository01/moveto/repository02" ).then( ).statusCode( 201 ).extract( ).response( );
+ .when( ).post( "template/archiva-repository-manager/repository07/moveto/repository08" ).then( ).statusCode( 201 ).extract( ).response( );
RoleInfo role = response.getBody( ).jsonPath( ).getObject( "", RoleInfo.class );
assertNotNull( role );
- assertEquals( "archiva-repository-manager.repository02", role.getId( ) );
- assertEquals( "repository02", role.getResource( ) );
+ assertEquals( "archiva-repository-manager.repository08", role.getId( ) );
+ assertEquals( "repository08", role.getResource( ) );
given( ).spec( getRequestSpec( token ) ).contentType( JSON )
- .when( ).head( "template/archiva-repository-manager/repository01" ).then( ).statusCode( 404 );
+ .when( ).head( "template/archiva-repository-manager/repository07" ).then( ).statusCode( 404 );
// Child templates are copied and not moved
given( ).spec( getRequestSpec( token ) ).contentType( JSON )
- .when( ).head( "template/archiva-repository-observer/repository01" ).then( ).statusCode( 200 );
+ .when( ).head( "template/archiva-repository-observer/repository07" ).then( ).statusCode( 200 );
given( ).spec( getRequestSpec( token ) ).contentType( JSON )
- .when( ).head( "template/archiva-repository-observer/repository02" ).then( ).statusCode( 200 );
+ .when( ).head( "template/archiva-repository-observer/repository08" ).then( ).statusCode( 200 );
}
finally
{
given( ).spec( getRequestSpec( token ) ).contentType( JSON )
.when( )
- .delete( "template/archiva-repository-manager/repository02" )
+ .delete( "template/archiva-repository-manager/repository08" )
.then( ).statusCode( 200 );
given( ).spec( getRequestSpec( token ) ).contentType( JSON )
.when( )
- .delete( "template/archiva-repository-observer/repository01" )
+ .delete( "template/archiva-repository-observer/repository07" )
.then( ).statusCode( 200 );
given( ).spec( getRequestSpec( token ) ).contentType( JSON )
.when( )
- .delete( "template/archiva-repository-observer/repository02" )
+ .delete( "template/archiva-repository-observer/repository08" )
.then( ).statusCode( 200 );
}
@@ -429,34 +423,37 @@ public class NativeRoleServiceTest extends AbstractNativeRestServices
{
given( ).spec( getRequestSpec( token ) ).contentType( JSON )
.when( )
- .put( "template/archiva-repository-manager/repository01" )
+ .put( "template/archiva-repository-manager/repository09" )
.then( ).statusCode( 201 );
given( ).spec( getRequestSpec( token ) ).contentType( JSON )
.when( )
- .put( "template/archiva-repository-manager/repository02" )
+ .put( "template/archiva-repository-manager/repository10" )
.then( ).statusCode( 201 );
Response response = given( ).spec( getRequestSpec( token ) ).contentType( JSON )
.when( ).redirects( ).follow( false )
- .post( "template/archiva-repository-manager/repository01/moveto/repository02" ).then( ).statusCode( 303 )
+ .post( "template/archiva-repository-manager/repository09/moveto/repository10" ).then( ).statusCode( 303 )
.extract( ).response( );
- System.out.println( response.getHeader( "Location" ) );
- assertTrue( response.getHeader( "Location" ).endsWith( "/roles/template/archiva-repository-manager/repository02" ) );
+ assertTrue( response.getHeader( "Location" ).endsWith( "/roles/template/archiva-repository-manager/repository10" ) );
given( ).spec( getRequestSpec( token ) ).contentType( JSON )
- .when( ).head( "template/archiva-repository-manager/repository01" ).then( ).statusCode( 200 );
+ .when( ).head( "template/archiva-repository-manager/repository09" ).then( ).statusCode( 200 );
}
finally
{
given( ).spec( getRequestSpec( token ) ).contentType( JSON )
.when( )
- .delete( "template/archiva-repository-manager/repository01" )
+ .delete( "template/archiva-repository-manager/repository09" )
.then( ).statusCode( 200 );
given( ).spec( getRequestSpec( token ) ).contentType( JSON )
.when( )
- .delete( "template/archiva-repository-manager/repository02" )
+ .delete( "template/archiva-repository-observer/repository09" )
.then( ).statusCode( 200 );
given( ).spec( getRequestSpec( token ) ).contentType( JSON )
.when( )
- .delete( "template/archiva-repository-observer/repository02" )
+ .delete( "template/archiva-repository-manager/repository10" )
+ .then( ).statusCode( 200 );
+ given( ).spec( getRequestSpec( token ) ).contentType( JSON )
+ .when( )
+ .delete( "template/archiva-repository-observer/repository10" )
.then( ).statusCode( 200 );
}
@@ -490,7 +487,7 @@ public class NativeRoleServiceTest extends AbstractNativeRestServices
assertFalse( roles.stream( ).filter( role -> "system-administrator".equals( role.getId( ) ) ).findAny( ).isPresent( ) );
given( ).spec( getRequestSpec( token ) ).contentType( JSON )
.when( )
- .put( "system-administrator/assign/aragorn" )
+ .put( "system-administrator/user/aragorn" )
.prettyPeek( )
.then( ).statusCode( 200 );
response = given( ).spec( getRequestSpec( token, getUserServicePath( ) ) ).contentType( JSON )
@@ -504,7 +501,7 @@ public class NativeRoleServiceTest extends AbstractNativeRestServices
{
given( ).spec( getRequestSpec( token, getUserServicePath( ) ) ).contentType( JSON )
.when( )
- .delete( "aragorn" ).getBody( );
+ .delete( "aragorn" ).then().statusCode( 200 );
}
}
@@ -534,7 +531,7 @@ public class NativeRoleServiceTest extends AbstractNativeRestServices
assertFalse( roles.stream( ).filter( role -> "abcdefg".equals( role.getId( ) ) ).findAny( ).isPresent( ) );
given( ).spec( getRequestSpec( token ) ).contentType( JSON )
.when( )
- .put( "abcdefg/assign/aragorn" )
+ .put( "abcdefg/user/aragorn" )
.prettyPeek( )
.then( ).statusCode( 404 );
response = given( ).spec( getRequestSpec( token, getUserServicePath( ) ) ).contentType( JSON )
@@ -548,7 +545,7 @@ public class NativeRoleServiceTest extends AbstractNativeRestServices
{
given( ).spec( getRequestSpec( token, getUserServicePath( ) ) ).contentType( JSON )
.when( )
- .delete( "aragorn" ).getBody( );
+ .delete( "aragorn" ).then().statusCode( 200 );
}
}
@@ -558,9 +555,114 @@ public class NativeRoleServiceTest extends AbstractNativeRestServices
String token = getAdminToken( );
given( ).spec( getRequestSpec( token ) ).contentType( JSON )
.when( )
- .put( "system-administrator/assign/aragorn" )
+ .put( "system-administrator/user/aragorn" )
.prettyPeek( )
.then( ).statusCode( 404 );
}
+
+ @Test
+ void assignTemplatedRole( )
+ {
+ String token = getAdminToken( );
+ Map<String, Object> jsonAsMap = new HashMap<>( );
+ jsonAsMap.put( "user_id", "aragorn" );
+ jsonAsMap.put( "email", "aragorn@lordoftherings.org" );
+ jsonAsMap.put( "full_name", "Aragorn King of Gondor " );
+ jsonAsMap.put( "password", "pAssw0rD" );
+
+ try
+ {
+ given( ).spec( getRequestSpec( token ) ).contentType( JSON )
+ .when( )
+ .put( "template/archiva-repository-manager/repository11" )
+ .then( ).statusCode( 201 );
+
+ given( ).spec( getRequestSpec( token, getUserServicePath( ) ) ).contentType( JSON )
+ .body( jsonAsMap )
+ .when( )
+ .post( )
+ .then( ).statusCode( 201 );
+
+ Response response = given( ).spec( getRequestSpec( token, getUserServicePath( ) ) ).contentType( JSON )
+ .when( )
+ .get( "aragorn/roles" )
+ .then( ).statusCode( 200 ).extract( ).response( );
+ List<RoleInfo> roles = response.getBody( ).jsonPath( ).getList( "", RoleInfo.class );
+ assertFalse( roles.stream( ).filter( role -> "archiva-repository-manager.repository11".equals( role.getId( ) ) ).findAny( ).isPresent( ) );
+ given( ).spec( getRequestSpec( token ) ).contentType( JSON )
+ .when( )
+ .put( "template/archiva-repository-manager/repository11/user/aragorn" )
+ .prettyPeek( )
+ .then( ).statusCode( 200 );
+ response = given( ).spec( getRequestSpec( token, getUserServicePath( ) ) ).contentType( JSON )
+ .when( )
+ .get( "aragorn/roles" )
+ .then( ).statusCode( 200 ).extract( ).response( );
+ roles = response.getBody( ).jsonPath( ).getList( "", RoleInfo.class );
+ assertTrue( roles.stream( ).filter( role -> "archiva-repository-manager.repository11".equals( role.getId( ) ) ).findAny( ).isPresent( ) );
+ }
+ finally
+ {
+ given( ).spec( getRequestSpec( token, getUserServicePath( ) ) ).contentType( JSON )
+ .when( )
+ .delete( "aragorn" ).then().statusCode( 200 );
+ given( ).spec( getRequestSpec( token ) ).contentType( JSON )
+ .when( )
+ .delete( "template/archiva-repository-manager/repository11" ).then().statusCode( 200 );
+ given( ).spec( getRequestSpec( token ) ).contentType( JSON )
+ .when( )
+ .delete( "template/archiva-repository-observer/repository11" ).then().statusCode( 200 );
+
+ }
+ }
+
+ @Test
+ void unAssignRole( )
+ {
+ String token = getAdminToken( );
+ Map<String, Object> jsonAsMap = new HashMap<>( );
+ jsonAsMap.put( "user_id", "aragorn" );
+ jsonAsMap.put( "email", "aragorn@lordoftherings.org" );
+ jsonAsMap.put( "full_name", "Aragorn King of Gondor " );
+ jsonAsMap.put( "password", "pAssw0rD" );
+
+ try
+ {
+ given( ).spec( getRequestSpec( token, getUserServicePath( ) ) ).contentType( JSON )
+ .body( jsonAsMap )
+ .when( )
+ .post( )
+ .then( ).statusCode( 201 );
+
+ given( ).spec( getRequestSpec( token ) ).contentType( JSON )
+ .when( )
+ .put( "system-administrator/user/aragorn" )
+ .then( ).statusCode( 200 );
+ Response response = given( ).spec( getRequestSpec( token, getUserServicePath( ) ) ).contentType( JSON )
+ .when( )
+ .get( "aragorn/roles" )
+ .then( ).statusCode( 200 ).extract( ).response( );
+ List<RoleInfo> roles = response.getBody( ).jsonPath( ).getList( "", RoleInfo.class );
+ assertTrue( roles.stream( ).filter( role -> "system-administrator".equals( role.getId( ) ) ).findAny( ).isPresent( ) );
+ given( ).spec( getRequestSpec( token ) ).contentType( JSON )
+ .when( )
+ .delete( "system-administrator/user/aragorn" )
+ .then( ).statusCode( 200 );
+ response = given( ).spec( getRequestSpec( token, getUserServicePath( ) ) ).contentType( JSON )
+ .when( )
+ .get( "aragorn/roles" )
+ .then( ).statusCode( 200 ).extract( ).response( );
+ roles = response.getBody( ).jsonPath( ).getList( "", RoleInfo.class );
+ assertFalse( roles.stream( ).filter( role -> "system-administrator".equals( role.getId( ) ) ).findAny( ).isPresent( ) );
+ }
+ finally
+ {
+ given( ).spec( getRequestSpec( token, getUserServicePath( ) ) ).contentType( JSON )
+ .when( )
+ .delete( "aragorn" ).then().statusCode( 200 );
+ }
+ }
+
+
}