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 ae6481f3b RANGER-4630: added pagination support and searchFilters in 
tag REST APIs
ae6481f3b is described below

commit ae6481f3be18a379a5aa6ed744197701e692d77a
Author: Anand Nadar <nadaranand...@gmail.com>
AuthorDate: Sat Feb 17 09:03:14 2024 -0800

    RANGER-4630: added pagination support and searchFilters in tag REST APIs
    
    Signed-off-by: Madhan Neethiraj <mad...@apache.org>
---
 .../apache/ranger/plugin/util/SearchFilter.java    |   4 +
 .../org/apache/ranger/common/RangerSearchUtil.java |  11 ++
 .../main/java/org/apache/ranger/rest/TagREST.java  | 111 +++++++++++++++++++
 .../org/apache/ranger/rest/TagRESTConstants.java   |   3 +
 .../service/RangerServiceResourceService.java      |   9 ++
 .../service/RangerServiceResourceServiceBase.java  |   6 +
 .../apache/ranger/service/RangerTagDefService.java |  11 +-
 .../ranger/service/RangerTagDefServiceBase.java    |   5 +
 .../apache/ranger/service/RangerTagService.java    |   7 ++
 .../ranger/service/RangerTagServiceBase.java       |   6 +-
 .../java/org/apache/ranger/rest/TestTagREST.java   | 121 ++++++++++++++++++++-
 11 files changed, 290 insertions(+), 4 deletions(-)

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 ad304f88f..4534b7848 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
@@ -37,6 +37,7 @@ public class SearchFilter {
        public static final String IS_ENABLED      = "isEnabled";     // search
        public static final String IS_RECURSIVE    = "isRecursive";   // search
        public static final String TAG_SERVICE_NAME = "tagServiceName";  // 
search
+       public static final String TAG_SERVICE_NAME_PARTIAL = 
"tagServiceNamePartial";  // search
        public static final String TAG_SERVICE_ID  = "tagServiceId";  // search
        public static final String GDS_SERVICE_NAME = "gdsServiceName";  // 
search
        public static final String GDS_SERVICE_ID   = "gdsServiceId";  // search
@@ -76,6 +77,9 @@ public class SearchFilter {
        public static final String TAG_DEF_ID                = "tagDefId";      
      // search
        public static final String TAG_DEF_GUID              = "tagDefGuid";    
      // search
        public static final String TAG_TYPE                  = "tagType";       
      // search
+       public static final String TAG_TYPE_PARTIAL          = 
"tagTypePartial";      // search
+       public static final String TAG_SOURCE                = "tagSource";     
      // search
+       public static final String TAG_SOURCE_PARTIAL        = 
"tagSourcePartial";    // search
        public static final String TAG_ID                    = "tagId";         
      // search
        public static final String TAG_GUID                  = "tagGuid";       
      // search
        public static final String TAG_RESOURCE_ID           = "resourceId";    
      // search
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 59b57370b..2936c3a13 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
@@ -92,6 +92,17 @@ public class RangerSearchUtil extends SearchUtil {
                ret.setParam(SearchFilter.FETCH_TAG_POLICIES, 
request.getParameter(SearchFilter.FETCH_TAG_POLICIES));
                ret.setParam(SearchFilter.SERVICE_NAME_PREFIX, 
request.getParameter(SearchFilter.SERVICE_NAME_PREFIX));
                ret.setParam(SearchFilter.ZONE_NAME_PREFIX, 
request.getParameter(SearchFilter.ZONE_NAME_PREFIX));
+               ret.setParam(SearchFilter.TAG_TYPE, 
request.getParameter(SearchFilter.TAG_TYPE));
+               ret.setParam(SearchFilter.TAG_TYPE_PARTIAL, 
request.getParameter(SearchFilter.TAG_TYPE_PARTIAL));
+               ret.setParam(SearchFilter.TAG_SOURCE, 
request.getParameter(SearchFilter.TAG_SOURCE));
+               ret.setParam(SearchFilter.TAG_SOURCE_PARTIAL, 
request.getParameter(SearchFilter.TAG_SOURCE_PARTIAL));
+               ret.setParam(SearchFilter.TAG_SERVICE_NAME, 
request.getParameter(SearchFilter.TAG_SERVICE_NAME));
+               ret.setParam(SearchFilter.TAG_SERVICE_NAME_PARTIAL, 
request.getParameter(SearchFilter.TAG_SERVICE_NAME_PARTIAL));
+               ret.setParam(SearchFilter.TAG_RESOURCE_GUID, 
request.getParameter(SearchFilter.TAG_RESOURCE_GUID));
+               ret.setParam(SearchFilter.TAG_RESOURCE_SIGNATURE, 
request.getParameter(SearchFilter.TAG_RESOURCE_SIGNATURE));
+               ret.setParam(SearchFilter.TAG_DEF_GUID, 
request.getParameter(SearchFilter.TAG_DEF_GUID));
+               ret.setParam(SearchFilter.TAG_DEF_ID, 
request.getParameter(SearchFilter.TAG_DEF_ID));
+               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.SHARE_STATUS, 
request.getParameter(SearchFilter.SHARE_STATUS));
diff --git a/security-admin/src/main/java/org/apache/ranger/rest/TagREST.java 
b/security-admin/src/main/java/org/apache/ranger/rest/TagREST.java
index 6d0019f70..f05253fde 100644
--- a/security-admin/src/main/java/org/apache/ranger/rest/TagREST.java
+++ b/security-admin/src/main/java/org/apache/ranger/rest/TagREST.java
@@ -28,6 +28,7 @@ import org.apache.ranger.biz.ServiceDBStore;
 import org.apache.ranger.biz.TagDBStore;
 import org.apache.ranger.common.MessageEnums;
 import org.apache.ranger.common.RESTErrorUtil;
+import org.apache.ranger.common.RangerSearchUtil;
 import org.apache.ranger.db.RangerDaoManager;
 import org.apache.ranger.entity.XXService;
 import org.apache.ranger.entity.XXServiceDef;
@@ -38,12 +39,16 @@ import org.apache.ranger.plugin.model.RangerTag;
 import org.apache.ranger.plugin.model.RangerTagResourceMap;
 import org.apache.ranger.plugin.model.RangerTagDef;
 import org.apache.ranger.plugin.store.EmbeddedServiceDefsUtil;
+import org.apache.ranger.plugin.store.PList;
 import org.apache.ranger.plugin.store.TagStore;
 import org.apache.ranger.plugin.store.TagValidator;
 import org.apache.ranger.plugin.util.RangerPerfTracer;
 import org.apache.ranger.plugin.util.RangerRESTUtils;
 import org.apache.ranger.plugin.util.SearchFilter;
 import org.apache.ranger.plugin.util.ServiceTags;
+import org.apache.ranger.service.RangerServiceResourceService;
+import org.apache.ranger.service.RangerTagDefService;
+import org.apache.ranger.service.RangerTagService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -100,6 +105,18 @@ public class TagREST {
 
     TagValidator validator;
 
+    @Autowired
+    RangerSearchUtil searchUtil;
+
+    @Autowired
+    RangerTagService tagService;
+
+    @Autowired
+    RangerTagDefService tagDefService;
+
+    @Autowired
+    RangerServiceResourceService rangerServiceResourceService;
+
     public TagREST() {
        }
 
@@ -346,6 +363,38 @@ public class TagREST {
         return ret;
     }
 
+    @GET
+    @Path(TagRESTConstants.TAGDEFS_RESOURCE_PAGINATED)
+    @Produces({ "application/json" })
+    @PreAuthorize("hasRole('ROLE_SYS_ADMIN')")
+    public PList<RangerTagDef> getTagDefs(@Context HttpServletRequest request) 
{
+        if (LOG.isDebugEnabled()) {
+            LOG.debug("==> TagREST.getTagDefs()");
+        }
+
+        final PList<RangerTagDef> ret;
+
+        try {
+            SearchFilter filter = searchUtil.getSearchFilter(request, 
tagDefService.sortFields);
+
+            ret = tagStore.getPaginatedTagDefs(filter);
+        } catch (Exception excp) {
+            LOG.error("getTagDefs() failed", excp);
+
+            throw 
restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, 
excp.getMessage(), true);
+        }
+
+        if (ret == null) {
+            throw 
restErrorUtil.createRESTException(HttpServletResponse.SC_NOT_FOUND, "Not 
found", true);
+        }
+
+        if (LOG.isDebugEnabled()) {
+            LOG.debug("<== TagREST.getTagDefs(): count=" + ((ret == null || 
ret.getList() == null) ? 0 : ret.getList().size()));
+        }
+
+        return ret;
+    }
+
     @GET
     @Path(TagRESTConstants.TAGTYPES_RESOURCE)
     @Produces({ "application/json" })
@@ -606,6 +655,40 @@ public class TagREST {
         return ret;
     }
 
+    @GET
+    @Path(TagRESTConstants.TAGS_RESOURCE_PAGINATED)
+    @Produces({ "application/json" })
+    @PreAuthorize("hasRole('ROLE_SYS_ADMIN')")
+    public PList<RangerTag> getTags(@Context HttpServletRequest request) {
+        if (LOG.isDebugEnabled()) {
+            LOG.debug("==> TagREST.getTags()");
+        }
+
+        final PList<RangerTag> ret;
+
+        try {
+            SearchFilter filter = searchUtil.getSearchFilter(request, 
tagService.sortFields);
+
+            ret = tagStore.getPaginatedTags(filter);
+        } catch (Exception excp) {
+            LOG.error("getTags() failed", excp);
+
+            throw 
restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, 
excp.getMessage(), true);
+        }
+
+        if (CollectionUtils.isEmpty(ret.getList())) {
+            if (LOG.isDebugEnabled()) {
+                LOG.debug("getTags() - No tags found");
+            }
+        }
+
+        if (LOG.isDebugEnabled()) {
+            LOG.debug("<== TagREST.getTags(): count=" + ((ret == null || 
ret.getList() == null) ? 0 : ret.getList().size()));
+        }
+
+        return ret;
+    }
+
     /**
      * Resets/ removes tag policy cache for given service.
      * @param serviceName non-empty service-name
@@ -948,6 +1031,34 @@ public class TagREST {
         return ret;
     }
 
+    @GET
+    @Path(TagRESTConstants.RESOURCES_RESOURCE_PAGINATED)
+    @Produces({ "application/json" })
+    @PreAuthorize("hasRole('ROLE_SYS_ADMIN')")
+    public PList<RangerServiceResource> getServiceResources(@Context 
HttpServletRequest request) {
+        if (LOG.isDebugEnabled()) {
+            LOG.debug("==> TagREST.getServiceResources()");
+        }
+
+        final PList<RangerServiceResource> ret;
+
+        try {
+            SearchFilter filter = searchUtil.getSearchFilter(request, 
rangerServiceResourceService.sortFields);
+
+            ret = tagStore.getPaginatedServiceResources(filter);
+        } catch (Exception excp) {
+            LOG.error("getServiceResources() failed", excp);
+
+            throw 
restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, 
excp.getMessage(), true);
+        }
+
+        if (LOG.isDebugEnabled()) {
+            LOG.debug("<== TagREST.getServiceResources(): count=" + ((ret == 
null || ret.getList() == null) ? 0 : ret.getList().size()));
+        }
+
+        return ret;
+    }
+
     @POST
     @Path(TagRESTConstants.TAGRESOURCEMAPS_RESOURCE)
     @Consumes({ "application/json" })
diff --git 
a/security-admin/src/main/java/org/apache/ranger/rest/TagRESTConstants.java 
b/security-admin/src/main/java/org/apache/ranger/rest/TagRESTConstants.java
index 9e78cf0e8..a6e49e731 100644
--- a/security-admin/src/main/java/org/apache/ranger/rest/TagRESTConstants.java
+++ b/security-admin/src/main/java/org/apache/ranger/rest/TagRESTConstants.java
@@ -23,10 +23,13 @@ public class TagRESTConstants {
        public static final String TAGDEF_NAME_AND_VERSION = "tags";
 
        static final String TAGDEFS_RESOURCE         = "/tagdefs/";
+       static final String TAGDEFS_RESOURCE_PAGINATED = "/tagdefs/paginated";
        static final String TAGDEF_RESOURCE          = "/tagdef/";
        static final String TAGS_RESOURCE            = "/tags/";
+       static final String TAGS_RESOURCE_PAGINATED  = "/tags/paginated";
        static final String TAG_RESOURCE             = "/tag/";
        static final String RESOURCES_RESOURCE       = "/resources/";
+       static final String RESOURCES_RESOURCE_PAGINATED = 
"/resources/paginated";
        static final String RESOURCE_RESOURCE        = "/resource/";
        static final String TAGRESOURCEMAPS_RESOURCE = "/tagresourcemaps/";
        static final String IMPORT_SERVICETAGS_RESOURCE = "/importservicetags/";
diff --git 
a/security-admin/src/main/java/org/apache/ranger/service/RangerServiceResourceService.java
 
b/security-admin/src/main/java/org/apache/ranger/service/RangerServiceResourceService.java
index 3a4ccf83d..989ea2259 100644
--- 
a/security-admin/src/main/java/org/apache/ranger/service/RangerServiceResourceService.java
+++ 
b/security-admin/src/main/java/org/apache/ranger/service/RangerServiceResourceService.java
@@ -32,6 +32,7 @@ import org.apache.commons.lang.StringUtils;
 import org.apache.ranger.authorization.utils.JsonUtils;
 import org.apache.ranger.biz.RangerTagDBRetriever;
 import org.apache.ranger.common.SearchField;
+import org.apache.ranger.common.SortField;
 import org.apache.ranger.common.SearchField.DATA_TYPE;
 import org.apache.ranger.common.SearchField.SEARCH_TYPE;
 import org.apache.ranger.entity.XXServiceResource;
@@ -56,7 +57,15 @@ public class RangerServiceResourceService extends 
RangerServiceResourceServiceBa
     public RangerServiceResourceService() {
         searchFields.add(new SearchField(SearchFilter.TAG_RESOURCE_ID, 
"obj.id", DATA_TYPE.INTEGER, SEARCH_TYPE.FULL));
         searchFields.add(new SearchField(SearchFilter.TAG_SERVICE_ID, 
"obj.serviceId", DATA_TYPE.INTEGER, SEARCH_TYPE.FULL));
+        searchFields.add(new SearchField(SearchFilter.TAG_SERVICE_NAME, 
"service.name", DATA_TYPE.STRING, SEARCH_TYPE.FULL, "XXService service", 
"obj.serviceId = service.id"));
+        searchFields.add(new 
SearchField(SearchFilter.TAG_SERVICE_NAME_PARTIAL, "service.name", 
DATA_TYPE.STRING, SEARCH_TYPE.PARTIAL, "XXService service", "obj.serviceId = 
service.id"));
+        searchFields.add(new SearchField(SearchFilter.TAG_RESOURCE_GUID, 
"obj.guid", DATA_TYPE.STRING, SEARCH_TYPE.FULL));
         searchFields.add(new SearchField(SearchFilter.TAG_RESOURCE_SIGNATURE, 
"obj.resourceSignature", DATA_TYPE.STRING, SEARCH_TYPE.FULL));
+
+        sortFields.add(new SortField(SearchFilter.TAG_RESOURCE_ID, "obj.id", 
true, SortField.SORT_ORDER.ASC));
+        sortFields.add(new SortField(SearchFilter.TAG_SERVICE_ID, 
"obj.serviceId"));
+        sortFields.add(new SortField(SearchFilter.CREATE_TIME,  
"obj.createTime"));
+        sortFields.add(new SortField(SearchFilter.UPDATE_TIME,  
"obj.updateTime"));
     }
 
     @Override
diff --git 
a/security-admin/src/main/java/org/apache/ranger/service/RangerServiceResourceServiceBase.java
 
b/security-admin/src/main/java/org/apache/ranger/service/RangerServiceResourceServiceBase.java
index 329d3eeec..69b64383c 100644
--- 
a/security-admin/src/main/java/org/apache/ranger/service/RangerServiceResourceServiceBase.java
+++ 
b/security-admin/src/main/java/org/apache/ranger/service/RangerServiceResourceServiceBase.java
@@ -110,6 +110,12 @@ public abstract class RangerServiceResourceServiceBase<T 
extends XXServiceResour
                        resourceList.add(taggedRes);
                }
                retList.setList(resourceList);
+               retList.setResultSize(resourceList.size());
+               retList.setPageSize(searchFilter.getMaxRows());
+               retList.setStartIndex(searchFilter.getStartIndex());
+               retList.setSortType(searchFilter.getSortType());
+               retList.setSortBy(searchFilter.getSortBy());
+
                return retList;
        }
 
diff --git 
a/security-admin/src/main/java/org/apache/ranger/service/RangerTagDefService.java
 
b/security-admin/src/main/java/org/apache/ranger/service/RangerTagDefService.java
index 8f677995b..c779b7746 100644
--- 
a/security-admin/src/main/java/org/apache/ranger/service/RangerTagDefService.java
+++ 
b/security-admin/src/main/java/org/apache/ranger/service/RangerTagDefService.java
@@ -26,6 +26,7 @@ import org.apache.commons.collections.CollectionUtils;
 import org.apache.ranger.authorization.utils.JsonUtils;
 import org.apache.ranger.biz.RangerTagDBRetriever;
 import org.apache.ranger.common.SearchField;
+import org.apache.ranger.common.SortField;
 import org.apache.ranger.common.SearchField.DATA_TYPE;
 import org.apache.ranger.common.SearchField.SEARCH_TYPE;
 import org.apache.ranger.entity.XXTagDef;
@@ -40,6 +41,14 @@ public class RangerTagDefService extends 
RangerTagDefServiceBase<XXTagDef, Range
                searchFields.add(new SearchField(SearchFilter.TAG_DEF_ID, 
"obj.id", DATA_TYPE.INTEGER, SEARCH_TYPE.FULL));
                searchFields.add(new SearchField(SearchFilter.TAG_DEF_GUID, 
"obj.guid", DATA_TYPE.STRING, SEARCH_TYPE.FULL));
                searchFields.add(new SearchField(SearchFilter.TAG_TYPE, 
"obj.name", DATA_TYPE.STRING, SEARCH_TYPE.FULL));
+               searchFields.add(new SearchField(SearchFilter.TAG_TYPE_PARTIAL, 
"obj.name", DATA_TYPE.STRING, SEARCH_TYPE.PARTIAL));
+               searchFields.add(new SearchField(SearchFilter.TAG_SOURCE, 
"obj.source", DATA_TYPE.STRING, SEARCH_TYPE.FULL));
+               searchFields.add(new 
SearchField(SearchFilter.TAG_SOURCE_PARTIAL, "obj.source", DATA_TYPE.STRING, 
SEARCH_TYPE.PARTIAL));
+
+               sortFields.add(new SortField(SearchFilter.TAG_DEF_ID, "obj.id", 
true, SortField.SORT_ORDER.ASC));
+               sortFields.add(new SortField(SearchFilter.TAG_TYPE, 
"obj.name"));
+               sortFields.add(new SortField(SearchFilter.CREATE_TIME,  
"obj.createTime"));
+               sortFields.add(new SortField(SearchFilter.UPDATE_TIME,  
"obj.updateTime"));
        }
        
        @Override
@@ -117,5 +126,5 @@ public class RangerTagDefService extends 
RangerTagDefServiceBase<XXTagDef, Range
     public List<RangerTagDef.RangerTagAttributeDef> 
getAttributeDefForTagDef(XXTagDef xtagDef) {
         return new ArrayList<>();
     }
-       
+
 }
diff --git 
a/security-admin/src/main/java/org/apache/ranger/service/RangerTagDefServiceBase.java
 
b/security-admin/src/main/java/org/apache/ranger/service/RangerTagDefServiceBase.java
index 929a4b06b..47204767a 100644
--- 
a/security-admin/src/main/java/org/apache/ranger/service/RangerTagDefServiceBase.java
+++ 
b/security-admin/src/main/java/org/apache/ranger/service/RangerTagDefServiceBase.java
@@ -127,6 +127,11 @@ public abstract class RangerTagDefServiceBase<T extends 
XXTagDef, V extends Rang
                }
 
                retList.setList(tagDefList);
+               retList.setResultSize(tagDefList.size());
+               retList.setPageSize(searchFilter.getMaxRows());
+               retList.setStartIndex(searchFilter.getStartIndex());
+               retList.setSortType(searchFilter.getSortType());
+               retList.setSortBy(searchFilter.getSortBy());
 
                return retList;
        }
diff --git 
a/security-admin/src/main/java/org/apache/ranger/service/RangerTagService.java 
b/security-admin/src/main/java/org/apache/ranger/service/RangerTagService.java
index 3a90bd8a9..055525f85 100644
--- 
a/security-admin/src/main/java/org/apache/ranger/service/RangerTagService.java
+++ 
b/security-admin/src/main/java/org/apache/ranger/service/RangerTagService.java
@@ -31,6 +31,7 @@ import org.apache.commons.lang.StringUtils;
 import org.apache.ranger.authorization.utils.JsonUtils;
 import org.apache.ranger.biz.RangerTagDBRetriever;
 import org.apache.ranger.common.SearchField;
+import org.apache.ranger.common.SortField;
 import org.apache.ranger.common.SearchField.DATA_TYPE;
 import org.apache.ranger.common.SearchField.SEARCH_TYPE;
 import org.apache.ranger.entity.XXServiceResource;
@@ -49,6 +50,12 @@ public class RangerTagService extends 
RangerTagServiceBase<XXTag, RangerTag> {
                searchFields.add(new SearchField(SearchFilter.TAG_ID, "obj.id", 
SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
                searchFields.add(new SearchField(SearchFilter.TAG_DEF_ID, 
"obj.type", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL));
                searchFields.add(new SearchField(SearchFilter.TAG_TYPE, 
"tagDef.name", DATA_TYPE.STRING, SEARCH_TYPE.FULL, "XXTagDef tagDef", "obj.type 
= tagDef.id"));
+               searchFields.add(new SearchField(SearchFilter.TAG_TYPE_PARTIAL, 
"tagDef.name", DATA_TYPE.STRING, SEARCH_TYPE.PARTIAL, "XXTagDef tagDef", 
"obj.type = tagDef.id"));
+
+               sortFields.add(new SortField(SearchFilter.TAG_ID, "obj.id", 
true, SortField.SORT_ORDER.ASC));
+               sortFields.add(new SortField(SearchFilter.TAG_DEF_ID, 
"obj.type"));
+               sortFields.add(new SortField(SearchFilter.CREATE_TIME, 
"obj.createTime"));
+               sortFields.add(new SortField(SearchFilter.UPDATE_TIME, 
"obj.updateTime"));
        }
 
        @Override
diff --git 
a/security-admin/src/main/java/org/apache/ranger/service/RangerTagServiceBase.java
 
b/security-admin/src/main/java/org/apache/ranger/service/RangerTagServiceBase.java
index 2e2c04f47..1d35564a0 100644
--- 
a/security-admin/src/main/java/org/apache/ranger/service/RangerTagServiceBase.java
+++ 
b/security-admin/src/main/java/org/apache/ranger/service/RangerTagServiceBase.java
@@ -142,7 +142,11 @@ public abstract class RangerTagServiceBase<T extends 
XXTag, V extends RangerTag>
                }
 
                retList.setList(tagList);
-
+               retList.setResultSize(tagList.size());
+               retList.setPageSize(searchFilter.getMaxRows());
+               retList.setStartIndex(searchFilter.getStartIndex());
+               retList.setSortType(searchFilter.getSortType());
+               retList.setSortBy(searchFilter.getSortBy());
                return retList;
        }
 }
diff --git 
a/security-admin/src/test/java/org/apache/ranger/rest/TestTagREST.java 
b/security-admin/src/test/java/org/apache/ranger/rest/TestTagREST.java
index 570ce874b..98d87bc0a 100644
--- a/security-admin/src/test/java/org/apache/ranger/rest/TestTagREST.java
+++ b/security-admin/src/test/java/org/apache/ranger/rest/TestTagREST.java
@@ -16,9 +16,12 @@
  */
 package org.apache.ranger.rest;
 
+import static org.mockito.ArgumentMatchers.eq;
+
 import java.util.ArrayList;
 import java.util.List;
 
+import javax.servlet.http.HttpServletRequest;
 import javax.ws.rs.WebApplicationException;
 
 import org.apache.ranger.biz.AssetMgr;
@@ -26,6 +29,7 @@ import org.apache.ranger.biz.RangerBizUtil;
 import org.apache.ranger.biz.ServiceDBStore;
 import org.apache.ranger.biz.TagDBStore;
 import org.apache.ranger.common.RESTErrorUtil;
+import org.apache.ranger.common.RangerSearchUtil;
 import org.apache.ranger.db.RangerDaoManager;
 import org.apache.ranger.db.XXServiceDao;
 import org.apache.ranger.db.XXServiceDefDao;
@@ -36,10 +40,14 @@ import org.apache.ranger.plugin.model.RangerServiceResource;
 import org.apache.ranger.plugin.model.RangerTag;
 import org.apache.ranger.plugin.model.RangerTagDef;
 import org.apache.ranger.plugin.model.RangerTagResourceMap;
+import org.apache.ranger.plugin.store.PList;
 import org.apache.ranger.plugin.store.TagValidator;
 import org.apache.ranger.plugin.util.RangerPluginCapability;
 import org.apache.ranger.plugin.util.SearchFilter;
 import org.apache.ranger.plugin.util.ServiceTags;
+import org.apache.ranger.service.RangerServiceResourceService;
+import org.apache.ranger.service.RangerTagDefService;
+import org.apache.ranger.service.RangerTagService;
 import org.junit.Assert;
 import org.junit.FixMethodOrder;
 import org.junit.Rule;
@@ -90,6 +98,18 @@ public class TestTagREST {
        @Mock
        AssetMgr assetMgr;
 
+       @Mock
+       RangerSearchUtil searchUtil;
+
+       @Mock
+       RangerTagDefService tagDefService;
+
+       @Mock
+       RangerTagService tagService;
+
+       @Mock
+       RangerServiceResourceService resourceService;
+
        @Rule
        public ExpectedException thrown = ExpectedException.none();
 
@@ -420,7 +440,39 @@ public class TestTagREST {
                } catch (Exception e) {
                }
        }
-       
+
+       @Test
+       public void test62getTagDefs() {
+               HttpServletRequest  request      = 
Mockito.mock(HttpServletRequest.class);
+               PList<RangerTagDef> ret          = new PList<RangerTagDef>();
+               List<RangerTagDef>  tagDefList   = new 
ArrayList<RangerTagDef>();
+               SearchFilter        searchFilter = new SearchFilter();
+               RangerTagDef        rangerTagDef = new RangerTagDef();
+
+               rangerTagDef.setId(id);
+               rangerTagDef.setVersion(5L);
+               tagDefList.add(rangerTagDef);
+               ret.setList(tagDefList);
+
+               
Mockito.when(searchUtil.getSearchFilter(Mockito.any(HttpServletRequest.class), 
eq(tagDefService.sortFields)))
+                      .thenReturn(searchFilter);
+
+               try {
+                       
Mockito.when(tagStore.getPaginatedTagDefs((SearchFilter) 
Mockito.any())).thenReturn(ret);
+               } catch (Exception e) {
+               }
+               PList<RangerTagDef> result = tagREST.getTagDefs(request);
+
+               Assert.assertNotNull(result);
+               Assert.assertEquals(result.getList().get(0).getId(), 
tagDefList.get(0).getId());
+               Assert.assertEquals(result.getList().get(0).getVersion(), 
tagDefList.get(0).getVersion());
+
+               try {
+                       
Mockito.verify(tagStore).getPaginatedTagDefs((SearchFilter) Mockito.any());
+               } catch (Exception e) {
+               }
+       }
+
        @Test
        public void test15getAllTagDefs() {
                try {
@@ -742,6 +794,38 @@ public class TestTagREST {
                }
        }
        
+       @Test
+       public void test63getTags() {
+               HttpServletRequest request      = 
Mockito.mock(HttpServletRequest.class);
+               SearchFilter       searchFilter = new SearchFilter();
+               String             testTagType  = "TAG-TYPE";
+               PList<RangerTag>   ret          = new PList<RangerTag>();
+               List<RangerTag>    tagList      = new ArrayList<RangerTag>();
+               RangerTag          tag          = new RangerTag();
+
+               tag.setType(testTagType);
+               tagList.add(tag);
+               ret.setList(tagList);
+
+               
Mockito.when(searchUtil.getSearchFilter(Mockito.any(HttpServletRequest.class), 
eq(tagService.sortFields)))
+                      .thenReturn(searchFilter);
+
+               try {
+                       
Mockito.when(tagStore.getPaginatedTags(searchFilter)).thenReturn(ret);
+               } catch (Exception e) {
+               }
+
+               PList<RangerTag> result = tagREST.getTags(request);
+
+               Assert.assertNotNull(result);
+               Assert.assertEquals(result.getList().get(0).getType(), 
tagList.get(0).getType());
+
+               try {
+                       
Mockito.verify(tagStore).getPaginatedTags((SearchFilter) Mockito.any());
+               } catch (Exception e) {
+               }
+       }
+
        @Test
        public void test27createServiceResource() {
                RangerServiceResource oldRSR = null;
@@ -1048,7 +1132,40 @@ public class TestTagREST {
                } catch (Exception e) {
                }
        }
-       
+
+       @Test
+       public void test64getServiceResources() {
+               HttpServletRequest           request               = 
Mockito.mock(HttpServletRequest.class);
+               SearchFilter                 searchFilter          = new 
SearchFilter();
+               PList<RangerServiceResource> ret                   = new 
PList<RangerServiceResource>();
+               List<RangerServiceResource>  serviceResourceList   = new 
ArrayList<RangerServiceResource>();
+               RangerServiceResource        rangerServiceResource = new 
RangerServiceResource();
+
+               rangerServiceResource.setId(id);
+               rangerServiceResource.setServiceName(serviceName);
+               serviceResourceList.add(rangerServiceResource);
+               ret.setList(serviceResourceList);
+
+               
Mockito.when(searchUtil.getSearchFilter(Mockito.any(HttpServletRequest.class), 
eq(resourceService.sortFields)))
+                      .thenReturn(searchFilter);
+
+               try {
+                       
Mockito.when(tagStore.getPaginatedServiceResources((SearchFilter) 
Mockito.any())).thenReturn(ret);
+               } catch (Exception e) {
+               }
+
+               PList<RangerServiceResource> result = 
tagREST.getServiceResources(request);
+
+               Assert.assertNotNull(result.getList().get(0).getId());
+               Assert.assertEquals(result.getList().get(0).getId(), 
serviceResourceList.get(0).getId());
+               Assert.assertEquals(result.getList().get(0).getServiceName(), 
serviceResourceList.get(0).getServiceName());
+
+               try {
+                       
Mockito.verify(tagStore).getPaginatedServiceResources((SearchFilter) 
Mockito.any());
+               } catch (Exception e) {
+               }
+       }
+
        @Test
        public void test38createTagResourceMap() {
                RangerTagResourceMap oldTagResourceMap = null;

Reply via email to