This is an automated email from the ASF dual-hosted git repository.
xincheng pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/dolphinscheduler.git
The following commit(s) were added to refs/heads/dev by this push:
new fa6ea8ba7b [TEST] increase coverage of project workergroup relation
service (#15944)
fa6ea8ba7b is described below
commit fa6ea8ba7b06e21177114058b1f1c32fe005a60a
Author: Evan Sun <[email protected]>
AuthorDate: Mon May 6 10:02:04 2024 +0800
[TEST] increase coverage of project workergroup relation service (#15944)
Co-authored-by: abzymeinsjtu <[email protected]>
---
.../ProjectWorkerGroupRelationServiceImpl.java | 12 ++-
.../ProjectWorkerGroupRelationServiceTest.java | 106 +++++++++++++++++----
2 files changed, 95 insertions(+), 23 deletions(-)
diff --git
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProjectWorkerGroupRelationServiceImpl.java
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProjectWorkerGroupRelationServiceImpl.java
index 15cbcbb7fa..31dc113dbb 100644
---
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProjectWorkerGroupRelationServiceImpl.java
+++
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProjectWorkerGroupRelationServiceImpl.java
@@ -26,6 +26,7 @@ import org.apache.dolphinscheduler.common.constants.Constants;
import org.apache.dolphinscheduler.dao.entity.Project;
import org.apache.dolphinscheduler.dao.entity.ProjectWorkerGroup;
import org.apache.dolphinscheduler.dao.entity.User;
+import org.apache.dolphinscheduler.dao.entity.WorkerGroup;
import org.apache.dolphinscheduler.dao.mapper.ProjectMapper;
import org.apache.dolphinscheduler.dao.mapper.ProjectWorkerGroupMapper;
import org.apache.dolphinscheduler.dao.mapper.ScheduleMapper;
@@ -38,6 +39,7 @@ import org.apache.commons.lang3.StringUtils;
import java.util.Date;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -113,23 +115,25 @@ public class ProjectWorkerGroupRelationServiceImpl
extends BaseServiceImpl
}
Set<String> workerGroupNames =
- workerGroupMapper.queryAllWorkerGroup().stream().map(item ->
item.getName()).collect(
+
workerGroupMapper.queryAllWorkerGroup().stream().map(WorkerGroup::getName).collect(
Collectors.toSet());
workerGroupNames.add(Constants.DEFAULT_WORKER_GROUP);
- Set<String> assignedWorkerGroupNames =
workerGroups.stream().collect(Collectors.toSet());
+ Set<String> assignedWorkerGroupNames = new HashSet<>(workerGroups);
Set<String> difference = SetUtils.difference(assignedWorkerGroupNames,
workerGroupNames);
- if (difference.size() > 0) {
+ if (!difference.isEmpty()) {
putMsg(result, Status.WORKER_GROUP_NOT_EXIST,
difference.toString());
return result;
}
Set<String> projectWorkerGroupNames =
projectWorkerGroupMapper.selectList(new QueryWrapper<ProjectWorkerGroup>()
.lambda()
- .eq(ProjectWorkerGroup::getProjectCode,
projectCode)).stream().map(item -> item.getWorkerGroup())
+ .eq(ProjectWorkerGroup::getProjectCode, projectCode))
+ .stream()
+ .map(ProjectWorkerGroup::getWorkerGroup)
.collect(Collectors.toSet());
difference = SetUtils.difference(projectWorkerGroupNames,
assignedWorkerGroupNames);
diff --git
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProjectWorkerGroupRelationServiceTest.java
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProjectWorkerGroupRelationServiceTest.java
index a8e8b8beb2..6f6b7ca2d6 100644
---
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProjectWorkerGroupRelationServiceTest.java
+++
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProjectWorkerGroupRelationServiceTest.java
@@ -17,13 +17,17 @@
package org.apache.dolphinscheduler.api.service;
+import static
org.apache.dolphinscheduler.api.utils.ServiceTestUtil.getAdminUser;
+import static
org.apache.dolphinscheduler.api.utils.ServiceTestUtil.getGeneralUser;
+
+import org.apache.dolphinscheduler.api.AssertionsHelper;
import org.apache.dolphinscheduler.api.enums.Status;
import
org.apache.dolphinscheduler.api.service.impl.ProjectWorkerGroupRelationServiceImpl;
import org.apache.dolphinscheduler.api.utils.Result;
import org.apache.dolphinscheduler.common.constants.Constants;
-import org.apache.dolphinscheduler.common.enums.UserType;
import org.apache.dolphinscheduler.dao.entity.Project;
import org.apache.dolphinscheduler.dao.entity.ProjectWorkerGroup;
+import org.apache.dolphinscheduler.dao.entity.TaskDefinition;
import org.apache.dolphinscheduler.dao.entity.User;
import org.apache.dolphinscheduler.dao.entity.WorkerGroup;
import org.apache.dolphinscheduler.dao.mapper.ProjectMapper;
@@ -33,6 +37,7 @@ import
org.apache.dolphinscheduler.dao.mapper.TaskDefinitionMapper;
import org.apache.dolphinscheduler.dao.mapper.WorkerGroupMapper;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import java.util.Map;
@@ -77,27 +82,87 @@ public class ProjectWorkerGroupRelationServiceTest {
@Test
public void testAssignWorkerGroupsToProject() {
+ User generalUser = getGeneralUser();
User loginUser = getAdminUser();
+ // no permission
+ Result result =
projectWorkerGroupRelationService.assignWorkerGroupsToProject(generalUser,
projectCode,
+ getWorkerGroups());
+ Assertions.assertEquals(Status.USER_NO_OPERATION_PERM.getCode(),
result.getCode());
+
+ // project code is null
+ result =
projectWorkerGroupRelationService.assignWorkerGroupsToProject(loginUser, null,
+ getWorkerGroups());
+ Assertions.assertEquals(Status.PROJECT_NOT_EXIST.getCode(),
result.getCode());
+
+ // worker group is empty
+ result =
projectWorkerGroupRelationService.assignWorkerGroupsToProject(loginUser,
projectCode,
+ Collections.emptyList());
+
Assertions.assertEquals(Status.WORKER_GROUP_TO_PROJECT_IS_EMPTY.getCode(),
result.getCode());
+
+ // project not exists
Mockito.when(projectMapper.queryByCode(projectCode)).thenReturn(null);
- Result result =
projectWorkerGroupRelationService.assignWorkerGroupsToProject(loginUser,
projectCode,
+ result =
projectWorkerGroupRelationService.assignWorkerGroupsToProject(loginUser,
projectCode,
getWorkerGroups());
Assertions.assertEquals(Status.PROJECT_NOT_EXIST.getCode(),
result.getCode());
+ // worker group not exists
WorkerGroup workerGroup = new WorkerGroup();
workerGroup.setName("test");
Mockito.when(projectMapper.queryByCode(Mockito.anyLong())).thenReturn(getProject());
-
Mockito.when(workerGroupMapper.queryAllWorkerGroup()).thenReturn(Lists.newArrayList(workerGroup));
+
Mockito.when(workerGroupMapper.queryAllWorkerGroup()).thenReturn(Collections.singletonList(workerGroup));
+ result =
projectWorkerGroupRelationService.assignWorkerGroupsToProject(loginUser,
projectCode,
+ getDiffWorkerGroups());
+ Assertions.assertEquals(Status.WORKER_GROUP_NOT_EXIST.getCode(),
result.getCode());
+
+ // db insertion fail
+
Mockito.when(workerGroupMapper.queryAllWorkerGroup()).thenReturn(Collections.singletonList(workerGroup));
+
Mockito.when(projectWorkerGroupMapper.insert(Mockito.any())).thenReturn(-1);
+
AssertionsHelper.assertThrowsServiceException(Status.ASSIGN_WORKER_GROUP_TO_PROJECT_ERROR,
+ () ->
projectWorkerGroupRelationService.assignWorkerGroupsToProject(loginUser,
projectCode,
+ getWorkerGroups()));
+
+ // success
Mockito.when(projectWorkerGroupMapper.insert(Mockito.any())).thenReturn(1);
result =
projectWorkerGroupRelationService.assignWorkerGroupsToProject(loginUser,
projectCode,
getWorkerGroups());
Assertions.assertEquals(Status.SUCCESS.getCode(), result.getCode());
+
+ // success when there is diff between current wg and assigned wg
+ Mockito.when(projectWorkerGroupMapper.selectList(Mockito.any()))
+
.thenReturn(Collections.singletonList(getDiffProjectWorkerGroup()));
+
Mockito.when(projectWorkerGroupMapper.delete(Mockito.any())).thenReturn(1);
+ result =
projectWorkerGroupRelationService.assignWorkerGroupsToProject(loginUser,
projectCode,
+ getWorkerGroups());
+ Assertions.assertEquals(Status.SUCCESS.getCode(), result.getCode());
+
+ // db deletion fail
+
Mockito.when(projectWorkerGroupMapper.delete(Mockito.any())).thenReturn(-1);
+
AssertionsHelper.assertThrowsServiceException(Status.ASSIGN_WORKER_GROUP_TO_PROJECT_ERROR,
+ () ->
projectWorkerGroupRelationService.assignWorkerGroupsToProject(loginUser,
projectCode,
+ getWorkerGroups()));
+
+ // fail when wg is referenced by task definition
+
Mockito.when(taskDefinitionMapper.queryAllDefinitionList(Mockito.anyLong()))
+
.thenReturn(Collections.singletonList(getTaskDefinitionWithDiffWorkerGroup()));
+
AssertionsHelper.assertThrowsServiceException(Status.USED_WORKER_GROUP_EXISTS,
+ () ->
projectWorkerGroupRelationService.assignWorkerGroupsToProject(loginUser,
projectCode,
+ getWorkerGroups()));
}
@Test
public void testQueryWorkerGroupsByProject() {
+ // no permission
+ Mockito.when(projectService.hasProjectAndPerm(Mockito.any(),
Mockito.any(), Mockito.anyMap(), Mockito.any()))
+ .thenReturn(false);
+ Map<String, Object> result =
+
projectWorkerGroupRelationService.queryWorkerGroupsByProject(getGeneralUser(),
projectCode);
+
+ Assertions.assertTrue(result.isEmpty());
+
+ // success
Mockito.when(projectService.hasProjectAndPerm(Mockito.any(),
Mockito.any(), Mockito.anyMap(), Mockito.any()))
.thenReturn(true);
@@ -113,8 +178,7 @@ public class ProjectWorkerGroupRelationServiceTest {
Mockito.when(scheduleMapper.querySchedulerListByProjectName(Mockito.any()))
.thenReturn(Lists.newArrayList());
- Map<String, Object> result =
-
projectWorkerGroupRelationService.queryWorkerGroupsByProject(getGeneralUser(),
projectCode);
+ result =
projectWorkerGroupRelationService.queryWorkerGroupsByProject(getGeneralUser(),
projectCode);
ProjectWorkerGroup[] actualValue =
((List<ProjectWorkerGroup>)
result.get(Constants.DATA_LIST)).toArray(new ProjectWorkerGroup[0]);
@@ -126,20 +190,8 @@ public class ProjectWorkerGroupRelationServiceTest {
return Lists.newArrayList("default");
}
- private User getGeneralUser() {
- User loginUser = new User();
- loginUser.setUserType(UserType.GENERAL_USER);
- loginUser.setUserName("userName");
- loginUser.setId(1);
- return loginUser;
- }
-
- private User getAdminUser() {
- User loginUser = new User();
- loginUser.setUserType(UserType.ADMIN_USER);
- loginUser.setUserName("userName");
- loginUser.setId(1);
- return loginUser;
+ private List<String> getDiffWorkerGroups() {
+ return Lists.newArrayList("default", "new");
}
private Project getProject() {
@@ -158,4 +210,20 @@ public class ProjectWorkerGroupRelationServiceTest {
projectWorkerGroup.setWorkerGroup("default");
return projectWorkerGroup;
}
+
+ private ProjectWorkerGroup getDiffProjectWorkerGroup() {
+ ProjectWorkerGroup projectWorkerGroup = new ProjectWorkerGroup();
+ projectWorkerGroup.setId(2);
+ projectWorkerGroup.setProjectCode(projectCode);
+ projectWorkerGroup.setWorkerGroup("new");
+ return projectWorkerGroup;
+ }
+
+ private TaskDefinition getTaskDefinitionWithDiffWorkerGroup() {
+ TaskDefinition taskDefinition = new TaskDefinition();
+ taskDefinition.setProjectCode(projectCode);
+ taskDefinition.setId(1);
+ taskDefinition.setWorkerGroup("new");
+ return taskDefinition;
+ }
}