1717
1818package 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 ;
2024import org .apache .dolphinscheduler .api .enums .Status ;
2125import org .apache .dolphinscheduler .api .service .impl .ProjectWorkerGroupRelationServiceImpl ;
2226import org .apache .dolphinscheduler .api .utils .Result ;
2327import org .apache .dolphinscheduler .common .constants .Constants ;
24- import org .apache .dolphinscheduler .common .enums .UserType ;
2528import org .apache .dolphinscheduler .dao .entity .Project ;
2629import org .apache .dolphinscheduler .dao .entity .ProjectWorkerGroup ;
30+ import org .apache .dolphinscheduler .dao .entity .TaskDefinition ;
2731import org .apache .dolphinscheduler .dao .entity .User ;
2832import org .apache .dolphinscheduler .dao .entity .WorkerGroup ;
2933import org .apache .dolphinscheduler .dao .mapper .ProjectMapper ;
3337import org .apache .dolphinscheduler .dao .mapper .WorkerGroupMapper ;
3438
3539import java .util .ArrayList ;
40+ import java .util .Collections ;
3641import java .util .List ;
3742import 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