This is an automated email from the ASF dual-hosted git repository.

madhan pushed a commit to branch ranger-2.8
in repository https://gitbox.apache.org/repos/asf/ranger.git

commit 69487ec0f07dc1168921174ab658d088d562041e
Author: Kishor Gollapalliwar <[email protected]>
AuthorDate: Tue Sep 30 22:43:11 2025 +0530

    RANGER-5352: Resource changes in tag does not work correctly when delta 
sync & dedup is enabled
    
    (cherry picked from commit 9a79afbc530bc76b1fff1438d4198732dd11345b)
---
 pom.xml                                            |   2 +-
 security-admin/pom.xml                             |  13 +
 .../java/org/apache/ranger/biz/TagDBStore.java     |  14 +-
 .../java/org/apache/ranger/biz/TestTagDBStore.java | 752 ++++++++++++++++-----
 4 files changed, 603 insertions(+), 178 deletions(-)

diff --git a/pom.xml b/pom.xml
index 10e30a0ee..8aef68777 100644
--- a/pom.xml
+++ b/pom.xml
@@ -167,7 +167,7 @@
         <maven.surefire.plugin.version>3.0.0-M6</maven.surefire.plugin.version>
         <maven.version.required>3.6.3</maven.version.required>
         <metrics.core.version>3.0.2</metrics.core.version>
-        <mockito.version>3.0.0</mockito.version>
+        <mockito.version>3.12.4</mockito.version>
         <mysql-connector-java.version>5.1.49</mysql-connector-java.version>
         <net.minidev.asm.version>1.0.2</net.minidev.asm.version>
         <netty-all.version>4.1.124.Final</netty-all.version>
diff --git a/security-admin/pom.xml b/security-admin/pom.xml
index b81c4f0a5..efa2690dd 100644
--- a/security-admin/pom.xml
+++ b/security-admin/pom.xml
@@ -842,6 +842,19 @@
         <dependency>
             <groupId>org.mockito</groupId>
             <artifactId>mockito-core</artifactId>
+            <version>${mockito.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-inline</artifactId>
+            <version>${mockito.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-junit-jupiter</artifactId>
+            <version>${mockito.version}</version>
             <scope>test</scope>
         </dependency>
     </dependencies>
diff --git a/security-admin/src/main/java/org/apache/ranger/biz/TagDBStore.java 
b/security-admin/src/main/java/org/apache/ranger/biz/TagDBStore.java
index 9134e3988..f857a0115 100755
--- a/security-admin/src/main/java/org/apache/ranger/biz/TagDBStore.java
+++ b/security-admin/src/main/java/org/apache/ranger/biz/TagDBStore.java
@@ -1270,14 +1270,18 @@ private ServiceTags 
createServiceTagsDelta(List<XXTagChangeLog> changeLogs) thro
                                                }
                                        } finally {
                                                if (tag == null) {
-                                                       tag = new RangerTag();
-                                                       tag.setId(tagId);
+                                                       if 
(!isSupportsTagsDedup()) {
+                                                               // Indicating 
policy engine to remove this TAG
+                                                               tag = new 
RangerTag();
+                                                               
tag.setId(tagId);
+                                                       }
                                                }
                                        }
 
-                                       
RangerServiceTagsDeltaUtil.pruneUnusedAttributes(tag);
-
-                                       ret.getTags().put(tag.getId(), tag);
+                                       if (tag != null) {
+                                               
RangerServiceTagsDeltaUtil.pruneUnusedAttributes(tag);
+                                               ret.getTags().put(tag.getId(), 
tag);
+                                       }
                                }
 
                                XXTagDefDao tagDefDao = 
daoManager.getXXTagDef();
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
index 98459d67b..79f94d8bd 100755
--- a/security-admin/src/test/java/org/apache/ranger/biz/TestTagDBStore.java
+++ b/security-admin/src/test/java/org/apache/ranger/biz/TestTagDBStore.java
@@ -18,14 +18,17 @@
 package org.apache.ranger.biz;
 
 import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.mockStatic;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
 import javax.ws.rs.WebApplicationException;
+import org.apache.ranger.authorization.utils.JsonUtils;
 import org.apache.ranger.common.MessageEnums;
 import org.apache.ranger.common.RESTErrorUtil;
 import org.apache.ranger.common.RangerServiceTagsCache;
@@ -33,6 +36,7 @@
 import org.apache.ranger.db.XXServiceDao;
 import org.apache.ranger.db.XXServiceResourceDao;
 import org.apache.ranger.db.XXServiceVersionInfoDao;
+import org.apache.ranger.db.XXTagChangeLogDao;
 import org.apache.ranger.db.XXTagDao;
 import org.apache.ranger.db.XXTagDefDao;
 import org.apache.ranger.db.XXTagResourceMapDao;
@@ -40,6 +44,8 @@
 import org.apache.ranger.entity.XXServiceResource;
 import org.apache.ranger.entity.XXServiceVersionInfo;
 import org.apache.ranger.entity.XXTag;
+import org.apache.ranger.entity.XXTagChangeLog;
+import org.apache.ranger.entity.XXTagDef;
 import org.apache.ranger.entity.XXTagResourceMap;
 import org.apache.ranger.plugin.model.RangerServiceDef;
 import org.apache.ranger.plugin.model.RangerServiceDef.RangerAccessTypeDef;
@@ -63,20 +69,19 @@
 import org.apache.ranger.service.RangerTagResourceMapService;
 import org.apache.ranger.service.RangerTagService;
 import org.apache.ranger.view.RangerServiceResourceWithTagsList;
-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.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.MethodOrderer;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestMethodOrder;
+import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
+import org.mockito.MockedStatic;
 import org.mockito.Mockito;
-import org.mockito.runners.MockitoJUnitRunner;
+import org.mockito.junit.jupiter.MockitoExtension;
 
