You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ranger.apache.org by ma...@apache.org on 2023/05/31 00:08:25 UTC

[ranger] branch master updated: RANGER-4168: added unit tests for Metrics and TagDBStore the missing classes

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 ce3c3b8b0 RANGER-4168: added unit tests for Metrics and TagDBStore the missing classes
ce3c3b8b0 is described below

commit ce3c3b8b03dc51b6b3de6809f7d0d46b0f34aa06
Author: Ramachandran Krishnan <ra...@gmail.com>
AuthorDate: Thu Apr 20 21:43:06 2023 +0530

    RANGER-4168: added unit tests for Metrics and TagDBStore the missing classes
    
    Signed-off-by: Madhan Neethiraj <ma...@apache.org>
---
 .../java/org/apache/ranger/rest/MetricsREST.java   |   10 +-
 .../org/apache/ranger/util/RangerMetricsUtil.java  |   17 +-
 .../java/org/apache/ranger/biz/TestTagDBStore.java | 1178 ++++++++++++++++++++
 .../org/apache/ranger/rest/TestMetricsREST.java    |   87 ++
 .../apache/ranger/util/TestRangerMetricsUtil.java  |   51 +
 5 files changed, 1329 insertions(+), 14 deletions(-)

diff --git a/security-admin/src/main/java/org/apache/ranger/rest/MetricsREST.java b/security-admin/src/main/java/org/apache/ranger/rest/MetricsREST.java
index 5b3638b98..b34a795b4 100644
--- a/security-admin/src/main/java/org/apache/ranger/rest/MetricsREST.java
+++ b/security-admin/src/main/java/org/apache/ranger/rest/MetricsREST.java
@@ -77,7 +77,7 @@ public class MetricsREST {
         jvm.put("jvm",vmDetails);
 
         if (LOG.isDebugEnabled()) {
-            LOG.debug("<== MetricsREST.getStatus() " + jvm);
+            LOG.debug("<== MetricsREST.getStatus(): jvm=" + jvm);
         }
 
         return new RangerMetrics(jvm);
@@ -88,7 +88,7 @@ public class MetricsREST {
     @Produces(MediaType.TEXT_PLAIN)
     public String getMetricsPrometheus() {
         if (LOG.isDebugEnabled()) {
-            LOG.debug("MetricsREST.getMetricsPrometheus() ===>>");
+            LOG.debug("==> MetricsREST.getMetricsPrometheus()");
         }
         String ret = "";
         try {
@@ -98,7 +98,7 @@ public class MetricsREST {
         }
 
         if (LOG.isDebugEnabled()) {
-            LOG.debug("MetricsREST.getMetricsPrometheus() <<=== {}", ret);
+            LOG.debug("<== MetricsREST.getMetricsPrometheus(): ret=" + ret);
         }
         return ret;
     }
@@ -108,7 +108,7 @@ public class MetricsREST {
     @Produces(MediaType.APPLICATION_JSON)
     public Map<String, Map<String, Object>> getMetricsJson() {
         if (LOG.isDebugEnabled()) {
-            LOG.debug("MetricsREST.getMetricsJson() ===>>");
+            LOG.debug("==> MetricsREST.getMetricsJson()");
         }
 
         Map<String, Map<String, Object>> ret = null;
@@ -119,7 +119,7 @@ public class MetricsREST {
         }
 
         if (LOG.isDebugEnabled()) {
-            LOG.debug("MetricsREST.getMetricsJson() <<=== {}", ret);
+            LOG.debug("<== MetricsREST.getMetricsJson(): ret=" + ret);
         }
         return ret;
     }
diff --git a/security-admin/src/main/java/org/apache/ranger/util/RangerMetricsUtil.java b/security-admin/src/main/java/org/apache/ranger/util/RangerMetricsUtil.java
index d76be225d..b50a1a838 100644
--- a/security-admin/src/main/java/org/apache/ranger/util/RangerMetricsUtil.java
+++ b/security-admin/src/main/java/org/apache/ranger/util/RangerMetricsUtil.java
@@ -44,7 +44,6 @@ public class RangerMetricsUtil {
     private static final Logger LOG = LoggerFactory.getLogger(RangerMetricsUtil.class);
     private static final OperatingSystemMXBean OS;
     private static final MemoryMXBean MEM_BEAN;
-    public static final String NL = System.getProperty("line.separator");
 
     static {
         OS = ManagementFactory.getOperatingSystemMXBean();
@@ -53,7 +52,7 @@ public class RangerMetricsUtil {
 
     public Map<String, Object> getValues() {
         if (LOG.isDebugEnabled()) {
-            LOG.debug("==> RangerJVMMetricUtil.getValues()");
+            LOG.debug("==> RangerMetricsUtil.getValues()");
         }
         
         Map<String, Object> values = new LinkedHashMap<>();
@@ -62,7 +61,7 @@ public class RangerMetricsUtil {
         values.put("memory", addMemoryDetails());
 
         if (LOG.isDebugEnabled()) {
-            LOG.debug("<== RangerJVMMetricUtil.getValues()" + values);
+            LOG.debug("<== RangerMetricsUtil.getValues()" + values);
         }
 
         return values;
@@ -73,7 +72,7 @@ public class RangerMetricsUtil {
      */
     protected Map<String, Object> getPoolDivision() {
         if (LOG.isDebugEnabled()) {
-            LOG.debug("==> RangerJVMMetricUtil.getPoolDivision()");
+            LOG.debug("==> RangerMetricsUtil.getPoolDivision()");
         }
 
         Map<String, Object> poolDivisionValues = new LinkedHashMap<>();
@@ -84,7 +83,7 @@ public class RangerMetricsUtil {
         }
 
         if (LOG.isDebugEnabled()) {
-            LOG.debug("<== RangerJVMMetricUtil.getPoolDivision()" + poolDivisionValues);
+            LOG.debug("<== RangerMetricsUtil.getPoolDivision()" + poolDivisionValues);
         }
 
         return poolDivisionValues;
@@ -95,7 +94,7 @@ public class RangerMetricsUtil {
      */
     protected Map<String, Object> addMemoryDetails() {
         if (LOG.isDebugEnabled()) {
-            LOG.debug("==> RangerJVMMetricUtil.addMemoryDetails()");
+            LOG.debug("==> RangerMetricsUtil.addMemoryDetails()");
         }
 
         Map<String, Object> memory  = new LinkedHashMap<>();
@@ -112,7 +111,7 @@ public class RangerMetricsUtil {
         memory.put("memory_pool_usages", getPoolDivision());
 
         if (LOG.isDebugEnabled()) {
-            LOG.debug("<== RangerJVMMetricUtil.addMemoryDetails()" + memory);
+            LOG.debug("<== RangerMetricsUtil.addMemoryDetails()" + memory);
         }
 
         return memory;
@@ -123,12 +122,12 @@ public class RangerMetricsUtil {
      */
     protected String[] addSystemInfo() {
         if (LOG.isDebugEnabled()) {
-            LOG.debug("==> RangerJVMMetricUtil.addSystemInfo()");
+            LOG.debug("==> RangerMetricsUtil.addSystemInfo()");
         }
 
         String[] osInfo = { OS.getName(), OS.getArch(), OS.getVersion() };
         if (LOG.isDebugEnabled()) {
-            LOG.debug("<== RangerJVMMetricUtil.addSystemInfo()" + osInfo);
+            LOG.debug("<== RangerMetricsUtil.addSystemInfo()" + osInfo);
         }
 
         return osInfo;
diff --git a/security-admin/src/test/java/org/apache/ranger/biz/TestTagDBStore.java b/security-admin/src/test/java/org/apache/ranger/biz/TestTagDBStore.java
new file mode 100644
index 000000000..99858a568
--- /dev/null
+++ b/security-admin/src/test/java/org/apache/ranger/biz/TestTagDBStore.java
@@ -0,0 +1,1178 @@
+/*
+ * 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.biz;
+
+import static org.mockito.ArgumentMatchers.any;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import javax.ws.rs.WebApplicationException;
+import org.apache.ranger.common.MessageEnums;
+import org.apache.ranger.common.RESTErrorUtil;
+import org.apache.ranger.common.RangerServiceTagsCache;
+import org.apache.ranger.db.RangerDaoManager;
+import org.apache.ranger.db.XXServiceDao;
+import org.apache.ranger.db.XXServiceResourceDao;
+import org.apache.ranger.db.XXServiceVersionInfoDao;
+import org.apache.ranger.db.XXTagDao;
+import org.apache.ranger.db.XXTagResourceMapDao;
+import org.apache.ranger.entity.XXService;
+import org.apache.ranger.entity.XXServiceResource;
+import org.apache.ranger.entity.XXServiceVersionInfo;
+import org.apache.ranger.entity.XXTag;
+import org.apache.ranger.entity.XXTagResourceMap;
+import org.apache.ranger.plugin.model.RangerServiceDef;
+import org.apache.ranger.plugin.model.RangerServiceDef.RangerAccessTypeDef;
+import org.apache.ranger.plugin.model.RangerServiceDef.RangerContextEnricherDef;
+import org.apache.ranger.plugin.model.RangerServiceDef.RangerEnumDef;
+import org.apache.ranger.plugin.model.RangerServiceDef.RangerPolicyConditionDef;
+import org.apache.ranger.plugin.model.RangerServiceDef.RangerResourceDef;
+import org.apache.ranger.plugin.model.RangerServiceDef.RangerServiceConfigDef;
+import org.apache.ranger.plugin.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.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.RangerTagResourceMapService;
+import org.apache.ranger.service.RangerTagService;
+import org.junit.Assert;
+import org.junit.FixMethodOrder;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.junit.runner.RunWith;
+import org.junit.runners.MethodSorters;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.runners.MockitoJUnitRunner;
+
+@RunWith(MockitoJUnitRunner.class)
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+public class TestTagDBStore {
+    private final static Long id                  = 1L;
+    private final static String name              = "test";
+    private final static String gId               = "1427365526516_835_0";
+    private final static Long lastKnownVersion    = 10L;
+    private final static String resourceSignature = "testResourceSign";
+    private final static String serviceName       = "HDFS";
+
+    @InjectMocks
+    TagDBStore tagDBStore = new TagDBStore();
+
+    @Mock
+    RangerTagDefService rangerTagDefService;
+
+    @Mock
+    RangerServiceResourceService rangerServiceResourceService;
+
+    @Mock
+    RangerTagResourceMapService rangerTagResourceMapService;
+
+    @Mock
+    RESTErrorUtil errorUtil;
+
+    @Mock
+    RangerTagService rangerTagService;
+
+    @Mock
+    RangerDaoManager daoManager;
+
+    @Mock
+    ServiceDBStore svcStore;
+
+    @Rule
+    public ExpectedException thrown = ExpectedException.none();
+
+    @Test
+    public void testCreateTagDef() throws Exception {
+        RangerTagDef rangerTagDef = createRangerTagDef();
+
+        Mockito.when(rangerTagDefService.create(any())).thenReturn(rangerTagDef);
+        Mockito.when(rangerTagDefService.read(id)).thenReturn(rangerTagDef);
+
+        RangerTagDef returnedRangerTagDef = tagDBStore.createTagDef(rangerTagDef);
+
+        Assert.assertNotNull(returnedRangerTagDef);
+        Assert.assertEquals(returnedRangerTagDef.getId(), id);
+        Assert.assertEquals(rangerTagDef.getName(), name);
+    }
+
+    @Test
+    public void testUpdateTagDef() throws Exception {
+        RangerTagDef rangerTagDef = createRangerTagDef();
+
+        Mockito.when(rangerTagDefService.update(any())).thenReturn(rangerTagDef);
+        Mockito.when(rangerTagDefService.read(id)).thenReturn(rangerTagDef);
+
+        RangerTagDef returnedRangerTagDef = tagDBStore.updateTagDef(rangerTagDef);
+
+        Assert.assertNotNull(returnedRangerTagDef);
+        Assert.assertEquals(returnedRangerTagDef.getId(), id);
+        Assert.assertEquals(rangerTagDef.getName(), name);
+    }
+
+    @Test
+    public void testUpdateTagDefWhenItIsNotAvailable() throws Exception {
+        RangerTagDef rangerTagDef = createRangerTagDef();
+
+        Mockito.when(rangerTagDefService.read(id)).thenReturn(null).thenReturn(rangerTagDef);
+        Mockito.when(errorUtil.createRESTException(Mockito.anyString(), Mockito.any(MessageEnums.class))).thenThrow(new WebApplicationException());
+        thrown.expect(WebApplicationException.class);
+
+        tagDBStore.updateTagDef(rangerTagDef);
+    }
+
+    @Test
+    public void testUpdateTagDefForTheSameName() throws Exception {
+        RangerTagDef rangerTagDef     = createRangerTagDef();
+        RangerTagDef rangerTagDefInDB = createRangerTagDef();
+
+        rangerTagDefInDB.setName("test1");
+
+        Mockito.when(rangerTagDefService.read(id)).thenReturn(rangerTagDefInDB);
+        Mockito.when(errorUtil.createRESTException(Mockito.anyString(), Mockito.any(MessageEnums.class))).thenThrow(new WebApplicationException());
+        thrown.expect(WebApplicationException.class);
+
+        tagDBStore.updateTagDef(rangerTagDef);
+    }
+
+    @Test
+    public void testGetTagDefByName() throws Exception {
+        RangerTagDef rangerTagDef = createRangerTagDef();
+
+        Mockito.when(rangerTagDefService.getTagDefByName(any())).thenReturn(rangerTagDef);
+
+        RangerTagDef returnedRangerTagDef = tagDBStore.getTagDefByName(rangerTagDef.getName());
+
+        Assert.assertNotNull(returnedRangerTagDef);
+        Assert.assertEquals(returnedRangerTagDef.getId(), id);
+        Assert.assertEquals(rangerTagDef.getName(), name);
+    }
+
+    @Test
+    public void testGetTagDefByGuid() throws Exception {
+        RangerTagDef rangerTagDef = createRangerTagDef();
+
+        Mockito.when(rangerTagDefService.getTagDefByGuid(any())).thenReturn(rangerTagDef);
+
+        RangerTagDef returnedRangerTagDef = tagDBStore.getTagDefByGuid(rangerTagDef.getGuid());
+
+        Assert.assertNotNull(returnedRangerTagDef);
+        Assert.assertEquals(returnedRangerTagDef.getId(), id);
+        Assert.assertEquals(returnedRangerTagDef.getGuid(), gId);
+        Assert.assertEquals(rangerTagDef.getName(), name);
+    }
+
+    @Test
+    public void testGetTagDefById() throws Exception {
+        RangerTagDef rangerTagDef = createRangerTagDef();
+
+        Mockito.when(rangerTagDefService.read(id)).thenReturn(rangerTagDef);
+
+        RangerTagDef returnedRangerTagDef = tagDBStore.getTagDef(rangerTagDef.getId());
+
+        Assert.assertNotNull(returnedRangerTagDef);
+        Assert.assertEquals(returnedRangerTagDef.getId(), id);
+        Assert.assertEquals(returnedRangerTagDef.getGuid(), gId);
+        Assert.assertEquals(rangerTagDef.getName(), name);
+    }
+
+    @Test
+    public void testDeleteTagDefById() throws Exception {
+        RangerTagDef rangerTagDef = createRangerTagDef();
+
+        Mockito.when(rangerTagDefService.read(id)).thenReturn(rangerTagDef);
+        Mockito.when(rangerTagDefService.delete(Mockito.any())).thenReturn(true);
+
+        tagDBStore.deleteTagDef(id);
+    }
+
+    @Test
+    public void testDeleteTagDefByName() throws Exception {
+        RangerTagDef rangerTagDef = createRangerTagDef();
+
+        Mockito.when(rangerTagDefService.getTagDefByName(any())).thenReturn(rangerTagDef);
+        Mockito.when(rangerTagDefService.delete(Mockito.any())).thenReturn(true);
+
+        tagDBStore.deleteTagDefByName(name);
+    }
+
+    @Test
+    public void testGetTagDefs() throws Exception {
+        PList<RangerTagDef> rangerTagDefPList = createRangerTagDefPList();
+        SearchFilter        searchFilter      = new SearchFilter();
+
+        Mockito.when(rangerTagDefService.searchRangerTagDefs(searchFilter)).thenReturn(rangerTagDefPList);
+
+        List<RangerTagDef> rangerTagDefList = tagDBStore.getTagDefs(searchFilter);
+
+        Assert.assertNotNull(rangerTagDefList);
+
+        RangerTagDef rangerTagDef = rangerTagDefList.get(0);
+
+        Assert.assertEquals(rangerTagDef.getId(), id);
+        Assert.assertEquals(rangerTagDef.getGuid(), gId);
+        Assert.assertEquals(rangerTagDef.getName(), name);
+    }
+
+    @Test
+    public void testGetPaginatedTagDefs() throws Exception {
+        PList<RangerTagDef> rangerTagDefPList = createRangerTagDefPList();
+        SearchFilter        searchFilter      = new SearchFilter();
+
+        Mockito.when(rangerTagDefService.searchRangerTagDefs(searchFilter)).thenReturn(rangerTagDefPList);
+
+        PList<RangerTagDef> returnedRangerTagDefList = tagDBStore.getPaginatedTagDefs(searchFilter);
+
+        Assert.assertNotNull(returnedRangerTagDefList);
+
+        RangerTagDef rangerTagDef = returnedRangerTagDefList.getList().get(0);
+
+        Assert.assertEquals(returnedRangerTagDefList.getList().size(), 1);
+        Assert.assertEquals(rangerTagDef.getId(), id);
+        Assert.assertEquals(rangerTagDef.getGuid(), gId);
+        Assert.assertEquals(rangerTagDef.getName(), name);
+    }
+
+    @Test
+    public void testCreateTag() throws Exception {
+        RangerTag rangerTag = createRangerTag();
+
+        Mockito.when(rangerTagService.create(any())).thenReturn(rangerTag);
+        Mockito.when(rangerTagService.read(id)).thenReturn(rangerTag);
+
+        RangerTag returnedRangerTag = tagDBStore.createTag(rangerTag);
+
+        Assert.assertNotNull(returnedRangerTag);
+        Assert.assertEquals(returnedRangerTag.getId(), id);
+        Assert.assertEquals(returnedRangerTag.getGuid(), gId);
+    }
+
+    @Test
+    public void testUpdateTag() throws Exception {
+        RangerTag rangerTag = createRangerTag();
+
+        Mockito.when(rangerTagService.update(any())).thenReturn(rangerTag);
+        Mockito.when(rangerTagService.read(id)).thenReturn(rangerTag);
+
+        RangerTag returnedRangerTag = tagDBStore.updateTag(rangerTag);
+
+        Assert.assertNotNull(returnedRangerTag);
+        Assert.assertEquals(returnedRangerTag.getId(), id);
+        Assert.assertEquals(returnedRangerTag.getGuid(), gId);
+    }
+
+    @Test
+    public void testUpdateTagWhenItIsNotAvailable() throws Exception {
+        RangerTag rangerTag = createRangerTag();
+
+        Mockito.when(rangerTagService.read(id)).thenReturn(null).thenReturn(rangerTag);
+        Mockito.when(errorUtil.createRESTException(Mockito.anyString(), Mockito.any(MessageEnums.class))).thenThrow(new WebApplicationException());
+        thrown.expect(WebApplicationException.class);
+
+        tagDBStore.updateTag(rangerTag);
+    }
+
+    @Test
+    public void testDeleteTagById() throws Exception {
+        RangerTag rangerTag = createRangerTag();
+
+        Mockito.when(rangerTagService.read(id)).thenReturn(rangerTag);
+        Mockito.when(rangerTagService.delete(Mockito.any())).thenReturn(true);
+
+        tagDBStore.deleteTag(id);
+    }
+
+    @Test
+    public void testGetTagById() throws Exception {
+        RangerTag rangerTag = createRangerTag();
+
+        Mockito.when(rangerTagService.read(id)).thenReturn(rangerTag);
+
+        RangerTag returnedRangerTag = tagDBStore.getTag(id);
+
+        Assert.assertNotNull(returnedRangerTag);
+        Assert.assertEquals(returnedRangerTag.getId(), id);
+        Assert.assertEquals(returnedRangerTag.getGuid(), gId);
+    }
+
+    @Test
+    public void testGetTagByGuid() throws Exception {
+        RangerTag rangerTag = createRangerTag();
+
+        Mockito.when(rangerTagService.getTagByGuid(gId)).thenReturn(rangerTag);
+
+        RangerTag returnedRangerTag = tagDBStore.getTagByGuid(gId);
+
+        Assert.assertNotNull(returnedRangerTag);
+        Assert.assertEquals(returnedRangerTag.getId(), id);
+        Assert.assertEquals(returnedRangerTag.getGuid(), gId);
+    }
+
+
+    @Test
+    public void testGetTagsByType() throws Exception {
+        String          type       = "file";
+        RangerTag       rangerTag  = createRangerTag();
+        List<RangerTag> rangerTags = new ArrayList<>();
+
+        rangerTags.add(rangerTag);
+
+        Mockito.when(rangerTagService.getTagsByType(type)).thenReturn(rangerTags);
+
+        List<RangerTag> returnedRangerTags = tagDBStore.getTagsByType(type);
+
+        Assert.assertNotNull(returnedRangerTags);
+
+        RangerTag returnedRangerTag = returnedRangerTags.get(0);
+
+        Assert.assertEquals(returnedRangerTag.getId(), id);
+        Assert.assertEquals(returnedRangerTag.getGuid(), gId);
+    }
+
+    @Test
+    public void testGetTagsForResourceId() throws Exception {
+        RangerTag       rangerTag  = createRangerTag();
+        List<RangerTag> rangerTags = new ArrayList<>();
+
+        rangerTags.add(rangerTag);
+
+        Mockito.when(rangerTagService.getTagsForResourceId(id)).thenReturn(rangerTags);
+
+        List<RangerTag> returnedRangerTags = tagDBStore.getTagsForResourceId(id);
+
+        Assert.assertNotNull(returnedRangerTags);
+
+        RangerTag returnedRangerTag = returnedRangerTags.get(0);
+
+        Assert.assertEquals(returnedRangerTag.getId(), id);
+        Assert.assertEquals(returnedRangerTag.getGuid(), gId);
+    }
+
+    @Test
+    public void testGetTagsForResourceGuid() throws Exception {
+        RangerTag       rangerTag  = createRangerTag();
+        List<RangerTag> rangerTags = new ArrayList<>();
+
+        rangerTags.add(rangerTag);
+        Mockito.when(rangerTagService.getTagsForResourceGuid(gId)).thenReturn(rangerTags);
+
+        List<RangerTag> returnedRangerTags = tagDBStore.getTagsForResourceGuid(gId);
+
+        Assert.assertNotNull(returnedRangerTags);
+
+        RangerTag returnedRangerTag = returnedRangerTags.get(0);
+
+        Assert.assertEquals(returnedRangerTag.getId(), id);
+        Assert.assertEquals(returnedRangerTag.getGuid(), gId);
+    }
+
+    @Test
+    public void testGetTags() throws Exception {
+        SearchFilter     filter         = new SearchFilter();
+        PList<RangerTag> rangerTagPList = createRangerTagPList();
+
+        Mockito.when(rangerTagService.searchRangerTags(filter)).thenReturn(rangerTagPList);
+
+        List<RangerTag> returnedRangerTags = tagDBStore.getTags(filter);
+
+        Assert.assertNotNull(returnedRangerTags);
+
+        RangerTag returnedRangerTag = returnedRangerTags.get(0);
+
+        Assert.assertEquals(returnedRangerTag.getId(), id);
+        Assert.assertEquals(returnedRangerTag.getGuid(), gId);
+    }
+
+    @Test
+    public void testGetPaginatedTags() throws Exception {
+        SearchFilter     filter         = new SearchFilter();
+        PList<RangerTag> rangerTagPList = createRangerTagPList();
+
+        Mockito.when(rangerTagService.searchRangerTags(filter)).thenReturn(rangerTagPList);
+
+        PList<RangerTag> returnedRangerTagPList = tagDBStore.getPaginatedTags(filter);
+
+        Assert.assertNotNull(returnedRangerTagPList);
+        Assert.assertEquals(returnedRangerTagPList.getListSize(), 1);
+
+        RangerTag returnedRangerTag = returnedRangerTagPList.getList().get(0);
+
+        Assert.assertEquals(returnedRangerTag.getId(), id);
+        Assert.assertEquals(returnedRangerTag.getGuid(), gId);
+    }
+
+    @Test
+    public void testResetTagCache() throws Exception {
+        RangerServiceTagsCache rangerServiceTagsCache = Mockito.mock(RangerServiceTagsCache.class);
+
+        tagDBStore.resetTagCache(name);
+    }
+
+    @Test
+    public void testCreateServiceResource() throws Exception {
+        RangerServiceResource rangerServiceResource = createRangerServiceResource();
+
+        Mockito.when(rangerServiceResourceService.create(rangerServiceResource)).thenReturn(rangerServiceResource);
+        Mockito.when(rangerServiceResourceService.read(id)).thenReturn(rangerServiceResource);
+
+        RangerServiceResource returnedRangerServiceResource = tagDBStore.createServiceResource(rangerServiceResource);
+
+        Assert.assertNotNull(returnedRangerServiceResource);
+        Assert.assertEquals(returnedRangerServiceResource.getId(), id);
+        Assert.assertEquals(returnedRangerServiceResource.getGuid(), gId);
+        Assert.assertEquals(returnedRangerServiceResource.getResourceSignature(), resourceSignature);
+        Assert.assertEquals(returnedRangerServiceResource.getServiceName(), serviceName);
+    }
+
+    @Test
+    public void testUpdateServiceResource() throws Exception {
+        RangerServiceResource rangerServiceResource = createRangerServiceResource();
+
+        Mockito.when(rangerServiceResourceService.update(rangerServiceResource)).thenReturn(rangerServiceResource);
+        Mockito.when(rangerServiceResourceService.read(id)).thenReturn(rangerServiceResource);
+
+        RangerServiceResource returnedRangerServiceResource = tagDBStore.updateServiceResource(rangerServiceResource);
+
+        Assert.assertNotNull(returnedRangerServiceResource);
+        Assert.assertEquals(returnedRangerServiceResource.getId(), id);
+        Assert.assertEquals(returnedRangerServiceResource.getGuid(), gId);
+        Assert.assertEquals(returnedRangerServiceResource.getResourceSignature(), resourceSignature);
+        Assert.assertEquals(returnedRangerServiceResource.getServiceName(), serviceName);
+    }
+
+    @Test
+    public void testUpdateServiceResourceWhenItIsNotAvailable() throws Exception {
+        RangerServiceResource rangerServiceResource = createRangerServiceResource();
+
+        Mockito.when(rangerServiceResourceService.read(id)).thenReturn(null).thenReturn(rangerServiceResource);
+        Mockito.when(errorUtil.createRESTException(Mockito.anyString(), Mockito.any(MessageEnums.class))).thenThrow(new WebApplicationException());
+        thrown.expect(WebApplicationException.class);
+
+        tagDBStore.updateServiceResource(rangerServiceResource);
+    }
+
+    @Test
+    public void testRefreshServiceResource() throws Exception {
+        RangerTagResourceMap       rangerTagResourceMap     = createRangerTagResourceMap();
+        List<RangerTagResourceMap> rangerTagResourceMapList = new ArrayList<>();
+        XXServiceResource          serviceResourceEntity    = createXXServiceResource();
+        XXServiceResourceDao       xxServiceResourceDao     = Mockito.mock(XXServiceResourceDao.class);
+
+        rangerTagResourceMapList.add(rangerTagResourceMap);
+
+        Mockito.when(rangerTagResourceMapService.getByResourceId(id)).thenReturn(rangerTagResourceMapList);
+
+        Mockito.when(daoManager.getXXServiceResource()).thenReturn(xxServiceResourceDao);
+        Mockito.when(xxServiceResourceDao.getById(Mockito.any())).thenReturn(serviceResourceEntity);
+        Mockito.when(xxServiceResourceDao.update(serviceResourceEntity)).thenReturn(serviceResourceEntity);
+
+        tagDBStore.refreshServiceResource(id);
+    }
+
+    @Test
+    public void testDeleteServiceResourceByGuid() throws Exception {
+        RangerServiceResource rangerServiceResource = createRangerServiceResource();
+
+        Mockito.when(rangerServiceResourceService.delete(rangerServiceResource)).thenReturn(true);
+        Mockito.when(rangerServiceResourceService.getServiceResourceByGuid(gId)).thenReturn(rangerServiceResource);
+
+        tagDBStore.deleteServiceResourceByGuid(gId);
+    }
+
+    @Test
+    public void tesGetServiceResourceByGuid() throws Exception {
+        RangerServiceResource rangerServiceResource = createRangerServiceResource();
+
+        Mockito.when(rangerServiceResourceService.getServiceResourceByGuid(gId)).thenReturn(rangerServiceResource);
+
+        RangerServiceResource returnedRangerServiceResource = tagDBStore.getServiceResourceByGuid(gId);
+
+        Assert.assertNotNull(returnedRangerServiceResource);
+        Assert.assertEquals(returnedRangerServiceResource.getId(), id);
+        Assert.assertEquals(returnedRangerServiceResource.getGuid(), gId);
+        Assert.assertEquals(returnedRangerServiceResource.getResourceSignature(), resourceSignature);
+        Assert.assertEquals(returnedRangerServiceResource.getServiceName(), serviceName);
+    }
+
+    @Test
+    public void tesGetServiceResourceById() throws Exception {
+        RangerServiceResource rangerServiceResource = createRangerServiceResource();
+
+        Mockito.when(rangerServiceResourceService.read(id)).thenReturn(rangerServiceResource);
+
+        RangerServiceResource returnedRangerServiceResource = tagDBStore.getServiceResource(id);
+
+        Assert.assertNotNull(returnedRangerServiceResource);
+        Assert.assertEquals(returnedRangerServiceResource.getId(), id);
+        Assert.assertEquals(returnedRangerServiceResource.getGuid(), gId);
+        Assert.assertEquals(returnedRangerServiceResource.getResourceSignature(), resourceSignature);
+        Assert.assertEquals(returnedRangerServiceResource.getServiceName(), serviceName);
+    }
+
+    @Test
+    public void tesGetServiceResourcesByService() throws Exception {
+        RangerServiceResource       rangerServiceResource     = createRangerServiceResource();
+        List<RangerServiceResource> rangerServiceResourceList = new ArrayList<>();
+
+        rangerServiceResourceList.add(rangerServiceResource);
+
+        XXServiceDao xxServiceDao = Mockito.mock(XXServiceDao.class);
+
+        Mockito.when(daoManager.getXXService()).thenReturn(xxServiceDao);
+        Mockito.when(xxServiceDao.findIdByName(serviceName)).thenReturn(id);
+        Mockito.when(rangerServiceResourceService.getByServiceId(id)).thenReturn(rangerServiceResourceList);
+
+        List<RangerServiceResource> returnedRangerServiceResourceList = tagDBStore.getServiceResourcesByService(serviceName);
+
+        Assert.assertNotNull(returnedRangerServiceResourceList);
+
+        RangerServiceResource returnedRangerServiceResource = returnedRangerServiceResourceList.get(0);
+
+        Assert.assertEquals(returnedRangerServiceResource.getId(), id);
+        Assert.assertEquals(returnedRangerServiceResource.getGuid(), gId);
+        Assert.assertEquals(returnedRangerServiceResource.getResourceSignature(), resourceSignature);
+        Assert.assertEquals(returnedRangerServiceResource.getServiceName(), serviceName);
+    }
+
+    @Test
+    public void tesGetServiceResourceGuidsByService() throws Exception {
+        RangerServiceResource rangerServiceResource = createRangerServiceResource();
+        List<String>          result                =  new ArrayList<>();
+        XXServiceResourceDao  xxServiceResourceDao  = Mockito.mock(XXServiceResourceDao.class);
+        XXServiceDao          xxServiceDao          = Mockito.mock(XXServiceDao.class);
+
+        result.add(rangerServiceResource.getGuid());
+
+        Mockito.when(daoManager.getXXService()).thenReturn(xxServiceDao);
+        Mockito.when(daoManager.getXXServiceResource()).thenReturn(xxServiceResourceDao);
+        Mockito.when(xxServiceDao.findIdByName(serviceName)).thenReturn(id);
+        Mockito.when(xxServiceResourceDao.findServiceResourceGuidsInServiceId(id)).thenReturn(result);
+
+        List<String> returnedServiceResourceGuidsInServiceId = tagDBStore.getServiceResourceGuidsByService(serviceName);
+
+        Assert.assertNotNull(returnedServiceResourceGuidsInServiceId);
+        Assert.assertEquals(returnedServiceResourceGuidsInServiceId.get(0), gId);
+    }
+
+    @Test
+    public void tesGetServiceResourceByServiceAndResourceSignature() throws Exception {
+        RangerServiceResource rangerServiceResource = createRangerServiceResource();
+        XXServiceDao          xxServiceDao          = Mockito.mock(XXServiceDao.class);
+
+        Mockito.when(daoManager.getXXService()).thenReturn(xxServiceDao);
+        Mockito.when(xxServiceDao.findIdByName(serviceName)).thenReturn(id);
+        Mockito.when(rangerServiceResourceService.getByServiceAndResourceSignature(id, resourceSignature)).thenReturn(rangerServiceResource);
+
+        RangerServiceResource returnedRangerServiceResource = tagDBStore.getServiceResourceByServiceAndResourceSignature(serviceName, resourceSignature);
+
+        Assert.assertNotNull(returnedRangerServiceResource);
+        Assert.assertEquals(returnedRangerServiceResource.getId(), id);
+        Assert.assertEquals(returnedRangerServiceResource.getGuid(), gId);
+        Assert.assertEquals(returnedRangerServiceResource.getResourceSignature(), resourceSignature);
+    }
+
+    @Test
+    public void tesGetServiceResources() throws Exception {
+        PList<RangerServiceResource> rangerServiceResourcePList = createRangerServiceResourcePList();
+        SearchFilter                 searchFilter               = new SearchFilter();
+
+        Mockito.when(rangerServiceResourceService.searchServiceResources(searchFilter)).thenReturn(rangerServiceResourcePList);
+
+        List<RangerServiceResource> returnedRangerServiceResourceList = tagDBStore.getServiceResources(searchFilter);
+
+        Assert.assertNotNull(returnedRangerServiceResourceList);
+        Assert.assertEquals(returnedRangerServiceResourceList.size(), 1);
+
+        RangerServiceResource returnedRangerServiceResource = returnedRangerServiceResourceList.get(0);
+
+        Assert.assertEquals(returnedRangerServiceResource.getId(), id);
+        Assert.assertEquals(returnedRangerServiceResource.getGuid(), gId);
+        Assert.assertEquals(returnedRangerServiceResource.getResourceSignature(), resourceSignature);
+    }
+
+    @Test
+    public void tesGetPaginatedServiceResources() throws Exception {
+        PList<RangerServiceResource> rangerServiceResourcePList = createRangerServiceResourcePList();
+        SearchFilter                 searchFilter               = new SearchFilter();
+
+        Mockito.when(rangerServiceResourceService.searchServiceResources(searchFilter)).thenReturn(rangerServiceResourcePList);
+
+        PList<RangerServiceResource> returnedRangerServiceResourcePList = tagDBStore.getPaginatedServiceResources(searchFilter);
+
+        Assert.assertNotNull(returnedRangerServiceResourcePList);
+        Assert.assertEquals(returnedRangerServiceResourcePList.getList().size(), 1);
+
+        RangerServiceResource returnedRangerServiceResource = returnedRangerServiceResourcePList.getList().get(0);
+
+        Assert.assertEquals(returnedRangerServiceResource.getId(), id);
+        Assert.assertEquals(returnedRangerServiceResource.getGuid(), gId);
+        Assert.assertEquals(returnedRangerServiceResource.getResourceSignature(), resourceSignature);
+    }
+
+    @Test
+    public void tesCreateTagResourceMap() throws Exception {
+        RangerTagResourceMap       rangerTagResourceMap     = createRangerTagResourceMap();
+        List<RangerTagResourceMap> rangerTagResourceMapList = new ArrayList<>();
+        XXServiceResource          serviceResourceEntity    = createXXServiceResource();
+        XXServiceResourceDao       xxServiceResourceDao     = Mockito.mock(XXServiceResourceDao.class);
+
+        rangerTagResourceMapList.add(rangerTagResourceMap);
+
+        Mockito.when(rangerTagResourceMapService.create(rangerTagResourceMap)).thenReturn(rangerTagResourceMap);
+
+        Mockito.when(daoManager.getXXServiceResource()).thenReturn(xxServiceResourceDao);
+        Mockito.when(xxServiceResourceDao.getById(Mockito.any())).thenReturn(serviceResourceEntity);
+        Mockito.when(xxServiceResourceDao.update(serviceResourceEntity)).thenReturn(serviceResourceEntity);
+
+        RangerTagResourceMap returnedRangerTagResourceMap = tagDBStore.createTagResourceMap(rangerTagResourceMap);
+
+        Assert.assertNotNull(returnedRangerTagResourceMap);
+        Assert.assertEquals(returnedRangerTagResourceMap.getId(), id);
+        Assert.assertEquals(returnedRangerTagResourceMap.getGuid(), gId);
+    }
+
+    @Test
+    public void testDeleteTagResourceMap() throws Exception {
+        RangerTagResourceMap       rangerTagResourceMap     = createRangerTagResourceMap();
+        List<RangerTagResourceMap> rangerTagResourceMapList = new ArrayList<>();
+        XXServiceResource          serviceResourceEntity    = createXXServiceResource();
+        XXServiceResourceDao       xxServiceResourceDao     = Mockito.mock(XXServiceResourceDao.class);
+
+        rangerTagResourceMapList.add(rangerTagResourceMap);
+
+        Mockito.when(rangerTagResourceMapService.getByResourceId(id)).thenReturn(rangerTagResourceMapList);
+        Mockito.when(daoManager.getXXServiceResource()).thenReturn(xxServiceResourceDao);
+        Mockito.when(xxServiceResourceDao.getById(Mockito.any())).thenReturn(serviceResourceEntity);
+        Mockito.when(xxServiceResourceDao.update(serviceResourceEntity)).thenReturn(serviceResourceEntity);
+
+        RangerTag rangerTag = createRangerTag();
+
+        Mockito.when(rangerTagService.read(id)).thenReturn(rangerTag);
+        Mockito.when(rangerTagResourceMapService.read(id)).thenReturn(rangerTagResourceMap);
+        Mockito.when(rangerTagResourceMapService.delete(rangerTagResourceMap)).thenReturn(true);
+
+        tagDBStore.deleteTagResourceMap(id);
+    }
+
+    @Test
+    public void tesGetTagResourceMap() throws Exception {
+        RangerTagResourceMap rangerTagResourceMap = createRangerTagResourceMap();
+
+        Mockito.when(rangerTagResourceMapService.read(id)).thenReturn(rangerTagResourceMap);
+
+        RangerTagResourceMap returnedRangerTagResourceMap = tagDBStore.getTagResourceMap(id);
+
+        Assert.assertNotNull(returnedRangerTagResourceMap);
+        Assert.assertEquals(returnedRangerTagResourceMap.getId(), id);
+        Assert.assertEquals(returnedRangerTagResourceMap.getGuid(), gId);
+    }
+
+    @Test
+    public void tesGetTagResourceMapByGuid() throws Exception {
+        RangerTagResourceMap rangerTagResourceMap = createRangerTagResourceMap();
+
+        Mockito.when(rangerTagResourceMapService.getByGuid(gId)).thenReturn(rangerTagResourceMap);
+
+        RangerTagResourceMap returnedRangerTagResourceMap = tagDBStore.getTagResourceMapByGuid(gId);
+
+        Assert.assertNotNull(returnedRangerTagResourceMap);
+        Assert.assertEquals(returnedRangerTagResourceMap.getId(), id);
+        Assert.assertEquals(returnedRangerTagResourceMap.getGuid(), gId);
+    }
+
+    @Test
+    public void tesGetTagResourceMapsForTagId() throws Exception {
+        RangerTagResourceMap       rangerTagResourceMap     = createRangerTagResourceMap();
+        List<RangerTagResourceMap> rangerTagResourceMapList = new ArrayList<>();
+
+        rangerTagResourceMapList.add(rangerTagResourceMap);
+
+        Mockito.when(rangerTagResourceMapService.getByTagId(id)).thenReturn(rangerTagResourceMapList);
+
+        List<RangerTagResourceMap> returnedRangerTagResourceMapList = tagDBStore.getTagResourceMapsForTagId(id);
+        RangerTagResourceMap       returnedRangerTagResourceMap     = returnedRangerTagResourceMapList.get(0);
+
+        Assert.assertNotNull(returnedRangerTagResourceMap);
+        Assert.assertEquals(returnedRangerTagResourceMap.getId(), id);
+        Assert.assertEquals(returnedRangerTagResourceMap.getGuid(), gId);
+    }
+
+    @Test
+    public void tesGetTagResourceMapsForTagGuid() throws Exception {
+        RangerTagResourceMap       rangerTagResourceMap     = createRangerTagResourceMap();
+        List<RangerTagResourceMap> rangerTagResourceMapList = new ArrayList<>();
+
+        rangerTagResourceMapList.add(rangerTagResourceMap);
+
+        Mockito.when(rangerTagResourceMapService.getByTagGuid(gId)).thenReturn(rangerTagResourceMapList);
+
+        List<RangerTagResourceMap> returnedRangerTagResourceMapList = tagDBStore.getTagResourceMapsForTagGuid(gId);
+        RangerTagResourceMap       returnedRangerTagResourceMap     = returnedRangerTagResourceMapList.get(0);
+
+        Assert.assertNotNull(returnedRangerTagResourceMap);
+        Assert.assertEquals(returnedRangerTagResourceMap.getId(), id);
+        Assert.assertEquals(returnedRangerTagResourceMap.getGuid(), gId);
+    }
+
+    @Test
+    public void tesGetTagIdsForResourceId() throws Exception {
+        List<Long> tagIds = new ArrayList<>();
+
+        tagIds.add(id);
+
+        Mockito.when(rangerTagResourceMapService.getTagIdsForResourceId(id)).thenReturn(tagIds);
+
+        List<Long> returnedTagIdsList = tagDBStore.getTagIdsForResourceId(id);
+
+        Assert.assertNotNull(returnedTagIdsList);
+        Assert.assertEquals(returnedTagIdsList.size(), 1);
+        Assert.assertEquals(returnedTagIdsList.get(0), id);
+    }
+
+
+    @Test
+    public void testGetTagResourceMapsForResourceId() throws Exception {
+        RangerTagResourceMap       rangerTagResourceMap     = createRangerTagResourceMap();
+        List<RangerTagResourceMap> rangerTagResourceMapList = new ArrayList<>();
+
+        rangerTagResourceMapList.add(rangerTagResourceMap);
+
+        Mockito.when(rangerTagResourceMapService.getByResourceId(id)).thenReturn(rangerTagResourceMapList);
+
+        List<RangerTagResourceMap> returnedRangerTagResourceMapList = tagDBStore.getTagResourceMapsForResourceId(id);
+        RangerTagResourceMap       returnedRangerTagResourceMap     = returnedRangerTagResourceMapList.get(0);
+
+        Assert.assertNotNull(returnedRangerTagResourceMap);
+        Assert.assertEquals(returnedRangerTagResourceMap.getId(), id);
+        Assert.assertEquals(returnedRangerTagResourceMap.getGuid(), gId);
+    }
+
+    @Test
+    public void testGetTagResourceMapsForResourceGuid() throws Exception {
+        RangerTagResourceMap       rangerTagResourceMap     = createRangerTagResourceMap();
+        List<RangerTagResourceMap> rangerTagResourceMapList = new ArrayList<>();
+
+        rangerTagResourceMapList.add(rangerTagResourceMap);
+
+        Mockito.when(rangerTagResourceMapService.getByResourceGuid(gId)).thenReturn(rangerTagResourceMapList);
+
+        List<RangerTagResourceMap> returnedRangerTagResourceMapList = tagDBStore.getTagResourceMapsForResourceGuid(gId);
+        RangerTagResourceMap       returnedRangerTagResourceMap     = returnedRangerTagResourceMapList.get(0);
+
+        Assert.assertNotNull(returnedRangerTagResourceMap);
+        Assert.assertEquals(returnedRangerTagResourceMap.getId(), id);
+        Assert.assertEquals(returnedRangerTagResourceMap.getGuid(), gId);
+    }
+
+
+    @Test
+    public void testGetTagResourceMapForTagAndResourceId() throws Exception {
+        RangerTagResourceMap rangerTagResourceMap = createRangerTagResourceMap();
+
+        Mockito.when(rangerTagResourceMapService.getByTagAndResourceId(id,id)).thenReturn(rangerTagResourceMap);
+
+        RangerTagResourceMap returnedRangerTagResourceMap = tagDBStore.getTagResourceMapForTagAndResourceId(id,id);
+
+        Assert.assertNotNull(returnedRangerTagResourceMap);
+        Assert.assertEquals(returnedRangerTagResourceMap.getId(), id);
+        Assert.assertEquals(returnedRangerTagResourceMap.getGuid(), gId);
+    }
+
+    @Test
+    public void testGetTagResourceMapForTagAndResourceGuid() throws Exception {
+        RangerTagResourceMap rangerTagResourceMap = createRangerTagResourceMap();
+
+        Mockito.when(rangerTagResourceMapService.getByTagAndResourceGuid(gId,gId)).thenReturn(rangerTagResourceMap);
+
+        RangerTagResourceMap returnedRangerTagResourceMap = tagDBStore.getTagResourceMapForTagAndResourceGuid(gId,gId);
+
+        Assert.assertNotNull(returnedRangerTagResourceMap);
+        Assert.assertEquals(returnedRangerTagResourceMap.getId(), id);
+        Assert.assertEquals(returnedRangerTagResourceMap.getGuid(), gId);
+    }
+
+    @Test
+    public void testGetPaginatedTagResourceMaps() throws Exception {
+        PList<RangerTagResourceMap> rangerTagResourceMapPList = createRangerTagResourceMapPList();
+        SearchFilter                searchFilter              = new SearchFilter();
+
+        Mockito.when(rangerTagResourceMapService.searchRangerTaggedResources(searchFilter)).thenReturn(rangerTagResourceMapPList);
+
+        PList<RangerTagResourceMap> returnedRangerTagResourceMapPList = tagDBStore.getPaginatedTagResourceMaps(searchFilter);
+
+        Assert.assertNotNull(returnedRangerTagResourceMapPList);
+        Assert.assertEquals(returnedRangerTagResourceMapPList.getList().size(), 1);
+
+        RangerTagResourceMap returnedRangerTagResourceMap = returnedRangerTagResourceMapPList.getList().get(0);
+
+        Assert.assertEquals(returnedRangerTagResourceMap.getId(), id);
+        Assert.assertEquals(returnedRangerTagResourceMap.getGuid(), gId);
+    }
+
+    @Test
+    public void testGetTagResourceMaps() throws Exception {
+        PList<RangerTagResourceMap> rangerTagResourceMapPList = createRangerTagResourceMapPList();
+        SearchFilter                searchFilter              = new SearchFilter();
+
+        Mockito.when(rangerTagResourceMapService.searchRangerTaggedResources(searchFilter)).thenReturn(rangerTagResourceMapPList);
+
+        List<RangerTagResourceMap> returnedRangerTagResourceMapList = tagDBStore.getTagResourceMaps(searchFilter);
+
+        Assert.assertNotNull(returnedRangerTagResourceMapList);
+        Assert.assertEquals(returnedRangerTagResourceMapList.size(), 1);
+
+        RangerTagResourceMap returnedRangerTagResourceMap = returnedRangerTagResourceMapList.get(0);
+
+        Assert.assertEquals(returnedRangerTagResourceMap.getId(), id);
+        Assert.assertEquals(returnedRangerTagResourceMap.getGuid(), gId);
+    }
+
+    @Test
+    public void testGetServiceTagsIfUpdated() throws Exception {
+        XXServiceVersionInfo    serviceVersionInfoDbObj = createXXServiceVersionInfo();
+        XXServiceVersionInfoDao xxServiceVersionInfoDao = Mockito.mock(XXServiceVersionInfoDao.class);
+        XXServiceDao            xxServiceDao            = Mockito.mock(XXServiceDao.class);
+        XXService               xxService               = createXXService();
+        RangerServiceDef        rangerServiceDef        = createRangerServiceDef();
+
+        Mockito.when(daoManager.getXXServiceVersionInfo()).thenReturn(xxServiceVersionInfoDao);
+        Mockito.when(xxServiceVersionInfoDao.findByServiceName(serviceName)).thenReturn(serviceVersionInfoDbObj);
+        Mockito.when(daoManager.getXXService()).thenReturn(xxServiceDao);
+        Mockito.when(xxServiceDao.findIdByName(serviceName)).thenReturn(id);
+        Mockito.when(xxServiceDao.findByName(serviceName)).thenReturn(xxService);
+        Mockito.when(svcStore.getServiceDef(Mockito.any())).thenReturn(rangerServiceDef);
+
+        ServiceTags serviceTags = tagDBStore.getServiceTagsIfUpdated(serviceName, -1L, true);
+
+        Assert.assertNotNull(serviceTags);
+        Assert.assertEquals(serviceTags.getTagVersion(), lastKnownVersion);
+        Assert.assertEquals(serviceTags.getServiceName(), serviceName);
+    }
+
+    @Test
+    public void testGetServiceTags() throws Exception {
+        XXServiceVersionInfo    serviceVersionInfoDbObj = createXXServiceVersionInfo();
+        XXServiceVersionInfoDao xxServiceVersionInfoDao = Mockito.mock(XXServiceVersionInfoDao.class);
+        XXServiceDao            xxServiceDao            = Mockito.mock(XXServiceDao.class);
+        XXService               xxService               = createXXService();
+        RangerServiceDef        rangerServiceDef        = createRangerServiceDef();
+
+        Mockito.when(daoManager.getXXServiceVersionInfo()).thenReturn(xxServiceVersionInfoDao);
+        Mockito.when(xxServiceVersionInfoDao.findByServiceName(serviceName)).thenReturn(serviceVersionInfoDbObj);
+        Mockito.when(daoManager.getXXService()).thenReturn(xxServiceDao);
+        Mockito.when(xxServiceDao.findByName(serviceName)).thenReturn(xxService);
+        Mockito.when(svcStore.getServiceDef(Mockito.any())).thenReturn(rangerServiceDef);
+
+        ServiceTags serviceTags = tagDBStore.getServiceTags(serviceName, -1L);
+
+        Assert.assertNotNull(serviceTags);
+        Assert.assertEquals(serviceTags.getTagVersion(), lastKnownVersion);
+        Assert.assertEquals(serviceTags.getServiceName(), serviceName);
+    }
+
+    @Test
+    public void testDeleteAllTagObjectsForService() throws Exception {
+        XXServiceDao           xxServiceDao         = Mockito.mock(XXServiceDao.class);
+        XXTagDao               xxTagDao             =  Mockito.mock(XXTagDao.class);
+        XXTagResourceMapDao    xxTagResourceMapDao  = Mockito.mock(XXTagResourceMapDao.class);
+        XXServiceResourceDao   xxServiceResourceDao = Mockito.mock(XXServiceResourceDao.class);
+        XXService              xxService            = createXXService();
+        XXTag                  xxTag                = createXXTag();
+        XXTagResourceMap       xxTagResourceMap     = createXXTagResourceMap();
+        XXServiceResource      xxServiceResource    = createXXServiceResource();
+        List<XXTag>            xxTagList            = new ArrayList<>();
+        List<XXTagResourceMap> xxTagResourceMapList = new ArrayList<>();
+        List<XXServiceResource> xxServiceResources  = new ArrayList<>();
+
+        Mockito.when(daoManager.getXXService()).thenReturn(xxServiceDao);
+        Mockito.when(daoManager.getXXTag()).thenReturn(xxTagDao);
+        Mockito.when(daoManager.getXXTagResourceMap()).thenReturn(xxTagResourceMapDao);
+        Mockito.when(daoManager.getXXServiceResource()).thenReturn(xxServiceResourceDao);
+        Mockito.when(xxServiceDao.findByName(serviceName)).thenReturn(xxService);
+
+        xxTagList.add(xxTag);
+
+        xxTagResourceMapList.add(xxTagResourceMap);
+
+        xxServiceResources.add(xxServiceResource);
+
+        Mockito.when(xxTagDao.findByServiceIdAndOwner(Mockito.any(), Mockito.any())).thenReturn(xxTagList);
+        Mockito.when(xxServiceResourceDao.findByServiceId(Mockito.any())).thenReturn(xxServiceResources);
+        Mockito.when(xxTagResourceMapDao.findByServiceId(Mockito.any())).thenReturn(xxTagResourceMapList);
+        Mockito.when(xxTagDao.remove(xxTag)).thenReturn(true);
+        Mockito.when(xxTagResourceMapDao.remove(xxTagResourceMap)).thenReturn(true);
+
+        tagDBStore.deleteAllTagObjectsForService(serviceName);
+    }
+
+    @Test
+    public void testGetServiceTagsDeltaWhenTagDeltaSupportsDisabled() throws Exception {
+        ServiceTags serviceTags = tagDBStore.getServiceTagsDelta(serviceName, lastKnownVersion);
+
+        Assert.assertNull(serviceTags);
+    }
+
+    @Test
+    public void testIsSupportsTagDeltas() throws Exception {
+        boolean isSupportsTagDeltas = tagDBStore.isSupportsTagDeltas();
+
+        Assert.assertFalse(isSupportsTagDeltas);
+    }
+
+    @Test
+    public void testIsInPlaceTagUpdateSupported() throws Exception {
+        boolean isInPlaceTagUpdateSupported = tagDBStore.isInPlaceTagUpdateSupported();
+
+        Assert.assertFalse(isInPlaceTagUpdateSupported);
+    }
+
+    @Test
+    public void testGetTagVersion() throws Exception {
+        XXServiceVersionInfo   serviceVersionInfoDbObj  = createXXServiceVersionInfo();
+        XXServiceVersionInfoDao xxServiceVersionInfoDao = Mockito.mock(XXServiceVersionInfoDao.class);
+
+        Mockito.when(daoManager.getXXServiceVersionInfo()).thenReturn(xxServiceVersionInfoDao);
+        Mockito.when(xxServiceVersionInfoDao.findByServiceName(serviceName)).thenReturn(serviceVersionInfoDbObj);
+
+        Long tagVersion =  tagDBStore.getTagVersion(serviceName);
+
+        Assert.assertEquals(tagVersion, lastKnownVersion);
+    }
+
+    private RangerTagDef createRangerTagDef() {
+        RangerTagDef rangerTagDef = new RangerTagDef();
+
+        rangerTagDef.setId(id);
+        rangerTagDef.setName(name);
+        rangerTagDef.setCreateTime(new Date());
+        rangerTagDef.setGuid(gId);
+        rangerTagDef.setVersion(lastKnownVersion);
+
+        return rangerTagDef;
+    }
+
+    private  PList<RangerTagDef> createRangerTagDefPList() {
+        PList<RangerTagDef> rangerTagDefPList = new PList<>();
+        List<RangerTagDef>  rangerTagDefList  = new ArrayList<>();
+        RangerTagDef        rangerTagDef      = createRangerTagDef();
+
+        rangerTagDefList.add(rangerTagDef);
+
+        rangerTagDefPList.setList(rangerTagDefList);
+        rangerTagDefPList.setPageSize(0);
+        rangerTagDefPList.setResultSize(1);
+        rangerTagDefPList.setSortBy("asc");
+        rangerTagDefPList.setSortType("1");
+        rangerTagDefPList.setStartIndex(0);
+        rangerTagDefPList.setTotalCount(10);
+
+        return rangerTagDefPList;
+    }
+
+    private RangerTag createRangerTag() {
+        RangerTag rangerTag = new RangerTag();
+
+        rangerTag.setId(id);
+        rangerTag.setCreatedBy(name);
+        rangerTag.setOwner((short)0);
+        rangerTag.setCreateTime(new Date());
+        rangerTag.setGuid(gId);
+        rangerTag.setVersion(lastKnownVersion);
+
+        return rangerTag;
+    }
+
+    private  PList<RangerTag> createRangerTagPList() {
+        PList<RangerTag> rangerTagPList = new PList<>();
+        List<RangerTag>  rangerTagList  = new ArrayList<>();
+        RangerTag        rangerTag      = createRangerTag();
+
+        rangerTagList.add(rangerTag);
+        rangerTagPList.setList(rangerTagList);
+        rangerTagPList.setPageSize(0);
+        rangerTagPList.setResultSize(1);
+        rangerTagPList.setSortBy("asc");
+        rangerTagPList.setSortType("1");
+        rangerTagPList.setStartIndex(0);
+        rangerTagPList.setTotalCount(10);
+
+        return rangerTagPList;
+    }
+
+    private RangerServiceResource createRangerServiceResource() {
+        RangerServiceResource rangerServiceResource = new RangerServiceResource();
+
+        rangerServiceResource.setId(id);
+        rangerServiceResource.setCreateTime(new Date());
+        rangerServiceResource.setGuid(gId);
+        rangerServiceResource.setVersion(lastKnownVersion);
+        rangerServiceResource.setResourceSignature(resourceSignature);
+        rangerServiceResource.setServiceName(serviceName);
+
+        return rangerServiceResource;
+    }
+
+    private  PList<RangerServiceResource> createRangerServiceResourcePList() {
+        PList<RangerServiceResource> rangerServiceResourcePList = new PList<>();
+        List<RangerServiceResource>  rangerServiceResourceList  = new ArrayList<>();
+        RangerServiceResource        rangerServiceResource      = new RangerServiceResource();
+
+        rangerServiceResource.setId(id);
+        rangerServiceResource.setCreateTime(new Date());
+        rangerServiceResource.setGuid(gId);
+        rangerServiceResource.setVersion(lastKnownVersion);
+        rangerServiceResource.setResourceSignature(resourceSignature);
+        rangerServiceResource.setServiceName(serviceName);
+
+        rangerServiceResourceList.add(rangerServiceResource);
+
+        rangerServiceResourcePList.setList(rangerServiceResourceList);
+        rangerServiceResourcePList.setPageSize(0);
+        rangerServiceResourcePList.setResultSize(1);
+        rangerServiceResourcePList.setSortBy("asc");
+        rangerServiceResourcePList.setSortType("1");
+        rangerServiceResourcePList.setStartIndex(0);
+        rangerServiceResourcePList.setTotalCount(10);
+
+        return rangerServiceResourcePList;
+    }
+
+    private RangerTagResourceMap createRangerTagResourceMap() {
+        RangerTagResourceMap rangerTagResourceMap = new RangerTagResourceMap();
+
+        rangerTagResourceMap.setId(id);
+        rangerTagResourceMap.setTagId(id);
+        rangerTagResourceMap.setGuid(gId);
+        rangerTagResourceMap.setVersion(lastKnownVersion);
+        rangerTagResourceMap.setResourceId(id);
+
+        return rangerTagResourceMap;
+    }
+
+    private XXServiceResource createXXServiceResource() {
+        XXServiceResource xxServiceResource = new XXServiceResource();
+
+        xxServiceResource.setId(id);
+        xxServiceResource.setCreateTime(new Date());
+        xxServiceResource.setGuid(gId);
+        xxServiceResource.setVersion(lastKnownVersion);
+        xxServiceResource.setResourceSignature(resourceSignature);
+        xxServiceResource.setServiceId(id);
+
+        return xxServiceResource;
+    }
+
+    private  PList<RangerTagResourceMap> createRangerTagResourceMapPList() {
+        PList<RangerTagResourceMap> rangerTagResourceMapPList = new PList<>();
+        List<RangerTagResourceMap>  rangerTagResourceMapList  = new ArrayList<>();
+        RangerTagResourceMap        rangerTagResourceMap      = new RangerTagResourceMap();
+
+        rangerTagResourceMap.setId(id);
+        rangerTagResourceMap.setGuid(gId);
+        rangerTagResourceMap.setVersion(lastKnownVersion);
+        rangerTagResourceMap.setResourceId(id);
+
+        rangerTagResourceMapList.add(rangerTagResourceMap);
+
+        rangerTagResourceMapPList.setList(rangerTagResourceMapList);
+        rangerTagResourceMapPList.setPageSize(0);
+        rangerTagResourceMapPList.setResultSize(1);
+        rangerTagResourceMapPList.setSortBy("asc");
+        rangerTagResourceMapPList.setSortType("1");
+        rangerTagResourceMapPList.setStartIndex(0);
+        rangerTagResourceMapPList.setTotalCount(10);
+
+        return rangerTagResourceMapPList;
+    }
+
+    private XXServiceVersionInfo createXXServiceVersionInfo() {
+        XXServiceVersionInfo serviceVersionInfoDbObj = new XXServiceVersionInfo();
+
+        serviceVersionInfoDbObj.setId(id);
+        serviceVersionInfoDbObj.setRoleVersion(lastKnownVersion);
+        serviceVersionInfoDbObj.setPolicyVersion(lastKnownVersion);
+        serviceVersionInfoDbObj.setTagVersion(lastKnownVersion);
+
+        return serviceVersionInfoDbObj;
+    }
+
+    private XXService createXXService() {
+        XXService xxService = new XXService();
+
+        xxService.setId(id);
+        xxService.setName(serviceName);
+        xxService.setType(5L);
+
+        return xxService;
+    }
+
+    private RangerServiceDef createRangerServiceDef() {
+        List<RangerServiceConfigDef>   configs          = new ArrayList<>();
+        List<RangerResourceDef>        resources        = new ArrayList<>();
+        List<RangerAccessTypeDef>      accessTypes      = new ArrayList<>();
+        List<RangerPolicyConditionDef> policyConditions = new ArrayList<>();
+        List<RangerContextEnricherDef> contextEnrichers = new ArrayList<>();
+        List<RangerEnumDef>            enums            = new ArrayList<>();
+        RangerServiceDef               rangerServiceDef = new RangerServiceDef();
+
+        rangerServiceDef.setId(id);
+        rangerServiceDef.setImplClass("RangerServiceHdfs");
+        rangerServiceDef.setLabel("HDFS Repository");
+        rangerServiceDef.setDescription("HDFS Repository");
+        rangerServiceDef.setRbKeyDescription(null);
+        rangerServiceDef.setUpdatedBy("Admin");
+        rangerServiceDef.setUpdateTime(new Date());
+        rangerServiceDef.setConfigs(configs);
+        rangerServiceDef.setResources(resources);
+        rangerServiceDef.setAccessTypes(accessTypes);
+        rangerServiceDef.setPolicyConditions(policyConditions);
+        rangerServiceDef.setContextEnrichers(contextEnrichers);
+        rangerServiceDef.setEnums(enums);
+
+        return rangerServiceDef;
+    }
+
+    private XXTag createXXTag() {
+        XXTag xxTag = new XXTag();
+
+        xxTag.setGuid(gId);
+        xxTag.setId(id);
+        xxTag.setVersion(lastKnownVersion);
+        xxTag.setType(1L);
+
+        return xxTag;
+    }
+
+    private XXTagResourceMap createXXTagResourceMap() {
+        XXTagResourceMap xxTagResourceMap = new XXTagResourceMap();
+
+        xxTagResourceMap.setTagId(id);
+        xxTagResourceMap.setResourceId(id);
+        xxTagResourceMap.setId(id);
+        xxTagResourceMap.setGuid(gId);
+
+        return xxTagResourceMap;
+    }
+}
diff --git a/security-admin/src/test/java/org/apache/ranger/rest/TestMetricsREST.java b/security-admin/src/test/java/org/apache/ranger/rest/TestMetricsREST.java
new file mode 100644
index 000000000..3b2a0c3e1
--- /dev/null
+++ b/security-admin/src/test/java/org/apache/ranger/rest/TestMetricsREST.java
@@ -0,0 +1,87 @@
+/*
+ * 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.LinkedHashMap;
+import java.util.Map;
+import org.apache.ranger.plugin.model.RangerMetrics;
+import org.apache.ranger.util.RangerMetricsUtil;
+import org.junit.Assert;
+import org.junit.FixMethodOrder;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.MethodSorters;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.junit.MockitoJUnitRunner;
+
+@RunWith(MockitoJUnitRunner.class)
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+public class TestMetricsREST {
+    @InjectMocks
+    MetricsREST metricsREST = new MetricsREST();
+
+    @Mock
+    RangerMetricsUtil jvmMetricUtil;
+
+
+    @Test
+    public void testGetStatus() throws Exception {
+        Map<String, Object> rangerMetricsValues = getRangerMetricsValues();
+
+        Mockito.when(jvmMetricUtil.getValues()).thenReturn(rangerMetricsValues);
+
+        RangerMetrics rangerMetrics = metricsREST.getStatus();
+
+        Assert.assertNotNull(rangerMetrics);
+        Assert.assertNotNull(rangerMetrics.getData());
+        Assert.assertNotNull(rangerMetrics.getData().get("jvm"));
+
+        Map<String, Object> jvmMetricsMap = (Map<String, Object>)rangerMetrics.getData().get("jvm");
+
+        Assert.assertNotNull(jvmMetricsMap.get("JVM Machine Actual Name"));
+        Assert.assertNotNull(jvmMetricsMap.get("version"));
+        Assert.assertNotNull(jvmMetricsMap.get("JVM Vendor Name"));
+        Assert.assertEquals("Mac OS X, x86_64, 12.6.3", jvmMetricsMap.get("os.spec"));
+        Assert.assertEquals("8", jvmMetricsMap.get("os.vcpus"));
+        Assert.assertNotNull(jvmMetricsMap.get("memory"));
+
+        Map<String, Object> memoryDetailsMap = (Map<String, Object>)jvmMetricsMap.get("memory");
+
+        Assert.assertEquals("7635730432", memoryDetailsMap.get("heapMax"));
+        Assert.assertEquals("40424768", memoryDetailsMap.get("heapUsed"));
+    }
+
+
+    private Map<String, Object> getRangerMetricsValues() {
+        Map<String, Object>  rangerMetricsMap = new LinkedHashMap<>();
+        rangerMetricsMap.put("os.spec", "Mac OS X, x86_64, 12.6.3");
+        rangerMetricsMap.put("os.vcpus", "8");
+
+        Map<String, Object> memoryDetailsMap  = new LinkedHashMap<>();
+        memoryDetailsMap.put("heapMax", String.valueOf(7635730432L));
+        memoryDetailsMap.put("heapCommitted", String.valueOf(514850816L));
+        memoryDetailsMap.put("heapUsed", String.valueOf(40424768L));
+        rangerMetricsMap.put("memory", memoryDetailsMap);
+
+        return rangerMetricsMap;
+    }
+}
diff --git a/security-admin/src/test/java/org/apache/ranger/util/TestRangerMetricsUtil.java b/security-admin/src/test/java/org/apache/ranger/util/TestRangerMetricsUtil.java
new file mode 100644
index 000000000..ff306c1ee
--- /dev/null
+++ b/security-admin/src/test/java/org/apache/ranger/util/TestRangerMetricsUtil.java
@@ -0,0 +1,51 @@
+/*
+ * 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.util;
+
+import java.util.Map;
+import org.junit.Assert;
+import org.junit.Test;
+import org.mockito.InjectMocks;
+
+public class TestRangerMetricsUtil {
+    @InjectMocks
+    RangerMetricsUtil rangerMetricsUtil = new RangerMetricsUtil();
+
+    @Test
+    public void testGetRangerMetricsValues() throws Exception {
+        Map<String, Object> rangerMetricsMap = rangerMetricsUtil.getValues();
+
+        Assert.assertNotNull(rangerMetricsMap);
+        Assert.assertNotNull(rangerMetricsMap.get("os.spec"));
+        Assert.assertNotNull(rangerMetricsMap.get("os.vcpus"));
+        Assert.assertNotNull(rangerMetricsMap.get("memory"));
+
+        Map<String, Object> memoryDetailsMap = (Map<String, Object>)rangerMetricsMap.get("memory");
+
+        Assert.assertNotNull(memoryDetailsMap.get("heapMax"));
+        Assert.assertNotNull(memoryDetailsMap.get("heapCommitted"));
+        Assert.assertNotNull(memoryDetailsMap.get("heapUsed"));
+        Assert.assertNotNull(memoryDetailsMap.get("memory_pool_usages"));
+
+        Map<String, Object> poolDivisionDetailsMap = (Map<String, Object>)memoryDetailsMap.get("memory_pool_usages");
+
+        Assert.assertTrue(poolDivisionDetailsMap.size() > 0);
+    }
+}