diff --git a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/permission/ResourcePermissionCheckServiceTest.java b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/permission/ResourcePermissionCheckServiceTest.java index 2bef0d5e65..457bd90a91 100644 --- a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/permission/ResourcePermissionCheckServiceTest.java +++ b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/permission/ResourcePermissionCheckServiceTest.java @@ -14,8 +14,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package org.apache.dolphinscheduler.api.permission; +import org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant; import org.apache.dolphinscheduler.common.enums.AuthorizationType; import org.apache.dolphinscheduler.common.enums.UserType; import org.apache.dolphinscheduler.dao.entity.Project; @@ -23,21 +25,19 @@ import org.apache.dolphinscheduler.dao.entity.User; import org.apache.dolphinscheduler.dao.mapper.ProjectMapper; import org.apache.dolphinscheduler.service.process.ProcessService; -import java.util.ArrayList; +import java.util.Arrays; import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; import org.mockito.Mock; +import org.mockito.Mockito; import org.mockito.junit.jupiter.MockitoExtension; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.context.ApplicationContext; /** * permission service test @@ -53,73 +53,95 @@ public class ResourcePermissionCheckServiceTest { @Mock private ProjectMapper projectMapper; - @Mock - private ApplicationContext context; - @Mock - private ResourcePermissionCheckService resourcePermissionCheckService; - @InjectMocks - ResourcePermissionCheckServiceImpl resourcePermissionCheckServices; + ResourcePermissionCheckServiceImpl resourcePermissionCheckService; - protected static final Map> RESOURCE_LIST_MAP = - new ConcurrentHashMap<>(); + @BeforeEach + public void setup() { + ResourcePermissionCheckServiceImpl.RESOURCE_LIST_MAP.put(AuthorizationType.PROJECTS, + new ResourcePermissionCheckServiceImpl.ProjectsResourcePermissionCheck(projectMapper)); + } @Test public void testResourcePermissionCheck() { - User user = new User(); - user.setId(1); - Object[] obj = new Object[]{1, 2}; - boolean result = this.resourcePermissionCheckService.resourcePermissionCheck(AuthorizationType.PROJECTS, obj, - user.getId(), logger); - Assertions.assertFalse(result); + User user = getGeneralUser(); + + Assertions.assertTrue(resourcePermissionCheckService.resourcePermissionCheck(AuthorizationType.PROJECTS, null, + user.getId(), logger)); + + List projects = Arrays.asList(getProject(1), getProject(2), getProject(3)); + Mockito.when(projectMapper.listAuthorizedProjects(user.getId(), null)).thenReturn(projects); + + Assertions.assertTrue(resourcePermissionCheckService.resourcePermissionCheck(AuthorizationType.PROJECTS, + new Object[]{}, user.getId(), logger)); + Assertions.assertTrue(resourcePermissionCheckService.resourcePermissionCheck(AuthorizationType.PROJECTS, + new Object[]{1, 2}, user.getId(), logger)); + Assertions.assertFalse(resourcePermissionCheckService.resourcePermissionCheck(AuthorizationType.PROJECTS, + new Object[]{1, 2, 3, 4}, user.getId(), logger)); + Assertions.assertFalse(resourcePermissionCheckService.resourcePermissionCheck(AuthorizationType.PROJECTS, + new Object[]{2, 3, 4}, user.getId(), logger)); + Assertions.assertFalse(resourcePermissionCheckService.resourcePermissionCheck(AuthorizationType.PROJECTS, + new Object[]{4, 5}, user.getId(), logger)); } @Test public void testOperationPermissionCheck() { - User user = new User(); - user.setId(1); - resourcePermissionCheckServices.setApplicationContext(context); - Assertions.assertFalse(resourcePermissionCheckService.operationPermissionCheck(AuthorizationType.PROJECTS, - user.getId(), null, logger)); - String sourceUrl = "/tmp/"; + User user = getGeneralUser(); + + Mockito.when(processService.getUserById(user.getId())).thenReturn(null); Assertions.assertFalse(resourcePermissionCheckService.operationPermissionCheck(AuthorizationType.PROJECTS, - user.getId(), sourceUrl, logger)); + user.getId(), ApiFuncIdentificationConstant.PROJECT, logger)); + + Mockito.when(processService.getUserById(user.getId())).thenReturn(user); + Assertions.assertTrue(resourcePermissionCheckService.operationPermissionCheck(AuthorizationType.PROJECTS, + user.getId(), ApiFuncIdentificationConstant.PROJECT, logger)); } @Test public void testUserOwnedResourceIdsAcquisition() { + User generalUser = getGeneralUser(); + Mockito.when(processService.getUserById(generalUser.getId())).thenReturn(null); + Assertions.assertEquals(0, resourcePermissionCheckService + .userOwnedResourceIdsAcquisition(AuthorizationType.PROJECTS, generalUser.getId(), logger).size()); + + // GENERAL_USER + List projects = Arrays.asList(getProject(1), getProject(2), getProject(3)); + Mockito.when(processService.getUserById(generalUser.getId())).thenReturn(generalUser); + Mockito.when(projectMapper.listAuthorizedProjects(generalUser.getId(), null)).thenReturn(projects); + Assertions.assertEquals(3, resourcePermissionCheckService + .userOwnedResourceIdsAcquisition(AuthorizationType.PROJECTS, generalUser.getId(), logger).size()); + + // ADMIN_USER + User adminUser = getAdminUser(); + Mockito.when(processService.getUserById(adminUser.getId())).thenReturn(adminUser); + Mockito.when(projectMapper.listAuthorizedProjects(0, null)).thenReturn(projects); + Assertions.assertEquals(3, resourcePermissionCheckService + .userOwnedResourceIdsAcquisition(AuthorizationType.PROJECTS, adminUser.getId(), logger).size()); + } + + private User getGeneralUser() { + User user = new User(); + user.setId(2); + user.setUserType(UserType.GENERAL_USER); + user.setUserName("userTest0001"); + user.setUserPassword("userTest0001"); + return user; + } + + private User getAdminUser() { User user = new User(); user.setId(1); - // ADMIN user.setUserType(UserType.ADMIN_USER); - Set result = resourcePermissionCheckServices.userOwnedResourceIdsAcquisition(AuthorizationType.PROJECTS, - user.getId(), - logger); - Assertions.assertNotNull(result); + user.setUserName("userTest0001"); + user.setUserPassword("userTest0001"); + return user; } - @Test - public void testSetApplication() { - resourcePermissionCheckServices.setApplicationContext(context); - } - /** - * create entity - */ - private Project getEntity() { + private Project getProject(int projectId) { Project project = new Project(); - project.setId(1); - project.setUserId(1); - project.setName("permissionsTest"); - project.setUserName("permissionTest"); + project.setCode(1L); + project.setId(projectId); + project.setName("projectName"); return project; } - - /** - * entity list - */ - private List getList() { - List list = new ArrayList<>(); - list.add(getEntity()); - return list; - } }