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

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


The following commit(s) were added to refs/heads/master by this push:
     new 0c9bb81f6 RANGER-5113: API to delete multiple policies including 
policy name prefix filter
0c9bb81f6 is described below

commit 0c9bb81f6a476e7ed234084efb4ca0860fbc5524
Author: Guru Thejus Arveti <theju...@gmail.com>
AuthorDate: Fri Mar 7 09:55:41 2025 +0530

    RANGER-5113: API to delete multiple policies including policy name prefix 
filter
    
    Signed-off-by: Madhan Neethiraj <mad...@apache.org>
---
 .../ranger/plugin/store/AbstractPredicateUtil.java |  31 +++
 .../apache/ranger/plugin/util/SearchFilter.java    |   1 +
 .../java/org/apache/ranger/biz/ServiceDBStore.java |  43 ++++
 .../org/apache/ranger/common/RangerSearchUtil.java |   1 +
 .../java/org/apache/ranger/rest/PublicAPIsv2.java  |  20 ++
 .../java/org/apache/ranger/rest/ServiceREST.java   | 115 +++++++++++
 .../org/apache/ranger/biz/TestServiceDBStore.java  | 229 +++++++++++++++++++++
 7 files changed, 440 insertions(+)

diff --git 
a/agents-common/src/main/java/org/apache/ranger/plugin/store/AbstractPredicateUtil.java
 
b/agents-common/src/main/java/org/apache/ranger/plugin/store/AbstractPredicateUtil.java
index b4d549df7..de4ef7d40 100644
--- 
a/agents-common/src/main/java/org/apache/ranger/plugin/store/AbstractPredicateUtil.java
+++ 
b/agents-common/src/main/java/org/apache/ranger/plugin/store/AbstractPredicateUtil.java
@@ -190,6 +190,7 @@ public void addPredicates(SearchFilter filter, 
List<Predicate> predicates) {
         
addPredicateForPolicyPriority(filter.getParam(SearchFilter.POLICY_PRIORITY), 
predicates);
         
addPredicateForPartialPolicyLabels(filter.getParam(SearchFilter.POLICY_LABELS_PARTIAL),
 predicates);
         addPredicateForZoneName(filter.getParam(SearchFilter.ZONE_NAME), 
predicates);
+        
addPredicateForPrefixPolicyName(filter.getParam(SearchFilter.POLICY_NAME_PREFIX),
 predicates);
         // addPredicateForZoneId(filter.getParam(SearchFilter.ZONE_ID), 
predicates); // not supported
     }
 
@@ -355,6 +356,36 @@ private Predicate addPredicateForPolicyName(final String 
policyName, List<Predic
         return ret;
     }
 
