You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ranger.apache.org by me...@apache.org on 2018/07/03 16:36:32 UTC
ranger git commit: RANGER-2126 : Improve ranger coverage of unit
tests for REST layer
Repository: ranger
Updated Branches:
refs/heads/master 8e5f6cb65 -> c129e7fef
RANGER-2126 : Improve ranger coverage of unit tests for REST layer
Signed-off-by: Mehul Parikh <me...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/ranger/repo
Commit: http://git-wip-us.apache.org/repos/asf/ranger/commit/c129e7fe
Tree: http://git-wip-us.apache.org/repos/asf/ranger/tree/c129e7fe
Diff: http://git-wip-us.apache.org/repos/asf/ranger/diff/c129e7fe
Branch: refs/heads/master
Commit: c129e7fefe929db9d7381567227580c0a4821663
Parents: 8e5f6cb
Author: Nikhil P <ni...@gmail.com>
Authored: Mon Jul 2 12:45:37 2018 +0530
Committer: Mehul Parikh <me...@apache.org>
Committed: Tue Jul 3 22:05:54 2018 +0530
----------------------------------------------------------------------
.../ranger/rest/TestServiceTagProcessor.java | 285 +++++++++++++++++++
1 file changed, 285 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ranger/blob/c129e7fe/security-admin/src/test/java/org/apache/ranger/rest/TestServiceTagProcessor.java
----------------------------------------------------------------------
diff --git a/security-admin/src/test/java/org/apache/ranger/rest/TestServiceTagProcessor.java b/security-admin/src/test/java/org/apache/ranger/rest/TestServiceTagProcessor.java
new file mode 100644
index 0000000..9524633
--- /dev/null
+++ b/security-admin/src/test/java/org/apache/ranger/rest/TestServiceTagProcessor.java
@@ -0,0 +1,285 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+
+*/
+package org.apache.ranger.rest;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.ranger.common.RangerValidatorFactory;
+import org.apache.ranger.plugin.model.RangerPolicy;
+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.RangerServiceResourceSignature;
+import org.apache.ranger.plugin.store.TagStore;
+import org.apache.ranger.plugin.util.ServiceTags;
+import org.junit.Assert;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+
+public class TestServiceTagProcessor {
+
+ @InjectMocks
+ ServiceTagsProcessor sTagProcessor = new ServiceTagsProcessor(null);
+
+ @Mock
+ ServiceTags serviceTags;
+
+ @Mock
+ RangerValidatorFactory validatorFactory;
+
+ @Mock
+ TestServiceREST testServiceRest;
+
+ @Rule
+ public ExpectedException thrown = ExpectedException.none();
+
+ @Test
+ public void test1processError() throws Exception {
+ ServiceTagsProcessor sTagProcessor = new ServiceTagsProcessor(null);
+ sTagProcessor.process(serviceTags);
+ Assert.assertNull(serviceTags);
+ }
+
+ @Test
+ public void test2processAddOrUpdate() throws Exception {
+ serviceTags = new ServiceTags();
+ Map<Long, RangerTagDef> fd = new HashMap<>();
+ List<RangerTag> associatedTags = new ArrayList<>();
+ RangerTagDef rTagDef = Mockito.mock(RangerTagDef.class);
+ rTagDef.setGuid("guid");
+ rTagDef.setName("rTagDefname");
+ fd.put(1l, rTagDef);
+ serviceTags.setTagDefinitions(fd);
+ List<RangerServiceResource> serviceResources = new ArrayList<RangerServiceResource>();
+ RangerServiceResource rserRes = new RangerServiceResource();
+ testServiceRest = new TestServiceREST();
+ RangerPolicy rp = testServiceRest.rangerPolicy();
+ rserRes.setResourceElements(rp.getResources());
+ rserRes.setGuid("guId");
+ rserRes.setId(1L);
+ serviceResources.add(rserRes);
+ serviceTags.setServiceResources(serviceResources);
+ Map<Long, List<Long>> resourceToTagIds = new HashMap<>();
+ resourceToTagIds.put(1L, new ArrayList<Long>(Arrays.asList(11L, 1L, 13L)));
+ serviceTags.setResourceToTagIds(resourceToTagIds);
+
+ RangerTag rTag = new RangerTag();
+ rTag.setId(22L);
+ rTag.setOwner((short) 1);
+ Map<Long, RangerTag> tags = new HashMap<>();
+ tags.put(1L, rTag);
+ serviceTags.setTags(tags);
+
+ RangerTag rTag2 = new RangerTag();
+ rTag2.setId(22L);
+ rTag2.setOwner((short) 1);
+ Map<Long, RangerTag> tags2 = new HashMap<>();
+ tags2.put(1L, rTag2);
+ associatedTags.add(rTag2);
+
+ TagStore tagStore = Mockito.mock(TagStore.class);
+ sTagProcessor = new ServiceTagsProcessor(tagStore);
+ Mockito.when(tagStore.createTagDef(rTagDef)).thenReturn(rTagDef);
+ Mockito.when(tagStore.getServiceResourceByGuid(rserRes.getGuid())).thenReturn(rserRes);
+ Mockito.when(tagStore.createTag(rTag2)).thenReturn(rTag);
+
+ Mockito.when(tagStore.getTagsForResourceId(rserRes.getId())).thenReturn(associatedTags);
+ sTagProcessor.process(serviceTags);
+ Mockito.verify(tagStore).createTagDef(rTagDef);
+ Mockito.verify(tagStore).getServiceResourceByGuid(rserRes.getGuid());
+ Mockito.verify(tagStore).createTag(rTag2);
+ }
+
+ @Test
+ public void test3process() throws Exception {
+ serviceTags = new ServiceTags();
+ Map<Long, RangerTagDef> fd = new HashMap<>();
+ List<RangerTag> associatedTags = new ArrayList<>();
+ RangerTagDef rTagDef = Mockito.mock(RangerTagDef.class);
+ rTagDef.setGuid("guid");
+ rTagDef.setName("rTagDefname");
+ fd.put(1l, rTagDef);
+ serviceTags.setTagDefinitions(fd);
+ List<RangerServiceResource> serviceResources = new ArrayList<RangerServiceResource>();
+ RangerServiceResource rserRes = new RangerServiceResource();
+ testServiceRest = new TestServiceREST();
+ RangerPolicy rp = testServiceRest.rangerPolicy();
+ rserRes.setResourceElements(rp.getResources());
+ rserRes.setGuid("guId");
+ rserRes.setId(1L);
+ serviceResources.add(rserRes);
+ serviceTags.setServiceResources(serviceResources);
+
+ Map<Long, List<Long>> resourceToTagIds = new HashMap<>();
+ resourceToTagIds.put(1L, new ArrayList<Long>(Arrays.asList(22L, 1L, 0L)));
+ serviceTags.setResourceToTagIds(resourceToTagIds);
+
+ RangerTag rTag = new RangerTag();
+ rTag.setId(22L);
+ rTag.setType("type1");
+ Map<Long, RangerTag> tags = new HashMap<>();
+ rTag.setOwner((short) 0);
+ tags.put(1L, rTag);
+ serviceTags.setTags(tags);
+
+ associatedTags.add(rTag);
+
+ TagStore tagStore = Mockito.mock(TagStore.class);
+ sTagProcessor = new ServiceTagsProcessor(tagStore);
+ Mockito.when(tagStore.createTagDef(rTagDef)).thenReturn(rTagDef);
+ Mockito.when(tagStore.getServiceResourceByGuid(rserRes.getGuid())).thenReturn(rserRes);
+ Mockito.when(tagStore.getTagsForResourceId(rserRes.getId())).thenReturn(associatedTags);
+
+ sTagProcessor.process(serviceTags);
+
+ Mockito.verify(tagStore).createTagDef(rTagDef);
+ Mockito.verify(tagStore).getServiceResourceByGuid(rserRes.getGuid());
+ Mockito.verify(tagStore).getTagsForResourceId(rserRes.getId());
+ }
+
+ @Test
+ public void test4processDelete() throws Exception {
+ serviceTags = new ServiceTags();
+ serviceTags.setOp(ServiceTags.OP_DELETE);
+ Map<Long, RangerTagDef> fd = new HashMap<>();
+ List<RangerTag> associatedTags = new ArrayList<>();
+ RangerTagDef rTagDef = Mockito.mock(RangerTagDef.class);
+ rTagDef.setGuid("guid");
+ rTagDef.setName("rTagDefName");
+ fd.put(1l, rTagDef);
+ serviceTags.setTagDefinitions(fd);
+ List<RangerServiceResource> serviceResources = new ArrayList<RangerServiceResource>();
+ RangerServiceResource rserRes = new RangerServiceResource();
+ testServiceRest = new TestServiceREST();
+ RangerPolicy rp = testServiceRest.rangerPolicy();
+ rserRes.setResourceElements(rp.getResources());
+ rserRes.setGuid("guId");
+ rserRes.setId(1L);
+ rserRes.setServiceName("serviceName1");
+ serviceResources.add(rserRes);
+ serviceTags.setServiceResources(serviceResources);
+ List<RangerTagResourceMap> tagResourceMaps = new ArrayList<RangerTagResourceMap>();
+ tagResourceMaps.add(new RangerTagResourceMap());
+ Map<Long, List<Long>> resourceToTagIds = new HashMap<>();
+ resourceToTagIds.put(1L, new ArrayList<Long>(Arrays.asList(22L, 1L, 0L)));
+ serviceTags.setResourceToTagIds(resourceToTagIds);
+
+ RangerTag rTag = new RangerTag();
+ rTag.setId(22L);
+ rTag.setType("type1");
+ rTag.setGuid("tagGuID");
+ Map<Long, RangerTag> tags = new HashMap<>();
+ rTag.setOwner((short) 0);
+ tags.put(1L, rTag);
+ serviceTags.setTags(tags);
+
+ RangerServiceResourceSignature serializer = new RangerServiceResourceSignature(rserRes);
+ String serviceResourceSignature = serializer.getSignature();
+ associatedTags.add(rTag);
+ TagStore tagStore = Mockito.mock(TagStore.class);
+ sTagProcessor = new ServiceTagsProcessor(tagStore);
+
+ Mockito.when(tagStore.getServiceResourceByGuid(rserRes.getGuid())).thenReturn(null);
+ Mockito.when(tagStore.getServiceResourceByServiceAndResourceSignature(rserRes.getServiceName(),
+ serviceResourceSignature)).thenReturn(rserRes);
+ Mockito.when(tagStore.getTagResourceMapsForResourceGuid(rserRes.getGuid())).thenReturn(tagResourceMaps);
+ Mockito.doNothing().when(tagStore).deleteServiceResource(rserRes.getId());
+ Mockito.when(tagStore.getTagByGuid(rTag.getGuid())).thenReturn(rTag);
+ Mockito.doNothing().when(tagStore).deleteTag(rTag.getId());
+ Mockito.when(tagStore.getTagDefByGuid(rTagDef.getGuid())).thenReturn(rTagDef);
+
+ sTagProcessor.process(serviceTags);
+
+ Mockito.verify(tagStore).getServiceResourceByGuid(rserRes.getGuid());
+ Mockito.verify(tagStore).getServiceResourceByServiceAndResourceSignature(rserRes.getServiceName(),
+ serviceResourceSignature);
+ Mockito.verify(tagStore).getTagResourceMapsForResourceGuid(rserRes.getGuid());
+ Mockito.verify(tagStore).deleteServiceResource(rserRes.getId());
+ Mockito.verify(tagStore).getTagByGuid(rTag.getGuid());
+ Mockito.verify(tagStore).deleteTag(rTag.getId());
+ Mockito.verify(tagStore).getTagDefByGuid(rTagDef.getGuid());
+ }
+
+ @Test
+ public void test5processReplace() throws Exception {
+ serviceTags = new ServiceTags();
+ serviceTags.setOp(ServiceTags.OP_REPLACE);
+ Map<Long, RangerTagDef> fd = new HashMap<>();
+ List<RangerTag> associatedTags = new ArrayList<>();
+ RangerTagDef rTagDef = Mockito.mock(RangerTagDef.class);
+ rTagDef.setGuid("guid");
+ rTagDef.setName("rTagDefName");
+ fd.put(1l, rTagDef);
+ serviceTags.setTagDefinitions(fd);
+ List<RangerServiceResource> serviceResources = new ArrayList<RangerServiceResource>();
+ RangerServiceResource rserRes = new RangerServiceResource();
+ testServiceRest = new TestServiceREST();
+ RangerPolicy rp = testServiceRest.rangerPolicy();
+ rserRes.setResourceElements(rp.getResources());
+ rserRes.setGuid("guId");
+ rserRes.setId(1L);
+ rserRes.setServiceName("serviceName1");
+ serviceResources.add(rserRes);
+ serviceTags.setServiceResources(serviceResources);
+ List<RangerTagResourceMap> tagResourceMaps = new ArrayList<RangerTagResourceMap>();
+ serviceTags.setServiceName("tagServiceName");
+ RangerTagResourceMap rangerTagRmp = new RangerTagResourceMap();
+ rangerTagRmp.setId(2L);
+ tagResourceMaps.add(rangerTagRmp);
+ Map<Long, List<Long>> resourceToTagIds = new HashMap<>();
+ resourceToTagIds.put(1L, new ArrayList<Long>(Arrays.asList(22L, 1L, 0L)));
+ serviceTags.setResourceToTagIds(resourceToTagIds);
+
+ RangerTag rTag = new RangerTag();
+ rTag.setId(22L);
+ rTag.setType("type1");
+ rTag.setGuid("tagGuID");
+ Map<Long, RangerTag> tags = new HashMap<>();
+ rTag.setOwner((short) 0);
+ tags.put(1L, rTag);
+ serviceTags.setTags(tags);
+ associatedTags.add(rTag);
+ TagStore tagStore = Mockito.mock(TagStore.class);
+ sTagProcessor = new ServiceTagsProcessor(tagStore);
+
+ List<String> serviceResourcesInDb = new ArrayList<>(Arrays.asList("guid"));
+ Mockito.when(tagStore.getServiceResourceGuidsByService(serviceTags.getServiceName()))
+ .thenReturn(serviceResourcesInDb);
+ Mockito.when(tagStore.getTagResourceMapsForResourceGuid(Mockito.anyString())).thenReturn(tagResourceMaps);
+ Mockito.doNothing().when(tagStore).deleteTagResourceMap(rangerTagRmp.getId());
+ Mockito.doNothing().when(tagStore).deleteServiceResourceByGuid(Mockito.anyString());
+
+ sTagProcessor.process(serviceTags);
+
+ Mockito.verify(tagStore).getServiceResourceGuidsByService(serviceTags.getServiceName());
+ Mockito.verify(tagStore).getTagResourceMapsForResourceGuid(Mockito.anyString());
+ Mockito.verify(tagStore).deleteTagResourceMap(rangerTagRmp.getId());
+ Mockito.verify(tagStore).deleteServiceResourceByGuid(Mockito.anyString());
+ }
+}