-@RunWith(MockitoJUnitRunner.class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+@ExtendWith(MockitoExtension.class)
+@TestMethodOrder(MethodOrderer.MethodName.class)
 public class TestTagDBStore {
     private final static Long id                  = 1L;
     private final static String name              = "test";
@@ -111,9 +116,10 @@ public class TestTagDBStore {
 
     @Mock
     ServiceDBStore svcStore;
-
-    @Rule
-    public ExpectedException thrown = ExpectedException.none();
+    @Mock
+    XXTagDefDao tagDefDao;
+    @Mock
+    XXServiceResourceDao  serviceResourceDao;
 
     @Test
     public void testCreateTagDef() throws Exception {
@@ -124,9 +130,9 @@ public void testCreateTagDef() throws Exception {
 
         RangerTagDef returnedRangerTagDef = 
tagDBStore.createTagDef(rangerTagDef);
 
-        Assert.assertNotNull(returnedRangerTagDef);
-        Assert.assertEquals(returnedRangerTagDef.getId(), id);
-        Assert.assertEquals(rangerTagDef.getName(), name);
+        Assertions.assertNotNull(returnedRangerTagDef);
+        Assertions.assertEquals(returnedRangerTagDef.getId(), id);
+        Assertions.assertEquals(rangerTagDef.getName(), name);
     }
 
     @Test
@@ -138,9 +144,9 @@ public void testUpdateTagDef() throws Exception {
 
         RangerTagDef returnedRangerTagDef = 
tagDBStore.updateTagDef(rangerTagDef);
 
-        Assert.assertNotNull(returnedRangerTagDef);
-        Assert.assertEquals(returnedRangerTagDef.getId(), id);
-        Assert.assertEquals(rangerTagDef.getName(), name);
+        Assertions.assertNotNull(returnedRangerTagDef);
+        Assertions.assertEquals(returnedRangerTagDef.getId(), id);
+        Assertions.assertEquals(rangerTagDef.getName(), name);
     }
 
     @Test
@@ -149,9 +155,8 @@ public void testUpdateTagDefWhenItIsNotAvailable() throws 
Exception {
 
         
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);
+        Assertions.assertThrows(WebApplicationException.class, () -> 
tagDBStore.updateTagDef(rangerTagDef));
     }
 
     @Test
@@ -163,9 +168,8 @@ public void testUpdateTagDefForTheSameName() throws 
Exception {
 
         
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);
+        Assertions.assertThrows(WebApplicationException.class, () -> 
tagDBStore.updateTagDef(rangerTagDef));
     }
 
     @Test
@@ -176,9 +180,9 @@ public void testGetTagDefByName() throws Exception {
 
         RangerTagDef returnedRangerTagDef = 
tagDBStore.getTagDefByName(rangerTagDef.getName());
 
-        Assert.assertNotNull(returnedRangerTagDef);
-        Assert.assertEquals(returnedRangerTagDef.getId(), id);
-        Assert.assertEquals(rangerTagDef.getName(), name);
+        Assertions.assertNotNull(returnedRangerTagDef);
+        Assertions.assertEquals(returnedRangerTagDef.getId(), id);
+        Assertions.assertEquals(rangerTagDef.getName(), name);
     }
 
     @Test
@@ -189,10 +193,10 @@ public void testGetTagDefByGuid() throws Exception {
 
         RangerTagDef returnedRangerTagDef = 
tagDBStore.getTagDefByGuid(rangerTagDef.getGuid());
 
-        Assert.assertNotNull(returnedRangerTagDef);
-        Assert.assertEquals(returnedRangerTagDef.getId(), id);
-        Assert.assertEquals(returnedRangerTagDef.getGuid(), gId);
-        Assert.assertEquals(rangerTagDef.getName(), name);
+        Assertions.assertNotNull(returnedRangerTagDef);
+        Assertions.assertEquals(returnedRangerTagDef.getId(), id);
+        Assertions.assertEquals(returnedRangerTagDef.getGuid(), gId);
+        Assertions.assertEquals(rangerTagDef.getName(), name);
     }
 
     @Test
@@ -203,10 +207,10 @@ public void testGetTagDefById() throws Exception {
 
         RangerTagDef returnedRangerTagDef = 
tagDBStore.getTagDef(rangerTagDef.getId());
 
-        Assert.assertNotNull(returnedRangerTagDef);
-        Assert.assertEquals(returnedRangerTagDef.getId(), id);
-        Assert.assertEquals(returnedRangerTagDef.getGuid(), gId);
-        Assert.assertEquals(rangerTagDef.getName(), name);
+        Assertions.assertNotNull(returnedRangerTagDef);
+        Assertions.assertEquals(returnedRangerTagDef.getId(), id);
+        Assertions.assertEquals(returnedRangerTagDef.getGuid(), gId);
+        Assertions.assertEquals(rangerTagDef.getName(), name);
     }
 
     @Test
@@ -238,13 +242,13 @@ public void testGetTagDefs() throws Exception {
 
         List<RangerTagDef> rangerTagDefList = 
tagDBStore.getTagDefs(searchFilter);
 
-        Assert.assertNotNull(rangerTagDefList);
+        Assertions.assertNotNull(rangerTagDefList);
 
         RangerTagDef rangerTagDef = rangerTagDefList.get(0);
 
-        Assert.assertEquals(rangerTagDef.getId(), id);
-        Assert.assertEquals(rangerTagDef.getGuid(), gId);
-        Assert.assertEquals(rangerTagDef.getName(), name);
+        Assertions.assertEquals(rangerTagDef.getId(), id);
+        Assertions.assertEquals(rangerTagDef.getGuid(), gId);
+        Assertions.assertEquals(rangerTagDef.getName(), name);
     }
 
     @Test
@@ -256,14 +260,14 @@ public void testGetPaginatedTagDefs() throws Exception {
 
         PList<RangerTagDef> returnedRangerTagDefList = 
tagDBStore.getPaginatedTagDefs(searchFilter);
 
-        Assert.assertNotNull(returnedRangerTagDefList);
+        Assertions.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);
+        Assertions.assertEquals(returnedRangerTagDefList.getList().size(), 1);
+        Assertions.assertEquals(rangerTagDef.getId(), id);
+        Assertions.assertEquals(rangerTagDef.getGuid(), gId);
+        Assertions.assertEquals(rangerTagDef.getName(), name);
     }
 
     @Test
@@ -275,9 +279,9 @@ public void testCreateTag() throws Exception {
 
         RangerTag returnedRangerTag = tagDBStore.createTag(rangerTag);
 
-        Assert.assertNotNull(returnedRangerTag);
-        Assert.assertEquals(returnedRangerTag.getId(), id);
-        Assert.assertEquals(returnedRangerTag.getGuid(), gId);
+        Assertions.assertNotNull(returnedRangerTag);
+        Assertions.assertEquals(returnedRangerTag.getId(), id);
+        Assertions.assertEquals(returnedRangerTag.getGuid(), gId);
     }
 
     @Test
@@ -289,9 +293,9 @@ public void testUpdateTag() throws Exception {
 
         RangerTag returnedRangerTag = tagDBStore.updateTag(rangerTag);
 
-        Assert.assertNotNull(returnedRangerTag);
-        Assert.assertEquals(returnedRangerTag.getId(), id);
-        Assert.assertEquals(returnedRangerTag.getGuid(), gId);
+        Assertions.assertNotNull(returnedRangerTag);
+        Assertions.assertEquals(returnedRangerTag.getId(), id);
+        Assertions.assertEquals(returnedRangerTag.getGuid(), gId);
     }
 
     @Test
@@ -300,9 +304,8 @@ public void testUpdateTagWhenItIsNotAvailable() throws 
Exception {
 
         
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);
+        Assertions.assertThrows(WebApplicationException.class, () -> 
tagDBStore.updateTag(rangerTag));
     }
 
     @Test
@@ -323,9 +326,9 @@ public void testGetTagById() throws Exception {
 
         RangerTag returnedRangerTag = tagDBStore.getTag(id);
 
-        Assert.assertNotNull(returnedRangerTag);
-        Assert.assertEquals(returnedRangerTag.getId(), id);
-        Assert.assertEquals(returnedRangerTag.getGuid(), gId);
+        Assertions.assertNotNull(returnedRangerTag);
+        Assertions.assertEquals(returnedRangerTag.getId(), id);
+        Assertions.assertEquals(returnedRangerTag.getGuid(), gId);
     }
 
     @Test
@@ -336,9 +339,9 @@ public void testGetTagByGuid() throws Exception {
 
         RangerTag returnedRangerTag = tagDBStore.getTagByGuid(gId);
 
-        Assert.assertNotNull(returnedRangerTag);
-        Assert.assertEquals(returnedRangerTag.getId(), id);
-        Assert.assertEquals(returnedRangerTag.getGuid(), gId);
+        Assertions.assertNotNull(returnedRangerTag);
+        Assertions.assertEquals(returnedRangerTag.getId(), id);
+        Assertions.assertEquals(returnedRangerTag.getGuid(), gId);
     }
 
 
@@ -354,12 +357,12 @@ public void testGetTagsByType() throws Exception {
 
         List<RangerTag> returnedRangerTags = tagDBStore.getTagsByType(type);
 
-        Assert.assertNotNull(returnedRangerTags);
+        Assertions.assertNotNull(returnedRangerTags);
 
         RangerTag returnedRangerTag = returnedRangerTags.get(0);
 
-        Assert.assertEquals(returnedRangerTag.getId(), id);
-        Assert.assertEquals(returnedRangerTag.getGuid(), gId);
+        Assertions.assertEquals(returnedRangerTag.getId(), id);
+        Assertions.assertEquals(returnedRangerTag.getGuid(), gId);
     }
 
     @Test
@@ -373,12 +376,12 @@ public void testGetTagsForResourceId() throws Exception {
 
         List<RangerTag> returnedRangerTags = 
tagDBStore.getTagsForResourceId(id);
 
-        Assert.assertNotNull(returnedRangerTags);
+        Assertions.assertNotNull(returnedRangerTags);
 
         RangerTag returnedRangerTag = returnedRangerTags.get(0);
 
-        Assert.assertEquals(returnedRangerTag.getId(), id);
-        Assert.assertEquals(returnedRangerTag.getGuid(), gId);
+        Assertions.assertEquals(returnedRangerTag.getId(), id);
+        Assertions.assertEquals(returnedRangerTag.getGuid(), gId);
     }
 
     @Test
@@ -391,12 +394,12 @@ public void testGetTagsForResourceGuid() throws Exception 
{
 
         List<RangerTag> returnedRangerTags = 
tagDBStore.getTagsForResourceGuid(gId);
 
-        Assert.assertNotNull(returnedRangerTags);
+        Assertions.assertNotNull(returnedRangerTags);
 
         RangerTag returnedRangerTag = returnedRangerTags.get(0);
 
-        Assert.assertEquals(returnedRangerTag.getId(), id);
-        Assert.assertEquals(returnedRangerTag.getGuid(), gId);
+        Assertions.assertEquals(returnedRangerTag.getId(), id);
+        Assertions.assertEquals(returnedRangerTag.getGuid(), gId);
     }
 
     @Test
