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
23 changes: 23 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,29 @@ public VXGroupUser updateXGroupUser(VXGroupUser vXGroupUser) {

xaBizUtil.blockAuditorRoleUser();

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

if (vXGroupUser.getId() != null && daoManager.getXXGroupUser().getById(vXGroupUser.getId()) == 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
144 changes: 120 additions & 24 deletions security-admin/src/test/java/org/apache/ranger/biz/TestXUserMgr.java
Comment thread
krishnamuttevi marked this conversation as resolved.
Original file line number Diff line number Diff line change
Expand Up @@ -2026,16 +2026,49 @@ public void test54modifyUserActiveStatus() {
}

@Test
public void test55updateXGroupUser() {
public void test55updateXGroupUser_success() {
setup();
VXUser vxUser = vxUser();
vxUser.setUserSource(RangerCommonEnums.USER_EXTERNAL);

VXGroupUser vxGroupUser = vxGroupUser();

// Mock GroupUser
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 Group
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 User
XXUserDao xxUserDao = Mockito.mock(XXUserDao.class);
XXUser xxUser = new XXUser();

Mockito.when(daoManager.getXXUser()).thenReturn(xxUserDao);
Mockito.when(xxUserDao.getById(vxGroupUser.getUserId())).thenReturn(xxUser);

// Mock update
Mockito.when(xGroupUserService.updateResource(Mockito.any())).thenReturn(vxGroupUser);
VXGroupUser dbvxUser = xUserMgr.updateXGroupUser(vxGroupUser);
Assertions.assertNotNull(dbvxUser);
Assertions.assertEquals(dbvxUser.getId(), vxGroupUser.getId());
Assertions.assertEquals(dbvxUser.getName(), vxGroupUser.getName());

VXGroupUser result = xUserMgr.updateXGroupUser(vxGroupUser);

Assertions.assertNotNull(result);
Assertions.assertEquals(vxGroupUser.getId(), result.getId());
Assertions.assertEquals(vxGroupUser.getName(), result.getName());

// addition of parent group id
Assertions.assertEquals(1L, result.getParentGroupId());

Mockito.verify(xxGroupUserDao).getById(vxGroupUser.getId());
Mockito.verify(xxGroupDao).findByGroupName(vxGroupUser.getName());
Mockito.verify(xxUserDao).getById(vxGroupUser.getUserId());

Mockito.verify(xGroupUserService).updateResource(Mockito.any());
}

Expand Down Expand Up @@ -2478,24 +2511,14 @@ public void test81checkAdminAccess() {
}

@Test
public void test82updateXgroupUserForGroupUpdate() {
public void test56updateXGroupUser_nullVXGroupUser() {
setup();
XXGroupUserDao xxGroupUserDao = Mockito.mock(XXGroupUserDao.class);
VXGroup vXGroup = vxGroup();
List<XXGroupUser> xXGroupUserList = new ArrayList<>();
VXGroupUser vxGroupUser = vxGroupUser();
XXGroupUser xXGroupUser = new XXGroupUser();
xXGroupUser.setId(vxGroupUser.getId());
xXGroupUser.setName(vxGroupUser.getName());
xXGroupUser.setParentGroupId(vxGroupUser.getParentGroupId());
xXGroupUser.setUserId(vxGroupUser.getUserId());
xXGroupUserList.add(xXGroupUser);
Mockito.when(daoManager.getXXGroupUser()).thenReturn(xxGroupUserDao);
Mockito.when(xxGroupUserDao.findByGroupId(vXGroup.getId())).thenReturn(xXGroupUserList);
Mockito.when(xGroupUserService.populateViewBean(xXGroupUser)).thenReturn(vxGroupUser);
xUserMgr.updateXgroupUserForGroupUpdate(vXGroup);
Mockito.verify(daoManager).getXXGroupUser();
Mockito.verify(xxGroupUserDao).findByGroupId(vXGroup.getId());

Mockito.when(restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, "Groupuser not found", true)).thenThrow(new WebApplicationException());

Assertions.assertThrows(WebApplicationException.class, () -> {
xUserMgr.updateXGroupUser(null);
});
}

@Test
Expand Down Expand Up @@ -4457,6 +4480,79 @@ public void test01CreateXUser_federated() {
});
}

@Test
public void test133updateXGroupUser_groupUserMappingNotFound() {
setup();

VXGroupUser vxGroupUser = vxGroupUser();

XXGroupUserDao xxGroupUserDao = Mockito.mock(XXGroupUserDao.class);

Mockito.when(daoManager.getXXGroupUser()).thenReturn(xxGroupUserDao);
Mockito.when(xxGroupUserDao.getById(vxGroupUser.getId())).thenReturn(null);

Mockito.when(restErrorUtil.createRESTException(Mockito.contains("Group-User mapping not found"), Mockito.eq(MessageEnums.DATA_NOT_FOUND))).thenThrow(new WebApplicationException());

Assertions.assertThrows(WebApplicationException.class, () -> {
xUserMgr.updateXGroupUser(vxGroupUser);
});
}

@Test
public void test134updateXGroupUser_groupNotFound() {
setup();

VXGroupUser vxGroupUser = vxGroupUser();

XXGroupUserDao xxGroupUserDao = Mockito.mock(XXGroupUserDao.class);
XXGroupUser xxGroupUser = new XXGroupUser();

Mockito.when(daoManager.getXXGroupUser()).thenReturn(xxGroupUserDao);
Mockito.when(xxGroupUserDao.getById(vxGroupUser.getId())).thenReturn(xxGroupUser);

XXGroupDao xxGroupDao = Mockito.mock(XXGroupDao.class);

Mockito.when(daoManager.getXXGroup()).thenReturn(xxGroupDao);
Mockito.when(xxGroupDao.findByGroupName(vxGroupUser.getName())).thenReturn(null);

Mockito.when(restErrorUtil.createRESTException(Mockito.contains("Group not found"), Mockito.eq(MessageEnums.DATA_NOT_FOUND))).thenThrow(new WebApplicationException());

Assertions.assertThrows(WebApplicationException.class, () -> {
xUserMgr.updateXGroupUser(vxGroupUser);
});
}

@Test
public void test135updateXGroupUser_userNotFound() {
setup();

VXGroupUser vxGroupUser = vxGroupUser();

XXGroupUserDao xxGroupUserDao = Mockito.mock(XXGroupUserDao.class);
XXGroupUser xxGroupUser = new XXGroupUser();

Mockito.when(daoManager.getXXGroupUser()).thenReturn(xxGroupUserDao);
Mockito.when(xxGroupUserDao.getById(vxGroupUser.getId())).thenReturn(xxGroupUser);

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);

XXUserDao xxUserDao = Mockito.mock(XXUserDao.class);

Mockito.when(daoManager.getXXUser()).thenReturn(xxUserDao);
Mockito.when(xxUserDao.getById(vxGroupUser.getUserId())).thenReturn(null);

Mockito.when(restErrorUtil.createRESTException(Mockito.contains("User not found"), Mockito.eq(MessageEnums.DATA_NOT_FOUND))).thenThrow(new WebApplicationException());

Assertions.assertThrows(WebApplicationException.class, () -> {
xUserMgr.updateXGroupUser(vxGroupUser);
});
}

private VXUser vxUser() {
Collection<String> userRoleList = new ArrayList<>();
userRoleList.add("ROLE_USER");
Expand Down