diff --git a/security-admin/src/main/java/org/apache/ranger/biz/XUserMgr.java b/security-admin/src/main/java/org/apache/ranger/biz/XUserMgr.java index ffe64e8f7a..86617aa93e 100755 --- a/security-admin/src/main/java/org/apache/ranger/biz/XUserMgr.java +++ b/security-admin/src/main/java/org/apache/ranger/biz/XUserMgr.java @@ -2959,11 +2959,18 @@ public int createOrDeleteXGroupUserList(List groupUserInfoList) { } for (GroupUserInfo groupUserInfo : groupUserInfoList) { - xGroupUserService.createOrDeleteXGroupUsers(groupUserInfo, usersFromDB); + if (xGroupUserService.createOrDeleteXGroupUsers(groupUserInfo, usersFromDB)) { + updatedGroups++; + } + + } + if (logger.isDebugEnabled()) { + logger.debug("No. of groups actually updated = {}", updatedGroups); } - - updatedGroups = groupUserInfoList.size(); } + if (updatedGroups > 0) { + updateUserStoreVersion("createOrDeleteXGroupUserList(updatedGroups=" + updatedGroups + ")"); + } } if (logger.isDebugEnabled()) { diff --git a/security-admin/src/main/java/org/apache/ranger/service/XGroupUserService.java b/security-admin/src/main/java/org/apache/ranger/service/XGroupUserService.java index 61b0c95ee6..926022e8f1 100644 --- a/security-admin/src/main/java/org/apache/ranger/service/XGroupUserService.java +++ b/security-admin/src/main/java/org/apache/ranger/service/XGroupUserService.java @@ -84,7 +84,7 @@ public VXGroupUser createXGroupUserWithOutLogin(VXGroupUser vxGroupUser) { return vxGroupUser; } - public void createOrDeleteXGroupUsers(GroupUserInfo groupUserInfo, Map usersFromDB) { + public boolean createOrDeleteXGroupUsers(GroupUserInfo groupUserInfo, Map usersFromDB) { if (logger.isDebugEnabled()) { logger.debug("==>> createOrDeleteXGroupUsers for {}", groupUserInfo.getGroupName()); @@ -98,7 +98,7 @@ public void createOrDeleteXGroupUsers(GroupUserInfo groupUserInfo, Map users = new HashMap<>(); users.put("u1", 11L); users.put("u2", 22L); - svc.createOrDeleteXGroupUsers(info, users); + boolean result = svc.createOrDeleteXGroupUsers(info, users); + assertTrue(result); verify(entityDao).create(any(XXGroupUser.class)); } finally { svc.entityDao = previousDao; } } + + @Test + public void testCreateOrDeleteXGroupUsers_EmptyUsers() { + GroupUserInfo info = new GroupUserInfo(); + info.setGroupName("group1"); + info.setAddUsers(new HashSet<>()); + info.setDelUsers(new HashSet<>()); + + Map users = new HashMap<>(); + users.put("u1", 11L); + + boolean result = svc.createOrDeleteXGroupUsers(info, users); + assertFalse(result); + } + + @Test + public void testCreateOrDeleteXGroupUsers_GroupNotFound() { + GroupUserInfo info = new GroupUserInfo(); + info.setGroupName("nonExistentGroup"); + info.setAddUsers(new HashSet<>(Collections.singletonList("u1"))); + + XXGroupDao xGroupDao = mock(XXGroupDao.class); + when(daoMgr.getXXGroup()).thenReturn(xGroupDao); + when(xGroupDao.findByGroupName("nonExistentGroup")).thenReturn(null); + + Map users = new HashMap<>(); + users.put("u1", 11L); + + boolean result = svc.createOrDeleteXGroupUsers(info, users); + assertFalse(result); + } }