@@ -408,12 +411,12 @@ public void testGetTags() throws Exception {
 
         List<RangerTag> returnedRangerTags = tagDBStore.getTags(filter);
 
-        Assert.assertNotNull(returnedRangerTags);
+        Assertions.assertNotNull(returnedRangerTags);
 
         RangerTag returnedRangerTag = returnedRangerTags.get(0);
 
-        Assert.assertEquals(returnedRangerTag.getId(), id);
-        Assert.assertEquals(returnedRangerTag.getGuid(), gId);
+        Assertions.assertEquals(returnedRangerTag.getId(), id);
+        Assertions.assertEquals(returnedRangerTag.getGuid(), gId);
     }
 
     @Test
@@ -425,13 +428,13 @@ public void testGetPaginatedTags() throws Exception {
 
         PList<RangerTag> returnedRangerTagPList = 
tagDBStore.getPaginatedTags(filter);
 
-        Assert.assertNotNull(returnedRangerTagPList);
-        Assert.assertEquals(returnedRangerTagPList.getListSize(), 1);
+        Assertions.assertNotNull(returnedRangerTagPList);
+        Assertions.assertEquals(returnedRangerTagPList.getListSize(), 1);
 
         RangerTag returnedRangerTag = returnedRangerTagPList.getList().get(0);
 
-        Assert.assertEquals(returnedRangerTag.getId(), id);
-        Assert.assertEquals(returnedRangerTag.getGuid(), gId);
+        Assertions.assertEquals(returnedRangerTag.getId(), id);
+        Assertions.assertEquals(returnedRangerTag.getGuid(), gId);
     }
 
     @Test
@@ -450,11 +453,11 @@ public void testCreateServiceResource() throws Exception {
 
         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);
+        Assertions.assertNotNull(returnedRangerServiceResource);
+        Assertions.assertEquals(returnedRangerServiceResource.getId(), id);
+        Assertions.assertEquals(returnedRangerServiceResource.getGuid(), gId);
+        
Assertions.assertEquals(returnedRangerServiceResource.getResourceSignature(), 
resourceSignature);
+        
Assertions.assertEquals(returnedRangerServiceResource.getServiceName(), 
serviceName);
     }
 
     @Test
@@ -466,11 +469,11 @@ public void testUpdateServiceResource() throws Exception {
 
         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);
+        Assertions.assertNotNull(returnedRangerServiceResource);
+        Assertions.assertEquals(returnedRangerServiceResource.getId(), id);
+        Assertions.assertEquals(returnedRangerServiceResource.getGuid(), gId);
+        
Assertions.assertEquals(returnedRangerServiceResource.getResourceSignature(), 
resourceSignature);
+        
Assertions.assertEquals(returnedRangerServiceResource.getServiceName(), 
serviceName);
     }
 
     @Test
@@ -479,9 +482,8 @@ public void testUpdateServiceResourceWhenItIsNotAvailable() 
throws Exception {
 
         
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);
+        Assertions.assertThrows(WebApplicationException.class, () -> 
tagDBStore.updateServiceResource(rangerServiceResource));
     }
 
     @Test
@@ -520,11 +522,11 @@ public void tesGetServiceResourceByGuid() throws 
Exception {
 
         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);
+        Assertions.assertNotNull(returnedRangerServiceResource);
+        Assertions.assertEquals(returnedRangerServiceResource.getId(), id);
+        Assertions.assertEquals(returnedRangerServiceResource.getGuid(), gId);
+        
Assertions.assertEquals(returnedRangerServiceResource.getResourceSignature(), 
resourceSignature);
+        
Assertions.assertEquals(returnedRangerServiceResource.getServiceName(), 
serviceName);
     }
 
     @Test
@@ -535,11 +537,11 @@ public void tesGetServiceResourceById() throws Exception {
 
         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);
+        Assertions.assertNotNull(returnedRangerServiceResource);
+        Assertions.assertEquals(returnedRangerServiceResource.getId(), id);
+        Assertions.assertEquals(returnedRangerServiceResource.getGuid(), gId);
+        
Assertions.assertEquals(returnedRangerServiceResource.getResourceSignature(), 
resourceSignature);
+        
Assertions.assertEquals(returnedRangerServiceResource.getServiceName(), 
serviceName);
     }
 
     @Test
@@ -557,14 +559,14 @@ public void tesGetServiceResourcesByService() throws 
Exception {
 
         List<RangerServiceResource> returnedRangerServiceResourceList = 
tagDBStore.getServiceResourcesByService(serviceName);
 
-        Assert.assertNotNull(returnedRangerServiceResourceList);
+        Assertions.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);
+        Assertions.assertEquals(returnedRangerServiceResource.getId(), id);
+        Assertions.assertEquals(returnedRangerServiceResource.getGuid(), gId);
+        
Assertions.assertEquals(returnedRangerServiceResource.getResourceSignature(), 
resourceSignature);
+        
Assertions.assertEquals(returnedRangerServiceResource.getServiceName(), 
serviceName);
     }
 
     @Test
@@ -583,8 +585,8 @@ public void tesGetServiceResourceGuidsByService() throws 
Exception {
 
         List<String> returnedServiceResourceGuidsInServiceId = 
tagDBStore.getServiceResourceGuidsByService(serviceName);
 
-        Assert.assertNotNull(returnedServiceResourceGuidsInServiceId);
-        Assert.assertEquals(returnedServiceResourceGuidsInServiceId.get(0), 
gId);
+        Assertions.assertNotNull(returnedServiceResourceGuidsInServiceId);
+        
Assertions.assertEquals(returnedServiceResourceGuidsInServiceId.get(0), gId);
     }
 
     @Test
@@ -598,10 +600,10 @@ public void 
tesGetServiceResourceByServiceAndResourceSignature() throws Exceptio
 
         RangerServiceResource returnedRangerServiceResource = 
tagDBStore.getServiceResourceByServiceAndResourceSignature(serviceName, 
resourceSignature);
 
-        Assert.assertNotNull(returnedRangerServiceResource);
-        Assert.assertEquals(returnedRangerServiceResource.getId(), id);
-        Assert.assertEquals(returnedRangerServiceResource.getGuid(), gId);
-        
Assert.assertEquals(returnedRangerServiceResource.getResourceSignature(), 
resourceSignature);
+        Assertions.assertNotNull(returnedRangerServiceResource);
+        Assertions.assertEquals(returnedRangerServiceResource.getId(), id);
+        Assertions.assertEquals(returnedRangerServiceResource.getGuid(), gId);
+        
Assertions.assertEquals(returnedRangerServiceResource.getResourceSignature(), 
resourceSignature);
     }
 
     @Test
@@ -613,14 +615,14 @@ public void tesGetServiceResources() throws Exception {
 
         List<RangerServiceResource> returnedRangerServiceResourceList = 
tagDBStore.getServiceResources(searchFilter);
 
-        Assert.assertNotNull(returnedRangerServiceResourceList);
-        Assert.assertEquals(returnedRangerServiceResourceList.size(), 1);
+        Assertions.assertNotNull(returnedRangerServiceResourceList);
+        Assertions.assertEquals(returnedRangerServiceResourceList.size(), 1);
 
         RangerServiceResource returnedRangerServiceResource = 
returnedRangerServiceResourceList.get(0);
 
-        Assert.assertEquals(returnedRangerServiceResource.getId(), id);
-        Assert.assertEquals(returnedRangerServiceResource.getGuid(), gId);
-        
Assert.assertEquals(returnedRangerServiceResource.getResourceSignature(), 
resourceSignature);
+        Assertions.assertEquals(returnedRangerServiceResource.getId(), id);
+        Assertions.assertEquals(returnedRangerServiceResource.getGuid(), gId);
+        
Assertions.assertEquals(returnedRangerServiceResource.getResourceSignature(), 
resourceSignature);
     }
 
     @Test
@@ -632,14 +634,14 @@ public void tesGetPaginatedServiceResources() throws 
Exception {
 
         PList<RangerServiceResource> returnedRangerServiceResourcePList = 
tagDBStore.getPaginatedServiceResources(searchFilter);
 
-        Assert.assertNotNull(returnedRangerServiceResourcePList);
-        
Assert.assertEquals(returnedRangerServiceResourcePList.getList().size(), 1);
+        Assertions.assertNotNull(returnedRangerServiceResourcePList);
+        
Assertions.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);
+        Assertions.assertEquals(returnedRangerServiceResource.getId(), id);
+        Assertions.assertEquals(returnedRangerServiceResource.getGuid(), gId);
+        
Assertions.assertEquals(returnedRangerServiceResource.getResourceSignature(), 
resourceSignature);
     }
 
     @Test
