|
|
|
@ -17,11 +17,18 @@
|
|
|
|
|
|
|
|
|
|
package org.apache.dolphinscheduler.api.service; |
|
|
|
|
|
|
|
|
|
import org.apache.dolphinscheduler.api.ApiApplicationServer; |
|
|
|
|
import static org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.WORKER_GROUP_CREATE; |
|
|
|
|
import static org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.WORKER_GROUP_DELETE; |
|
|
|
|
import static org.mockito.ArgumentMatchers.any; |
|
|
|
|
|
|
|
|
|
import org.apache.dolphinscheduler.api.enums.Status; |
|
|
|
|
import org.apache.dolphinscheduler.api.permission.ResourcePermissionCheckService; |
|
|
|
|
import org.apache.dolphinscheduler.api.service.impl.BaseServiceImpl; |
|
|
|
|
import org.apache.dolphinscheduler.api.service.impl.WorkerGroupServiceImpl; |
|
|
|
|
import org.apache.dolphinscheduler.api.utils.Result; |
|
|
|
|
import org.apache.dolphinscheduler.common.constants.Constants; |
|
|
|
|
import org.apache.dolphinscheduler.common.enums.ProfileType; |
|
|
|
|
import org.apache.dolphinscheduler.common.enums.AuthorizationType; |
|
|
|
|
import org.apache.dolphinscheduler.common.enums.NodeType; |
|
|
|
|
import org.apache.dolphinscheduler.common.enums.UserType; |
|
|
|
|
import org.apache.dolphinscheduler.dao.entity.ProcessInstance; |
|
|
|
|
import org.apache.dolphinscheduler.dao.entity.User; |
|
|
|
@ -32,95 +39,235 @@ import org.apache.dolphinscheduler.dao.mapper.WorkerGroupMapper;
|
|
|
|
|
import org.apache.dolphinscheduler.service.registry.RegistryClient; |
|
|
|
|
|
|
|
|
|
import java.util.ArrayList; |
|
|
|
|
import java.util.HashMap; |
|
|
|
|
import java.util.HashSet; |
|
|
|
|
import java.util.List; |
|
|
|
|
import java.util.Map; |
|
|
|
|
import java.util.Set; |
|
|
|
|
|
|
|
|
|
import org.junit.Assert; |
|
|
|
|
import org.junit.Before; |
|
|
|
|
import org.junit.Test; |
|
|
|
|
import org.junit.runner.RunWith; |
|
|
|
|
import org.junit.jupiter.api.Assertions; |
|
|
|
|
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.springframework.beans.factory.annotation.Autowired; |
|
|
|
|
import org.springframework.boot.test.context.SpringBootTest; |
|
|
|
|
import org.springframework.boot.test.mock.mockito.MockBean; |
|
|
|
|
import org.springframework.test.context.ActiveProfiles; |
|
|
|
|
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; |
|
|
|
|
|
|
|
|
|
@ActiveProfiles(value = {ProfileType.H2}) |
|
|
|
|
@RunWith(SpringJUnit4ClassRunner.class) |
|
|
|
|
@SpringBootTest(classes = ApiApplicationServer.class) |
|
|
|
|
import org.mockito.junit.jupiter.MockitoExtension; |
|
|
|
|
import org.mockito.junit.jupiter.MockitoSettings; |
|
|
|
|
import org.mockito.quality.Strictness; |
|
|
|
|
import org.slf4j.Logger; |
|
|
|
|
import org.slf4j.LoggerFactory; |
|
|
|
|
|
|
|
|
|
@ExtendWith(MockitoExtension.class) |
|
|
|
|
@MockitoSettings(strictness = Strictness.LENIENT) |
|
|
|
|
public class WorkerGroupServiceTest { |
|
|
|
|
|
|
|
|
|
@MockBean(name = "registryClient") |
|
|
|
|
private RegistryClient registryClient; |
|
|
|
|
private static final Logger logger = LoggerFactory.getLogger(WorkerGroupServiceTest.class); |
|
|
|
|
|
|
|
|
|
private static final Logger baseServiceLogger = LoggerFactory.getLogger(BaseServiceImpl.class); |
|
|
|
|
|
|
|
|
|
@Autowired |
|
|
|
|
private static final Logger serviceLogger = LoggerFactory.getLogger(WorkerGroupService.class); |
|
|
|
|
|
|
|
|
|
@InjectMocks |
|
|
|
|
private WorkerGroupServiceImpl workerGroupService; |
|
|
|
|
|
|
|
|
|
@MockBean(name = "workerGroupMapper") |
|
|
|
|
@Mock |
|
|
|
|
private WorkerGroupMapper workerGroupMapper; |
|
|
|
|
|
|
|
|
|
@MockBean(name = "processInstanceMapper") |
|
|
|
|
@Mock |
|
|
|
|
private ProcessInstanceMapper processInstanceMapper; |
|
|
|
|
|
|
|
|
|
private String groupName = "groupName000001"; |
|
|
|
|
@Mock |
|
|
|
|
private RegistryClient registryClient; |
|
|
|
|
|
|
|
|
|
@Mock |
|
|
|
|
private ResourcePermissionCheckService resourcePermissionCheckService; |
|
|
|
|
|
|
|
|
|
private User loginUSer; |
|
|
|
|
@Mock |
|
|
|
|
private EnvironmentWorkerGroupRelationMapper environmentWorkerGroupRelationMapper; |
|
|
|
|
|
|
|
|
|
@Before |
|
|
|
|
public void init(){ |
|
|
|
|
loginUSer = new User(); |
|
|
|
|
loginUSer.setUserType(UserType.ADMIN_USER); |
|
|
|
|
private final String GROUP_NAME = "testWorkerGroup"; |
|
|
|
|
|
|
|
|
|
private User getLoginUser() { |
|
|
|
|
User loginUser = new User(); |
|
|
|
|
loginUser.setUserType(UserType.GENERAL_USER); |
|
|
|
|
loginUser.setUserName("workerGroupTestUser"); |
|
|
|
|
loginUser.setId(1); |
|
|
|
|
return loginUser; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void giveNoPermission_whenSaveWorkerGroup_expectNoOperation() { |
|
|
|
|
User loginUser = getLoginUser(); |
|
|
|
|
Mockito.when(resourcePermissionCheckService.operationPermissionCheck(AuthorizationType.WORKER_GROUP, null, loginUser.getId(), |
|
|
|
|
WORKER_GROUP_CREATE, baseServiceLogger)).thenReturn(false); |
|
|
|
|
Mockito.when(resourcePermissionCheckService.resourcePermissionCheck(AuthorizationType.WORKER_GROUP, null, 1, |
|
|
|
|
baseServiceLogger)).thenReturn(false); |
|
|
|
|
Map<String, Object> result = |
|
|
|
|
workerGroupService.saveWorkerGroup(loginUser, 1, GROUP_NAME, "localhost:0000", "test group", ""); |
|
|
|
|
Assertions.assertEquals(Status.USER_NO_OPERATION_PERM.getCode(), |
|
|
|
|
((Status) result.get(Constants.STATUS)).getCode()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void giveNullName_whenSaveWorkerGroup_expectNAME_NULL() { |
|
|
|
|
User loginUser = getLoginUser(); |
|
|
|
|
Mockito.when(resourcePermissionCheckService.operationPermissionCheck(AuthorizationType.WORKER_GROUP, null, loginUser.getId(), |
|
|
|
|
WORKER_GROUP_CREATE, baseServiceLogger)).thenReturn(true); |
|
|
|
|
Mockito.when(resourcePermissionCheckService.resourcePermissionCheck(AuthorizationType.WORKER_GROUP, null, 1, |
|
|
|
|
baseServiceLogger)).thenReturn(true); |
|
|
|
|
Map<String, Object> result = |
|
|
|
|
workerGroupService.saveWorkerGroup(loginUser, 1, "", "localhost:0000", "test group", ""); |
|
|
|
|
Assertions.assertEquals(Status.NAME_NULL.getCode(), |
|
|
|
|
((Status) result.get(Constants.STATUS)).getCode()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void giveSameUserName_whenSaveWorkerGroup_expectNAME_EXIST() { |
|
|
|
|
User loginUser = getLoginUser(); |
|
|
|
|
Mockito.when(resourcePermissionCheckService.operationPermissionCheck(AuthorizationType.WORKER_GROUP, null, loginUser.getId(), |
|
|
|
|
WORKER_GROUP_CREATE, baseServiceLogger)).thenReturn(true); |
|
|
|
|
Mockito.when(resourcePermissionCheckService.resourcePermissionCheck(AuthorizationType.WORKER_GROUP, null, 1, |
|
|
|
|
baseServiceLogger)).thenReturn(true); |
|
|
|
|
Mockito.when(workerGroupMapper.selectById(1)).thenReturn(null); |
|
|
|
|
List<WorkerGroup> workerGroupList = new ArrayList<WorkerGroup>(); |
|
|
|
|
workerGroupList.add(getWorkerGroup(1)); |
|
|
|
|
Mockito.when(workerGroupMapper.queryWorkerGroupByName(GROUP_NAME)).thenReturn(workerGroupList); |
|
|
|
|
|
|
|
|
|
Map<String, Object> result = |
|
|
|
|
workerGroupService.saveWorkerGroup(loginUser, 1, GROUP_NAME, "localhost:0000", "test group", ""); |
|
|
|
|
Assertions.assertEquals(Status.NAME_EXIST.getCode(), |
|
|
|
|
((Status) result.get(Constants.STATUS)).getCode()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void giveInvalidAddress_whenSaveWorkerGroup_expectADDRESS_INVALID() { |
|
|
|
|
User loginUser = getLoginUser(); |
|
|
|
|
Mockito.when(resourcePermissionCheckService.operationPermissionCheck(AuthorizationType.WORKER_GROUP, null, loginUser.getId(), |
|
|
|
|
WORKER_GROUP_CREATE, baseServiceLogger)).thenReturn(true); |
|
|
|
|
Mockito.when(resourcePermissionCheckService.resourcePermissionCheck(AuthorizationType.WORKER_GROUP, null, 1, |
|
|
|
|
baseServiceLogger)).thenReturn(true); |
|
|
|
|
Mockito.when(workerGroupMapper.selectById(1)).thenReturn(null); |
|
|
|
|
Mockito.when(workerGroupMapper.queryWorkerGroupByName(GROUP_NAME)).thenReturn(null); |
|
|
|
|
Map<String, String> serverMaps = new HashMap<>(); |
|
|
|
|
serverMaps.put("localhost1:0000", ""); |
|
|
|
|
Mockito.when(registryClient.getServerMaps(NodeType.WORKER)).thenReturn(serverMaps); |
|
|
|
|
|
|
|
|
|
Map<String, Object> result = |
|
|
|
|
workerGroupService.saveWorkerGroup(loginUser, 1, GROUP_NAME, "localhost:0000", "test group", ""); |
|
|
|
|
Assertions.assertEquals(Status.WORKER_ADDRESS_INVALID.getCode(), |
|
|
|
|
((Status) result.get(Constants.STATUS)).getCode()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void giveValidWorkerGroup_whenSaveWorkerGroup_expectSuccess() { |
|
|
|
|
User loginUser = getLoginUser(); |
|
|
|
|
Mockito.when(resourcePermissionCheckService.operationPermissionCheck(AuthorizationType.WORKER_GROUP, null, loginUser.getId(), |
|
|
|
|
WORKER_GROUP_CREATE, baseServiceLogger)).thenReturn(true); |
|
|
|
|
Mockito.when(resourcePermissionCheckService.resourcePermissionCheck(AuthorizationType.WORKER_GROUP, null, 1, |
|
|
|
|
baseServiceLogger)).thenReturn(true); |
|
|
|
|
|
|
|
|
|
Mockito.when(workerGroupMapper.selectById(1)).thenReturn(null); |
|
|
|
|
Mockito.when(workerGroupMapper.queryWorkerGroupByName(GROUP_NAME)).thenReturn(null); |
|
|
|
|
Map<String, String> serverMaps = new HashMap<>(); |
|
|
|
|
serverMaps.put("localhost:0000", ""); |
|
|
|
|
Mockito.when(registryClient.getServerMaps(NodeType.WORKER)).thenReturn(serverMaps); |
|
|
|
|
Mockito.when(workerGroupMapper.insert(any())).thenReturn(1); |
|
|
|
|
|
|
|
|
|
Map<String, Object> result = |
|
|
|
|
workerGroupService.saveWorkerGroup(loginUser, 1, GROUP_NAME, "localhost:0000", "test group", ""); |
|
|
|
|
Assertions.assertEquals(Status.SUCCESS.getCode(), |
|
|
|
|
((Status) result.get(Constants.STATUS)).getCode()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void giveValidParams_whenQueryAllGroupPaging_expectSuccess() { |
|
|
|
|
User loginUser = getLoginUser(); |
|
|
|
|
Set<Integer> ids = new HashSet<>(); |
|
|
|
|
ids.add(1); |
|
|
|
|
List<WorkerGroup> workerGroups = new ArrayList<>(); |
|
|
|
|
workerGroups.add(getWorkerGroup(1)); |
|
|
|
|
Mockito.when(resourcePermissionCheckService.userOwnedResourceIdsAcquisition(AuthorizationType.WORKER_GROUP, |
|
|
|
|
loginUser.getId(), serviceLogger)).thenReturn(ids); |
|
|
|
|
Mockito.when(workerGroupMapper.selectBatchIds(ids)).thenReturn(workerGroups); |
|
|
|
|
Set<String> activeWorkerNodes = new HashSet<>(); |
|
|
|
|
activeWorkerNodes.add("localhost:12345"); |
|
|
|
|
activeWorkerNodes.add("localhost:23456"); |
|
|
|
|
Mockito.when(registryClient.getServerNodeSet(NodeType.WORKER)).thenReturn(activeWorkerNodes); |
|
|
|
|
|
|
|
|
|
Result result = workerGroupService.queryAllGroupPaging(loginUser, 1, 1, null); |
|
|
|
|
Assertions.assertEquals(result.getCode(), Status.SUCCESS.getCode()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void testQueryAllGroup() { |
|
|
|
|
Map<String, Object> result = workerGroupService.queryAllGroup(loginUSer); |
|
|
|
|
Map<String, Object> result = workerGroupService.queryAllGroup(getLoginUser()); |
|
|
|
|
List<String> workerGroups = (List<String>) result.get(Constants.DATA_LIST); |
|
|
|
|
Assert.assertEquals(workerGroups.size(), 1); |
|
|
|
|
Assertions.assertEquals(workerGroups.size(), 1); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* delete group by id |
|
|
|
|
*/ |
|
|
|
|
@Test |
|
|
|
|
public void testDeleteWorkerGroupById() { |
|
|
|
|
User user = new User(); |
|
|
|
|
user.setId(1); |
|
|
|
|
user.setUserType(UserType.ADMIN_USER); |
|
|
|
|
WorkerGroup wg2 = getWorkerGroup(2); |
|
|
|
|
Mockito.when(workerGroupMapper.selectById(2)).thenReturn(wg2); |
|
|
|
|
Mockito.when(processInstanceMapper.queryByWorkerGroupNameAndStatus(wg2.getName(), org.apache.dolphinscheduler.service.utils.Constants.NOT_TERMINATED_STATES)).thenReturn(getProcessInstanceList()); |
|
|
|
|
Map<String, Object> result = workerGroupService.deleteWorkerGroupById(user, 1); |
|
|
|
|
Assert.assertEquals(Status.DELETE_WORKER_GROUP_NOT_EXIST.getCode(), ((Status) result.get(Constants.STATUS)).getCode()); |
|
|
|
|
result = workerGroupService.deleteWorkerGroupById(user, 2); |
|
|
|
|
Assert.assertEquals(Status.DELETE_WORKER_GROUP_BY_ID_FAIL.getCode(), ((Status) result.get(Constants.STATUS)).getCode()); |
|
|
|
|
// correct
|
|
|
|
|
WorkerGroup wg3 = getWorkerGroup(3); |
|
|
|
|
Mockito.when(workerGroupMapper.selectById(3)).thenReturn(wg3); |
|
|
|
|
Mockito.when(processInstanceMapper.queryByWorkerGroupNameAndStatus(wg3.getName(), org.apache.dolphinscheduler.service.utils.Constants.NOT_TERMINATED_STATES)).thenReturn(new ArrayList<>()); |
|
|
|
|
result = workerGroupService.deleteWorkerGroupById(user, 3); |
|
|
|
|
Assert.assertEquals(Status.SUCCESS.getMsg(), result.get(Constants.MSG)); |
|
|
|
|
public void giveNotExistsWorkerGroup_whenDeleteWorkerGroupById_expectNotExists() { |
|
|
|
|
User loginUser = getLoginUser(); |
|
|
|
|
Mockito.when(resourcePermissionCheckService.operationPermissionCheck(AuthorizationType.WORKER_GROUP, null, loginUser.getId(), |
|
|
|
|
WORKER_GROUP_DELETE, baseServiceLogger)).thenReturn(true); |
|
|
|
|
Mockito.when(resourcePermissionCheckService.resourcePermissionCheck(AuthorizationType.WORKER_GROUP, null, 1, |
|
|
|
|
baseServiceLogger)).thenReturn(true); |
|
|
|
|
Mockito.when(workerGroupMapper.selectById(1)).thenReturn(null); |
|
|
|
|
|
|
|
|
|
Map<String, Object> notExistResult = workerGroupService.deleteWorkerGroupById(loginUser, 1); |
|
|
|
|
Assertions.assertEquals(Status.DELETE_WORKER_GROUP_NOT_EXIST.getCode(), |
|
|
|
|
((Status) notExistResult.get(Constants.STATUS)).getCode()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* get processInstances |
|
|
|
|
*/ |
|
|
|
|
private List<ProcessInstance> getProcessInstanceList() { |
|
|
|
|
List<ProcessInstance> processInstances = new ArrayList<>(); |
|
|
|
|
processInstances.add(new ProcessInstance()); |
|
|
|
|
return processInstances; |
|
|
|
|
@Test |
|
|
|
|
public void giveRunningProcess_whenDeleteWorkerGroupById_expectFailed() { |
|
|
|
|
User loginUser = getLoginUser(); |
|
|
|
|
Mockito.when(resourcePermissionCheckService.operationPermissionCheck(AuthorizationType.WORKER_GROUP, null, loginUser.getId(), |
|
|
|
|
WORKER_GROUP_DELETE, baseServiceLogger)).thenReturn(true); |
|
|
|
|
Mockito.when(resourcePermissionCheckService.resourcePermissionCheck(AuthorizationType.WORKER_GROUP, null, 1, |
|
|
|
|
baseServiceLogger)).thenReturn(true); |
|
|
|
|
WorkerGroup workerGroup = getWorkerGroup(1); |
|
|
|
|
Mockito.when(workerGroupMapper.selectById(1)).thenReturn(workerGroup); |
|
|
|
|
ProcessInstance processInstance = new ProcessInstance(); |
|
|
|
|
processInstance.setId(1); |
|
|
|
|
List<ProcessInstance> processInstances = new ArrayList<ProcessInstance>(); |
|
|
|
|
processInstances.add(processInstance); |
|
|
|
|
Mockito.when(processInstanceMapper.queryByWorkerGroupNameAndStatus(workerGroup.getName(), |
|
|
|
|
org.apache.dolphinscheduler.service.utils.Constants.NOT_TERMINATED_STATES)) |
|
|
|
|
.thenReturn(processInstances); |
|
|
|
|
|
|
|
|
|
Map<String, Object> deleteFailed = workerGroupService.deleteWorkerGroupById(loginUser, 1); |
|
|
|
|
Assertions.assertEquals(Status.DELETE_WORKER_GROUP_BY_ID_FAIL.getCode(), |
|
|
|
|
((Status) deleteFailed.get(Constants.STATUS)).getCode()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void giveValidParams_whenDeleteWorkerGroupById_expectSuccess() { |
|
|
|
|
User loginUser = getLoginUser(); |
|
|
|
|
Mockito.when(resourcePermissionCheckService.operationPermissionCheck(AuthorizationType.WORKER_GROUP, null, loginUser.getId(), |
|
|
|
|
WORKER_GROUP_DELETE, baseServiceLogger)).thenReturn(true); |
|
|
|
|
Mockito.when(resourcePermissionCheckService.resourcePermissionCheck(AuthorizationType.WORKER_GROUP, null, 1, |
|
|
|
|
baseServiceLogger)).thenReturn(true); |
|
|
|
|
WorkerGroup workerGroup = getWorkerGroup(1); |
|
|
|
|
Mockito.when(workerGroupMapper.selectById(1)).thenReturn(workerGroup); |
|
|
|
|
Mockito.when(processInstanceMapper.queryByWorkerGroupNameAndStatus(workerGroup.getName(), |
|
|
|
|
org.apache.dolphinscheduler.service.utils.Constants.NOT_TERMINATED_STATES)).thenReturn(null); |
|
|
|
|
Mockito.when(workerGroupMapper.deleteById(1)).thenReturn(1); |
|
|
|
|
Mockito.when(processInstanceMapper.updateProcessInstanceByWorkerGroupName(workerGroup.getName(), "")) |
|
|
|
|
.thenReturn(1); |
|
|
|
|
Mockito.when(environmentWorkerGroupRelationMapper.queryByWorkerGroupName(workerGroup.getName())) |
|
|
|
|
.thenReturn(null); |
|
|
|
|
Map<String, Object> successResult = workerGroupService.deleteWorkerGroupById(loginUser, 1); |
|
|
|
|
Assertions.assertEquals(Status.SUCCESS.getCode(), |
|
|
|
|
((Status) successResult.get(Constants.STATUS)).getCode()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void testQueryAllGroupWithDefault() { |
|
|
|
|
Map<String, Object> result = workerGroupService.queryAllGroup(loginUSer); |
|
|
|
|
Map<String, Object> result = workerGroupService.queryAllGroup(getLoginUser()); |
|
|
|
|
List<String> workerGroups = (List<String>) result.get(Constants.DATA_LIST); |
|
|
|
|
Assert.assertEquals(1, workerGroups.size()); |
|
|
|
|
Assert.assertEquals("default", workerGroups.toArray()[0]); |
|
|
|
|
Assertions.assertEquals(1, workerGroups.size()); |
|
|
|
|
Assertions.assertEquals("default", workerGroups.toArray()[0]); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
@ -128,19 +275,9 @@ public class WorkerGroupServiceTest {
|
|
|
|
|
*/ |
|
|
|
|
private WorkerGroup getWorkerGroup(int id) { |
|
|
|
|
WorkerGroup workerGroup = new WorkerGroup(); |
|
|
|
|
workerGroup.setName(groupName); |
|
|
|
|
workerGroup.setName(GROUP_NAME); |
|
|
|
|
workerGroup.setId(id); |
|
|
|
|
return workerGroup; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private WorkerGroup getWorkerGroup() { |
|
|
|
|
return getWorkerGroup(1); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private List<WorkerGroup> getList() { |
|
|
|
|
List<WorkerGroup> list = new ArrayList<>(); |
|
|
|
|
list.add(getWorkerGroup()); |
|
|
|
|
return list; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|