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
29 changes: 29 additions & 0 deletions security-admin/src/main/java/org/apache/ranger/biz/XUserMgr.java
Original file line number Diff line number Diff line change
Expand Up @@ -1653,6 +1653,35 @@ public VXGroupUser updateXGroupUser(VXGroupUser vXGroupUser) {

xaBizUtil.blockAuditorRoleUser();

if (vXGroupUser == null) {
throw restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, "Groupuser not found", true);
}

XXGroupUser xxGroupUser = null;

if (vXGroupUser.getId() != null) {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what if vXGroupUser itself is null.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've updated the function to include a validation check for invalid inputs. Could you please take a look at the latest commit

xxGroupUser = daoManager.getXXGroupUser().getById(vXGroupUser.getId());
if (xxGroupUser == null) {
throw restErrorUtil.createRESTException(
"Group-User mapping not found with ID: " + vXGroupUser.getId(),
MessageEnums.DATA_NOT_FOUND);
}
}

XXGroup xGroup = daoManager.getXXGroup().findByGroupName(vXGroupUser.getName());
if (xGroup == null) {
throw restErrorUtil.createRESTException("Group not found: " + vXGroupUser.getName(),
MessageEnums.DATA_NOT_FOUND);
}

XXUser xUser = daoManager.getXXUser().getById(vXGroupUser.getUserId());
if (xUser == null) {
throw restErrorUtil.createRESTException("User not found with ID: " + vXGroupUser.getUserId(),
MessageEnums.DATA_NOT_FOUND);
}

vXGroupUser.setParentGroupId(xGroup.getId());

return super.updateXGroupUser(vXGroupUser);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2031,6 +2031,22 @@ public void test55updateXGroupUser() {
VXUser vxUser = vxUser();
vxUser.setUserSource(RangerCommonEnums.USER_EXTERNAL);
VXGroupUser vxGroupUser = vxGroupUser();
// Mock XXGroupUser lookup
XXGroupUserDao xxGroupUserDao = Mockito.mock(XXGroupUserDao.class);
XXGroupUser xxGroupUser = new XXGroupUser();
Mockito.when(daoManager.getXXGroupUser()).thenReturn(xxGroupUserDao);
Mockito.when(xxGroupUserDao.getById(vxGroupUser.getId())).thenReturn(xxGroupUser);
// Mock XXGroup lookup
XXGroupDao xxGroupDao = Mockito.mock(XXGroupDao.class);
XXGroup xxGroup = new XXGroup();
xxGroup.setId(1L);
Mockito.when(daoManager.getXXGroup()).thenReturn(xxGroupDao);
Mockito.when(xxGroupDao.findByGroupName(vxGroupUser.getName())).thenReturn(xxGroup);
// Mock XXUser lookup
XXUserDao xxUserDao = Mockito.mock(XXUserDao.class);
XXUser xxUser = new XXUser();
Mockito.when(daoManager.getXXUser()).thenReturn(xxUserDao);
Mockito.when(xxUserDao.getById(vxGroupUser.getUserId())).thenReturn(xxUser);
Mockito.when(xGroupUserService.updateResource(Mockito.any())).thenReturn(vxGroupUser);
VXGroupUser dbvxUser = xUserMgr.updateXGroupUser(vxGroupUser);
Assertions.assertNotNull(dbvxUser);
Expand Down Expand Up @@ -2492,9 +2508,25 @@ public void test82updateXgroupUserForGroupUpdate() {
xXGroupUserList.add(xXGroupUser);
Mockito.when(daoManager.getXXGroupUser()).thenReturn(xxGroupUserDao);
Mockito.when(xxGroupUserDao.findByGroupId(vXGroup.getId())).thenReturn(xXGroupUserList);
// CHANGED: Use anyLong() so it matches regardless of internal ID state
Mockito.when(xxGroupUserDao.getById(Mockito.anyLong())).thenReturn(xXGroupUser);
// Mock XXGroup lookup
XXGroupDao xxGroupDao = Mockito.mock(XXGroupDao.class);
XXGroup xxGroup = new XXGroup();
xxGroup.setId(vXGroup.getId());
Mockito.when(daoManager.getXXGroup()).thenReturn(xxGroupDao);
// CHANGED: Use anyString() because the group name likely gets altered internally during the loop
Mockito.when(xxGroupDao.findByGroupName(Mockito.anyString())).thenReturn(xxGroup);
// Mock XXUser lookup
XXUserDao xxUserDao = Mockito.mock(XXUserDao.class);
XXUser xxUser = new XXUser();
Mockito.when(daoManager.getXXUser()).thenReturn(xxUserDao);
// CHANGED: Use anyLong() for user ID lookup
Mockito.when(xxUserDao.getById(Mockito.anyLong())).thenReturn(xxUser);
Mockito.when(xGroupUserService.populateViewBean(xXGroupUser)).thenReturn(vxGroupUser);
xUserMgr.updateXgroupUserForGroupUpdate(vXGroup);
Mockito.verify(daoManager).getXXGroupUser();
// Verify changes
Mockito.verify(daoManager, Mockito.atLeastOnce()).getXXGroupUser();
Mockito.verify(xxGroupUserDao).findByGroupId(vXGroup.getId());
}

Expand Down