@@ -659,9 +661,9 @@ public void tesCreateTagResourceMap() throws Exception {
 
         RangerTagResourceMap returnedRangerTagResourceMap = 
tagDBStore.createTagResourceMap(rangerTagResourceMap);
 
-        Assert.assertNotNull(returnedRangerTagResourceMap);
-        Assert.assertEquals(returnedRangerTagResourceMap.getId(), id);
-        Assert.assertEquals(returnedRangerTagResourceMap.getGuid(), gId);
+        Assertions.assertNotNull(returnedRangerTagResourceMap);
+        Assertions.assertEquals(returnedRangerTagResourceMap.getId(), id);
+        Assertions.assertEquals(returnedRangerTagResourceMap.getGuid(), gId);
     }
 
     @Test
@@ -695,9 +697,9 @@ public void tesGetTagResourceMap() throws Exception {
 
         RangerTagResourceMap returnedRangerTagResourceMap = 
tagDBStore.getTagResourceMap(id);
 
-        Assert.assertNotNull(returnedRangerTagResourceMap);
-        Assert.assertEquals(returnedRangerTagResourceMap.getId(), id);
-        Assert.assertEquals(returnedRangerTagResourceMap.getGuid(), gId);
+        Assertions.assertNotNull(returnedRangerTagResourceMap);
+        Assertions.assertEquals(returnedRangerTagResourceMap.getId(), id);
+        Assertions.assertEquals(returnedRangerTagResourceMap.getGuid(), gId);
     }
 
     @Test
@@ -708,9 +710,9 @@ public void tesGetTagResourceMapByGuid() throws Exception {
 
         RangerTagResourceMap returnedRangerTagResourceMap = 
tagDBStore.getTagResourceMapByGuid(gId);
 
-        Assert.assertNotNull(returnedRangerTagResourceMap);
-        Assert.assertEquals(returnedRangerTagResourceMap.getId(), id);
-        Assert.assertEquals(returnedRangerTagResourceMap.getGuid(), gId);
+        Assertions.assertNotNull(returnedRangerTagResourceMap);
+        Assertions.assertEquals(returnedRangerTagResourceMap.getId(), id);
+        Assertions.assertEquals(returnedRangerTagResourceMap.getGuid(), gId);
     }
 
     @Test
@@ -725,9 +727,9 @@ public void tesGetTagResourceMapsForTagId() throws 
Exception {
         List<RangerTagResourceMap> returnedRangerTagResourceMapList = 
tagDBStore.getTagResourceMapsForTagId(id);
         RangerTagResourceMap       returnedRangerTagResourceMap     = 
returnedRangerTagResourceMapList.get(0);
 
-        Assert.assertNotNull(returnedRangerTagResourceMap);
-        Assert.assertEquals(returnedRangerTagResourceMap.getId(), id);
-        Assert.assertEquals(returnedRangerTagResourceMap.getGuid(), gId);
+        Assertions.assertNotNull(returnedRangerTagResourceMap);
+        Assertions.assertEquals(returnedRangerTagResourceMap.getId(), id);
+        Assertions.assertEquals(returnedRangerTagResourceMap.getGuid(), gId);
     }
 
     @Test
@@ -742,9 +744,9 @@ public void tesGetTagResourceMapsForTagGuid() throws 
Exception {
         List<RangerTagResourceMap> returnedRangerTagResourceMapList = 
tagDBStore.getTagResourceMapsForTagGuid(gId);
         RangerTagResourceMap       returnedRangerTagResourceMap     = 
returnedRangerTagResourceMapList.get(0);
 
-        Assert.assertNotNull(returnedRangerTagResourceMap);
-        Assert.assertEquals(returnedRangerTagResourceMap.getId(), id);
-        Assert.assertEquals(returnedRangerTagResourceMap.getGuid(), gId);
+        Assertions.assertNotNull(returnedRangerTagResourceMap);
+        Assertions.assertEquals(returnedRangerTagResourceMap.getId(), id);
+        Assertions.assertEquals(returnedRangerTagResourceMap.getGuid(), gId);
     }
 
     @Test
@@ -757,9 +759,9 @@ public void tesGetTagIdsForResourceId() throws Exception {
 
         List<Long> returnedTagIdsList = tagDBStore.getTagIdsForResourceId(id);
 
-        Assert.assertNotNull(returnedTagIdsList);
-        Assert.assertEquals(returnedTagIdsList.size(), 1);
-        Assert.assertEquals(returnedTagIdsList.get(0), id);
+        Assertions.assertNotNull(returnedTagIdsList);
+        Assertions.assertEquals(returnedTagIdsList.size(), 1);
+        Assertions.assertEquals(returnedTagIdsList.get(0), id);
     }
 
 
@@ -775,9 +777,9 @@ public void testGetTagResourceMapsForResourceId() throws 
Exception {
         List<RangerTagResourceMap> returnedRangerTagResourceMapList = 
tagDBStore.getTagResourceMapsForResourceId(id);
         RangerTagResourceMap       returnedRangerTagResourceMap     = 
returnedRangerTagResourceMapList.get(0);
 
-        Assert.assertNotNull(returnedRangerTagResourceMap);
-        Assert.assertEquals(returnedRangerTagResourceMap.getId(), id);
-        Assert.assertEquals(returnedRangerTagResourceMap.getGuid(), gId);
+        Assertions.assertNotNull(returnedRangerTagResourceMap);
+        Assertions.assertEquals(returnedRangerTagResourceMap.getId(), id);
+        Assertions.assertEquals(returnedRangerTagResourceMap.getGuid(), gId);
     }
 
     @Test
@@ -792,9 +794,9 @@ public void testGetTagResourceMapsForResourceGuid() throws 
Exception {
         List<RangerTagResourceMap> returnedRangerTagResourceMapList = 
tagDBStore.getTagResourceMapsForResourceGuid(gId);
         RangerTagResourceMap       returnedRangerTagResourceMap     = 
returnedRangerTagResourceMapList.get(0);
 
-        Assert.assertNotNull(returnedRangerTagResourceMap);
-        Assert.assertEquals(returnedRangerTagResourceMap.getId(), id);
-        Assert.assertEquals(returnedRangerTagResourceMap.getGuid(), gId);
+        Assertions.assertNotNull(returnedRangerTagResourceMap);
+        Assertions.assertEquals(returnedRangerTagResourceMap.getId(), id);
+        Assertions.assertEquals(returnedRangerTagResourceMap.getGuid(), gId);
     }
 
 
@@ -806,9 +808,9 @@ public void testGetTagResourceMapForTagAndResourceId() 
throws Exception {
 
         RangerTagResourceMap returnedRangerTagResourceMap = 
tagDBStore.getTagResourceMapForTagAndResourceId(id,id);
 
-        Assert.assertNotNull(returnedRangerTagResourceMap);
-        Assert.assertEquals(returnedRangerTagResourceMap.getId(), id);
-        Assert.assertEquals(returnedRangerTagResourceMap.getGuid(), gId);
+        Assertions.assertNotNull(returnedRangerTagResourceMap);
+        Assertions.assertEquals(returnedRangerTagResourceMap.getId(), id);
+        Assertions.assertEquals(returnedRangerTagResourceMap.getGuid(), gId);
     }
 
     @Test
@@ -819,9 +821,9 @@ public void testGetTagResourceMapForTagAndResourceGuid() 
throws Exception {
 
         RangerTagResourceMap returnedRangerTagResourceMap = 
tagDBStore.getTagResourceMapForTagAndResourceGuid(gId,gId);
 
-        Assert.assertNotNull(returnedRangerTagResourceMap);
-        Assert.assertEquals(returnedRangerTagResourceMap.getId(), id);
-        Assert.assertEquals(returnedRangerTagResourceMap.getGuid(), gId);
+        Assertions.assertNotNull(returnedRangerTagResourceMap);
+        Assertions.assertEquals(returnedRangerTagResourceMap.getId(), id);
+        Assertions.assertEquals(returnedRangerTagResourceMap.getGuid(), gId);
     }
 
     @Test