+    private Predicate addPredicateForPrefixPolicyName(final String 
policyNamePrefix, List<Predicate> predicates) {
+        if (StringUtils.isEmpty(policyNamePrefix)) {
+            return null;
+        }
+
+        Predicate ret = object -> {
+            if (object == null) {
+                return false;
+            }
+
+            boolean ret1;
+
+            if (object instanceof RangerPolicy) {
+                RangerPolicy policy = (RangerPolicy) object;
+
+                ret1 = StringUtils.startsWithIgnoreCase(policy.getName(), 
policyNamePrefix);
+            } else {
+                ret1 = true;
+            }
+
+            return ret1;
+        };
+
+        if (predicates != null) {
+            predicates.add(ret);
+        }
+
+        return ret;
+    }
+
     private Predicate addPredicateForPartialPolicyName(final String 
policyName, List<Predicate> predicates) {
         if (StringUtils.isEmpty(policyName)) {
             return null;
diff --git 
a/agents-common/src/main/java/org/apache/ranger/plugin/util/SearchFilter.java 
b/agents-common/src/main/java/org/apache/ranger/plugin/util/SearchFilter.java
index 5a5556a2f..717b94c67 100755
--- 
a/agents-common/src/main/java/org/apache/ranger/plugin/util/SearchFilter.java
+++ 
b/agents-common/src/main/java/org/apache/ranger/plugin/util/SearchFilter.java
@@ -72,6 +72,7 @@ public class SearchFilter {
     public static final String USER_NAME_PARTIAL        = "userNamePartial";   
   // search
     public static final String SERVICE_NAME_PREFIX      = "serviceNamePrefix"; 
   // search
     public static final String ZONE_NAME_PREFIX         = "zoneNamePrefix";    
   // search
+    public static final String POLICY_NAME_PREFIX       = "policyNamePrefix";
 
     public static final String TAG_DEF_ID                = "tagDefId";         
   // search
     public static final String TAG_DEF_GUID              = "tagDefGuid";       
   // search
diff --git 
a/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java 
b/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java
index 7beef34c7..089f06c37 100644
--- a/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java
+++ b/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java
@@ -200,6 +200,7 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.Comparator;
 import java.util.Date;
 import java.util.HashMap;
@@ -1956,6 +1957,48 @@ public List<RangerPolicy> 
getPoliciesWithMetaAttributes(List<RangerPolicy> polic
         return policiesList;
     }
 
+    public void deletePolicies(Set<RangerPolicy> policies, String serviceName, 
List<Long> deletedPolicyIds) throws Exception {
+        LOG.debug("==> ServiceDBStore.deletePolicies()");
+
+        if (policies == null) {
+            policies = Collections.emptySet();
+        }
+
+        RangerService service = getServiceByName(serviceName);
+
+        if (service == null) {
+            throw 
restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, 
serviceName + ": service does not exist", true);
+        }
+
+        boolean isBulkMode = RangerBizUtil.isBulkMode();
+
+        if (!isBulkMode) {
+            RangerBizUtil.setBulkMode(true);
+        }
+
+        try {
+            for (RangerPolicy policy : policies) {
+                deletePolicy(policy, service);
+
+                deletedPolicyIds.add(policy.getId());
+
+                // it's a bulk policy delete call flush and clear
+                if (deletedPolicyIds.size() % RangerBizUtil.POLICY_BATCH_SIZE 
== 0) {
+                    bizUtil.bulkModeOnlyFlushAndClear();
+                }
+            }
+        } finally {
+            // Flush and Clear remaining
+            bizUtil.bulkModeOnlyFlushAndClear();
+
+            if (!isBulkMode) {
+                RangerBizUtil.setBulkMode(false);
+            }
+        }
+
+        LOG.debug("<== ServiceDBStore.deletePolicies(policyCount={}): 
deletedCount={}", policies.size(), deletedPolicyIds.size());
+    }
+
     @PostConstruct
     public void initStore() {
         LOG.debug("==> ServiceDBStore.initStore()");
diff --git 
a/security-admin/src/main/java/org/apache/ranger/common/RangerSearchUtil.java 
b/security-admin/src/main/java/org/apache/ranger/common/RangerSearchUtil.java
index 6833048e6..a76c2b5a3 100755
--- 
a/security-admin/src/main/java/org/apache/ranger/common/RangerSearchUtil.java
+++ 
b/security-admin/src/main/java/org/apache/ranger/common/RangerSearchUtil.java
@@ -113,6 +113,7 @@ public SearchFilter getSearchFilter(@Nonnull 
HttpServletRequest request, List<So
         ret.setParam(SearchFilter.TAG_ID, 
request.getParameter(SearchFilter.TAG_ID));
         ret.setParam(SearchFilter.CREATED_BY, 
request.getParameter(SearchFilter.CREATED_BY));
         ret.setParam(SearchFilter.APPROVER, 
request.getParameter(SearchFilter.APPROVER));
+        ret.setParam(SearchFilter.POLICY_NAME_PREFIX, 
request.getParameter(SearchFilter.POLICY_NAME_PREFIX));
         ret.setParam(SearchFilter.SHARE_STATUS, 
request.getParameter(SearchFilter.SHARE_STATUS));
 
         for (Map.Entry<String, String[]> e : 
request.getParameterMap().entrySet()) {
diff --git 
a/security-admin/src/main/java/org/apache/ranger/rest/PublicAPIsv2.java 
b/security-admin/src/main/java/org/apache/ranger/rest/PublicAPIsv2.java
index 7b1eb7fe7..e580eb7c3 100644
--- a/security-admin/src/main/java/org/apache/ranger/rest/PublicAPIsv2.java
+++ b/security-admin/src/main/java/org/apache/ranger/rest/PublicAPIsv2.java
@@ -67,6 +67,7 @@
 import javax.ws.rs.core.Context;
 
 import java.util.Collection;
+import java.util.Collections;
 import java.util.List;
 
 @Path("public/v2")
@@ -686,6 +687,25 @@ public void deletePolicyByName(@QueryParam("servicename") 
String serviceName, @Q
         logger.debug("<== PublicAPIsv2.deletePolicyByName({}, {})", 
serviceName, policyName);
     }
 
+    @DELETE
+    @Path("/api/policies/bulk")
+    @Produces("application/json")
+    public List<Long> deletePolicies(@Context HttpServletRequest request, 
@QueryParam("serviceName") String serviceName) {
+        logger.debug("==> PublicAPIsv2.deletePolicies()");
+
+        if (StringUtils.isBlank(serviceName)) {
+            throw 
restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, "Invalid 
service name", true);
+        }
+
+        List<Long> ret = serviceREST.deleteBulkPolicies(serviceName, request);
+
+        Collections.sort(ret);
+
+        logger.debug("<== PublicAPIsv2.deletePolicies()");
+
+        return ret;
+    }
+
     @DELETE
     @Path("/api/policy/guid/{guid}")
     public void deletePolicyByGUIDAndServiceNameAndZoneName(@PathParam("guid") 
String guid, @DefaultValue("") @QueryParam("serviceName") String serviceName, 
@DefaultValue("") @QueryParam("zoneName") String zoneName) {
diff --git 
a/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java 
b/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java
index f7c521111..1208cf3db 100644
--- a/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java
+++ b/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java
@@ -3089,6 +3089,30 @@ public List<RangerPurgeResult> 
purgeRecords(@QueryParam("type") String recordTyp
         return ret;
     }
 
+    public List<Long> deleteBulkPolicies(String serviceName, 
HttpServletRequest request) {
+        LOG.debug("==> ServiceREST.deleteBulkPolicies({})", serviceName);
+
+        Set<RangerPolicy> policies = new 
HashSet<>(getBulkPolicies(serviceName, request));
+
+        ensureAdminAccessForServicePolicies(serviceName, policies);
+
+        List<Long> ret = new ArrayList<>();
+
+        try {
+            svcStore.deletePolicies(policies, serviceName, ret);
+        } catch (WebApplicationException excp) {
+            throw excp;
+        } catch (Throwable excp) {
+            LOG.error("deleteBulkPolicies(): failed after deleting {} of {} 
policies", ret.size(), policies.size(), excp);
+
+            throw restErrorUtil.createRESTException("Failed after deleting " + 
ret.size() + " of " + policies.size() + " policies. Error " + excp);
+        }
+
+        LOG.debug("<== ServiceREST.deleteBulkPolicies(): count={}", 
ret.size());
+
+        return ret;
+    }
+
     public RangerPolicyResource getPolicyResource(Object resourceName, 
GrantRevokeRequest grantRequest) {
         RangerPolicyResource ret;
 
@@ -3177,6 +3201,46 @@ void ensureAdminAndAuditAccess(RangerPolicy policy) {
         ensureAdminAndAuditAccess(policy, new HashMap<>());
     }
 
+    void ensureAdminAccessForPolicies(Set<RangerPolicy> policies, XXService 
xxService, String serviceName) {
+        LOG.debug("==> ServiceREST.ensureAdminAccessForPolicies({})", 
serviceName);
+
+        boolean isAdmin    = bizUtil.isAdmin();
+        boolean isKeyAdmin = bizUtil.isKeyAdmin();
+        String  userName   = bizUtil.getCurrentUserLoginId();
+
+        XXServiceDef        xServiceDef = 
daoManager.getXXServiceDef().getById(xxService.getType());
+        Set<String>         userGroups  = userMgr.getGroupsForUser(userName);
+        RangerPolicyAdmin   policyAdmin = 
getPolicyAdminForDelegatedAdmin(serviceName);
+        Set<String>         roles       = 
policyAdmin.getRolesFromUserAndGroups(userName, userGroups);
+        Map<String, Object> evalContext = new HashMap<>();
+        boolean             isKmsService = 
EmbeddedServiceDefsUtil.KMS_IMPL_CLASS_NAME.equals(xServiceDef.getImplclassname());
+
+        RangerAccessRequestUtil.setCurrentUserInContext(evalContext, userName);
+
+        Map<String, Boolean> serviceToIsAdminUserMap = new HashMap<>();
+        Map<String, Boolean> zoneToIsAdminMap        = new HashMap<>();
+
+        policies.forEach(policy -> {
+            boolean isServiceAdminUser = 
serviceToIsAdminUserMap.computeIfAbsent(policy.getService(), svcName -> 
svcStore.isServiceAdminUser(svcName, userName));
+            boolean isZoneAdmin        = 
!StringUtils.isEmpty(policy.getZoneName()) && 
zoneToIsAdminMap.computeIfAbsent(policy.getZoneName(), serviceMgr::isZoneAdmin);
+            boolean isSvcAdmin          = isAdmin || isServiceAdminUser || 
isZoneAdmin;
+
+            if (!isAdmin && !isKeyAdmin && !isSvcAdmin) {
+                boolean isAllowed = 
policyAdmin.isDelegatedAdminAccessAllowedForModify(policy, userName, 
userGroups, roles, evalContext);
+
+                if (!isAllowed) {
+                    throw 
restErrorUtil.createRESTException(HttpServletResponse.SC_FORBIDDEN, "User '" + 
userName + "' does not have delegated-admin privilege for policy id=" + 
policy.getId(), true);
+                }
+            } else {
+                if ((isAdmin && isKmsService) || (isKeyAdmin && 
!isKmsService)) {
+                    throw 
restErrorUtil.createRESTException(xServiceDef.getName() + " policies are not 
accessible for user '" + userName + "'.", MessageEnums.OPER_NO_PERMISSION);
+                }
+            }
+        });
+
+        LOG.debug("<== ServiceREST.ensureAdminAccessForPolicies({})", 
serviceName);
+    }
+
     void ensureAdminAndAuditAccess(RangerPolicy policy, Map<String, String> 
mapServiceTypeAndImplClass) {
         boolean isAdmin         = bizUtil.isAdmin();
         boolean isKeyAdmin      = bizUtil.isKeyAdmin();
@@ -4362,6 +4426,57 @@ private String getRangerAdminZoneName(String 
serviceName, GrantRevokeRequest gra
         return ret;
     }
 
+    private List<RangerPolicy> getBulkPolicies(String serviceName, 
HttpServletRequest request) {
+        LOG.debug("==> ServiceREST.getBulkPolicies({})", serviceName);
+
+        List<RangerPolicy> ret;
+        RangerPerfTracer   perf = null;
+
+        try {
+            if (RangerPerfTracer.isPerfTraceEnabled(PERF_LOG)) {
+                perf = RangerPerfTracer.getPerfTracer(PERF_LOG, 
"ServiceREST.getBulkPolicies()");
+            }
+
+            SearchFilter filter = searchUtil.getSearchFilter(request, 
policyService.sortFields);
+
+            filter.setStartIndex(0);
+            filter.setMaxRows(Integer.MAX_VALUE);
+            filter.setParam(SearchFilter.SERVICE_NAME, serviceName);
+
+            ret = svcStore.getPolicies(filter);
+
+            ret = applyAdminAccessFilter(ret);
+        } catch (WebApplicationException excp) {
+            throw excp;
+        } catch (Throwable excp) {
+            LOG.error("getBulkPolicies() failed", excp);
+
+            throw restErrorUtil.createRESTException(excp.getMessage());
+        } finally {
+            RangerPerfTracer.log(perf);
+        }
+
+        LOG.debug("<== ServiceREST.getBulkPolicies({}): count={}", 
serviceName, ret.size());
+
+        return ret;
+    }
+
+    private void ensureAdminAccessForServicePolicies(String serviceName, 
Set<RangerPolicy> policies) {
+        LOG.debug("==> ServiceREST.ensureAdminAccessForServicePolicies({})", 
serviceName);
+
+        if (!policies.isEmpty()) {
+            XXService xxService = 
daoManager.getXXService().findByName(serviceName);
+
+            if (xxService == null) {
+                throw 
restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, 
serviceName + ": service does not exist", true);
+            }
+
+            ensureAdminAccessForPolicies(policies, xxService, serviceName);
+        }
+
+        LOG.debug("<== ServiceREST.ensureAdminAccessForServicePolicies({})", 
serviceName);
+    }
+
     private RangerPolicy createPolicyUnconditionally(RangerPolicy policy) 
throws Exception {
         LOG.debug("==> ServiceREST.createPolicyUnconditionally({})", policy);
 
diff --git 
a/security-admin/src/test/java/org/apache/ranger/biz/TestServiceDBStore.java 
b/security-admin/src/test/java/org/apache/ranger/biz/TestServiceDBStore.java
index 7747e327a..75ddaf151 100644
--- a/security-admin/src/test/java/org/apache/ranger/biz/TestServiceDBStore.java
+++ b/security-admin/src/test/java/org/apache/ranger/biz/TestServiceDBStore.java
@@ -130,6 +130,7 @@
 import org.mockito.junit.MockitoJUnitRunner;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -1517,6 +1518,234 @@ public void tess28updatePolicy() throws Exception {
         Assert.assertEquals(dbRangerPolicy.getVersion(), 
rangerPolicy.getVersion());
     }
 
+    @Test
+    public void test29deletePolicies() throws Exception {
+        setup();
+        XXServiceDao xServiceDao = Mockito.mock(XXServiceDao.class);
+        XXService xService = Mockito.mock(XXService.class);
+        XXPolicyLabelMapDao xPolicyLabelMapDao = 
Mockito.mock(XXPolicyLabelMapDao.class);
+
+        RangerService rangerService = rangerService();
+        RangerPolicy rangerPolicy1 = rangerPolicy();
+        RangerPolicy rangerPolicy2 = rangerPolicy();
+        rangerPolicy2.setName("HDFS_1-2-20150316062453");
+        rangerPolicy2.setId(Id + 1L);
+        rangerPolicy2.setGuid("policyguid2");
+        String name = "HDFS_1-1-20150316062453";
+
+        List<XXPolicyItem> policyItemList = new ArrayList<XXPolicyItem>();
+        XXPolicyItem policyItem1 = new XXPolicyItem();
+        policyItem1.setAddedByUserId(Id);
+        policyItem1.setCreateTime(new Date());
+        policyItem1.setDelegateAdmin(false);
+        policyItem1.setId(Id);
+        policyItem1.setOrder(1);
+        policyItem1.setPolicyId(Id);
+        policyItem1.setUpdatedByUserId(Id);
+        policyItem1.setUpdateTime(new Date());
+        policyItemList.add(policyItem1);
+
+        XXPolicyItem policyItem2 = new XXPolicyItem();
+        policyItem2.setAddedByUserId(Id);
+        policyItem2.setCreateTime(new Date());
+        policyItem2.setDelegateAdmin(false);
+        policyItem2.setId(Id + 1L);
+        policyItem2.setOrder(2);
+        policyItem2.setPolicyId(Id + 1L);
+        policyItem2.setUpdatedByUserId(Id);
+        policyItem2.setUpdateTime(new Date());
+        policyItemList.add(policyItem2);
+
+        List<XXPolicyItemCondition> policyItemConditionList = new 
ArrayList<XXPolicyItemCondition>();
+        XXPolicyItemCondition policyItemCondition1 = new 
XXPolicyItemCondition();
+        policyItemCondition1.setAddedByUserId(Id);
+        policyItemCondition1.setCreateTime(new Date());
+        policyItemCondition1.setType(1L);
+        policyItemCondition1.setId(Id);
+        policyItemCondition1.setOrder(1);
+        policyItemCondition1.setPolicyItemId(Id);
+        policyItemCondition1.setUpdatedByUserId(Id);
+        policyItemCondition1.setUpdateTime(new Date());
+        policyItemConditionList.add(policyItemCondition1);
+
+        XXPolicyItemCondition policyItemCondition2 = new 
XXPolicyItemCondition();
+        policyItemCondition2.setAddedByUserId(Id);
+        policyItemCondition2.setCreateTime(new Date());
+        policyItemCondition2.setType(1L);
+        policyItemCondition2.setId(Id + 1L);
+        policyItemCondition2.setOrder(2);
+        policyItemCondition2.setPolicyItemId(Id + 1L);
+        policyItemCondition2.setUpdatedByUserId(Id);
+        policyItemCondition2.setUpdateTime(new Date());
+        policyItemConditionList.add(policyItemCondition2);
+
+        List<XXPolicyItemGroupPerm> policyItemGroupPermList = new 
ArrayList<XXPolicyItemGroupPerm>();
+        XXPolicyItemGroupPerm policyItemGroupPerm1 = new 
XXPolicyItemGroupPerm();
+        policyItemGroupPerm1.setAddedByUserId(Id);
+        policyItemGroupPerm1.setCreateTime(new Date());
+        policyItemGroupPerm1.setGroupId(Id);
+
+        XXPolicyItemGroupPerm policyItemGroupPerm2 = new 
XXPolicyItemGroupPerm();
+        policyItemGroupPerm2.setAddedByUserId(Id);
+        policyItemGroupPerm2.setCreateTime(new Date());
+        policyItemGroupPerm2.setGroupId(Id);
+
+        List<XXServiceConfigMap> xConfMapList = new 
ArrayList<XXServiceConfigMap>();
+        XXServiceConfigMap xConfMap1 = new XXServiceConfigMap();
+        xConfMap1.setAddedByUserId(null);
+        xConfMap1.setConfigkey(name);
+        xConfMap1.setConfigvalue(name);
+        xConfMap1.setCreateTime(new Date());
+        xConfMap1.setServiceId(null);
+        xConfMap1.setId(Id);
+        xConfMap1.setUpdatedByUserId(null);
+        xConfMap1.setUpdateTime(new Date());
+        xConfMapList.add(xConfMap1);
+
+        XXServiceConfigMap xConfMap2 = new XXServiceConfigMap();
+        xConfMap2.setAddedByUserId(null);
+        xConfMap2.setConfigkey(name);
+        xConfMap2.setConfigvalue(name);
+        xConfMap2.setCreateTime(new Date());
+        xConfMap2.setServiceId(null);
+        xConfMap2.setId(Id + 1L);
+        xConfMap2.setUpdatedByUserId(null);
+        xConfMap2.setUpdateTime(new Date());
+        xConfMapList.add(xConfMap2);
+
+        policyItemGroupPerm1.setId(Id);
+        policyItemGroupPerm1.setOrder(1);
+        policyItemGroupPerm1.setPolicyItemId(Id);
+        policyItemGroupPerm1.setUpdatedByUserId(Id);
+        policyItemGroupPerm1.setUpdateTime(new Date());
+        policyItemGroupPermList.add(policyItemGroupPerm1);
+
+        policyItemGroupPerm2.setId(Id + 1L);
+        policyItemGroupPerm2.setOrder(2);
+        policyItemGroupPerm2.setPolicyItemId(Id + 1L);
+        policyItemGroupPerm2.setUpdatedByUserId(Id);
+        policyItemGroupPerm2.setUpdateTime(new Date());
+        policyItemGroupPermList.add(policyItemGroupPerm2);
+
+        List<XXPolicyItemUserPerm> policyItemUserPermList = new 
ArrayList<XXPolicyItemUserPerm>();
+        XXPolicyItemUserPerm policyItemUserPerm1 = new XXPolicyItemUserPerm();
+        policyItemUserPerm1.setAddedByUserId(Id);
+        policyItemUserPerm1.setCreateTime(new Date());
+        policyItemUserPerm1.setPolicyItemId(Id);
+        policyItemUserPerm1.setId(Id);
+        policyItemUserPerm1.setOrder(1);
+        policyItemUserPerm1.setUpdatedByUserId(Id);
+        policyItemUserPerm1.setUpdateTime(new Date());
+        policyItemUserPermList.add(policyItemUserPerm1);
+
+        XXPolicyItemUserPerm policyItemUserPerm2 = new XXPolicyItemUserPerm();
+        policyItemUserPerm2.setAddedByUserId(Id);
+        policyItemUserPerm2.setCreateTime(new Date());
+        policyItemUserPerm2.setPolicyItemId(Id + 1L);
+        policyItemUserPerm2.setId(Id + 1L);
+        policyItemUserPerm2.setOrder(2);
+        policyItemUserPerm2.setUpdatedByUserId(Id);
+        policyItemUserPerm2.setUpdateTime(new Date());
+        policyItemUserPermList.add(policyItemUserPerm2);
+
+        List<XXPolicyItemAccess> policyItemAccessList = new 
ArrayList<XXPolicyItemAccess>();
+        XXPolicyItemAccess policyItemAccess1 = new XXPolicyItemAccess();
+        policyItemAccess1.setAddedByUserId(Id);
+        policyItemAccess1.setCreateTime(new Date());
+        policyItemAccess1.setPolicyitemid(Id);
+        policyItemAccess1.setId(Id);
+        policyItemAccess1.setOrder(1);
+        policyItemAccess1.setUpdatedByUserId(Id);
+        policyItemAccess1.setUpdateTime(new Date());
+        policyItemAccessList.add(policyItemAccess1);
+
+        XXPolicyItemAccess policyItemAccess2 = new XXPolicyItemAccess();
+        policyItemAccess2.setAddedByUserId(Id);
+        policyItemAccess2.setCreateTime(new Date());
+        policyItemAccess2.setPolicyitemid(Id + 1L);
+        policyItemAccess2.setId(Id + 1L);
+        policyItemAccess2.setOrder(2);
+        policyItemAccess2.setUpdatedByUserId(Id);
+        policyItemAccess2.setUpdateTime(new Date());
+        policyItemAccessList.add(policyItemAccess2);
+
+        List<XXPolicyResource> policyResourceList = new 
ArrayList<XXPolicyResource>();
+        XXPolicyResource policyResource1 = new XXPolicyResource();
+        policyResource1.setId(Id);
+        policyResource1.setCreateTime(new Date());
+        policyResource1.setAddedByUserId(Id);
+        policyResource1.setIsExcludes(false);
+        policyResource1.setIsRecursive(false);
+        policyResource1.setPolicyId(Id);
+        policyResource1.setResDefId(Id);
+        policyResource1.setUpdatedByUserId(Id);
+        policyResource1.setUpdateTime(new Date());
+        policyResourceList.add(policyResource1);
+
+        XXPolicyResource policyResource2 = new XXPolicyResource();
+        policyResource2.setId(Id + 1L);
+        policyResource2.setCreateTime(new Date());
+        policyResource2.setAddedByUserId(Id);
+        policyResource2.setIsExcludes(false);
+        policyResource2.setIsRecursive(false);
+        policyResource2.setPolicyId(Id + 1L);
+        policyResource2.setResDefId(Id);
+        policyResource2.setUpdatedByUserId(Id);
+        policyResource2.setUpdateTime(new Date());
+        policyResourceList.add(policyResource2);
+
+        XXPolicyResourceMap policyResourceMap1 = new XXPolicyResourceMap();
+        policyResourceMap1.setAddedByUserId(Id);
+        policyResourceMap1.setCreateTime(new Date());
+        policyResourceMap1.setId(Id);
+        policyResourceMap1.setOrder(1);
+        policyResourceMap1.setResourceId(Id);
+        policyResourceMap1.setUpdatedByUserId(Id);
+        policyResourceMap1.setUpdateTime(new Date());
+        policyResourceMap1.setValue("1L");
+
+        XXPolicyResourceMap policyResourceMap2 = new XXPolicyResourceMap();
+        policyResourceMap2.setAddedByUserId(Id);
+        policyResourceMap2.setCreateTime(new Date());
+        policyResourceMap2.setId(Id + 1L);
+        policyResourceMap2.setOrder(2);
+        policyResourceMap2.setResourceId(Id);
+        policyResourceMap2.setUpdatedByUserId(Id);
+        policyResourceMap2.setUpdateTime(new Date());
+        policyResourceMap2.setValue("2L");
+
+        List<XXServiceConfigDef> xServiceConfigDefList = new 
ArrayList<XXServiceConfigDef>();
+        XXServiceConfigDef serviceConfigDefObj = new XXServiceConfigDef();
+        serviceConfigDefObj.setId(Id);
+        xServiceConfigDefList.add(serviceConfigDefObj);
+
+        Mockito.when(daoManager.getXXService()).thenReturn(xServiceDao);
+        Mockito.when(xServiceDao.findByName(name)).thenReturn(xService);
+        Mockito.when(svcService.getPopulatedViewObject(xService)).thenReturn(
+                rangerService);
+
+        Mockito.when(daoManager.getXXService()).thenReturn(xServiceDao);
+        Mockito.when(xServiceDao.getById(Id)).thenReturn(xService);
+
+        Mockito.when(daoManager.getXXService()).thenReturn(xServiceDao);
+        Mockito.when(xServiceDao.getById(rangerService.getId())).thenReturn(
+                xService);
+        
Mockito.when(daoManager.getXXPolicyLabelMap()).thenReturn(xPolicyLabelMapDao);
+        
Mockito.when(xPolicyLabelMapDao.findByPolicyId(rangerPolicy1.getId())).thenReturn(ListUtils.EMPTY_LIST);
+
+        
Mockito.when(daoManager.getXXPolicyLabelMap()).thenReturn(xPolicyLabelMapDao);
+        
Mockito.when(xPolicyLabelMapDao.findByPolicyId(rangerPolicy2.getId())).thenReturn(ListUtils.EMPTY_LIST);
+
+        Mockito.when(!bizUtil.hasAccess(xService, null)).thenReturn(true);
+        
Mockito.when(policyRefUpdater.cleanupRefTables(rangerPolicy1)).thenReturn(true);
+        
Mockito.when(policyRefUpdater.cleanupRefTables(rangerPolicy2)).thenReturn(true);
+
+        serviceDBStore.deletePolicies(new 
HashSet<>(Arrays.asList(rangerPolicy1, rangerPolicy2)), name, new 
ArrayList<>());
+        Mockito.verify(policyService, Mockito.times(1)).delete(rangerPolicy1);
+        Mockito.verify(policyService, Mockito.times(1)).delete(rangerPolicy2);
+        Mockito.verify(bizUtil, 
Mockito.atLeast(1)).bulkModeOnlyFlushAndClear();
+    }
+
     @Test
     public void tess29deletePolicy() throws Exception {
         setup();

Reply via email to