diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessDefinitionServiceImpl.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessDefinitionServiceImpl.java index e40fdfad30c232f4077f698f53d60891372b7554..2c2bb3b7622bb37025930cea6b9745f11a25e37a 100644 --- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessDefinitionServiceImpl.java +++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessDefinitionServiceImpl.java @@ -14,27 +14,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package org.apache.dolphinscheduler.api.service.impl; import static org.apache.dolphinscheduler.common.Constants.CMDPARAM_SUB_PROCESS_DEFINE_ID; -import java.io.BufferedOutputStream; -import java.io.IOException; -import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Date; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; -import java.util.stream.Collectors; -import javax.servlet.ServletOutputStream; -import javax.servlet.http.HttpServletResponse; import org.apache.dolphinscheduler.api.dto.ProcessMeta; import org.apache.dolphinscheduler.api.dto.treeview.Instance; import org.apache.dolphinscheduler.api.dto.treeview.TreeViewDto; @@ -85,6 +69,26 @@ import org.apache.dolphinscheduler.dao.mapper.TaskInstanceMapper; import org.apache.dolphinscheduler.dao.utils.DagHelper; import org.apache.dolphinscheduler.service.permission.PermissionCheck; import org.apache.dolphinscheduler.service.process.ProcessService; + +import java.io.BufferedOutputStream; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Date; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.stream.Collectors; + +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletResponse; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -92,6 +96,7 @@ import org.springframework.http.MediaType; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; + import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.fasterxml.jackson.core.JsonProcessingException; @@ -100,11 +105,11 @@ import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.ObjectNode; /** - * process definition service + * process definition service impl */ @Service public class ProcessDefinitionServiceImpl extends BaseService implements - ProcessDefinitionService { + ProcessDefinitionService { private static final Logger logger = LoggerFactory.getLogger(ProcessDefinitionServiceImpl.class); @@ -138,13 +143,13 @@ public class ProcessDefinitionServiceImpl extends BaseService implements /** * create process definition * - * @param loginUser login user - * @param projectName project name - * @param name process definition name + * @param loginUser login user + * @param projectName project name + * @param name process definition name * @param processDefinitionJson process definition json - * @param desc description - * @param locations locations for nodes - * @param connects connects for nodes + * @param desc description + * @param locations locations for nodes + * @param connects connects for nodes * @return create result code * @throws JsonProcessingException JsonProcessingException */ @@ -156,7 +161,7 @@ public class ProcessDefinitionServiceImpl extends BaseService implements String locations, String connects) throws JsonProcessingException { - Map result = new HashMap<>(5); + Map result = new HashMap<>(); Project project = projectMapper.queryByName(projectName); // check project auth Map checkResult = projectService.checkProjectAndAuth(loginUser, project, projectName); @@ -238,13 +243,13 @@ public class ProcessDefinitionServiceImpl extends BaseService implements /** * query process definition list * - * @param loginUser login user + * @param loginUser login user * @param projectName project name * @return definition list */ public Map queryProcessDefinitionList(User loginUser, String projectName) { - HashMap result = new HashMap<>(5); + HashMap result = new HashMap<>(); Project project = projectMapper.queryByName(projectName); Map checkResult = projectService.checkProjectAndAuth(loginUser, project, projectName); @@ -264,17 +269,17 @@ public class ProcessDefinitionServiceImpl extends BaseService implements /** * query process definition list paging * - * @param loginUser login user + * @param loginUser login user * @param projectName project name - * @param searchVal search value - * @param pageNo page number - * @param pageSize page size - * @param userId user id + * @param searchVal search value + * @param pageNo page number + * @param pageSize page size + * @param userId user id * @return process definition page */ public Map queryProcessDefinitionListPaging(User loginUser, String projectName, String searchVal, Integer pageNo, Integer pageSize, Integer userId) { - Map result = new HashMap<>(5); + Map result = new HashMap<>(); Project project = projectMapper.queryByName(projectName); Map checkResult = projectService.checkProjectAndAuth(loginUser, project, projectName); @@ -283,11 +288,11 @@ public class ProcessDefinitionServiceImpl extends BaseService implements return checkResult; } - Page page = new Page(pageNo, pageSize); + Page page = new Page<>(pageNo, pageSize); IPage processDefinitionIPage = processDefineMapper.queryDefineListPaging( page, searchVal, userId, project.getId(), isAdmin(loginUser)); - PageInfo pageInfo = new PageInfo(pageNo, pageSize); + PageInfo pageInfo = new PageInfo<>(pageNo, pageSize); pageInfo.setTotalCount((int) processDefinitionIPage.getTotal()); pageInfo.setLists(processDefinitionIPage.getRecords()); result.put(Constants.DATA_LIST, pageInfo); @@ -299,15 +304,15 @@ public class ProcessDefinitionServiceImpl extends BaseService implements /** * query datail of process definition * - * @param loginUser login user + * @param loginUser login user * @param projectName project name - * @param processId process definition id + * @param processId process definition id * @return process definition detail */ public Map queryProcessDefinitionById(User loginUser, String projectName, Integer processId) { - Map result = new HashMap<>(5); + Map result = new HashMap<>(); Project project = projectMapper.queryByName(projectName); Map checkResult = projectService.checkProjectAndAuth(loginUser, project, projectName); @@ -329,20 +334,20 @@ public class ProcessDefinitionServiceImpl extends BaseService implements /** * update process definition * - * @param loginUser login user - * @param projectName project name - * @param name process definition name - * @param id process definition id + * @param loginUser login user + * @param projectName project name + * @param name process definition name + * @param id process definition id * @param processDefinitionJson process definition json - * @param desc description - * @param locations locations for nodes - * @param connects connects for nodes + * @param desc description + * @param locations locations for nodes + * @param connects connects for nodes * @return update result code */ public Map updateProcessDefinition(User loginUser, String projectName, int id, String name, String processDefinitionJson, String desc, String locations, String connects) { - Map result = new HashMap<>(5); + Map result = new HashMap<>(); Project project = projectMapper.queryByName(projectName); Map checkResult = projectService.checkProjectAndAuth(loginUser, project, projectName); @@ -405,9 +410,9 @@ public class ProcessDefinitionServiceImpl extends BaseService implements /** * verify process definition name unique * - * @param loginUser login user + * @param loginUser login user * @param projectName project name - * @param name name + * @param name name * @return true if process definition name not exists, otherwise false */ public Map verifyProcessDefinitionName(User loginUser, String projectName, String name) { @@ -432,15 +437,15 @@ public class ProcessDefinitionServiceImpl extends BaseService implements /** * delete process definition by id * - * @param loginUser login user - * @param projectName project name + * @param loginUser login user + * @param projectName project name * @param processDefinitionId process definition id * @return delete result code */ @Transactional(rollbackFor = RuntimeException.class) public Map deleteProcessDefinitionById(User loginUser, String projectName, Integer processDefinitionId) { - Map result = new HashMap<>(5); + Map result = new HashMap<>(); Project project = projectMapper.queryByName(projectName); Map checkResult = projectService.checkProjectAndAuth(loginUser, project, projectName); @@ -497,9 +502,9 @@ public class ProcessDefinitionServiceImpl extends BaseService implements /** * release process definition: online / offline * - * @param loginUser login user - * @param projectName project name - * @param id process definition id + * @param loginUser login user + * @param projectName project name + * @param id process definition id * @param releaseState release state * @return release result code */ @@ -569,11 +574,6 @@ public class ProcessDefinitionServiceImpl extends BaseService implements /** * batch export process definition by ids - * - * @param loginUser - * @param projectName - * @param processDefinitionIds - * @param response */ public void batchExportProcessDefinitionByIds(User loginUser, String projectName, String processDefinitionIds, HttpServletResponse response) { @@ -602,9 +602,6 @@ public class ProcessDefinitionServiceImpl extends BaseService implements /** * get process definition list by ids - * - * @param processDefinitionIds - * @return */ private List getProcessDefinitionList(String processDefinitionIds) { List processDefinitionList = new ArrayList<>(); @@ -623,9 +620,6 @@ public class ProcessDefinitionServiceImpl extends BaseService implements /** * download the process definition file - * - * @param response - * @param processDefinitionList */ private void downloadProcessDefinitionFile(HttpServletResponse response, List processDefinitionList) { response.setContentType(MediaType.APPLICATION_JSON_UTF8_VALUE); @@ -661,19 +655,7 @@ public class ProcessDefinitionServiceImpl extends BaseService implements * get export process metadata string * * @param processDefinitionId process definition id - * @param processDefinition process definition - * @return export process metadata string - */ - private String exportProcessMetaDataStr(Integer processDefinitionId, ProcessDefinition processDefinition) { - //create workflow json file - return JSONUtils.toJsonString(exportProcessMetaData(processDefinitionId, processDefinition)); - } - - /** - * get export process metadata string - * - * @param processDefinitionId process definition id - * @param processDefinition process definition + * @param processDefinition process definition * @return export process metadata string */ public ProcessMeta exportProcessMetaData(Integer processDefinitionId, ProcessDefinition processDefinition) { @@ -745,16 +727,16 @@ public class ProcessDefinitionServiceImpl extends BaseService implements /** * import process definition * - * @param loginUser login user - * @param file process metadata json file + * @param loginUser login user + * @param file process metadata json file * @param currentProjectName current project name * @return import process */ @Transactional(rollbackFor = RuntimeException.class) public Map importProcessDefinition(User loginUser, MultipartFile file, String currentProjectName) { - Map result = new HashMap<>(5); + Map result = new HashMap<>(); String processMetaJson = FileUtils.file2String(file); - List processMetaList = JSONUtils.toList(processMetaJson, ProcessMeta.class); + List processMetaList = JSONUtils.toList(processMetaJson, ProcessMeta.class); //check file content if (CollectionUtils.isEmpty(processMetaList)) { @@ -774,12 +756,6 @@ public class ProcessDefinitionServiceImpl extends BaseService implements /** * check and import process definition - * - * @param loginUser - * @param currentProjectName - * @param result - * @param processMeta - * @return */ private boolean checkAndImportProcessDefinition(User loginUser, String currentProjectName, Map result, ProcessMeta processMeta) { @@ -821,8 +797,8 @@ public class ProcessDefinitionServiceImpl extends BaseService implements //create process definition Integer processDefinitionId = - Objects.isNull(createProcessResult.get(PROCESSDEFINITIONID)) ? - null : Integer.parseInt(createProcessResult.get(PROCESSDEFINITIONID).toString()); + Objects.isNull(createProcessResult.get(PROCESSDEFINITIONID)) + ? null : Integer.parseInt(createProcessResult.get(PROCESSDEFINITIONID).toString()); //scheduler param return getImportProcessScheduleResult(loginUser, @@ -836,14 +812,6 @@ public class ProcessDefinitionServiceImpl extends BaseService implements /** * get create process result - * - * @param loginUser - * @param currentProjectName - * @param result - * @param processMeta - * @param processDefinitionName - * @param importProcessParam - * @return */ private Map getCreateProcessResult(User loginUser, String currentProjectName, @@ -871,14 +839,6 @@ public class ProcessDefinitionServiceImpl extends BaseService implements /** * get import process schedule result - * - * @param loginUser - * @param currentProjectName - * @param result - * @param processMeta - * @param processDefinitionName - * @param processDefinitionId - * @return */ private boolean getImportProcessScheduleResult(User loginUser, String currentProjectName, @@ -903,10 +863,6 @@ public class ProcessDefinitionServiceImpl extends BaseService implements /** * check importance params - * - * @param processMeta - * @param result - * @return */ private boolean checkImportanceParams(ProcessMeta processMeta, Map result) { if (StringUtils.isEmpty(processMeta.getProjectName())) { @@ -924,12 +880,13 @@ public class ProcessDefinitionServiceImpl extends BaseService implements return true; } + /** * import process add special task param * - * @param loginUser login user + * @param loginUser login user * @param processDefinitionJson process definition json - * @param targetProject target project + * @param targetProject target project * @return import process param */ private String addImportTaskNodeParam(User loginUser, String processDefinitionJson, Project targetProject) { @@ -946,7 +903,7 @@ public class ProcessDefinitionServiceImpl extends BaseService implements } //recursive sub-process parameter correction map key for old process id value for new process id - Map subProcessIdMap = new HashMap<>(20); + Map subProcessIdMap = new HashMap<>(); List subProcessList = StreamUtils.asStream(jsonArray.elements()) .filter(elem -> checkTaskHasSubProcess(JSONUtils.parseObject(elem.toString()).path("type").asText())) @@ -963,11 +920,11 @@ public class ProcessDefinitionServiceImpl extends BaseService implements /** * import process schedule * - * @param loginUser login user - * @param currentProjectName current project name - * @param processMeta process meta data + * @param loginUser login user + * @param currentProjectName current project name + * @param processMeta process meta data * @param processDefinitionName process definition name - * @param processDefinitionId process definition id + * @param processDefinitionId process definition id * @return insert schedule flag */ public int importProcessSchedule(User loginUser, String currentProjectName, ProcessMeta processMeta, @@ -1017,9 +974,9 @@ public class ProcessDefinitionServiceImpl extends BaseService implements * check import process has sub process * recursion create sub process * - * @param loginUser login user - * @param targetProject target project - * @param jsonArray process task array + * @param loginUser login user + * @param targetProject target project + * @param jsonArray process task array * @param subProcessIdMap correct sub process id map */ private void importSubProcess(User loginUser, Project targetProject, ArrayNode jsonArray, Map subProcessIdMap) { @@ -1105,13 +1062,13 @@ public class ProcessDefinitionServiceImpl extends BaseService implements /** * check the process definition node meets the specifications * - * @param processData process data + * @param processData process data * @param processDefinitionJson process definition json * @return check result code */ public Map checkProcessNodeList(ProcessData processData, String processDefinitionJson) { - Map result = new HashMap<>(5); + Map result = new HashMap<>(); try { if (processData == null) { logger.error("process data is null"); @@ -1206,7 +1163,7 @@ public class ProcessDefinitionServiceImpl extends BaseService implements for (String definitionId : idList) { idIntList.add(Integer.parseInt(definitionId)); } - Integer[] idArray = idIntList.toArray(new Integer[idIntList.size()]); + Integer[] idArray = idIntList.toArray(new Integer[0]); List processDefinitionList = processDefineMapper.queryDefinitionListByIdList(idArray); if (CollectionUtils.isEmpty(processDefinitionList)) { logger.info("process definition not exists"); @@ -1237,7 +1194,7 @@ public class ProcessDefinitionServiceImpl extends BaseService implements */ public Map queryProcessDefinitionAllByProjectId(Integer projectId) { - HashMap result = new HashMap<>(5); + HashMap result = new HashMap<>(); List resourceList = processDefineMapper.queryAllDefinitionList(projectId); result.put(Constants.DATA_LIST, resourceList); @@ -1250,7 +1207,7 @@ public class ProcessDefinitionServiceImpl extends BaseService implements * Encapsulates the TreeView structure * * @param processId process definition id - * @param limit limit + * @param limit limit * @return tree view json data * @throws Exception exception */ @@ -1474,17 +1431,17 @@ public class ProcessDefinitionServiceImpl extends BaseService implements /** * batch copy process definition + * * @param loginUser loginUser * @param projectName projectName * @param processDefinitionIds processDefinitionIds * @param targetProjectId targetProjectId - * @return */ @Override public Map batchCopyProcessDefinition(User loginUser, String projectName, String processDefinitionIds, - int targetProjectId){ + int targetProjectId) { Map result = new HashMap<>(); List failedProcessList = new ArrayList<>(); @@ -1500,12 +1457,12 @@ public class ProcessDefinitionServiceImpl extends BaseService implements } Project targetProject = projectMapper.queryDetailById(targetProjectId); - if(targetProject == null){ + if (targetProject == null) { putMsg(result, Status.PROJECT_NOT_FOUNT, targetProjectId); return result; } - if(!(targetProject.getName()).equals(projectName)){ + if (!(targetProject.getName()).equals(projectName)) { Map checkTargetProjectResult = checkProjectAndAuth(loginUser, targetProject.getName()); if (checkTargetProjectResult != null) { return checkTargetProjectResult; @@ -1515,18 +1472,18 @@ public class ProcessDefinitionServiceImpl extends BaseService implements String[] processDefinitionIdList = processDefinitionIds.split(Constants.COMMA); doBatchCopyProcessDefinition(loginUser, targetProject, failedProcessList, processDefinitionIdList); - checkBatchOperateResult(projectName,targetProject.getName(),result,failedProcessList,true); + checkBatchOperateResult(projectName, targetProject.getName(), result, failedProcessList, true); return result; } /** * batch move process definition + * * @param loginUser loginUser * @param projectName projectName * @param processDefinitionIds processDefinitionIds * @param targetProjectId targetProjectId - * @return */ @Override public Map batchMoveProcessDefinition(User loginUser, @@ -1546,14 +1503,14 @@ public class ProcessDefinitionServiceImpl extends BaseService implements putMsg(result, Status.PROCESS_DEFINITION_IDS_IS_EMPTY, processDefinitionIds); return result; } - + Project targetProject = projectMapper.queryDetailById(targetProjectId); - if(targetProject == null){ + if (targetProject == null) { putMsg(result, Status.PROJECT_NOT_FOUNT, targetProjectId); return result; } - if(!(targetProject.getName()).equals(projectName)){ + if (!(targetProject.getName()).equals(projectName)) { Map checkTargetProjectResult = checkProjectAndAuth(loginUser, targetProject.getName()); if (checkTargetProjectResult != null) { return checkTargetProjectResult; @@ -1563,22 +1520,23 @@ public class ProcessDefinitionServiceImpl extends BaseService implements String[] processDefinitionIdList = processDefinitionIds.split(Constants.COMMA); doBatchMoveProcessDefinition(targetProject, failedProcessList, processDefinitionIdList); - checkBatchOperateResult(projectName,targetProject.getName(),result,failedProcessList,false); + checkBatchOperateResult(projectName, targetProject.getName(), result, failedProcessList, false); return result; } /** * do batch move process definition + * * @param targetProject targetProject * @param failedProcessList failedProcessList * @param processDefinitionIdList processDefinitionIdList */ private void doBatchMoveProcessDefinition(Project targetProject, List failedProcessList, String[] processDefinitionIdList) { - for(String processDefinitionId:processDefinitionIdList){ + for (String processDefinitionId : processDefinitionIdList) { try { Map moveProcessDefinitionResult = - moveProcessDefinition(Integer.valueOf(processDefinitionId),targetProject); + moveProcessDefinition(Integer.valueOf(processDefinitionId), targetProject); if (!Status.SUCCESS.equals(moveProcessDefinitionResult.get(Constants.STATUS))) { setFailedProcessList(failedProcessList, processDefinitionId); logger.error((String) moveProcessDefinitionResult.get(Constants.MSG)); @@ -1591,16 +1549,17 @@ public class ProcessDefinitionServiceImpl extends BaseService implements /** * batch copy process definition + * * @param loginUser loginUser * @param targetProject targetProject * @param failedProcessList failedProcessList * @param processDefinitionIdList processDefinitionIdList */ private void doBatchCopyProcessDefinition(User loginUser, Project targetProject, List failedProcessList, String[] processDefinitionIdList) { - for(String processDefinitionId:processDefinitionIdList){ + for (String processDefinitionId : processDefinitionIdList) { try { Map copyProcessDefinitionResult = - copyProcessDefinition(loginUser,Integer.valueOf(processDefinitionId),targetProject); + copyProcessDefinition(loginUser, Integer.valueOf(processDefinitionId), targetProject); if (!Status.SUCCESS.equals(copyProcessDefinitionResult.get(Constants.STATUS))) { setFailedProcessList(failedProcessList, processDefinitionId); logger.error((String) copyProcessDefinitionResult.get(Constants.MSG)); @@ -1613,23 +1572,24 @@ public class ProcessDefinitionServiceImpl extends BaseService implements /** * set failed processList + * * @param failedProcessList failedProcessList * @param processDefinitionId processDefinitionId */ private void setFailedProcessList(List failedProcessList, String processDefinitionId) { ProcessDefinition processDefinition = processDefineMapper.queryByDefineId(Integer.valueOf(processDefinitionId)); - if(processDefinition != null){ - failedProcessList.add(processDefinitionId+"["+processDefinition.getName()+"]"); - }else{ - failedProcessList.add(processDefinitionId+"[null]"); + if (processDefinition != null) { + failedProcessList.add(processDefinitionId + "[" + processDefinition.getName() + "]"); + } else { + failedProcessList.add(processDefinitionId + "[null]"); } } /** * check project and auth + * * @param loginUser loginUser * @param projectName projectName - * @return */ private Map checkProjectAndAuth(User loginUser, String projectName) { Project project = projectMapper.queryByName(projectName); @@ -1646,6 +1606,7 @@ public class ProcessDefinitionServiceImpl extends BaseService implements /** * move process definition + * * @param processId processId * @param targetProject targetProject * @return move result code @@ -1673,19 +1634,20 @@ public class ProcessDefinitionServiceImpl extends BaseService implements /** * check batch operate result + * * @param srcProjectName srcProjectName * @param targetProjectName targetProjectName * @param result result * @param failedProcessList failedProcessList * @param isCopy isCopy */ - private void checkBatchOperateResult(String srcProjectName,String targetProjectName, - Map result, List failedProcessList,boolean isCopy) { + private void checkBatchOperateResult(String srcProjectName, String targetProjectName, + Map result, List failedProcessList, boolean isCopy) { if (!failedProcessList.isEmpty()) { - if(isCopy){ - putMsg(result, Status.COPY_PROCESS_DEFINITION_ERROR, srcProjectName, targetProjectName,String.join(",", failedProcessList)); - }else{ - putMsg(result, Status.MOVE_PROCESS_DEFINITION_ERROR, srcProjectName, targetProjectName,String.join(",", failedProcessList)); + if (isCopy) { + putMsg(result, Status.COPY_PROCESS_DEFINITION_ERROR, srcProjectName, targetProjectName, String.join(",", failedProcessList)); + } else { + putMsg(result, Status.MOVE_PROCESS_DEFINITION_ERROR, srcProjectName, targetProjectName, String.join(",", failedProcessList)); } } else { putMsg(result, Status.SUCCESS); diff --git a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionServiceTest.java b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionServiceTest.java index 38dbdf438d1e55eccc03c01cd11746fcf5f9ce1a..23d3986481599735a60214675d47a0f2b40844e9 100644 --- a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionServiceTest.java +++ b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionServiceTest.java @@ -30,6 +30,7 @@ import org.apache.dolphinscheduler.common.enums.WarningType; import org.apache.dolphinscheduler.common.utils.DateUtils; import org.apache.dolphinscheduler.common.utils.FileUtils; import org.apache.dolphinscheduler.common.utils.JSONUtils; +import org.apache.dolphinscheduler.common.utils.StringUtils; import org.apache.dolphinscheduler.dao.entity.DataSource; import org.apache.dolphinscheduler.dao.entity.ProcessData; import org.apache.dolphinscheduler.dao.entity.ProcessDefinition; @@ -38,7 +39,6 @@ import org.apache.dolphinscheduler.dao.entity.Project; import org.apache.dolphinscheduler.dao.entity.Schedule; import org.apache.dolphinscheduler.dao.entity.TaskInstance; import org.apache.dolphinscheduler.dao.entity.User; -import org.apache.dolphinscheduler.dao.mapper.DataSourceMapper; import org.apache.dolphinscheduler.dao.mapper.ProcessDefinitionMapper; import org.apache.dolphinscheduler.dao.mapper.ProcessInstanceMapper; import org.apache.dolphinscheduler.dao.mapper.ProjectMapper; @@ -68,14 +68,14 @@ import org.mockito.junit.MockitoJUnitRunner; import org.springframework.mock.web.MockMultipartFile; import org.springframework.web.multipart.MultipartFile; -@RunWith(MockitoJUnitRunner.Silent.class) +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; + +@RunWith(MockitoJUnitRunner.class) public class ProcessDefinitionServiceTest { @InjectMocks - ProcessDefinitionServiceImpl processDefinitionService; - - @Mock - private DataSourceMapper dataSourceMapper; + private ProcessDefinitionServiceImpl processDefinitionService; @Mock private ProcessDefinitionMapper processDefineMapper; @@ -98,28 +98,149 @@ public class ProcessDefinitionServiceTest { @Mock private TaskInstanceMapper taskInstanceMapper; - private String sqlDependentJson = "{\"globalParams\":[]," + - "\"tasks\":[{\"type\":\"SQL\",\"id\":\"tasks-27297\",\"name\":\"sql\"," + - "\"params\":{\"type\":\"MYSQL\",\"datasource\":1,\"sql\":\"select * from test\"," + - "\"udfs\":\"\",\"sqlType\":\"1\",\"title\":\"\",\"receivers\":\"\",\"receiversCc\":\"\",\"showType\":\"TABLE\"" + - ",\"localParams\":[],\"connParams\":\"\"," + - "\"preStatements\":[],\"postStatements\":[]}," + - "\"description\":\"\",\"runFlag\":\"NORMAL\",\"dependence\":{},\"maxRetryTimes\":\"0\"," + - "\"retryInterval\":\"1\",\"timeout\":{\"strategy\":\"\"," + - "\"enable\":false},\"taskInstancePriority\":\"MEDIUM\",\"workerGroupId\":-1," + - "\"preTasks\":[\"dependent\"]},{\"type\":\"DEPENDENT\",\"id\":\"tasks-33787\"," + - "\"name\":\"dependent\",\"params\":{},\"description\":\"\",\"runFlag\":\"NORMAL\"," + - "\"dependence\":{\"relation\":\"AND\",\"dependTaskList\":[{\"relation\":\"AND\"," + - "\"dependItemList\":[{\"projectId\":2,\"definitionId\":46,\"depTasks\":\"ALL\"," + - "\"cycle\":\"day\",\"dateValue\":\"today\"}]}]},\"maxRetryTimes\":\"0\",\"retryInterval\":\"1\"," + - "\"timeout\":{\"strategy\":\"\",\"enable\":false},\"taskInstancePriority\":\"MEDIUM\"," + - "\"workerGroupId\":-1,\"preTasks\":[]}],\"tenantId\":1,\"timeout\":0}"; - - private String shellJson = "{\"globalParams\":[],\"tasks\":[{\"type\":\"SHELL\",\"id\":\"tasks-9527\",\"name\":\"shell-1\"," + - "\"params\":{\"resourceList\":[],\"localParams\":[],\"rawScript\":\"#!/bin/bash\\necho \\\"shell-1\\\"\"}," + - "\"description\":\"\",\"runFlag\":\"NORMAL\",\"dependence\":{},\"maxRetryTimes\":\"0\",\"retryInterval\":\"1\"," + - "\"timeout\":{\"strategy\":\"\",\"interval\":1,\"enable\":false},\"taskInstancePriority\":\"MEDIUM\"," + - "\"workerGroupId\":-1,\"preTasks\":[]}],\"tenantId\":1,\"timeout\":0}"; + private static final String SHELL_JSON = "{\n" + + " \"globalParams\": [\n" + + " \n" + + " ],\n" + + " \"tasks\": [\n" + + " {\n" + + " \"type\": \"SHELL\",\n" + + " \"id\": \"tasks-9527\",\n" + + " \"name\": \"shell-1\",\n" + + " \"params\": {\n" + + " \"resourceList\": [\n" + + " \n" + + " ],\n" + + " \"localParams\": [\n" + + " \n" + + " ],\n" + + " \"rawScript\": \"#!/bin/bash\\necho \\\"shell-1\\\"\"\n" + + " },\n" + + " \"description\": \"\",\n" + + " \"runFlag\": \"NORMAL\",\n" + + " \"dependence\": {\n" + + " \n" + + " },\n" + + " \"maxRetryTimes\": \"0\",\n" + + " \"retryInterval\": \"1\",\n" + + " \"timeout\": {\n" + + " \"strategy\": \"\",\n" + + " \"interval\": 1,\n" + + " \"enable\": false\n" + + " },\n" + + " \"taskInstancePriority\": \"MEDIUM\",\n" + + " \"workerGroupId\": -1,\n" + + " \"preTasks\": [\n" + + " \n" + + " ]\n" + + " }\n" + + " ],\n" + + " \"tenantId\": 1,\n" + + " \"timeout\": 0\n" + + "}"; + + private static final String CYCLE_SHELL_JSON = "{\n" + + " \"globalParams\": [\n" + + " \n" + + " ],\n" + + " \"tasks\": [\n" + + " {\n" + + " \"type\": \"SHELL\",\n" + + " \"id\": \"tasks-9527\",\n" + + " \"name\": \"shell-1\",\n" + + " \"params\": {\n" + + " \"resourceList\": [\n" + + " \n" + + " ],\n" + + " \"localParams\": [\n" + + " \n" + + " ],\n" + + " \"rawScript\": \"#!/bin/bash\\necho \\\"shell-1\\\"\"\n" + + " },\n" + + " \"description\": \"\",\n" + + " \"runFlag\": \"NORMAL\",\n" + + " \"dependence\": {\n" + + " \n" + + " },\n" + + " \"maxRetryTimes\": \"0\",\n" + + " \"retryInterval\": \"1\",\n" + + " \"timeout\": {\n" + + " \"strategy\": \"\",\n" + + " \"interval\": 1,\n" + + " \"enable\": false\n" + + " },\n" + + " \"taskInstancePriority\": \"MEDIUM\",\n" + + " \"workerGroupId\": -1,\n" + + " \"preTasks\": [\n" + + " \"tasks-9529\"\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"type\": \"SHELL\",\n" + + " \"id\": \"tasks-9528\",\n" + + " \"name\": \"shell-1\",\n" + + " \"params\": {\n" + + " \"resourceList\": [\n" + + " \n" + + " ],\n" + + " \"localParams\": [\n" + + " \n" + + " ],\n" + + " \"rawScript\": \"#!/bin/bash\\necho \\\"shell-1\\\"\"\n" + + " },\n" + + " \"description\": \"\",\n" + + " \"runFlag\": \"NORMAL\",\n" + + " \"dependence\": {\n" + + " \n" + + " },\n" + + " \"maxRetryTimes\": \"0\",\n" + + " \"retryInterval\": \"1\",\n" + + " \"timeout\": {\n" + + " \"strategy\": \"\",\n" + + " \"interval\": 1,\n" + + " \"enable\": false\n" + + " },\n" + + " \"taskInstancePriority\": \"MEDIUM\",\n" + + " \"workerGroupId\": -1,\n" + + " \"preTasks\": [\n" + + " \"tasks-9527\"\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"type\": \"SHELL\",\n" + + " \"id\": \"tasks-9529\",\n" + + " \"name\": \"shell-1\",\n" + + " \"params\": {\n" + + " \"resourceList\": [\n" + + " \n" + + " ],\n" + + " \"localParams\": [\n" + + " \n" + + " ],\n" + + " \"rawScript\": \"#!/bin/bash\\necho \\\"shell-1\\\"\"\n" + + " },\n" + + " \"description\": \"\",\n" + + " \"runFlag\": \"NORMAL\",\n" + + " \"dependence\": {\n" + + " \n" + + " },\n" + + " \"maxRetryTimes\": \"0\",\n" + + " \"retryInterval\": \"1\",\n" + + " \"timeout\": {\n" + + " \"strategy\": \"\",\n" + + " \"interval\": 1,\n" + + " \"enable\": false\n" + + " },\n" + + " \"taskInstancePriority\": \"MEDIUM\",\n" + + " \"workerGroupId\": -1,\n" + + " \"preTasks\": [\n" + + " \"tasks-9528\"\n" + + " ]\n" + + " }\n" + + " ],\n" + + " \"tenantId\": 1,\n" + + " \"timeout\": 0\n" + + "}"; @Test public void testQueryProcessDefinitionList() { @@ -150,6 +271,7 @@ public class ProcessDefinitionServiceTest { } @Test + @SuppressWarnings("unchecked") public void testQueryProcessDefinitionListPaging() { String projectName = "project_test1"; Mockito.when(projectMapper.queryByName(projectName)).thenReturn(getProject(projectName)); @@ -168,6 +290,22 @@ public class ProcessDefinitionServiceTest { Map map = processDefinitionService.queryProcessDefinitionListPaging(loginUser, "project_test1", "", 1, 5, 0); Assert.assertEquals(Status.PROJECT_NOT_FOUNT, map.get(Constants.STATUS)); + putMsg(result, Status.SUCCESS, projectName); + loginUser.setId(1); + Mockito.when(projectService.checkProjectAndAuth(loginUser, project, projectName)).thenReturn(result); + Page page = new Page<>(1, 10); + page.setTotal(30); + Mockito.when(processDefineMapper.queryDefineListPaging( + Mockito.any(IPage.class) + , Mockito.eq("") + , Mockito.eq(loginUser.getId()) + , Mockito.eq(project.getId()) + , Mockito.anyBoolean())).thenReturn(page); + + Map map1 = processDefinitionService.queryProcessDefinitionListPaging( + loginUser, projectName, "", 1, 10, loginUser.getId()); + + Assert.assertEquals(Status.SUCCESS, map1.get(Constants.STATUS)); } @Test @@ -206,55 +344,72 @@ public class ProcessDefinitionServiceTest { } @Test - public void testCopyProcessDefinition() throws Exception { - String projectName = "project_test1"; - Mockito.when(projectMapper.queryByName(projectName)).thenReturn(getProject(projectName)); - - Mockito.when(projectMapper.queryDetailById(1)).thenReturn(getProject(projectName)); + public void testBatchCopyProcessDefinition() { + String projectName = "project_test1"; Project project = getProject(projectName); User loginUser = new User(); loginUser.setId(-1); loginUser.setUserType(UserType.GENERAL_USER); + // copy project definition ids empty test + Map map = processDefinitionService.batchCopyProcessDefinition(loginUser, projectName, StringUtils.EMPTY, 0); + Assert.assertEquals(Status.PROCESS_DEFINITION_IDS_IS_EMPTY, map.get(Constants.STATUS)); + Map result = new HashMap<>(); - //project check auth success, instance not exist + + // project check auth fail + putMsg(result, Status.PROJECT_NOT_FOUNT, projectName); + Mockito.when(projectMapper.queryByName(projectName)).thenReturn(getProject(projectName)); + Mockito.when(projectService.checkProjectAndAuth(loginUser, project, projectName)).thenReturn(result); + Map map1 = processDefinitionService.batchCopyProcessDefinition( + loginUser, projectName, String.valueOf(project.getId()), 0); + Assert.assertEquals(Status.PROJECT_NOT_FOUNT, map1.get(Constants.STATUS)); + + // project check auth success, target project is null putMsg(result, Status.SUCCESS, projectName); + Mockito.when(projectMapper.queryByName(projectName)).thenReturn(getProject(projectName)); + Mockito.when(projectService.checkProjectAndAuth(loginUser, project, projectName)).thenReturn(result); + Mockito.when(projectMapper.queryDetailById(0)).thenReturn(null); + Map map2 = processDefinitionService.batchCopyProcessDefinition( + loginUser, projectName, String.valueOf(project.getId()), 0); + Assert.assertEquals(Status.PROJECT_NOT_FOUNT, map2.get(Constants.STATUS)); + + // project check auth success, target project name not equal project name, check auth target project fail + Project project1 = getProject(projectName); + Mockito.when(projectMapper.queryByName(projectName)).thenReturn(project1); Mockito.when(projectService.checkProjectAndAuth(loginUser, project, projectName)).thenReturn(result); + putMsg(result, Status.SUCCESS, projectName); + String projectName2 = "project_test2"; + Project project2 = getProject(projectName2); + Mockito.when(projectMapper.queryByName(projectName2)).thenReturn(project2); + Mockito.when(projectService.checkProjectAndAuth(loginUser, project2, projectName2)).thenReturn(result); + Mockito.when(projectMapper.queryDetailById(1)).thenReturn(project2); + // instance exit ProcessDefinition definition = getProcessDefinition(); definition.setLocations("{\"tasks-36196\":{\"name\":\"ssh_test1\",\"targetarr\":\"\",\"x\":141,\"y\":70}}"); definition.setProcessDefinitionJson("{\"globalParams\":[],\"tasks\":[{\"type\":\"SHELL\",\"id\":\"tasks-36196\",\"name\":\"ssh_test1\",\"params\":{\"resourceList\":[],\"localParams\":[],\"rawScript\":\"aa=\\\"1234\\\"\\necho ${aa}\"},\"desc\":\"\",\"runFlag\":\"NORMAL\",\"dependence\":{},\"maxRetryTimes\":\"0\",\"retryInterval\":\"1\",\"timeout\":{\"strategy\":\"\",\"interval\":null,\"enable\":false},\"taskInstancePriority\":\"MEDIUM\",\"workerGroupId\":-1,\"preTasks\":[]}],\"tenantId\":-1,\"timeout\":0}"); definition.setConnects("[]"); - //instance exit - Mockito.when(processDefineMapper.selectById(46)).thenReturn(definition); - Map createProcessResult = new HashMap<>(); - putMsg(result, Status.SUCCESS); - - Mockito.when(processDefinitionService.createProcessDefinition( - loginUser, - definition.getProjectName(), - definition.getName(), - definition.getProcessDefinitionJson(), - definition.getDescription(), - definition.getLocations(), - definition.getConnects())).thenReturn(createProcessResult); + Mockito.when(processDefineMapper.selectById(46)).thenReturn(definition); - Map successRes = processDefinitionService.batchCopyProcessDefinition(loginUser, "project_test1", - "46", 1); + Map map3 = processDefinitionService.batchCopyProcessDefinition( + loginUser, projectName, "46", 1); + Assert.assertEquals(Status.SUCCESS, map3.get(Constants.STATUS)); - Assert.assertEquals(Status.SUCCESS, successRes.get(Constants.STATUS)); } @Test - public void testBatchMoveProcessDefinition() throws Exception { + public void testBatchMoveProcessDefinition() { String projectName = "project_test1"; - Mockito.when(projectMapper.queryByName(projectName)).thenReturn(getProject(projectName)); + Project project1 = getProject(projectName); + Mockito.when(projectMapper.queryByName(projectName)).thenReturn(project1); String projectName2 = "project_test2"; - Mockito.when(projectMapper.queryByName(projectName2)).thenReturn(getProject(projectName2)); + Project project2 = getProject(projectName2); + Mockito.when(projectMapper.queryByName(projectName2)).thenReturn(project2); int targetProjectId = 2; Mockito.when(projectMapper.queryDetailById(targetProjectId)).thenReturn(getProjectById(targetProjectId)); @@ -273,27 +428,27 @@ public class ProcessDefinitionServiceTest { putMsg(result2, Status.SUCCESS, targetProject.getName()); Mockito.when(projectService.checkProjectAndAuth(loginUser, project, projectName)).thenReturn(result); - Mockito.when(projectService.checkProjectAndAuth(loginUser, targetProject, targetProject.getName())).thenReturn(result2); + Mockito.when(projectService.checkProjectAndAuth(loginUser, project2, projectName2)).thenReturn(result); ProcessDefinition definition = getProcessDefinition(); definition.setLocations("{\"tasks-36196\":{\"name\":\"ssh_test1\",\"targetarr\":\"\",\"x\":141,\"y\":70}}"); definition.setProcessDefinitionJson("{\"globalParams\":[],\"tasks\":[{\"type\":\"SHELL\",\"id\":\"tasks-36196\",\"name\":\"ssh_test1\",\"params\":{\"resourceList\":[],\"localParams\":[],\"rawScript\":\"aa=\\\"1234\\\"\\necho ${aa}\"},\"desc\":\"\",\"runFlag\":\"NORMAL\",\"dependence\":{},\"maxRetryTimes\":\"0\",\"retryInterval\":\"1\",\"timeout\":{\"strategy\":\"\",\"interval\":null,\"enable\":false},\"taskInstancePriority\":\"MEDIUM\",\"workerGroupId\":-1,\"preTasks\":[]}],\"tenantId\":-1,\"timeout\":0}"); definition.setConnects("[]"); - //instance exit + + // check target project result == null Mockito.when(processDefineMapper.updateById(definition)).thenReturn(46); Mockito.when(processDefineMapper.selectById(46)).thenReturn(definition); putMsg(result, Status.SUCCESS); - - Map successRes = processDefinitionService.batchMoveProcessDefinition(loginUser, "project_test1", - "46", 2); + Map successRes = processDefinitionService.batchMoveProcessDefinition( + loginUser, "project_test1", "46", 2); Assert.assertEquals(Status.SUCCESS, successRes.get(Constants.STATUS)); } @Test - public void deleteProcessDefinitionByIdTest() throws Exception { + public void deleteProcessDefinitionByIdTest() { String projectName = "project_test1"; Mockito.when(projectMapper.queryByName(projectName)).thenReturn(getProject(projectName)); @@ -379,7 +534,7 @@ public class ProcessDefinitionServiceTest { Project project = getProject(projectName); User loginUser = new User(); - loginUser.setId(-1); + loginUser.setId(1); loginUser.setUserType(UserType.GENERAL_USER); //project check auth fail @@ -390,17 +545,25 @@ public class ProcessDefinitionServiceTest { 6, ReleaseState.OFFLINE.getCode()); Assert.assertEquals(Status.PROJECT_NOT_FOUNT, map.get(Constants.STATUS)); - //project check auth success, processs definition online + // project check auth success, processs definition online putMsg(result, Status.SUCCESS, projectName); Mockito.when(processDefineMapper.selectById(46)).thenReturn(getProcessDefinition()); - Mockito.when(processDefineMapper.updateById(getProcessDefinition())).thenReturn(1); - Map onlineRes = processDefinitionService.releaseProcessDefinition(loginUser, "project_test1", - 46, ReleaseState.ONLINE.getCode()); + Map onlineRes = processDefinitionService.releaseProcessDefinition( + loginUser, "project_test1", 46, ReleaseState.ONLINE.getCode()); Assert.assertEquals(Status.SUCCESS, onlineRes.get(Constants.STATUS)); - //release error code - Map failRes = processDefinitionService.releaseProcessDefinition(loginUser, "project_test1", - 46, 2); + // project check auth success, processs definition online + ProcessDefinition processDefinition1 = getProcessDefinition(); + processDefinition1.setResourceIds("1,2"); + Mockito.when(processDefineMapper.selectById(46)).thenReturn(processDefinition1); + Mockito.when(processService.getUserById(1)).thenReturn(loginUser); + Map onlineWithResourceRes = processDefinitionService.releaseProcessDefinition( + loginUser, "project_test1", 46, ReleaseState.ONLINE.getCode()); + Assert.assertEquals(Status.SUCCESS, onlineWithResourceRes.get(Constants.STATUS)); + + // release error code + Map failRes = processDefinitionService.releaseProcessDefinition( + loginUser, "project_test1", 46, 2); Assert.assertEquals(Status.REQUEST_PARAMS_NOT_VALID_ERROR, failRes.get(Constants.STATUS)); //FIXME has function exit code 1 when exception @@ -453,18 +616,24 @@ public class ProcessDefinitionServiceTest { Map dataNotValidRes = processDefinitionService.checkProcessNodeList(null, ""); Assert.assertEquals(Status.DATA_IS_NOT_VALID, dataNotValidRes.get(Constants.STATUS)); - //task not empty - String processDefinitionJson = shellJson; + // task not empty + String processDefinitionJson = SHELL_JSON; ProcessData processData = JSONUtils.parseObject(processDefinitionJson, ProcessData.class); - assert processData != null; + Assert.assertNotNull(processData); Map taskEmptyRes = processDefinitionService.checkProcessNodeList(processData, processDefinitionJson); Assert.assertEquals(Status.SUCCESS, taskEmptyRes.get(Constants.STATUS)); - //task empty + // task empty processData.setTasks(null); Map taskNotEmptyRes = processDefinitionService.checkProcessNodeList(processData, processDefinitionJson); Assert.assertEquals(Status.DATA_IS_NULL, taskNotEmptyRes.get(Constants.STATUS)); + // task cycle + String processDefinitionJsonCycle = CYCLE_SHELL_JSON; + ProcessData processDataCycle = JSONUtils.parseObject(processDefinitionJsonCycle, ProcessData.class); + Map taskCycleRes = processDefinitionService.checkProcessNodeList(processDataCycle, processDefinitionJsonCycle); + Assert.assertEquals(Status.PROCESS_NODE_HAS_CYCLE, taskCycleRes.get(Constants.STATUS)); + //json abnormal String abnormalJson = processDefinitionJson.replaceAll("SHELL", ""); processData = JSONUtils.parseObject(abnormalJson, ProcessData.class); @@ -473,7 +642,7 @@ public class ProcessDefinitionServiceTest { } @Test - public void testGetTaskNodeListByDefinitionId() throws Exception { + public void testGetTaskNodeListByDefinitionId() { //process definition not exist Mockito.when(processDefineMapper.selectById(46)).thenReturn(null); Map processDefinitionNullRes = processDefinitionService.getTaskNodeListByDefinitionId(46); @@ -486,14 +655,14 @@ public class ProcessDefinitionServiceTest { Assert.assertEquals(Status.DATA_IS_NOT_VALID, successRes.get(Constants.STATUS)); //success - processDefinition.setProcessDefinitionJson(shellJson); + processDefinition.setProcessDefinitionJson(SHELL_JSON); Mockito.when(processDefineMapper.selectById(46)).thenReturn(processDefinition); Map dataNotValidRes = processDefinitionService.getTaskNodeListByDefinitionId(46); Assert.assertEquals(Status.SUCCESS, dataNotValidRes.get(Constants.STATUS)); } @Test - public void testGetTaskNodeListByDefinitionIdList() throws Exception { + public void testGetTaskNodeListByDefinitionIdList() { //process definition not exist String defineIdList = "46"; Integer[] idArray = {46}; @@ -503,7 +672,7 @@ public class ProcessDefinitionServiceTest { //process definition exist ProcessDefinition processDefinition = getProcessDefinition(); - processDefinition.setProcessDefinitionJson(shellJson); + processDefinition.setProcessDefinitionJson(SHELL_JSON); List processDefinitionList = new ArrayList<>(); processDefinitionList.add(processDefinition); Mockito.when(processDefineMapper.queryDefinitionListByIdList(idArray)).thenReturn(processDefinitionList); @@ -515,7 +684,7 @@ public class ProcessDefinitionServiceTest { public void testQueryProcessDefinitionAllByProjectId() { int projectId = 1; ProcessDefinition processDefinition = getProcessDefinition(); - processDefinition.setProcessDefinitionJson(shellJson); + processDefinition.setProcessDefinitionJson(SHELL_JSON); List processDefinitionList = new ArrayList<>(); processDefinitionList.add(processDefinition); Mockito.when(processDefineMapper.queryAllDefinitionList(projectId)).thenReturn(processDefinitionList); @@ -527,7 +696,7 @@ public class ProcessDefinitionServiceTest { public void testViewTree() throws Exception { //process definition not exist ProcessDefinition processDefinition = getProcessDefinition(); - processDefinition.setProcessDefinitionJson(shellJson); + processDefinition.setProcessDefinitionJson(SHELL_JSON); Mockito.when(processDefineMapper.selectById(46)).thenReturn(null); Map processDefinitionNullRes = processDefinitionService.viewTree(46, 10); Assert.assertEquals(Status.PROCESS_DEFINE_NOT_EXIST, processDefinitionNullRes.get(Constants.STATUS)); @@ -567,29 +736,71 @@ public class ProcessDefinitionServiceTest { @Test public void testImportProcessDefinitionById() throws IOException { - String processJson = "[{\"projectName\":\"testProject\",\"processDefinitionName\":\"shell-4\"," + - "\"processDefinitionJson\":\"{\\\"tenantId\\\":1,\\\"globalParams\\\":[]," + - "\\\"tasks\\\":[{\\\"workerGroupId\\\":\\\"default\\\",\\\"description\\\":\\\"\\\",\\\"runFlag\\\":\\\"NORMAL\\\"," + - "\\\"type\\\":\\\"SHELL\\\",\\\"params\\\":{\\\"rawScript\\\":\\\"#!/bin/bash\\\\necho \\\\\\\"shell-4\\\\\\\"\\\"," + - "\\\"localParams\\\":[],\\\"resourceList\\\":[]},\\\"timeout\\\":{\\\"enable\\\":false,\\\"strategy\\\":\\\"\\\"}," + - "\\\"maxRetryTimes\\\":\\\"0\\\",\\\"taskInstancePriority\\\":\\\"MEDIUM\\\",\\\"name\\\":\\\"shell-4\\\"," + - "\\\"dependence\\\":{},\\\"retryInterval\\\":\\\"1\\\",\\\"preTasks\\\":[],\\\"id\\\":\\\"tasks-84090\\\"}," + - "{\\\"taskInstancePriority\\\":\\\"MEDIUM\\\",\\\"name\\\":\\\"shell-5\\\",\\\"workerGroupId\\\":\\\"default\\\\," + - "\\\"description\\\":\\\"\\\",\\\"dependence\\\":{},\\\"preTasks\\\":[\\\"shell-4\\\"],\\\"id\\\":\\\"tasks-87364\\\"," + - "\\\"runFlag\\\":\\\"NORMAL\\\",\\\"type\\\":\\\"SUB_PROCESS\\\",\\\"params\\\":{\\\"processDefinitionId\\\":46}," + - "\\\"timeout\\\":{\\\"enable\\\":false,\\\"strategy\\\":\\\"\\\"}}],\\\"timeout\\\":0}\"," + - "\"processDefinitionDescription\":\"\",\"processDefinitionLocations\":\"{\\\"tasks-84090\\\":{\\\"name\\\":\\\"shell-4\\\"," + - "\\\"targetarr\\\":\\\"\\\",\\\"x\\\":128,\\\"y\\\":114},\\\"tasks-87364\\\":{\\\"name\\\":\\\"shell-5\\\"," + - "\\\"targetarr\\\":\\\"tasks-84090\\\",\\\"x\\\":266,\\\"y\\\":115}}\"," + - "\"processDefinitionConnects\":\"[{\\\"endPointSourceId\\\":\\\"tasks-84090\\\"," + - "\\\"endPointTargetId\\\":\\\"tasks-87364\\\"}]\"}]"; - - String subProcessJson = "{\"globalParams\":[]," + - "\"tasks\":[{\"type\":\"SHELL\",\"id\":\"tasks-52423\",\"name\":\"shell-5\"," + - "\"params\":{\"resourceList\":[],\"localParams\":[],\"rawScript\":\"echo \\\"shell-5\\\"\"},\"description\":\"\"," + - "\"runFlag\":\"NORMAL\",\"dependence\":{},\"maxRetryTimes\":\"0\",\"retryInterval\":\"1\"," + - "\"timeout\":{\"strategy\":\"\",\"interval\":null,\"enable\":false},\"taskInstancePriority\":\"MEDIUM\",\"workerGroupId\":\\\"default\\\\," + - "\"preTasks\":[]}],\"tenantId\":1,\"timeout\":0}"; + String processJson = "[\n" + + " {\n" + + " \"projectName\": \"testProject\",\n" + + " \"processDefinitionName\": \"shell-4\",\n" + + " \"processDefinitionJson\": \"{\\\"tenantId\\\":1" + + ",\\\"globalParams\\\":[],\\\"tasks\\\":[{\\\"workerGroupId\\\":\\\"3\\\",\\\"description\\\"" + + ":\\\"\\\",\\\"runFlag\\\":\\\"NORMAL\\\",\\\"type\\\":\\\"SHELL\\\",\\\"params\\\":{\\\"rawScript\\\"" + + ":\\\"#!/bin/bash\\\\necho \\\\\\\"shell-4\\\\\\\"\\\",\\\"localParams\\\":[],\\\"resourceList\\\":[]}" + + ",\\\"timeout\\\":{\\\"enable\\\":false,\\\"strategy\\\":\\\"\\\"},\\\"maxRetryTimes\\\":\\\"0\\\"" + + ",\\\"taskInstancePriority\\\":\\\"MEDIUM\\\",\\\"name\\\":\\\"shell-4\\\",\\\"dependence\\\":{}" + + ",\\\"retryInterval\\\":\\\"1\\\",\\\"preTasks\\\":[],\\\"id\\\":\\\"tasks-84090\\\"}" + + ",{\\\"taskInstancePriority\\\":\\\"MEDIUM\\\",\\\"name\\\":\\\"shell-5\\\",\\\"workerGroupId\\\"" + + ":\\\"3\\\",\\\"description\\\":\\\"\\\",\\\"dependence\\\":{},\\\"preTasks\\\":[\\\"shell-4\\\"]" + + ",\\\"id\\\":\\\"tasks-87364\\\",\\\"runFlag\\\":\\\"NORMAL\\\",\\\"type\\\":\\\"SUB_PROCESS\\\"" + + ",\\\"params\\\":{\\\"processDefinitionId\\\":46},\\\"timeout\\\":{\\\"enable\\\":false" + + ",\\\"strategy\\\":\\\"\\\"}}],\\\"timeout\\\":0}\",\n" + + " \"processDefinitionDescription\": \"\",\n" + + " \"processDefinitionLocations\": \"{\\\"tasks-84090\\\":{\\\"name\\\":\\\"shell-4\\\"" + + ",\\\"targetarr\\\":\\\"\\\",\\\"x\\\":128,\\\"y\\\":114},\\\"tasks-87364\\\":{\\\"name\\\"" + + ":\\\"shell-5\\\",\\\"targetarr\\\":\\\"tasks-84090\\\",\\\"x\\\":266,\\\"y\\\":115}}\",\n" + + " \"processDefinitionConnects\": \"[{\\\"endPointSourceId\\\":\\\"tasks-84090\\\"" + + ",\\\"endPointTargetId\\\":\\\"tasks-87364\\\"}]\"\n" + + " }\n" + + "]"; + + String subProcessJson = "{\n" + + " \"globalParams\": [\n" + + " \n" + + " ],\n" + + " \"tasks\": [\n" + + " {\n" + + " \"type\": \"SHELL\",\n" + + " \"id\": \"tasks-52423\",\n" + + " \"name\": \"shell-5\",\n" + + " \"params\": {\n" + + " \"resourceList\": [\n" + + " \n" + + " ],\n" + + " \"localParams\": [\n" + + " \n" + + " ],\n" + + " \"rawScript\": \"echo \\\"shell-5\\\"\"\n" + + " },\n" + + " \"description\": \"\",\n" + + " \"runFlag\": \"NORMAL\",\n" + + " \"dependence\": {\n" + + " \n" + + " },\n" + + " \"maxRetryTimes\": \"0\",\n" + + " \"retryInterval\": \"1\",\n" + + " \"timeout\": {\n" + + " \"strategy\": \"\",\n" + + " \"interval\": null,\n" + + " \"enable\": false\n" + + " },\n" + + " \"taskInstancePriority\": \"MEDIUM\",\n" + + " \"workerGroupId\": \"3\",\n" + + " \"preTasks\": [\n" + + " \n" + + " ]\n" + + " }\n" + + " ],\n" + + " \"tenantId\": 1,\n" + + " \"timeout\": 0\n" + + "}"; FileUtils.writeStringToFile(new File("/tmp/task.json"), processJson); @@ -618,28 +829,13 @@ public class ProcessDefinitionServiceTest { Mockito.when(projectService.checkProjectAndAuth(loginUser, getProject(currentProjectName), currentProjectName)).thenReturn(result); Mockito.when(processDefineMapper.queryByDefineId(46)).thenReturn(shellDefinition2); - //import process -// Map importProcessResult = processDefinitionService.importProcessDefinition(loginUser, multipartFile, currentProjectName); -// -// Assert.assertEquals(Status.SUCCESS, importProcessResult.get(Constants.STATUS)); -// -// boolean delete = file.delete(); -// -// Assert.assertTrue(delete); - -// String processMetaJson = ""; -// improssProcessCheckData(file, loginUser, currentProjectName, processMetaJson); -// -// processMetaJson = "{\"scheduleWorkerGroupId\":-1}"; -// improssProcessCheckData(file, loginUser, currentProjectName, processMetaJson); -// -// processMetaJson = "{\"scheduleWorkerGroupId\":-1,\"projectName\":\"test\"}"; -// improssProcessCheckData(file, loginUser, currentProjectName, processMetaJson); -// -// processMetaJson = "{\"scheduleWorkerGroupId\":-1,\"projectName\":\"test\",\"processDefinitionName\":\"test_definition\"}"; -// improssProcessCheckData(file, loginUser, currentProjectName, processMetaJson); + Map importProcessResult = processDefinitionService.importProcessDefinition(loginUser, multipartFile, currentProjectName); + + Assert.assertEquals(Status.SUCCESS, importProcessResult.get(Constants.STATUS)); + boolean delete = file.delete(); + Assert.assertTrue(delete); } @Test @@ -658,12 +854,122 @@ public class ProcessDefinitionServiceTest { Mockito.when(projectService.checkProjectAndAuth(loginUser, project, projectName)).thenReturn(result); Mockito.when(processService.findProcessDefineById(1)).thenReturn(getProcessDefinition()); + String sqlDependentJson = "{\n" + + " \"globalParams\": [\n" + + " \n" + + " ],\n" + + " \"tasks\": [\n" + + " {\n" + + " \"type\": \"SQL\",\n" + + " \"id\": \"tasks-27297\",\n" + + " \"name\": \"sql\",\n" + + " \"params\": {\n" + + " \"type\": \"MYSQL\",\n" + + " \"datasource\": 1,\n" + + " \"sql\": \"select * from test\",\n" + + " \"udfs\": \"\",\n" + + " \"sqlType\": \"1\",\n" + + " \"title\": \"\",\n" + + " \"receivers\": \"\",\n" + + " \"receiversCc\": \"\",\n" + + " \"showType\": \"TABLE\",\n" + + " \"localParams\": [\n" + + " \n" + + " ],\n" + + " \"connParams\": \"\",\n" + + " \"preStatements\": [\n" + + " \n" + + " ],\n" + + " \"postStatements\": [\n" + + " \n" + + " ]\n" + + " },\n" + + " \"description\": \"\",\n" + + " \"runFlag\": \"NORMAL\",\n" + + " \"dependence\": {\n" + + " \n" + + " },\n" + + " \"maxRetryTimes\": \"0\",\n" + + " \"retryInterval\": \"1\",\n" + + " \"timeout\": {\n" + + " \"strategy\": \"\",\n" + + " \"enable\": false\n" + + " },\n" + + " \"taskInstancePriority\": \"MEDIUM\",\n" + + " \"workerGroupId\": -1,\n" + + " \"preTasks\": [\n" + + " \"dependent\"\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"type\": \"DEPENDENT\",\n" + + " \"id\": \"tasks-33787\",\n" + + " \"name\": \"dependent\",\n" + + " \"params\": {\n" + + " \n" + + " },\n" + + " \"description\": \"\",\n" + + " \"runFlag\": \"NORMAL\",\n" + + " \"dependence\": {\n" + + " \"relation\": \"AND\",\n" + + " \"dependTaskList\": [\n" + + " {\n" + + " \"relation\": \"AND\",\n" + + " \"dependItemList\": [\n" + + " {\n" + + " \"projectId\": 2,\n" + + " \"definitionId\": 46,\n" + + " \"depTasks\": \"ALL\",\n" + + " \"cycle\": \"day\",\n" + + " \"dateValue\": \"today\"\n" + + " }\n" + + " ]\n" + + " }\n" + + " ]\n" + + " },\n" + + " \"maxRetryTimes\": \"0\",\n" + + " \"retryInterval\": \"1\",\n" + + " \"timeout\": {\n" + + " \"strategy\": \"\",\n" + + " \"enable\": false\n" + + " },\n" + + " \"taskInstancePriority\": \"MEDIUM\",\n" + + " \"workerGroupId\": -1,\n" + + " \"preTasks\": [\n" + + " \n" + + " ]\n" + + " }\n" + + " ],\n" + + " \"tenantId\": 1,\n" + + " \"timeout\": 0\n" + + "}"; Map updateResult = processDefinitionService.updateProcessDefinition(loginUser, projectName, 1, "test", sqlDependentJson, "", "", ""); Assert.assertEquals(Status.UPDATE_PROCESS_DEFINITION_ERROR, updateResult.get(Constants.STATUS)); } + @Test + public void testBatchExportProcessDefinitionByIds() { + processDefinitionService.batchExportProcessDefinitionByIds( + null, null, null, null); + + User loginUser = new User(); + loginUser.setId(1); + loginUser.setUserType(UserType.ADMIN_USER); + + String projectName = "project_test1"; + Project project = getProject(projectName); + + Map result = new HashMap<>(); + putMsg(result, Status.PROJECT_NOT_FOUNT); + Mockito.when(projectMapper.queryByName(projectName)).thenReturn(getProject(projectName)); + Mockito.when(projectService.checkProjectAndAuth(loginUser, project, projectName)).thenReturn(result); + + processDefinitionService.batchExportProcessDefinitionByIds( + loginUser, projectName, "1", null); + } + /** * get mock datasource * @@ -715,7 +1021,7 @@ public class ProcessDefinitionServiceTest { */ private Project getProjectById(int projectId) { Project project = new Project(); - project.setId(1); + project.setId(projectId); project.setName("project_test2"); project.setUserId(1); return project;