Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 10 additions & 3 deletions security-admin/src/main/java/org/apache/ranger/biz/XUserMgr.java
Original file line number Diff line number Diff line change
Expand Up @@ -2959,11 +2959,18 @@ public int createOrDeleteXGroupUserList(List<GroupUserInfo> 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()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ public VXGroupUser createXGroupUserWithOutLogin(VXGroupUser vxGroupUser) {
return vxGroupUser;
}

public void createOrDeleteXGroupUsers(GroupUserInfo groupUserInfo, Map<String, Long> usersFromDB) {
public boolean createOrDeleteXGroupUsers(GroupUserInfo groupUserInfo, Map<String, Long> usersFromDB) {
if (logger.isDebugEnabled()) {
logger.debug("==>> createOrDeleteXGroupUsers for {}", groupUserInfo.getGroupName());

Expand All @@ -98,15 +98,15 @@ public void createOrDeleteXGroupUsers(GroupUserInfo groupUserInfo, Map<String, L
if (CollectionUtils.isEmpty(groupUserInfo.getAddUsers()) && CollectionUtils.isEmpty(groupUserInfo.getDelUsers())) {
logger.info("Group memberships for source are empty for {}", groupName);

return;
return false;
}

XXGroup xxGroup = daoManager.getXXGroup().findByGroupName(groupName);

if (xxGroup == null) {
logger.debug("createOrDeleteXGroupUsers(): groupName = {} doesn't exist in database. Hence ignoring group membership updates", groupName);

return;
return false;
}

/* findUsersByGroupName returns all the entries from x_group_users table for a given group name and corresponding usernames from x_user table.
Expand Down Expand Up @@ -148,6 +148,7 @@ public void createOrDeleteXGroupUsers(GroupUserInfo groupUserInfo, Map<String, L

logger.debug("<<== createOrDeleteXGroupUsers: Max memory = {} Free memory = {} Total memory = {}", Runtime.getRuntime().maxMemory() / mb, Runtime.getRuntime().freeMemory() / mb, Runtime.getRuntime().totalMemory() / mb);
}
return true;
}

public VXGroupUser readResourceWithOutLogin(Long id) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@
import java.util.HashSet;
import java.util.Map;

import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.mock;
Expand Down Expand Up @@ -104,10 +106,42 @@ public void testCreateOrDeleteXGroupUsersSchedulesCreateAndDelete() {
Map<String, Long> 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<String, Long> 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<String, Long> users = new HashMap<>();
users.put("u1", 11L);

boolean result = svc.createOrDeleteXGroupUsers(info, users);
assertFalse(result);
}
}