@@ -833,13 +835,13 @@ public void testGetPaginatedTagResourceMaps() throws 
Exception {
 
         PList<RangerTagResourceMap> returnedRangerTagResourceMapPList = 
tagDBStore.getPaginatedTagResourceMaps(searchFilter);
 
-        Assert.assertNotNull(returnedRangerTagResourceMapPList);
-        
Assert.assertEquals(returnedRangerTagResourceMapPList.getList().size(), 1);
+        Assertions.assertNotNull(returnedRangerTagResourceMapPList);
+        
Assertions.assertEquals(returnedRangerTagResourceMapPList.getList().size(), 1);
 
         RangerTagResourceMap returnedRangerTagResourceMap = 
returnedRangerTagResourceMapPList.getList().get(0);
 
-        Assert.assertEquals(returnedRangerTagResourceMap.getId(), id);
-        Assert.assertEquals(returnedRangerTagResourceMap.getGuid(), gId);
+        Assertions.assertEquals(returnedRangerTagResourceMap.getId(), id);
+        Assertions.assertEquals(returnedRangerTagResourceMap.getGuid(), gId);
     }
 
     @Test
@@ -851,13 +853,13 @@ public void testGetTagResourceMaps() throws Exception {
 
         List<RangerTagResourceMap> returnedRangerTagResourceMapList = 
tagDBStore.getTagResourceMaps(searchFilter);
 
-        Assert.assertNotNull(returnedRangerTagResourceMapList);
-        Assert.assertEquals(returnedRangerTagResourceMapList.size(), 1);
+        Assertions.assertNotNull(returnedRangerTagResourceMapList);
+        Assertions.assertEquals(returnedRangerTagResourceMapList.size(), 1);
 
         RangerTagResourceMap returnedRangerTagResourceMap = 
returnedRangerTagResourceMapList.get(0);
 
-        Assert.assertEquals(returnedRangerTagResourceMap.getId(), id);
-        Assert.assertEquals(returnedRangerTagResourceMap.getGuid(), gId);
+        Assertions.assertEquals(returnedRangerTagResourceMap.getId(), id);
+        Assertions.assertEquals(returnedRangerTagResourceMap.getGuid(), gId);
     }
 
     @Test
@@ -881,9 +883,9 @@ public void testGetServiceTagsIfUpdated() throws Exception {
 
         ServiceTags serviceTags = 
tagDBStore.getServiceTagsIfUpdated(serviceName, -1L, true);
 
-        Assert.assertNotNull(serviceTags);
-        Assert.assertEquals(serviceTags.getTagVersion(), lastKnownVersion);
-        Assert.assertEquals(serviceTags.getServiceName(), serviceName);
+        Assertions.assertNotNull(serviceTags);
+        Assertions.assertEquals(serviceTags.getTagVersion(), lastKnownVersion);
+        Assertions.assertEquals(serviceTags.getServiceName(), serviceName);
     }
 
     @Test
@@ -906,9 +908,9 @@ public void testGetServiceTags() throws Exception {
 
         ServiceTags serviceTags = tagDBStore.getServiceTags(serviceName, -1L);
 
-        Assert.assertNotNull(serviceTags);
-        Assert.assertEquals(serviceTags.getTagVersion(), lastKnownVersion);
-        Assert.assertEquals(serviceTags.getServiceName(), serviceName);
+        Assertions.assertNotNull(serviceTags);
+        Assertions.assertEquals(serviceTags.getTagVersion(), lastKnownVersion);
+        Assertions.assertEquals(serviceTags.getServiceName(), serviceName);
     }
 
     @Test
