RANGER-4630: added pagination support and searchFilters in tag REST APIs

Signed-off-by: Madhan Neethiraj <madhan@apache.org>
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 ad304f8..4534b78 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 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 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 59b5737..2936c3a 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 @@
 		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 6d0019f..f05253f 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.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.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 @@
 
     TagValidator validator;
 
+    @Autowired
+    RangerSearchUtil searchUtil;
+
+    @Autowired
+    RangerTagService tagService;
+
+    @Autowired
+    RangerTagDefService tagDefService;
+
+    @Autowired
+    RangerServiceResourceService rangerServiceResourceService;
+
     public TagREST() {
 	}
 
@@ -347,6 +364,38 @@
     }
 
     @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" })
     @PreAuthorize("hasRole('ROLE_SYS_ADMIN')")
@@ -606,6 +655,40 @@
         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 @@
         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 9e78cf0..a6e49e7 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 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 3a4ccf8..989ea22 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.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 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 329d3ee..69b6438 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 @@
 			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 8f67799..c779b77 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.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 @@
 		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 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 929a4b0..4720476 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 @@
 		}
 
 		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 3a90bd8..055525f 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.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 @@
 		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 2e2c04f..1d35564 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 @@
 		}
 
 		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 570ce87..98d87bc 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.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.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 @@
 	@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 @@
 		} 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 {
@@ -743,6 +795,38 @@
 	}
 	
 	@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;
 		RangerServiceResource newRSR = new RangerServiceResource();
@@ -1048,7 +1132,40 @@
 		} 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;