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 b31db07db RANGER-4012: optmization of getPolicyByName REST API
b31db07db is described below

commit b31db07dbde2d7109998689046ebe4b34bfea6c8
Author: Ramachandran Krishnan <[email protected]>
AuthorDate: Tue Feb 7 23:01:29 2023 +0530

    RANGER-4012: optmization of getPolicyByName REST API
    
    Signed-off-by: Madhan Neethiraj <[email protected]>
---
 .../main/java/org/apache/ranger/RangerClient.java  | 28 +++++++++++
 .../python/apache_ranger/client/ranger_client.py   | 13 ++++++
 .../ranger/examples/sampleclient/SampleClient.java | 26 +++++++----
 .../java/org/apache/ranger/rest/PublicAPIsv2.java  | 20 ++++----
 .../java/org/apache/ranger/rest/ServiceREST.java   | 48 ++++---------------
 .../org/apache/ranger/rest/TestPublicAPIsv2.java   | 28 +++++------
 .../org/apache/ranger/rest/TestServiceREST.java    | 54 ++++++++++++++++++++++
 7 files changed, 142 insertions(+), 75 deletions(-)

diff --git a/intg/src/main/java/org/apache/ranger/RangerClient.java 
b/intg/src/main/java/org/apache/ranger/RangerClient.java
index e4e3a57ad..ff281112f 100644
--- a/intg/src/main/java/org/apache/ranger/RangerClient.java
+++ b/intg/src/main/java/org/apache/ranger/RangerClient.java
@@ -48,6 +48,8 @@ public class RangerClient {
     private static final String PARAM_EXEC_USER                     = 
"execUser";
     private static final String PARAM_POLICY_NAME                   = 
"policyname";
     private static final String PARAM_SERVICE_NAME                  = 
"serviceName";
+    private static final String PARAM_ZONE_NAME                     = 
"zoneName";
+
     private static final String PARAM_RELOAD_SERVICE_POLICIES_CACHE = 
"reloadServicePoliciesCache";
 
     // URIs
@@ -259,6 +261,14 @@ public class RangerClient {
         return callAPI(UPDATE_POLICY_BY_NAME.applyUrlFormat(serviceName, 
policyName), null, policy, RangerPolicy.class);
     }
 
+    public RangerPolicy updatePolicyByNameAndZone(String serviceName, String 
policyName, String zoneName, RangerPolicy policy) throws RangerServiceException 
{
+        Map<String,String> queryParams = new HashMap<>();
+
+        queryParams.put(PARAM_ZONE_NAME, zoneName);
+
+        return callAPI(UPDATE_POLICY_BY_NAME.applyUrlFormat(serviceName, 
policyName), queryParams, policy, RangerPolicy.class);
+    }
+
     public RangerPolicy applyPolicy(RangerPolicy policy) throws 
RangerServiceException {
         return callAPI(APPLY_POLICY, null, policy, RangerPolicy.class);
     }
@@ -276,6 +286,17 @@ public class RangerClient {
         callAPI(DELETE_POLICY_BY_NAME, queryParams);
     }
 
+
+    public void deletePolicyByNameAndZone(String serviceName, String 
policyName, String zoneName) throws RangerServiceException {
+        Map<String,String> queryParams = new HashMap<>();
+
+        queryParams.put(PARAM_POLICY_NAME, policyName);
+        queryParams.put(PARAM_SERVICE_NAME, serviceName);
+        queryParams.put(PARAM_ZONE_NAME, zoneName);
+
+        callAPI(DELETE_POLICY_BY_NAME, queryParams);
+    }
+
     public RangerPolicy getPolicy(long policyId) throws RangerServiceException 
{
         return callAPI(GET_POLICY_BY_ID.applyUrlFormat(policyId), null, null, 
RangerPolicy.class);
     }
@@ -284,6 +305,13 @@ public class RangerClient {
         return callAPI(GET_POLICY_BY_NAME.applyUrlFormat(serviceName, 
policyName), null, null, RangerPolicy.class);
     }
 
+    public RangerPolicy getPolicyByNameAndZone(String serviceName, String 
policyName, String zoneName) throws RangerServiceException {
+        Map<String,String> queryParams = new HashMap<>();
+
+        queryParams.put(PARAM_ZONE_NAME, zoneName);
+
+        return callAPI(GET_POLICY_BY_NAME.applyUrlFormat(serviceName, 
policyName), queryParams, null, RangerPolicy.class);
+    }
     public List<RangerPolicy> getPoliciesInService(String serviceName) throws 
RangerServiceException {
         return callAPI(GET_POLICIES_IN_SERVICE.applyUrlFormat(serviceName), 
null, null, new GenericType<List<RangerPolicy>>(){});
     }
diff --git a/intg/src/main/python/apache_ranger/client/ranger_client.py 
b/intg/src/main/python/apache_ranger/client/ranger_client.py
index 16853d4c2..e26528013 100644
--- a/intg/src/main/python/apache_ranger/client/ranger_client.py
+++ b/intg/src/main/python/apache_ranger/client/ranger_client.py
@@ -138,6 +138,11 @@ class RangerClient:
 
         return type_coerce(resp, RangerPolicy)
 
+    def get_policy_by_name_zone(self, serviceName, policyName, zoneName):
+        resp = 
self.client_http.call_api(RangerClient.GET_POLICY_BY_NAME.format_path({ 
'serviceName': serviceName, 'policyName': policyName}), { 'zoneName': zoneName 
})
+
+        return type_coerce(resp, RangerPolicy)
+
     def get_policies_in_service(self, serviceName, params=None):
         resp = 
self.client_http.call_api(RangerClient.GET_POLICIES_IN_SERVICE.format_path({ 
'serviceName': serviceName }), params)
 
@@ -153,6 +158,11 @@ class RangerClient:
 
         return type_coerce(resp, RangerPolicy)
 
+    def update_policy_by_name_zone(self, serviceName, policyName, zoneName, 
policy):
+        resp = 
self.client_http.call_api(RangerClient.UPDATE_POLICY_BY_NAME.format_path({ 
'serviceName': serviceName, 'policyName': policyName}), { 'zoneName': zoneName 
},  request_data=policy)
+
+        return type_coerce(resp, RangerPolicy)
+
     def apply_policy(self, policy, params=None):
         resp = self.client_http.call_api(RangerClient.APPLY_POLICY, params, 
policy)
 
@@ -164,6 +174,9 @@ class RangerClient:
     def delete_policy(self, serviceName, policyName):
         self.client_http.call_api(RangerClient.DELETE_POLICY_BY_NAME, { 
'servicename': serviceName, 'policyname': policyName })
 
+    def delete_policy_by_name_zone(self, serviceName, policyName, zoneName):
+        self.client_http.call_api(RangerClient.DELETE_POLICY_BY_NAME, { 
'servicename': serviceName, 'policyname': policyName, 'zoneName': zoneName })
+
     def find_policies(self, filter=None):
         resp = self.client_http.call_api(RangerClient.FIND_POLICIES, filter)
 
diff --git 
a/ranger-examples/sample-client/src/main/java/org/apache/ranger/examples/sampleclient/SampleClient.java
 
b/ranger-examples/sample-client/src/main/java/org/apache/ranger/examples/sampleclient/SampleClient.java
index d0202e47e..dd87b81b7 100644
--- 
a/ranger-examples/sample-client/src/main/java/org/apache/ranger/examples/sampleclient/SampleClient.java
+++ 
b/ranger-examples/sample-client/src/main/java/org/apache/ranger/examples/sampleclient/SampleClient.java
@@ -79,6 +79,7 @@ public class SampleClient {
         String serviceDefName     = "sampleServiceDef";
         String serviceName        = "sampleService";
         String policyName         = "samplePolicy";
+        String zoneName           = null;
         String roleName           = "sampleRole";
         Map<String,String> filter = Collections.emptyMap();
 
@@ -145,24 +146,31 @@ public class SampleClient {
                 "root", new 
RangerPolicy.RangerPolicyResource(Collections.singletonList("/path/to/sample/resource"),false,false));
         RangerPolicy policy = new RangerPolicy();
         policy.setService(serviceName);
+        policy.setZoneName(zoneName);
         policy.setName(policyName);
         policy.setResources(resource);
 
         RangerPolicy createdPolicy = rangerClient.createPolicy(policy);
-        LOG.info("New Policy created successfully {}", 
gsonBuilder.toJson(createdPolicy));
+        LOG.info("Created policy {} in zone {}: {}", policyName, zoneName, 
gsonBuilder.toJson(createdPolicy));
 
         /*
-        Get a policy by name
-         */
-        RangerPolicy fetchedPolicy = rangerClient.getPolicy(serviceName, 
policyName);
-        LOG.info("Policy: {} fetched {}", policyName, 
gsonBuilder.toJson(fetchedPolicy));
+        Get a policy by name and Zone
+        */
+        RangerPolicy fetchedPolicy = 
rangerClient.getPolicyByNameAndZone(serviceName, policyName, zoneName);
+        LOG.info("Fetched policy {} in zone {}: {}", policyName, zoneName 
,gsonBuilder.toJson(fetchedPolicy));
 
+        /*
+        Update a policy by name and Zone
+        */
+        RangerPolicy updatedPolicy = 
rangerClient.updatePolicyByNameAndZone(serviceName, policyName, zoneName, 
fetchedPolicy);
+        LOG.info("Updated policy {} in zone {}: {}", policyName, zoneName 
,gsonBuilder.toJson(updatedPolicy));
 
         /*
-        Delete a policy
-         */
-        rangerClient.deletePolicy(serviceName, policyName);
-        LOG.info("Policy {} successfully deleted", policyName);
+        Delete a policy by name and zone
+        */
+        rangerClient.deletePolicyByNameAndZone(serviceName, policyName, 
zoneName);
+        LOG.info("Deleted policy {} in zone {}", policyName, zoneName);
+
 
         /* import tags */
         RangerTagDef tagDefTest1 = new RangerTagDef("test1");
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 d98910bee..4ad6058cc 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
@@ -34,7 +34,6 @@ import org.apache.ranger.plugin.model.RangerServiceDef;
 import org.apache.ranger.plugin.model.RangerServiceHeaderInfo;
 import org.apache.ranger.plugin.model.RangerServiceTags;
 import org.apache.ranger.plugin.util.GrantRevokeRoleRequest;
-import org.apache.ranger.plugin.util.SearchFilter;
 import org.apache.ranger.plugin.util.ServiceTags;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -463,23 +462,20 @@ public class PublicAPIsv2 {
        @Produces({ "application/json" })
        public RangerPolicy getPolicyByName(@PathParam("servicename") String 
serviceName,
                                            @PathParam("policyname") String 
policyName,
+                                           @QueryParam("zoneName") String 
zoneName,
                                            @Context HttpServletRequest 
request) {
                if(logger.isDebugEnabled()) {
-                       logger.debug("==> PublicAPIsv2.getPolicyByName(" + 
serviceName + "," + policyName + ")");
+                       logger.debug("==> PublicAPIsv2.getPolicyByName(" + 
serviceName + "," + policyName + "," + zoneName + ")");
                }
 
-               SearchFilter filter = new SearchFilter();
-               filter.setParam(SearchFilter.SERVICE_NAME, serviceName);
-               filter.setParam(SearchFilter.POLICY_NAME, policyName);
-               List<RangerPolicy> policies = serviceREST.getPolicies(filter);
+               RangerPolicy policy = serviceREST.getPolicyByName(serviceName, 
policyName, zoneName);
 
-               if (policies.size() != 1) {
+               if (policy == null) {
                        throw 
restErrorUtil.createRESTException(HttpServletResponse.SC_NOT_FOUND, "Not 
found", true);
                }
-               RangerPolicy policy = policies.get(0);
 
                if(logger.isDebugEnabled()) {
-                       logger.debug("<== PublicAPIsv2.getPolicyByName(" + 
serviceName + "," + policyName + ")" + policy);
+                       logger.debug("<== PublicAPIsv2.getPolicyByName(" + 
serviceName + "," + policyName + "," + zoneName + ")" + policy);
                }
                return policy;
        }
@@ -555,11 +551,12 @@ public class PublicAPIsv2 {
        public RangerPolicy updatePolicyByName(RangerPolicy policy,
                                                       
@PathParam("servicename") String serviceName,
                                                       @PathParam("policyname") 
String policyName,
+                                                      @QueryParam("zoneName") 
String zoneName,
                                                       @Context 
HttpServletRequest request) {
                if (policy.getService() == null || 
!policy.getService().equals(serviceName)) {
                        throw 
restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST , "service 
name mismatch", true);
                }
-               RangerPolicy oldPolicy = getPolicyByName(serviceName, 
policyName, request);
+               RangerPolicy oldPolicy = getPolicyByName(serviceName, 
policyName, zoneName, request);
 
                // ignore policy.id - if specified. Retrieve using the given 
serviceName+policyName and use id from the retrieved object
                policy.setId(oldPolicy.getId());
@@ -602,6 +599,7 @@ public class PublicAPIsv2 {
        @Path("/api/policy")
        public void deletePolicyByName(@QueryParam("servicename") String 
serviceName,
                                       @QueryParam("policyname") String 
policyName,
+                                      @QueryParam("zoneName") String zoneName,
                                       @Context HttpServletRequest request) {
                if(logger.isDebugEnabled()) {
                        logger.debug("==> PublicAPIsv2.deletePolicyByName(" + 
serviceName + "," + policyName + ")");
@@ -610,7 +608,7 @@ public class PublicAPIsv2 {
                if (serviceName == null || policyName == null) {
                        throw 
restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST , "Invalid 
service name or policy name", true);
                }
-               RangerPolicy policy = getPolicyByName(serviceName, policyName, 
request);
+               RangerPolicy policy = getPolicyByName(serviceName, policyName, 
zoneName, request);
                serviceREST.deletePolicy(policy.getId());
                if(logger.isDebugEnabled()) {
                        logger.debug("<== PublicAPIsv2.deletePolicyByName(" + 
serviceName + "," + policyName + ")");
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 e02b0ea42..9e2fb66b4 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
@@ -4365,59 +4365,33 @@ public class ServiceREST {
        }
 
        /**
-        * Returns {@link RangerPolicy} for non-empty serviceName and 
policyName, null otherwise.
+        * Returns {@link RangerPolicy} for non-empty serviceName, policyName 
and zoneName null otherwise.
         * @param serviceName
         * @param policyName
+        * @param zoneName
         * @return
         */
-    private RangerPolicy getPolicyByName(String serviceName, String 
policyName) {
 
+       public RangerPolicy getPolicyByName(String serviceName, String 
policyName, String zoneName) {
         if (LOG.isDebugEnabled()) {
-            LOG.debug("==> ServiceREST.getPolicyByName(" + serviceName + "," + 
policyName + ")");
+            LOG.debug("==> ServiceREST.getPolicyByName(" + serviceName + "," + 
policyName + "," + zoneName + ")");
         }
 
         RangerPolicy ret = null;
         if (StringUtils.isNotBlank(serviceName) && 
StringUtils.isNotBlank(policyName)) {
-            SearchFilter filter = new SearchFilter();
+            XXPolicy dbPolicy = 
daoManager.getXXPolicy().findPolicy(policyName, serviceName, zoneName);
 
-            filter.setParam(SearchFilter.SERVICE_NAME, serviceName);
-            filter.setParam(SearchFilter.POLICY_NAME, policyName);
-
-            List<RangerPolicy> policies = getPolicies(filter);
-
-            if (CollectionUtils.isNotEmpty(policies)) {
-                ret = policies.get(0);
+            if (dbPolicy != null) {
+                ret = policyService.getPopulatedViewObject(dbPolicy);
             }
         }
 
         if (LOG.isDebugEnabled()) {
-            LOG.debug("<== ServiceREST.getPolicyByName(" + serviceName + "," + 
policyName + ") " + (ret != null ? ret : "ret is null"));
+            LOG.debug("<== ServiceREST.getPolicyByName(" + serviceName + "," + 
policyName  + "," + zoneName + ") " + (ret != null ? ret : "ret is null"));
         }
         return ret;
     }
 
-       private RangerPolicy getPolicyByNameAndZone(String serviceName, String 
policyName, String zoneName) {
-               RangerPolicy ret = null;
-               if(LOG.isDebugEnabled()) {
-                       LOG.debug("==> ServiceREST.getPolicyByNameAndZone(" + 
serviceName + "," + policyName + "," + zoneName + ")");
-               }
-
-               SearchFilter filter = new SearchFilter();
-               filter.setParam(SearchFilter.SERVICE_NAME, serviceName);
-               filter.setParam(SearchFilter.POLICY_NAME, policyName);
-               filter.setParam(SearchFilter.ZONE_NAME, zoneName);
-               List<RangerPolicy> policies = getPolicies(filter);
-
-               if (CollectionUtils.isNotEmpty(policies) && policies.size()==1) 
{
-                       ret = policies.get(0);
-               }
-
-               if(LOG.isDebugEnabled()) {
-                       LOG.debug("<== ServiceREST.getPolicyByNameAndZone(" + 
serviceName + "," + policyName + "," + zoneName + ")");
-               }
-               return ret;
-       }
-
        private RangerPolicy createPolicyUnconditionally(RangerPolicy policy) 
throws Exception {
                if(LOG.isDebugEnabled()) {
                        LOG.debug("==> ServiceREST.createPolicyUnconditionally( 
"+ policy +")");
@@ -4479,11 +4453,7 @@ public class ServiceREST {
                        if (StringUtils.isNotBlank(zoneName)) {
                                policy.setZoneName(StringUtils.trim(zoneName));
                        }
-                       if (StringUtils.isNotBlank(zoneName)) {
-                               existingPolicy = 
getPolicyByNameAndZone(policy.getService(), policy.getName(), 
policy.getZoneName());
-                       } else {
-                               existingPolicy = 
getPolicyByName(policy.getService(), policy.getName());
-                       }
+                       existingPolicy = getPolicyByName(policy.getService(), 
policy.getName(), policy.getZoneName());
                }
 
                if(LOG.isDebugEnabled()) {
diff --git 
a/security-admin/src/test/java/org/apache/ranger/rest/TestPublicAPIsv2.java 
b/security-admin/src/test/java/org/apache/ranger/rest/TestPublicAPIsv2.java
index 7409883ab..53750a041 100644
--- a/security-admin/src/test/java/org/apache/ranger/rest/TestPublicAPIsv2.java
+++ b/security-admin/src/test/java/org/apache/ranger/rest/TestPublicAPIsv2.java
@@ -46,7 +46,6 @@ import 
org.apache.ranger.plugin.model.RangerServiceDef.RangerEnumDef;
 import 
org.apache.ranger.plugin.model.RangerServiceDef.RangerPolicyConditionDef;
 import org.apache.ranger.plugin.model.RangerServiceDef.RangerResourceDef;
 import org.apache.ranger.plugin.model.RangerServiceDef.RangerServiceConfigDef;
-import org.apache.ranger.plugin.util.SearchFilter;
 import org.apache.ranger.security.context.RangerContextHolder;
 import org.apache.ranger.security.context.RangerSecurityContext;
 import org.apache.ranger.service.RangerPolicyService;
@@ -479,17 +478,16 @@ public class TestPublicAPIsv2 {
                RangerService rangerService = rangerService();
                String serviceName = rangerService.getName();
                String policyName = rangerPolicy.getName();
-               List<RangerPolicy> policies = new ArrayList<RangerPolicy>();
-               policies.add(rangerPolicy);
-               Mockito.when(serviceREST.getPolicies((SearchFilter) 
Mockito.any())).thenReturn(policies);
-               RangerPolicy dbRangerPolicy = 
publicAPIsv2.getPolicyByName(serviceName, policyName, request);
+               String zoneName = "zone-1";
+               
Mockito.when(serviceREST.getPolicyByName(Mockito.anyString(),Mockito.anyString(),Mockito.anyString())).thenReturn(rangerPolicy);
+               RangerPolicy dbRangerPolicy = 
publicAPIsv2.getPolicyByName(serviceName, policyName, zoneName, request);
                Assert.assertNotNull(dbRangerPolicy);
                Assert.assertEquals(dbRangerPolicy, rangerPolicy);
                Assert.assertEquals(dbRangerPolicy.getId(),
                                rangerPolicy.getId());
                Assert.assertEquals(dbRangerPolicy.getName(),
                                rangerPolicy.getName());
-               Mockito.verify(serviceREST).getPolicies((SearchFilter) 
Mockito.any());
+               
Mockito.verify(serviceREST).getPolicyByName(Mockito.anyString(),Mockito.anyString(),Mockito.anyString());
        }
        
        @Test
@@ -559,11 +557,10 @@ public class TestPublicAPIsv2 {
                String policyName = rangerPolicy.getName();
                RangerService rangerService = rangerService();
                String serviceName = rangerService.getName();
-               List<RangerPolicy> policies = new ArrayList<RangerPolicy>();
-               policies.add(rangerPolicy);
-               Mockito.when(serviceREST.getPolicies((SearchFilter) 
Mockito.any())).thenReturn(policies);
+               String zoneName = "zone-1";
+               
Mockito.when(serviceREST.getPolicyByName(Mockito.anyString(),Mockito.anyString(),Mockito.anyString())).thenReturn(rangerPolicy);
                Mockito.when(serviceREST.updatePolicy(rangerPolicy, 
rangerPolicy.getId())).thenReturn(rangerPolicy);
-               RangerPolicy dbRangerPolicy = 
publicAPIsv2.updatePolicyByName(rangerPolicy, serviceName, policyName, request);
+               RangerPolicy dbRangerPolicy = 
publicAPIsv2.updatePolicyByName(rangerPolicy, serviceName, policyName, 
zoneName, request);
                Assert.assertNotNull(dbRangerPolicy);
                Assert.assertEquals(dbRangerPolicy, rangerPolicy);
                Assert.assertEquals(dbRangerPolicy.getId(),
@@ -571,7 +568,7 @@ public class TestPublicAPIsv2 {
                Assert.assertEquals(dbRangerPolicy.getName(),
                                rangerPolicy.getName());
                Mockito.verify(serviceREST).updatePolicy(rangerPolicy, 
rangerPolicy.getId());
-               Mockito.verify(serviceREST).getPolicies((SearchFilter) 
Mockito.any());
+               
Mockito.verify(serviceREST).getPolicyByName(Mockito.anyString(),Mockito.anyString(),Mockito.anyString());
        }
        
        @Test
@@ -588,12 +585,11 @@ public class TestPublicAPIsv2 {
                String policyName = rangerPolicy.getName();
                RangerService rangerService = rangerService();
                String serviceName = rangerService.getName();
-               List<RangerPolicy> policies = new ArrayList<RangerPolicy>();
-               policies.add(rangerPolicy);
-               Mockito.when(serviceREST.getPolicies((SearchFilter) 
Mockito.any())).thenReturn(policies);
+               String zoneName = "zone-1";
+               
Mockito.when(serviceREST.getPolicyByName(Mockito.anyString(),Mockito.anyString(),Mockito.anyString())).thenReturn(rangerPolicy);
                Mockito.doNothing().when(serviceREST).deletePolicy(Id);
-               publicAPIsv2.deletePolicyByName(serviceName, policyName, 
request);
-               Mockito.verify(serviceREST).getPolicies((SearchFilter) 
Mockito.any());
+               publicAPIsv2.deletePolicyByName(serviceName, policyName, 
zoneName, request);
+               
Mockito.verify(serviceREST).getPolicyByName(Mockito.anyString(),Mockito.anyString(),Mockito.anyString());
                Mockito.verify(serviceREST).deletePolicy(Id);
        }
 
diff --git 
a/security-admin/src/test/java/org/apache/ranger/rest/TestServiceREST.java 
b/security-admin/src/test/java/org/apache/ranger/rest/TestServiceREST.java
index 5e3b1908d..9d17553a4 100644
--- a/security-admin/src/test/java/org/apache/ranger/rest/TestServiceREST.java
+++ b/security-admin/src/test/java/org/apache/ranger/rest/TestServiceREST.java
@@ -55,6 +55,7 @@ import org.apache.ranger.common.StringUtil;
 import org.apache.ranger.common.UserSessionBase;
 import org.apache.ranger.common.db.RangerTransactionSynchronizationAdapter;
 import org.apache.ranger.db.RangerDaoManager;
+import org.apache.ranger.db.XXPolicyDao;
 import org.apache.ranger.db.XXSecurityZoneDao;
 import org.apache.ranger.db.XXSecurityZoneRefServiceDao;
 import org.apache.ranger.db.XXSecurityZoneRefTagServiceDao;
@@ -447,6 +448,22 @@ public class TestServiceREST {
                return grantRevokeRequest;
        }
 
+       private XXPolicy getXXPolicy() {
+               XXPolicy xxPolicy = new XXPolicy();
+               xxPolicy.setId(Id);
+               xxPolicy.setName("HDFS_1-1-20150316062453");
+               xxPolicy.setAddedByUserId(Id);
+               xxPolicy.setDescription("policy");
+               xxPolicy.setGuid("policyguid");
+               xxPolicy.setCreateTime(new Date());
+               xxPolicy.setIsAuditEnabled(true);
+               xxPolicy.setIsEnabled(true);
+               xxPolicy.setService(1L);
+               xxPolicy.setUpdatedByUserId(Id);
+               xxPolicy.setUpdateTime(new Date());
+               return xxPolicy;
+       }
+
        @Test
        public void test1createServiceDef() throws Exception {
                RangerServiceDef rangerServiceDef = rangerServiceDef();
@@ -2675,4 +2692,41 @@ public class TestServiceREST {
                serviceREST.resetPolicyCache(serviceName);
                
Mockito.verify(restErrorUtil).createRESTException(Mockito.anyInt(), 
Mockito.anyString(), Mockito.anyBoolean());
        }
+
+       @Test
+       public void test80GetPolicyByNameAndServiceNameWithZoneName() throws 
Exception {
+               RangerPolicy rangerPolicy = rangerPolicy();
+               RangerService rangerService = rangerService();
+               XXPolicy xxPolicy = new XXPolicy();
+               String serviceName = rangerService.getName();
+               String policyName = rangerPolicy.getName();
+               String zoneName = "zone-1";
+               XXPolicyDao xXPolicyDao = Mockito.mock(XXPolicyDao.class);
+               Mockito.when(daoManager.getXXPolicy()).thenReturn(xXPolicyDao);
+               
Mockito.when(daoManager.getXXPolicy().findPolicy(policyName,serviceName,zoneName)).thenReturn(xxPolicy);
+               
Mockito.when(policyService.getPopulatedViewObject(xxPolicy)).thenReturn(rangerPolicy);
+               RangerPolicy dbRangerPolicy = 
serviceREST.getPolicyByName(serviceName, policyName, zoneName);
+               Assert.assertNotNull(dbRangerPolicy);
+               Assert.assertEquals(dbRangerPolicy, rangerPolicy);
+               Assert.assertEquals(dbRangerPolicy.getId(), 
rangerPolicy.getId());
+               Assert.assertEquals(dbRangerPolicy.getName(), 
rangerPolicy.getName());
+       }
+
+       @Test
+       public void test81GetPolicyByNameAndServiceNameWithZoneNameIsNull() 
throws Exception {
+               RangerPolicy rangerPolicy = rangerPolicy();
+               RangerService rangerService = rangerService();
+               XXPolicy xxPolicy = new XXPolicy();
+               String serviceName = rangerService.getName();
+               String policyName = rangerPolicy.getName();
+               XXPolicyDao xXPolicyDao = Mockito.mock(XXPolicyDao.class);
+               Mockito.when(daoManager.getXXPolicy()).thenReturn(xXPolicyDao);
+               
Mockito.when(daoManager.getXXPolicy().findPolicy(policyName,serviceName,null)).thenReturn(xxPolicy);
+               
Mockito.when(policyService.getPopulatedViewObject(xxPolicy)).thenReturn(rangerPolicy);
+               RangerPolicy dbRangerPolicy = 
serviceREST.getPolicyByName(serviceName, policyName, null);
+               Assert.assertNotNull(dbRangerPolicy);
+               Assert.assertEquals(dbRangerPolicy, rangerPolicy);
+               Assert.assertEquals(dbRangerPolicy.getId(), 
rangerPolicy.getId());
+               Assert.assertEquals(dbRangerPolicy.getName(), 
rangerPolicy.getName());
+       }
 }

Reply via email to