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 );
+        }
+    }
+
+
 }