This is an automated email from the ASF dual-hosted git repository.
pradeepagrawal8184 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ranger.git
The following commit(s) were added to refs/heads/master by this push:
new d980f9f58 RANGER-5623: Updated XUserMgr.java to solve UI consistency
for put groupusers endpoint (#992)
d980f9f58 is described below
commit d980f9f580289870bb5135b756131d6584f64a5c
Author: KRISHNA CHAITANYA MUTTEVI
<[email protected]>
AuthorDate: Mon Jul 6 15:42:03 2026 +0530
RANGER-5623: Updated XUserMgr.java to solve UI consistency for put
groupusers endpoint (#992)
* RANGER-5623: Updated XUserMgr.java to solve UI consistency in groupusers
* RANGER-5623: Updated the TextXUserMgr and resolved the checkstyle error
* RANGER-5623: Added the validation check for the invalid vXGroupUser input
* RANGER-5623: Addressed the review comments to optimise and add proper
validation
---
.../main/java/org/apache/ranger/biz/XUserMgr.java | 23 ++++
.../java/org/apache/ranger/biz/TestXUserMgr.java | 142 +++++++++++++++++----
2 files changed, 142 insertions(+), 23 deletions(-)
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 f61b88e65..edc18e133 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
@@ -1651,6 +1651,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);
}
diff --git
a/security-admin/src/test/java/org/apache/ranger/biz/TestXUserMgr.java
b/security-admin/src/test/java/org/apache/ranger/biz/TestXUserMgr.java
index b8d1f1f59..a316b440c 100644
--- a/security-admin/src/test/java/org/apache/ranger/biz/TestXUserMgr.java
+++ b/security-admin/src/test/java/org/apache/ranger/biz/TestXUserMgr.java
@@ -2050,14 +2050,47 @@ public void test54modifyUserActiveStatus() {
@Test
public void test55updateXGroupUser() {
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());
}
@@ -2500,24 +2533,14 @@ public void test81checkAdminAccess() {
}
@Test
- public void test82updateXgroupUserForGroupUpdate() {
+ public void test82updateXGroupUser_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
@@ -4482,6 +4505,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");