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;