This is an automated email from the ASF dual-hosted git repository.

madhan pushed a commit to branch ranger-2.5
in repository https://gitbox.apache.org/repos/asf/ranger.git


The following commit(s) were added to refs/heads/ranger-2.5 by this push:
     new 7510b8211 RANGER-4373: incorrect error message when deleting a role 
referenced in policies
7510b8211 is described below

commit 7510b8211007d39a65fc542ced47fab43b892e5a
Author: Sanket-Shelar <[email protected]>
AuthorDate: Tue Jul 23 13:32:17 2024 +0530

    RANGER-4373: incorrect error message when deleting a role referenced in 
policies
    
    Signed-off-by: Madhan Neethiraj <[email protected]>
---
 .../main/java/org/apache/ranger/rest/RoleREST.java | 13 ++--
 .../java/org/apache/ranger/rest/TestRoleREST.java  | 72 ++++++++++++++++++++++
 2 files changed, 81 insertions(+), 4 deletions(-)

diff --git a/security-admin/src/main/java/org/apache/ranger/rest/RoleREST.java 
b/security-admin/src/main/java/org/apache/ranger/rest/RoleREST.java
index ec57488d8..7be7127cb 100644
--- a/security-admin/src/main/java/org/apache/ranger/rest/RoleREST.java
+++ b/security-admin/src/main/java/org/apache/ranger/rest/RoleREST.java
@@ -58,6 +58,7 @@ import org.apache.ranger.db.RangerDaoManager;
 import org.apache.ranger.entity.XXService;
 import org.apache.ranger.entity.XXServiceDef;
 import org.apache.ranger.entity.XXTrxLogV2;
+import org.apache.ranger.plugin.errors.ValidationErrorCode;
 import org.apache.ranger.plugin.model.RangerPluginInfo;
 import org.apache.ranger.plugin.model.RangerRole;
 import org.apache.ranger.plugin.model.RangerService;
@@ -286,10 +287,14 @@ public class RoleREST {
         } catch(Throwable excp) {
             LOG.error("deleteRole(" + roleId + ") failed", excp);
 
-            throw restErrorUtil.createRESTException(
-                                       "Data Not Found for given Id",
-                                       MessageEnums.DATA_NOT_FOUND, roleId, 
null,
-                                       "readResource : No Object found with 
given id.");
+            if 
(excp.getMessage().contains(String.valueOf(ValidationErrorCode.ROLE_VALIDATION_ERR_INVALID_ROLE_ID.getErrorCode())))
 {
+                throw restErrorUtil.createRESTException(
+                        "Data Not Found for given Id",
+                        MessageEnums.DATA_NOT_FOUND, roleId, null,
+                        "readResource : No Object found with given id.");
+            } else {
+                throw restErrorUtil.createRESTException(excp.getMessage());
+            }
         }
         if (LOG.isDebugEnabled()) {
             LOG.debug("<== deleteRole(id=" + roleId + ")");
diff --git 
a/security-admin/src/test/java/org/apache/ranger/rest/TestRoleREST.java 
b/security-admin/src/test/java/org/apache/ranger/rest/TestRoleREST.java
index 74e611cbc..0b400bed0 100644
--- a/security-admin/src/test/java/org/apache/ranger/rest/TestRoleREST.java
+++ b/security-admin/src/test/java/org/apache/ranger/rest/TestRoleREST.java
@@ -22,6 +22,9 @@ import 
org.apache.ranger.biz.ServiceDBStore.JSON_FILE_NAME_TYPE;
 import org.apache.ranger.common.*;
 import org.apache.ranger.db.*;
 import org.apache.ranger.entity.*;
+import org.apache.ranger.plugin.model.RangerPolicy;
+import org.apache.ranger.plugin.model.RangerPolicy.RangerPolicyItem;
+import org.apache.ranger.plugin.model.RangerPolicy.RangerPolicyResource;
 import org.apache.ranger.plugin.model.RangerRole;
 import org.apache.ranger.plugin.model.validation.RangerRoleValidator;
 import org.apache.ranger.plugin.util.GrantRevokeRoleRequest;
@@ -60,6 +63,7 @@ public class TestRoleREST {
     private static final String adminLoginID = "admin";
     private static final JSON_FILE_NAME_TYPE ROLE = JSON_FILE_NAME_TYPE.ROLE;
     String importRoleTestFilePath = 
"./src/test/java/org/apache/ranger/rest/importRole/import_role_test_file.json";
+    private static Long Id = 7L;
 
     @Mock
     RangerRole role;
@@ -1327,4 +1331,72 @@ public class TestRoleREST {
         rangerRole.setId(roleId);
         return rangerRole;
     }
+
+    @Test(expected = Throwable.class)
+    public void test21deleteRoleWithinPolicy() {
+        RangerRole rangerRole = createRole();
+        rangerPolicy(rangerRole);
+        try {
+            Mockito.doThrow(new 
Throwable()).when(roleStore).deleteRole(Mockito.anyLong());
+        } catch (Throwable e) {
+            throw new RuntimeException(e);
+        }
+
+        try {
+            Assert.assertThrows(Throwable.class, () -> 
roleRest.deleteRole(rangerRole.getId()));
+            Mockito.verify(restErrorUtil, 
Mockito.times(1)).createRESTException(Mockito.anyString());
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    @Test(expected = Throwable.class)
+    public void test22deleteRoleWithValidationError() {
+        RangerRole rangerRole = createRole();
+        try {
+            
Mockito.when(validatorFactory.getRangerRoleValidator(roleStore)).thenThrow(new 
Exception());
+        } catch (Throwable e) {
+            throw new RuntimeException(e);
+        }
+
+        try {
+            Assert.assertThrows(Throwable.class,() -> 
roleRest.deleteRole(rangerRole.getId()));
+            Mockito.verify(restErrorUtil, 
Mockito.times(1)).createRESTException(Mockito.anyString());
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+     private RangerPolicy rangerPolicy(RangerRole rangerRole) {
+         List<String> roles = new ArrayList<>();
+         roles.add(rangerRole.getName());
+
+         List<RangerPolicyItem> policyItems = new ArrayList<>();
+
+         policyItems.add(new RangerPolicyItem(new ArrayList<>(), new 
ArrayList<>(), new ArrayList<>(), roles, new ArrayList<>(), false));
+
+         Map<String, RangerPolicyResource> policyResource = new HashMap<>();
+
+         policyResource.put("resource", new RangerPolicyResource("1", true, 
true));
+
+         return getRangerPolicy(policyItems, policyResource);
+     }
+
+    private static RangerPolicy getRangerPolicy(List<RangerPolicyItem> 
policyItems, Map<String, RangerPolicyResource> policyResource) {
+        RangerPolicy policy = new RangerPolicy();
+        policy.setId(Id);
+        policy.setCreateTime(new Date());
+        policy.setDescription("policy");
+        policy.setGuid("policyguid");
+        policy.setIsEnabled(true);
+        policy.setName("HDFS_1-1-20150316062453");
+        policy.setUpdatedBy("Admin");
+        policy.setUpdateTime(new Date());
+        policy.setService("HDFS_1-1-20150316062453");
+        policy.setIsAuditEnabled(true);
+        policy.setPolicyItems(policyItems);
+        policy.setResources(policyResource);
+        policy.setService("HDFS_1");
+        return policy;
+    }
 }

Reply via email to