You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ranger.apache.org by ra...@apache.org on 2026/07/09 10:25:32 UTC

(ranger) branch ranger-2.9 updated: RANGER-5623: Updated XUserMgr.java to solve UI consistency for put groupusers endpoint (#1056)

This is an automated email from the ASF dual-hosted git repository.

ramackri pushed a commit to branch ranger-2.9
in repository https://gitbox.apache.org/repos/asf/ranger.git


The following commit(s) were added to refs/heads/ranger-2.9 by this push:
     new 2b0dac083 RANGER-5623: Updated XUserMgr.java to solve UI consistency for put groupusers endpoint (#1056)
2b0dac083 is described below

commit 2b0dac083eb7d7c75773c55174bf82b6c01762d6
Author: KRISHNA CHAITANYA MUTTEVI <13...@users.noreply.github.com>
AuthorDate: Thu Jul 9 15:55:27 2026 +0530

    RANGER-5623: Updated XUserMgr.java to solve UI consistency for put groupusers endpoint (#1056)
---
 .../main/java/org/apache/ranger/biz/XUserMgr.java  |  25 ++++
 .../java/org/apache/ranger/biz/TestXUserMgr.java   | 147 +++++++++++++++++----
 2 files changed, 147 insertions(+), 25 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 480042458..1b013b314 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
@@ -1016,7 +1016,32 @@ protected void updateXgroupUserForGroupUpdate(VXGroup vXGroup) {
 
 	public VXGroupUser updateXGroupUser(VXGroupUser vXGroupUser) {
 		checkAdminAccess();
+
 		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 4f684f600..f6ab5b116 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
@@ -132,6 +132,7 @@
 import org.junit.FixMethodOrder;
 import org.junit.Rule;
 import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
 import org.junit.rules.ExpectedException;
 import org.junit.runner.RunWith;
 import org.junit.runners.MethodSorters;
@@ -2345,15 +2346,48 @@ public void test54modifyUserActiveStatus() {
 	@Test
 	public void test55updateXGroupUser() {
 		setup();
-		VXUser vxUser = vxUser();
-		vxUser.setUserSource(RangerCommonEnums.USER_EXTERNAL);
+
 		VXGroupUser vxGroupUser = vxGroupUser();
-		Mockito.when(xGroupUserService.updateResource((VXGroupUser) Mockito.any())).thenReturn(vxGroupUser);
-		VXGroupUser dbvxUser = xUserMgr.updateXGroupUser(vxGroupUser);
-		Assert.assertNotNull(dbvxUser);
-		Assert.assertEquals(dbvxUser.getId(), vxGroupUser.getId());
-		Assert.assertEquals(dbvxUser.getName(), vxGroupUser.getName());
-		Mockito.verify(xGroupUserService).updateResource((VXGroupUser) Mockito.any());
+
+		// 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 result = xUserMgr.updateXGroupUser(vxGroupUser);
+
+		Assert.assertNotNull(result);
+		Assert.assertEquals(vxGroupUser.getId(), result.getId());
+		Assert.assertEquals(vxGroupUser.getName(), result.getName());
+
+		// addition of parent group id
+		Assert.assertEquals(Long.valueOf(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());
 	}
 
 	@Test
@@ -2763,24 +2797,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<XXGroupUser>();
-		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());
+
+		Assert.assertThrows(WebApplicationException.class, () -> {
+			xUserMgr.updateXGroupUser(null);
+		});
 	}
 
 	@Test
@@ -4737,4 +4761,77 @@ public void test01CreateXUser_federated() {
 		Assert.assertEquals(dbvxUser.getUserSource(), RangerCommonEnums.USER_FEDERATED);
 		Mockito.verify(xUserService).readResourceWithOutLogin(userId);
 	}
+
+	@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());
+
+		Assert.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());
+
+		Assert.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);
+		});
+	}
 }