@@ -950,21 +952,21 @@ public void testDeleteAllTagObjectsForService() throws 
Exception {
     public void testGetServiceTagsDeltaWhenTagDeltaSupportsDisabled() throws 
Exception {
         ServiceTags serviceTags = tagDBStore.getServiceTagsDelta(serviceName, 
lastKnownVersion);
 
-        Assert.assertNull(serviceTags);
+        Assertions.assertNull(serviceTags);
     }
 
     @Test
     public void testIsSupportsTagDeltas() throws Exception {
         boolean isSupportsTagDeltas = tagDBStore.isSupportsTagDeltas();
 
-        Assert.assertFalse(isSupportsTagDeltas);
+        Assertions.assertFalse(isSupportsTagDeltas);
     }
 
     @Test
     public void testIsInPlaceTagUpdateSupported() throws Exception {
         boolean isInPlaceTagUpdateSupported = 
tagDBStore.isInPlaceTagUpdateSupported();
 
-        Assert.assertFalse(isInPlaceTagUpdateSupported);
+        Assertions.assertFalse(isInPlaceTagUpdateSupported);
     }
 
     @Test
@@ -977,9 +979,415 @@ public void testGetTagVersion() throws Exception {
 
         Long tagVersion =  tagDBStore.getTagVersion(serviceName);
 
-        Assert.assertEquals(tagVersion, lastKnownVersion);
+        Assertions.assertEquals(tagVersion, lastKnownVersion);
+    }
+
+    /**
+     * Pre:
+     *   New tag created: this event will not trigger a policy download, as it 
will not increment policy version.
+     *
+     * Current:
+     *   Associate Resource: associate first resource. This event will trigger 
a version change. Total resources associated with Tag are before 0, after 1.
+     *
+     * Below method covers one delta case, when a new TAG (no resources) is 
associated with first resource (eg, hive table)
+     */
+    @Test
+    public void 
testGetServiceTagsDeltaWhenTagDeltaAndDedupEnabledAdditionOfFirstResource() 
throws Exception {
+        try (MockedStatic<TagDBStore> mockedTagDBStore = 
mockStatic(TagDBStore.class); MockedStatic<JsonUtils> mockedJsonUtil = 
mockStatic(JsonUtils.class)) {
+            final Long   tagId             = 4L;
+            final Long   tagTypeId         = 2L;
+            final String tagTypeName       = "ranger_atlas_tag1";
+            final String tagSource         = "Atlas";
+            final String serviceName       = "HIVE_SERVICE";
+            final Long   serviceId         = 6L;
+            final Long   resourceId        = 4L;
+            final Long   serviceTagVersion = 8L;
+
+            /*
+             * Given
+             */
+            TagDBStore            tagDBStoreSpy         = 
Mockito.spy(tagDBStore);
+            XXServiceDao          xxServiceDao          = 
Mockito.mock(XXServiceDao.class);
+            XXTagChangeLogDao     xxTagChangeLogDao     = 
Mockito.mock(XXTagChangeLogDao.class);
+            XXTagDao              tagDao                = 
Mockito.mock(XXTagDao.class);
+            XXTag                 xTag                  = createXXTag(tagId, 
1L, tagTypeId);
+            RangerTag             rangerTag             = new 
RangerTag("6e248648-739a-434a-9c42-a74c8277638d", tagTypeName, 
Collections.emptyMap(), (short) 0);
+            XXTagDef              xxTagDef              = 
createXXTagDef(tagTypeId, 1L, tagTypeName);
+            RangerTagDef          rangerTagDef          = new 
RangerTagDef(tagTypeName, tagSource);
+            XXServiceResource     xServiceResource      = 
createXXServiceResource(resourceId, "8fa22999-06a4-4d5e-83e7-dc9872082dbc", 2L, 
serviceId);
+            RangerServiceResource rangerServiceResource = new 
RangerServiceResource("8fa22999-06a4-4d5e-83e7-dc9872082dbc", serviceName, 
Collections.emptyMap());
+            List<XXTagChangeLog>  changeLogRecords      = 
Collections.singletonList(new XXTagChangeLog(43L, 3, serviceTagVersion, 
resourceId, tagId));
+
+            rangerTag.setId(tagId);
+            rangerTagDef.setId(tagTypeId);
+            xServiceResource.setTags(tagTypeName);
+            rangerServiceResource.setId(resourceId);
+
+            Mockito.when(daoManager.getXXService()).thenReturn(xxServiceDao);
+            
Mockito.when(daoManager.getXXTagChangeLog()).thenReturn(xxTagChangeLogDao);
+            Mockito.when(xxTagChangeLogDao.findLaterThan(Mockito.anyLong(), 
Mockito.anyLong())).thenReturn(changeLogRecords);
+            Mockito.when(daoManager.getXXTag()).thenReturn(tagDao);
+            Mockito.when(tagDao.getById(Mockito.anyLong())).thenReturn(xTag);
+            
Mockito.when(rangerTagService.getPopulatedViewObject(Mockito.any())).thenReturn(rangerTag);
+
+            
mockedTagDBStore.when(TagDBStore::isSupportsTagsDedup).thenReturn(true);
+            
mockedTagDBStore.when(TagDBStore::isSupportsTagDeltas).thenReturn(true);
+            mockedJsonUtil.when(() -> 
JsonUtils.jsonToObject(Mockito.anyString(), 
Mockito.any(RangerServiceResourceService.duplicatedDataType.getClass()))).thenReturn(Collections.singletonList(rangerTag));
+
+            Mockito.when(daoManager.getXXTagDef()).thenReturn(tagDefDao);
+            
Mockito.when(tagDefDao.findByName(tagTypeName)).thenReturn(xxTagDef);
+            
Mockito.when(rangerTagDefService.getPopulatedViewObject(Mockito.any())).thenReturn(rangerTagDef);
+
+            
Mockito.when(daoManager.getXXServiceResource()).thenReturn(serviceResourceDao);
+            
Mockito.when(serviceResourceDao.getById(Mockito.anyLong())).thenReturn(xServiceResource);
+            
Mockito.when(rangerServiceResourceService.getPopulatedViewObject(Mockito.any())).thenReturn(rangerServiceResource);
+
+            /*
+             * When
+             */
+            ServiceTags serviceTags = 
tagDBStoreSpy.getServiceTagsDelta(serviceName, (serviceTagVersion - 1));
+
+            /*
+             * Then
+             */
+            Assertions.assertEquals("add_or_update", serviceTags.getOp());
+            Assertions.assertEquals(serviceName, serviceTags.getServiceName());
+            Assertions.assertEquals(serviceTagVersion, 
serviceTags.getTagVersion());
+            Assertions.assertTrue(serviceTags.getIsDelta());
+            Assertions.assertTrue(serviceTags.getIsTagsDeduped());
+            
Assertions.assertEquals(ServiceTags.TagsChangeExtent.SERVICE_RESOURCE, 
serviceTags.getTagsChangeExtent());
+
+            // tagDefinitions
+            Assertions.assertEquals(1, serviceTags.getTagDefinitions().size());
+            Assertions.assertEquals(tagTypeId,  
serviceTags.getTagDefinitions().get(tagTypeId).getId());
+            
Assertions.assertTrue(serviceTags.getTagDefinitions().get(tagTypeId).getIsEnabled());
+            Assertions.assertEquals(tagTypeName,  
serviceTags.getTagDefinitions().get(tagTypeId).getName());
+            Assertions.assertEquals(tagSource, 
serviceTags.getTagDefinitions().get(tagTypeId).getSource());
+
+            // tags
+            Assertions.assertEquals(1, serviceTags.getTags().size());
+            Assertions.assertEquals(tagId, 
serviceTags.getTags().get(tagId).getId());
+            
Assertions.assertTrue(serviceTags.getTags().get(tagId).getIsEnabled());
+            Assertions.assertEquals(tagTypeName, 
serviceTags.getTags().get(tagId).getType());
+
+            // serviceResources
+            Assertions.assertEquals(1, 
serviceTags.getServiceResources().size());
+            Assertions.assertEquals(resourceId, 
serviceTags.getServiceResources().get(0).getId());
+            
Assertions.assertTrue(serviceTags.getServiceResources().get(0).getIsEnabled());
+            Assertions.assertEquals(serviceName, 
serviceTags.getServiceResources().get(0).getServiceName());
+
+            // resourceToTagIds
+            Assertions.assertEquals(1, 
serviceTags.getResourceToTagIds().size());
+            Assertions.assertEquals(resourceId, 
serviceTags.getResourceToTagIds().get(serviceTags.getServiceResources().get(0).getId()).get(0));
+        }
+    }
+
+    /**
+     * Pre:
+     *   New tag created: this event will not trigger a policy download, as it 
will not increment policy version
+     *   Associate Resource: associate first resource.
+     *
+     * Current:
+     *   Associate Resource: associate second resource. This event will 
trigger a version change. Total resources associated with Tag are before 1, 
after 2.
+     *
+     * Below method covers one delta case, when a TAG (with 1 resource) is 
associated with second resource (eg, hive table)
+     */
+    @Test
+    public void 
testGetServiceTagsDeltaWhenTagDeltaAndDedupEnabledAdditionOfSecondResource() 
throws Exception {
+        try (MockedStatic<TagDBStore> mockedTagDBStore = 
mockStatic(TagDBStore.class); MockedStatic<JsonUtils> mockedJsonUtil = 
mockStatic(JsonUtils.class)) {
+            final Long   tagId             = 5L;
+            final Long   tagTypeId         = 2L;
+            final String tagTypeName       = "ranger_atlas_tag1";
+            final String tagSource         = "Atlas";
+            final String serviceName       = "HIVE_SERVICE";
+            final Long   serviceId         = 6L;
+            final Long   resourceId        = 5L;
+            final Long   serviceTagVersion = 9L;
+
+            /*
+             * Given
+             */
+            TagDBStore            tagDBStoreSpy         = 
Mockito.spy(tagDBStore);
+            XXServiceDao          xxServiceDao          = 
Mockito.mock(XXServiceDao.class);
+            XXTagChangeLogDao     xxTagChangeLogDao     = 
Mockito.mock(XXTagChangeLogDao.class);
+            XXTagDao              tagDao                = 
Mockito.mock(XXTagDao.class);
+            XXTag                 xTag                  = createXXTag(tagId, 
1L, tagTypeId);
+            RangerTag             rangerTag             = new 
RangerTag("ef2401cb-f723-4663-a19e-51363efe71ea", tagTypeName, 
Collections.emptyMap(), (short) 0);
+            XXTagDef              xxTagDef              = 
createXXTagDef(tagTypeId, 1L, tagTypeName);
+            RangerTagDef          rangerTagDef          = new 
RangerTagDef(tagTypeName, tagSource);
+            XXServiceResource     xServiceResource      = 
createXXServiceResource(resourceId, "b6ef4baa-f38e-49ce-bac3-3b2243641d8a", 2L, 
serviceId);
+            RangerServiceResource rangerServiceResource = new 
RangerServiceResource("b6ef4baa-f38e-49ce-bac3-3b2243641d8a", serviceName, 
Collections.emptyMap());
+            List<XXTagChangeLog>  changeLogRecords      = 
Collections.singletonList(new XXTagChangeLog(44L, 3, serviceTagVersion, 
resourceId, tagId));
+
+            rangerTag.setId(tagId);
+            rangerTagDef.setId(tagTypeId);
+            xServiceResource.setTags(tagTypeName);
+            rangerServiceResource.setId(resourceId);
+
+            Mockito.when(daoManager.getXXService()).thenReturn(xxServiceDao);
+            
Mockito.when(daoManager.getXXTagChangeLog()).thenReturn(xxTagChangeLogDao);
+            Mockito.when(xxTagChangeLogDao.findLaterThan(Mockito.anyLong(), 
Mockito.anyLong())).thenReturn(changeLogRecords);
+            Mockito.when(daoManager.getXXTag()).thenReturn(tagDao);
+            Mockito.when(tagDao.getById(Mockito.anyLong())).thenReturn(xTag);
+            
Mockito.when(rangerTagService.getPopulatedViewObject(Mockito.any())).thenReturn(rangerTag);
+
+            
mockedTagDBStore.when(TagDBStore::isSupportsTagsDedup).thenReturn(true);
+            
mockedTagDBStore.when(TagDBStore::isSupportsTagDeltas).thenReturn(true);
+            mockedJsonUtil.when(() -> 
JsonUtils.jsonToObject(Mockito.anyString(), 
Mockito.any(RangerServiceResourceService.duplicatedDataType.getClass()))).thenReturn(Collections.singletonList(rangerTag));
+
+            Mockito.when(daoManager.getXXTagDef()).thenReturn(tagDefDao);
+            
Mockito.when(tagDefDao.findByName(tagTypeName)).thenReturn(xxTagDef);
+            
Mockito.when(rangerTagDefService.getPopulatedViewObject(Mockito.any())).thenReturn(rangerTagDef);
+
+            
Mockito.when(daoManager.getXXServiceResource()).thenReturn(serviceResourceDao);
+            
Mockito.when(serviceResourceDao.getById(Mockito.anyLong())).thenReturn(xServiceResource);
+            
Mockito.when(rangerServiceResourceService.getPopulatedViewObject(Mockito.any())).thenReturn(rangerServiceResource);
+
+            /*
+             * When
+             */
+            ServiceTags serviceTags = 
tagDBStoreSpy.getServiceTagsDelta(serviceName, (serviceTagVersion - 1));
+
+            /*
+             * Then
+             */
+            Assertions.assertEquals("add_or_update", serviceTags.getOp());
+            Assertions.assertEquals(serviceName, serviceTags.getServiceName());
+            Assertions.assertEquals(serviceTagVersion, 
serviceTags.getTagVersion());
+            Assertions.assertTrue(serviceTags.getIsDelta());
+            Assertions.assertTrue(serviceTags.getIsTagsDeduped());
+            
Assertions.assertEquals(ServiceTags.TagsChangeExtent.SERVICE_RESOURCE, 
serviceTags.getTagsChangeExtent());
+
+            // tagDefinitions
+            Assertions.assertEquals(1, serviceTags.getTagDefinitions().size());
+            Assertions.assertEquals(tagTypeId,  
serviceTags.getTagDefinitions().get(tagTypeId).getId());
+            
Assertions.assertTrue(serviceTags.getTagDefinitions().get(tagTypeId).getIsEnabled());
+            Assertions.assertEquals(tagTypeName,  
serviceTags.getTagDefinitions().get(tagTypeId).getName());
+            Assertions.assertEquals(tagSource, 
serviceTags.getTagDefinitions().get(tagTypeId).getSource());
+
+            // tags
+            Assertions.assertEquals(1, serviceTags.getTags().size());
+            Assertions.assertEquals(tagId, 
serviceTags.getTags().get(tagId).getId());
+            
Assertions.assertTrue(serviceTags.getTags().get(tagId).getIsEnabled());
+            Assertions.assertEquals(tagTypeName, 
serviceTags.getTags().get(tagId).getType());
+
+            // serviceResources
+            Assertions.assertEquals(1, 
serviceTags.getServiceResources().size());
+            Assertions.assertEquals(resourceId, 
serviceTags.getServiceResources().get(0).getId());
+            
Assertions.assertTrue(serviceTags.getServiceResources().get(0).getIsEnabled());
+            Assertions.assertEquals(serviceName, 
serviceTags.getServiceResources().get(0).getServiceName());
+
+            // resourceToTagIds
+            Assertions.assertEquals(1, 
serviceTags.getResourceToTagIds().size());
+            Assertions.assertEquals(resourceId, 
serviceTags.getResourceToTagIds().get(serviceTags.getServiceResources().get(0).getId()).get(0));
+        }
+    }
+
+    /**
+     * Pre:
+     *   New tag created: this event will not trigger a policy download, as it 
will not increment policy version
+     *   Associate Resource: associate first resource.
+     *   Associate Resource: associate second resource.
+     *
+     * Current:
+     *   De-associate resource: de-associate first resource. This event will 
trigger a version change. Total resources associated with Tag are before 2, 
after 1.
+     *
+     * Below method covers one delta case, when a TAG (with 2 resource) is 
de-associated with first resource (eg, hive table)
+     */
+    @Test
+    public void 
testGetServiceTagsDeltaWhenTagDeltaAndDedupEnabledRemovalOfFirstResource() 
throws Exception {
+        try (MockedStatic<TagDBStore> mockedTagDBStore = 
mockStatic(TagDBStore.class); MockedStatic<JsonUtils> mockedJsonUtil = 
mockStatic(JsonUtils.class)) {
+            final Long   tagId             = 4L;
+            final Long   tagTypeId         = 2L;
+            final String tagTypeName       = "ranger_atlas_tag1";
+            final String tagSource         = "Atlas";
+            final String serviceName       = "HIVE_SERVICE";
+            final Long   serviceId         = 6L;
+            final Long   resourceId        = 4L;
+            final Long   serviceTagVersion = 10L;
+
+            /*
+             * Given
+             */
+            TagDBStore            tagDBStoreSpy         = 
Mockito.spy(tagDBStore);
+            XXServiceDao          xxServiceDao          = 
Mockito.mock(XXServiceDao.class);
+            XXTagChangeLogDao     xxTagChangeLogDao     = 
Mockito.mock(XXTagChangeLogDao.class);
+            XXTagDao              tagDao                = 
Mockito.mock(XXTagDao.class);
+            RangerTag             rangerTag             = new 
RangerTag("6e248648-739a-434a-9c42-a74c8277638d", tagTypeName, 
Collections.emptyMap(), (short) 0);
+            RangerTagDef          rangerTagDef          = new 
RangerTagDef(tagTypeName, tagSource);
+            XXServiceResource     xServiceResource      = 
createXXServiceResource(resourceId, "8fa22999-06a4-4d5e-83e7-dc9872082dbc", 2L, 
serviceId);
+            RangerServiceResource rangerServiceResource = new 
RangerServiceResource("8fa22999-06a4-4d5e-83e7-dc9872082dbc", serviceName, 
Collections.emptyMap());
+            List<XXTagChangeLog>  changeLogRecords      = 
Collections.singletonList(new XXTagChangeLog(45L, 3, serviceTagVersion, 
resourceId, tagId));
+
+            rangerTag.setId(tagId);
+            rangerTagDef.setId(tagTypeId);
+            xServiceResource.setTags(tagTypeName);
+            rangerServiceResource.setId(resourceId);
+
+            Mockito.when(daoManager.getXXService()).thenReturn(xxServiceDao);
+            
Mockito.when(daoManager.getXXTagChangeLog()).thenReturn(xxTagChangeLogDao);
+            Mockito.when(xxTagChangeLogDao.findLaterThan(Mockito.anyLong(), 
Mockito.anyLong())).thenReturn(changeLogRecords);
+            Mockito.when(daoManager.getXXTag()).thenReturn(tagDao);
+
+            
mockedTagDBStore.when(TagDBStore::isSupportsTagsDedup).thenReturn(true);
+            
mockedTagDBStore.when(TagDBStore::isSupportsTagDeltas).thenReturn(true);
+            mockedJsonUtil.when(() -> 
JsonUtils.jsonToObject(Mockito.anyString(), 
Mockito.any(RangerServiceResourceService.duplicatedDataType.getClass()))).thenReturn(Collections.singletonList(rangerTag));
+
+            Mockito.when(daoManager.getXXTagDef()).thenReturn(tagDefDao);
+
+            
Mockito.when(daoManager.getXXServiceResource()).thenReturn(serviceResourceDao);
+
+            /*
+             * When
+             */
+            ServiceTags serviceTags = 
tagDBStoreSpy.getServiceTagsDelta(serviceName, (serviceTagVersion - 1));
+
+            /*
+             * Then
+             */
+            Assertions.assertEquals("add_or_update", serviceTags.getOp());
+            Assertions.assertEquals(serviceName, serviceTags.getServiceName());
+            Assertions.assertEquals(serviceTagVersion, 
serviceTags.getTagVersion());
+            Assertions.assertTrue(serviceTags.getIsDelta());
+            Assertions.assertTrue(serviceTags.getIsTagsDeduped());
+            
Assertions.assertEquals(ServiceTags.TagsChangeExtent.SERVICE_RESOURCE, 
serviceTags.getTagsChangeExtent());
+
+            // tagDefinitions
+            Assertions.assertEquals(0, serviceTags.getTagDefinitions().size());
+
+            // tags
+            Assertions.assertEquals(0, serviceTags.getTags().size());
+
+            // serviceResources
+            Assertions.assertEquals(1, 
serviceTags.getServiceResources().size());
+            Assertions.assertEquals(resourceId, 
serviceTags.getServiceResources().get(0).getId());
+            
Assertions.assertTrue(serviceTags.getServiceResources().get(0).getIsEnabled());
+
+            // resourceToTagIds
+            Assertions.assertEquals(0, 
serviceTags.getResourceToTagIds().size());
+        }
+    }
+
+    /**
+     * Pre:
+     *   New tag created: this event will not trigger a policy download, as it 
will not increment policy version
+     *   Associate Resource: associate first resource.
+     *   Associate Resource: associate second resource.
+     *   De-associate resource: de-associate first resource.
+     *
+     * Current:
+     *   De-associate resource: de-associate second resource. This event will 
trigger a version change. Total resources associated with Tag are before 1, 
after 0.
+     *
+     * Below method covers one delta case, when a TAG (with 1 resource) is 
de-associated with second/ last resource (eg, hive table)
+     */
+    @Test
+    public void 
testGetServiceTagsDeltaWhenTagDeltaAndDedupEnabledRemovalOfSecondResource() 
throws Exception {
+        try (MockedStatic<TagDBStore> mockedTagDBStore = 
mockStatic(TagDBStore.class); MockedStatic<JsonUtils> mockedJsonUtil = 
mockStatic(JsonUtils.class)) {
+            final Long   tagId             = 5L;
+            final Long   tagTypeId         = 2L;
+            final String tagTypeName       = "ranger_atlas_tag1";
+            final String tagSource         = "Atlas";
+            final String serviceName       = "HIVE_SERVICE";
+            final Long   serviceId         = 6L;
+            final Long   resourceId        = 5L;
+            final Long   serviceTagVersion = 11L;
+
+            /*
+             * Given
+             */
+            TagDBStore            tagDBStoreSpy         = 
Mockito.spy(tagDBStore);
+            XXServiceDao          xxServiceDao          = 
Mockito.mock(XXServiceDao.class);
+            XXTagChangeLogDao     xxTagChangeLogDao     = 
Mockito.mock(XXTagChangeLogDao.class);
+            XXTagDao              tagDao                = 
Mockito.mock(XXTagDao.class);
+            RangerTag             rangerTag             = new 
RangerTag("6e248648-739a-434a-9c42-a74c8277638d", tagTypeName, 
Collections.emptyMap(), (short) 0);
+            RangerTagDef          rangerTagDef          = new 
RangerTagDef(tagTypeName, tagSource);
+            XXServiceResource     xServiceResource      = 
createXXServiceResource(resourceId, "b6ef4baa-f38e-49ce-bac3-3b2243641d8a", 2L, 
serviceId);
+            RangerServiceResource rangerServiceResource = new 
RangerServiceResource("b6ef4baa-f38e-49ce-bac3-3b2243641d8a", serviceName, 
Collections.emptyMap());
+            List<XXTagChangeLog>  changeLogRecords      = 
Collections.singletonList(new XXTagChangeLog(46L, 3, serviceTagVersion, 
resourceId, tagId));
+
+            rangerTag.setId(tagId);
+            rangerTagDef.setId(tagTypeId);
+            xServiceResource.setTags(tagTypeName);
+            rangerServiceResource.setId(resourceId);
+
+            Mockito.when(daoManager.getXXService()).thenReturn(xxServiceDao);
+            
Mockito.when(daoManager.getXXTagChangeLog()).thenReturn(xxTagChangeLogDao);
+            Mockito.when(xxTagChangeLogDao.findLaterThan(Mockito.anyLong(), 
Mockito.anyLong())).thenReturn(changeLogRecords);
+            Mockito.when(daoManager.getXXTag()).thenReturn(tagDao);
+
+            
mockedTagDBStore.when(TagDBStore::isSupportsTagsDedup).thenReturn(true);
+            
mockedTagDBStore.when(TagDBStore::isSupportsTagDeltas).thenReturn(true);
+            mockedJsonUtil.when(() -> 
JsonUtils.jsonToObject(Mockito.anyString(), 
Mockito.any(RangerServiceResourceService.duplicatedDataType.getClass()))).thenReturn(Collections.singletonList(rangerTag));
+
+            Mockito.when(daoManager.getXXTagDef()).thenReturn(tagDefDao);
+
+            
Mockito.when(daoManager.getXXServiceResource()).thenReturn(serviceResourceDao);
+
+            /*
+             * When
+             */
+            ServiceTags serviceTags = 
tagDBStoreSpy.getServiceTagsDelta(serviceName, (serviceTagVersion - 1));
+
+            /*
+             * Then
+             */
+            Assertions.assertEquals("add_or_update", serviceTags.getOp());
+            Assertions.assertEquals(serviceName, serviceTags.getServiceName());
+            Assertions.assertEquals(serviceTagVersion, 
serviceTags.getTagVersion());
+            Assertions.assertTrue(serviceTags.getIsDelta());
+            Assertions.assertTrue(serviceTags.getIsTagsDeduped());
+            
Assertions.assertEquals(ServiceTags.TagsChangeExtent.SERVICE_RESOURCE, 
serviceTags.getTagsChangeExtent());
+
+            // tagDefinitions
+            Assertions.assertEquals(0, serviceTags.getTagDefinitions().size());
+
+            // tags
+            Assertions.assertEquals(0, serviceTags.getTags().size());
+
+            // serviceResources
+            Assertions.assertEquals(1, 
serviceTags.getServiceResources().size());
+            Assertions.assertEquals(resourceId, 
serviceTags.getServiceResources().get(0).getId());
+            
Assertions.assertTrue(serviceTags.getServiceResources().get(0).getIsEnabled());
+
+            // resourceToTagIds
+            Assertions.assertEquals(0, 
serviceTags.getResourceToTagIds().size());
+        }
+    }
+
+    private XXServiceResource createXXServiceResource(Long id, String gId, 
Long lastKnownVersion, Long serviceId) {
+        XXServiceResource xxServiceResource = new XXServiceResource();
+
+        xxServiceResource.setId(id);
+        xxServiceResource.setCreateTime(new Date());
+        xxServiceResource.setGuid(gId);
+        xxServiceResource.setVersion(lastKnownVersion);
+        xxServiceResource.setResourceSignature(resourceSignature);
+        xxServiceResource.setServiceId(serviceId);
+
+        return xxServiceResource;
+    }
+
+    private XXTagDef createXXTagDef(Long id, Long version, String name) {
+        XXTagDef ret = new XXTagDef();
+        ret.setId(id);
+        ret.setVersion(version);
+        ret.setGuid("6bd466f5-1ad0-428f-8a87-b89b4f21cc65");
+        ret.setName(name);
+        ret.setIsEnabled(true);
+
+        return ret;
     }
 
+    private XXTag createXXTag(Long id, Long version, Long type) {
+        XXTag xxTag = new XXTag();
+        xxTag.setId(id);
+        xxTag.setVersion(version);
+        xxTag.setType(type);
+
+        return xxTag;
+    }
+
+
     private RangerTagDef createRangerTagDef() {
         RangerTagDef rangerTagDef = new RangerTagDef();
 
@@ -1204,15 +1612,15 @@ public void tesGetPaginatedServiceResourcesWithTags() 
throws Exception {
 
         RangerServiceResourceWithTagsList returnedRangerServiceResourcePList = 
tagDBStore.getPaginatedServiceResourcesWithTags(searchFilter);
 
-        Assert.assertNotNull(returnedRangerServiceResourcePList);
-        
Assert.assertEquals(returnedRangerServiceResourcePList.getList().size(), 1);
+        Assertions.assertNotNull(returnedRangerServiceResourcePList);
+        
Assertions.assertEquals(returnedRangerServiceResourcePList.getList().size(), 1);
 
         RangerServiceResourceWithTags returnedRangerServiceResource = 
returnedRangerServiceResourcePList.getResourceList().get(0);
 
-        Assert.assertEquals(returnedRangerServiceResource.getId(), id);
-        Assert.assertEquals(returnedRangerServiceResource.getGuid(), gId);
-        
Assert.assertNotNull(returnedRangerServiceResource.getAssociatedTags());
-        
Assert.assertEquals(rangerServiceResourceViewList.getResourceList().get(0).getAssociatedTags().size(),
 returnedRangerServiceResource.getAssociatedTags().size());
+        Assertions.assertEquals(returnedRangerServiceResource.getId(), id);
+        Assertions.assertEquals(returnedRangerServiceResource.getGuid(), gId);
+        
Assertions.assertNotNull(returnedRangerServiceResource.getAssociatedTags());
+        
Assertions.assertEquals(rangerServiceResourceViewList.getResourceList().get(0).getAssociatedTags().size(),
 returnedRangerServiceResource.getAssociatedTags().size());
     }
 
     private  RangerServiceResourceWithTagsList 
createRangerServiceResourceWithTagsViewList() {
@@ -1257,6 +1665,6 @@ public void testToRangerServiceResource() {
         RangerServiceResource expectedResource = new 
RangerServiceResource(serviceName, resourceElements);
         RangerServiceResource actualResource   = 
tagDBStore.toRangerServiceResource(serviceName, resourceMap);
 
-        Assert.assertEquals(expectedResource.getResourceElements(), 
actualResource.getResourceElements());
+        Assertions.assertEquals(expectedResource.getResourceElements(), 
actualResource.getResourceElements());
     }
-}
\ No newline at end of file
+}

Reply via email to