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

mehul 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 ded45a8  RANGER-2403 : proper error should be thrown when service part 
of zone being deleted
ded45a8 is described below

commit ded45a82738774097ac5ee4ec7424334dd4f30f0
Author: Nikhil P <[email protected]>
AuthorDate: Thu Apr 18 15:53:00 2019 +0530

    RANGER-2403 : proper error should be thrown when service part of zone being 
deleted
    
    Signed-off-by: Mehul Parikh <[email protected]>
---
 .../java/org/apache/ranger/biz/ServiceDBStore.java     | 18 +++++++++++++++++-
 .../java/org/apache/ranger/biz/TestServiceDBStore.java |  7 ++++++-
 2 files changed, 23 insertions(+), 2 deletions(-)

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 17be098..7ad0570 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
@@ -159,6 +159,7 @@ import org.apache.ranger.view.VXMetricServiceCount;
 import org.apache.ranger.view.VXMetricServiceNameCount;
 import org.apache.ranger.view.VXMetricUserGroupCount;
 import org.apache.ranger.view.VXPolicyLabelList;
+import org.apache.ranger.view.VXResponse;
 import org.apache.ranger.view.VXString;
 import org.apache.ranger.view.VXUser;
 import org.apache.ranger.view.VXUserList;
@@ -1689,7 +1690,7 @@ public class ServiceDBStore extends AbstractServiceStore {
                if(service == null) {
                        throw new Exception("no service exists with ID=" + id);
                }
-
+               restrictIfZoneService(service);
                List<XXPolicy> policies = 
daoMgr.getXXPolicy().findByServiceId(service.getId());
                //RangerPolicy rangerPolicy =null;
                for(XXPolicy policy : policies) {
@@ -1721,6 +1722,21 @@ public class ServiceDBStore extends AbstractServiceStore 
{
                bizUtil.createTrxLog(trxLogList);
        }
 
+       private void restrictIfZoneService(RangerService service)
+       {
+               String serviceName = service.getName();
+               List<String> zonesNameList = 
daoMgr.getXXSecurityZoneDao().findZonesByServiceName(serviceName);
+               if (CollectionUtils.isNotEmpty(zonesNameList)) {
+                       LOG.info("Can not delete service : " + serviceName
+                                       + ", as it is already associated with " 
+ zonesNameList.size() + " zones : " + zonesNameList);
+                       VXResponse vXResponse = new VXResponse();
+                       
vXResponse.setStatusCode(HttpServletResponse.SC_BAD_REQUEST);
+                       vXResponse.setMsgDesc("Can not delete service : " + 
serviceName
+                                       + ", as it is already associated with " 
+ zonesNameList.size() + " zones : " + zonesNameList);
+                       throw restErrorUtil.generateRESTException(vXResponse);
+               }
+       }
+
        @Override
        public List<RangerPolicy> getPoliciesByResourceSignature(String 
serviceName, String policySignature, Boolean isPolicyEnabled) throws Exception {
 
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 4d46d0e..ac9af5e 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
@@ -1222,7 +1222,7 @@ public class TestServiceDBStore {
                XXServiceConfigMapDao xServiceConfigMapDao = Mockito
                                .mock(XXServiceConfigMapDao.class);
                XXPolicyLabelMapDao xPolicyLabelMapDao = 
Mockito.mock(XXPolicyLabelMapDao.class);
-
+               XXSecurityZoneDao xSecurityZoneDao = 
Mockito.mock(XXSecurityZoneDao.class);
 
         RangerService rangerService = rangerService();
                RangerPolicy rangerPolicy = rangerPolicy();
@@ -1240,6 +1240,8 @@ public class TestServiceDBStore {
                policy.setService(rangerService.getId());
                policiesList.add(policy);
 
+               List<String> zonesNameList =new ArrayList<String>();
+
                List<XXTrxLog> trxLogList = new ArrayList<XXTrxLog>();
                XXTrxLog xTrxLogObj = new XXTrxLog();
                xTrxLogObj.setAction("delete");
@@ -1354,6 +1356,9 @@ public class TestServiceDBStore {
                serviceConfigDefObj.setId(Id);
                xServiceConfigDefList.add(serviceConfigDefObj);
 
+               
Mockito.when(daoManager.getXXSecurityZoneDao()).thenReturn(xSecurityZoneDao);
+               
Mockito.when(xSecurityZoneDao.findZonesByServiceName(rangerService.getName())).thenReturn(zonesNameList);
+
                Mockito.when(daoManager.getXXPolicy()).thenReturn(xPolicyDao);
                Mockito.when(xPolicyDao.findByServiceId(rangerService.getId()))
                                .thenReturn(policiesList);

Reply via email to