Skip to content

Commit fa6ea8b

Browse files
abzymeatsjtuabzymeinsjtu
andauthored
[TEST] increase coverage of project workergroup relation service (apache#15944)
Co-authored-by: abzymeinsjtu <abzymeinsjtu@B-54Q8MD6R-0244.local>
1 parent ebcdaeb commit fa6ea8b

2 files changed

Lines changed: 95 additions & 23 deletions

File tree

dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProjectWorkerGroupRelationServiceImpl.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.apache.dolphinscheduler.dao.entity.Project;
2727
import org.apache.dolphinscheduler.dao.entity.ProjectWorkerGroup;
2828
import org.apache.dolphinscheduler.dao.entity.User;
29+
import org.apache.dolphinscheduler.dao.entity.WorkerGroup;
2930
import org.apache.dolphinscheduler.dao.mapper.ProjectMapper;
3031
import org.apache.dolphinscheduler.dao.mapper.ProjectWorkerGroupMapper;
3132
import org.apache.dolphinscheduler.dao.mapper.ScheduleMapper;
@@ -38,6 +39,7 @@
3839

3940
import java.util.Date;
4041
import java.util.HashMap;
42+
import java.util.HashSet;
4143
import java.util.List;
4244
import java.util.Map;
4345
import java.util.Objects;
@@ -113,23 +115,25 @@ public Result assignWorkerGroupsToProject(User loginUser, Long projectCode, List
113115
}
114116

115117
Set<String> workerGroupNames =
116-
workerGroupMapper.queryAllWorkerGroup().stream().map(item -> item.getName()).collect(
118+
workerGroupMapper.queryAllWorkerGroup().stream().map(WorkerGroup::getName).collect(
117119
Collectors.toSet());
118120

119121
workerGroupNames.add(Constants.DEFAULT_WORKER_GROUP);
120122

121-
Set<String> assignedWorkerGroupNames = workerGroups.stream().collect(Collectors.toSet());
123+
Set<String> assignedWorkerGroupNames = new HashSet<>(workerGroups);
122124

123125
Set<String> difference = SetUtils.difference(assignedWorkerGroupNames, workerGroupNames);
124126

125-
if (difference.size() > 0) {
127+
if (!difference.isEmpty()) {
126128
putMsg(result, Status.WORKER_GROUP_NOT_EXIST, difference.toString());
127129
return result;
128130
}
129131

130132
Set<String> projectWorkerGroupNames = projectWorkerGroupMapper.selectList(new QueryWrapper<ProjectWorkerGroup>()
131133
.lambda()
132-
.eq(ProjectWorkerGroup::getProjectCode, projectCode)).stream().map(item -> item.getWorkerGroup())
134+
.eq(ProjectWorkerGroup::getProjectCode, projectCode))
135+
.stream()
136+
.map(ProjectWorkerGroup::getWorkerGroup)
133137
.collect(Collectors.toSet());
134138

135139
difference = SetUtils.difference(projectWorkerGroupNames, assignedWorkerGroupNames);

dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProjectWorkerGroupRelationServiceTest.java

Lines changed: 87 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,17 @@
1717

1818
package org.apache.dolphinscheduler.api.service;
1919

20+
import static org.apache.dolphinscheduler.api.utils.ServiceTestUtil.getAdminUser;
21+
import static org.apache.dolphinscheduler.api.utils.ServiceTestUtil.getGeneralUser;
22+
23+
import org.apache.dolphinscheduler.api.AssertionsHelper;
2024
import org.apache.dolphinscheduler.api.enums.Status;
2125
import org.apache.dolphinscheduler.api.service.impl.ProjectWorkerGroupRelationServiceImpl;
2226
import org.apache.dolphinscheduler.api.utils.Result;
2327
import org.apache.dolphinscheduler.common.constants.Constants;
24-
import org.apache.dolphinscheduler.common.enums.UserType;
2528
import org.apache.dolphinscheduler.dao.entity.Project;
2629
import org.apache.dolphinscheduler.dao.entity.ProjectWorkerGroup;
30+
import org.apache.dolphinscheduler.dao.entity.TaskDefinition;
2731
import org.apache.dolphinscheduler.dao.entity.User;
2832
import org.apache.dolphinscheduler.dao.entity.WorkerGroup;
2933
import org.apache.dolphinscheduler.dao.mapper.ProjectMapper;
@@ -33,6 +37,7 @@
3337
import org.apache.dolphinscheduler.dao.mapper.WorkerGroupMapper;
3438

3539
import java.util.ArrayList;
40+
import java.util.Collections;
3641
import java.util.List;
3742
import java.util.Map;
3843

@@ -77,27 +82,87 @@ public class ProjectWorkerGroupRelationServiceTest {
7782

7883
@Test
7984
public void testAssignWorkerGroupsToProject() {
85+
User generalUser = getGeneralUser();
8086
User loginUser = getAdminUser();
8187

88+
// no permission
89+
Result result = projectWorkerGroupRelationService.assignWorkerGroupsToProject(generalUser, projectCode,
90+
getWorkerGroups());
91+
Assertions.assertEquals(Status.USER_NO_OPERATION_PERM.getCode(), result.getCode());
92+
93+
// project code is null
94+
result = projectWorkerGroupRelationService.assignWorkerGroupsToProject(loginUser, null,
95+
getWorkerGroups());
96+
Assertions.assertEquals(Status.PROJECT_NOT_EXIST.getCode(), result.getCode());
97+
98+
// worker group is empty
99+
result = projectWorkerGroupRelationService.assignWorkerGroupsToProject(loginUser, projectCode,
100+
Collections.emptyList());
101+
Assertions.assertEquals(Status.WORKER_GROUP_TO_PROJECT_IS_EMPTY.getCode(), result.getCode());
102+
103+
// project not exists
82104
Mockito.when(projectMapper.queryByCode(projectCode)).thenReturn(null);
83-
Result result = projectWorkerGroupRelationService.assignWorkerGroupsToProject(loginUser, projectCode,
105+
result = projectWorkerGroupRelationService.assignWorkerGroupsToProject(loginUser, projectCode,
84106
getWorkerGroups());
85107
Assertions.assertEquals(Status.PROJECT_NOT_EXIST.getCode(), result.getCode());
86108

109+
// worker group not exists
87110
WorkerGroup workerGroup = new WorkerGroup();
88111
workerGroup.setName("test");
89112
Mockito.when(projectMapper.queryByCode(Mockito.anyLong())).thenReturn(getProject());
90-
Mockito.when(workerGroupMapper.queryAllWorkerGroup()).thenReturn(Lists.newArrayList(workerGroup));
113+
Mockito.when(workerGroupMapper.queryAllWorkerGroup()).thenReturn(Collections.singletonList(workerGroup));
114+
result = projectWorkerGroupRelationService.assignWorkerGroupsToProject(loginUser, projectCode,
115+
getDiffWorkerGroups());
116+
Assertions.assertEquals(Status.WORKER_GROUP_NOT_EXIST.getCode(), result.getCode());
117+
118+
// db insertion fail
119+
Mockito.when(workerGroupMapper.queryAllWorkerGroup()).thenReturn(Collections.singletonList(workerGroup));
120+
Mockito.when(projectWorkerGroupMapper.insert(Mockito.any())).thenReturn(-1);
121+
AssertionsHelper.assertThrowsServiceException(Status.ASSIGN_WORKER_GROUP_TO_PROJECT_ERROR,
122+
() -> projectWorkerGroupRelationService.assignWorkerGroupsToProject(loginUser, projectCode,
123+
getWorkerGroups()));
124+
125+
// success
91126
Mockito.when(projectWorkerGroupMapper.insert(Mockito.any())).thenReturn(1);
92127

93128
result = projectWorkerGroupRelationService.assignWorkerGroupsToProject(loginUser, projectCode,
94129
getWorkerGroups());
95130
Assertions.assertEquals(Status.SUCCESS.getCode(), result.getCode());
131+
132+
// success when there is diff between current wg and assigned wg
133+
Mockito.when(projectWorkerGroupMapper.selectList(Mockito.any()))
134+
.thenReturn(Collections.singletonList(getDiffProjectWorkerGroup()));
135+
Mockito.when(projectWorkerGroupMapper.delete(Mockito.any())).thenReturn(1);
136+
result = projectWorkerGroupRelationService.assignWorkerGroupsToProject(loginUser, projectCode,
137+
getWorkerGroups());
138+
Assertions.assertEquals(Status.SUCCESS.getCode(), result.getCode());
139+
140+
// db deletion fail
141+
Mockito.when(projectWorkerGroupMapper.delete(Mockito.any())).thenReturn(-1);
142+
AssertionsHelper.assertThrowsServiceException(Status.ASSIGN_WORKER_GROUP_TO_PROJECT_ERROR,
143+
() -> projectWorkerGroupRelationService.assignWorkerGroupsToProject(loginUser, projectCode,
144+
getWorkerGroups()));
145+
146+
// fail when wg is referenced by task definition
147+
Mockito.when(taskDefinitionMapper.queryAllDefinitionList(Mockito.anyLong()))
148+
.thenReturn(Collections.singletonList(getTaskDefinitionWithDiffWorkerGroup()));
149+
AssertionsHelper.assertThrowsServiceException(Status.USED_WORKER_GROUP_EXISTS,
150+
() -> projectWorkerGroupRelationService.assignWorkerGroupsToProject(loginUser, projectCode,
151+
getWorkerGroups()));
96152
}
97153

98154
@Test
99155
public void testQueryWorkerGroupsByProject() {
156+
// no permission
157+
Mockito.when(projectService.hasProjectAndPerm(Mockito.any(), Mockito.any(), Mockito.anyMap(), Mockito.any()))
158+
.thenReturn(false);
100159

160+
Map<String, Object> result =
161+
projectWorkerGroupRelationService.queryWorkerGroupsByProject(getGeneralUser(), projectCode);
162+
163+
Assertions.assertTrue(result.isEmpty());
164+
165+
// success
101166
Mockito.when(projectService.hasProjectAndPerm(Mockito.any(), Mockito.any(), Mockito.anyMap(), Mockito.any()))
102167
.thenReturn(true);
103168

@@ -113,8 +178,7 @@ public void testQueryWorkerGroupsByProject() {
113178
Mockito.when(scheduleMapper.querySchedulerListByProjectName(Mockito.any()))
114179
.thenReturn(Lists.newArrayList());
115180

116-
Map<String, Object> result =
117-
projectWorkerGroupRelationService.queryWorkerGroupsByProject(getGeneralUser(), projectCode);
181+
result = projectWorkerGroupRelationService.queryWorkerGroupsByProject(getGeneralUser(), projectCode);
118182

119183
ProjectWorkerGroup[] actualValue =
120184
((List<ProjectWorkerGroup>) result.get(Constants.DATA_LIST)).toArray(new ProjectWorkerGroup[0]);
@@ -126,20 +190,8 @@ private List<String> getWorkerGroups() {
126190
return Lists.newArrayList("default");
127191
}
128192

129-
private User getGeneralUser() {
130-
User loginUser = new User();
131-
loginUser.setUserType(UserType.GENERAL_USER);
132-
loginUser.setUserName("userName");
133-
loginUser.setId(1);
134-
return loginUser;
135-
}
136-
137-
private User getAdminUser() {
138-
User loginUser = new User();
139-
loginUser.setUserType(UserType.ADMIN_USER);
140-
loginUser.setUserName("userName");
141-
loginUser.setId(1);
142-
return loginUser;
193+
private List<String> getDiffWorkerGroups() {
194+
return Lists.newArrayList("default", "new");
143195
}
144196

145197
private Project getProject() {
@@ -158,4 +210,20 @@ private ProjectWorkerGroup getProjectWorkerGroup() {
158210
projectWorkerGroup.setWorkerGroup("default");
159211
return projectWorkerGroup;
160212
}
213+
214+
private ProjectWorkerGroup getDiffProjectWorkerGroup() {
215+
ProjectWorkerGroup projectWorkerGroup = new ProjectWorkerGroup();
216+
projectWorkerGroup.setId(2);
217+
projectWorkerGroup.setProjectCode(projectCode);
218+
projectWorkerGroup.setWorkerGroup("new");
219+
return projectWorkerGroup;
220+
}
221+
222+
private TaskDefinition getTaskDefinitionWithDiffWorkerGroup() {
223+
TaskDefinition taskDefinition = new TaskDefinition();
224+
taskDefinition.setProjectCode(projectCode);
225+
taskDefinition.setId(1);
226+
taskDefinition.setWorkerGroup("new");
227+
return taskDefinition;
228+
}
161229
}

0 commit comments

Comments
 (0)