Browse Source
* Modify Project and ProjectUser Mapper * Modify Project and ProjectUser Mapper * project_code is bigint(20) * modify ERROR name * modify saveProcessDefine, remove the duplicate code with createTaskAndRelation * modify import/export processdefinition, add genProcessData * fix ut and bug * code style * repalce project_id with code * conflicts solve * conflicts solve * conflicts solve * bugfix * modify listResources mothod and remove getResourceIds mothod * 1 * conflicts solve * modify listResources mothod and remove getResourceIds mothod * modify listResources mothod and remove getResourceIds mothod * replace processDefinitionVersion with processDefinitionLog * codestyle * codestyle * add ProcessTaskRelationServiceImplTest/TaskDefinitionServiceImplTest * conflicts solve * conflicts solve * conflicts solve * add ProcessTaskRelationServiceImplTest/TaskDefinitionServiceImplTest * codestylepull/3/MERGE
Simon
4 years ago
committed by
GitHub
9 changed files with 466 additions and 87 deletions
@ -0,0 +1,107 @@ |
|||||||
|
/* |
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one or more |
||||||
|
* contributor license agreements. See the NOTICE file distributed with |
||||||
|
* this work for additional information regarding copyright ownership. |
||||||
|
* The ASF licenses this file to You under the Apache License, Version 2.0 |
||||||
|
* (the "License"); you may not use this file except in compliance with |
||||||
|
* the License. You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
package org.apache.dolphinscheduler.api.service; |
||||||
|
|
||||||
|
import org.apache.dolphinscheduler.api.enums.Status; |
||||||
|
import org.apache.dolphinscheduler.api.service.impl.ProcessTaskRelationServiceImpl; |
||||||
|
import org.apache.dolphinscheduler.api.service.impl.ProjectServiceImpl; |
||||||
|
import org.apache.dolphinscheduler.common.Constants; |
||||||
|
import org.apache.dolphinscheduler.common.enums.UserType; |
||||||
|
import org.apache.dolphinscheduler.dao.entity.Project; |
||||||
|
import org.apache.dolphinscheduler.dao.entity.User; |
||||||
|
import org.apache.dolphinscheduler.dao.mapper.ProcessDefinitionMapper; |
||||||
|
import org.apache.dolphinscheduler.dao.mapper.ProcessTaskRelationMapper; |
||||||
|
import org.apache.dolphinscheduler.dao.mapper.ProjectMapper; |
||||||
|
|
||||||
|
import java.text.MessageFormat; |
||||||
|
import java.util.HashMap; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
import org.junit.Assert; |
||||||
|
import org.junit.Test; |
||||||
|
import org.junit.runner.RunWith; |
||||||
|
import org.mockito.InjectMocks; |
||||||
|
import org.mockito.Mock; |
||||||
|
import org.mockito.Mockito; |
||||||
|
import org.mockito.junit.MockitoJUnitRunner; |
||||||
|
|
||||||
|
@RunWith(MockitoJUnitRunner.class) |
||||||
|
public class ProcessTaskRelationServiceImplTest { |
||||||
|
@InjectMocks |
||||||
|
private ProcessTaskRelationServiceImpl processTaskRelationService; |
||||||
|
|
||||||
|
@Mock |
||||||
|
private ProcessDefinitionMapper processDefineMapper; |
||||||
|
|
||||||
|
@Mock |
||||||
|
private ProcessTaskRelationMapper processTaskRelationMapper; |
||||||
|
|
||||||
|
@Mock |
||||||
|
private ProjectMapper projectMapper; |
||||||
|
|
||||||
|
@Mock |
||||||
|
private ProjectServiceImpl projectService; |
||||||
|
|
||||||
|
@Test |
||||||
|
public void queryProcessTaskRelationTest() { |
||||||
|
String projectName = "project_test1"; |
||||||
|
|
||||||
|
Project project = getProject(projectName); |
||||||
|
Mockito.when(projectMapper.queryByName(projectName)).thenReturn(project); |
||||||
|
|
||||||
|
User loginUser = new User(); |
||||||
|
loginUser.setId(-1); |
||||||
|
loginUser.setUserType(UserType.GENERAL_USER); |
||||||
|
|
||||||
|
Map<String, Object> result = new HashMap<>(); |
||||||
|
putMsg(result, Status.SUCCESS, projectName); |
||||||
|
|
||||||
|
//project check auth fail
|
||||||
|
Mockito.when(projectService.checkProjectAndAuth(loginUser, project, projectName)).thenReturn(result); |
||||||
|
|
||||||
|
Map<String, Object> relation = processTaskRelationService |
||||||
|
.queryProcessTaskRelation(loginUser, projectName, 11L); |
||||||
|
|
||||||
|
Assert.assertEquals(Status.SUCCESS, relation.get(Constants.STATUS)); |
||||||
|
} |
||||||
|
|
||||||
|
private void putMsg(Map<String, Object> result, Status status, Object... statusParams) { |
||||||
|
result.put(Constants.STATUS, status); |
||||||
|
if (statusParams != null && statusParams.length > 0) { |
||||||
|
result.put(Constants.MSG, MessageFormat.format(status.getMsg(), statusParams)); |
||||||
|
} else { |
||||||
|
result.put(Constants.MSG, status.getMsg()); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* get mock Project |
||||||
|
* |
||||||
|
* @param projectName projectName |
||||||
|
* @return Project |
||||||
|
*/ |
||||||
|
private Project getProject(String projectName) { |
||||||
|
Project project = new Project(); |
||||||
|
project.setCode(11L); |
||||||
|
project.setId(1); |
||||||
|
project.setName(projectName); |
||||||
|
project.setUserId(1); |
||||||
|
return project; |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,298 @@ |
|||||||
|
/* |
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one or more |
||||||
|
* contributor license agreements. See the NOTICE file distributed with |
||||||
|
* this work for additional information regarding copyright ownership. |
||||||
|
* The ASF licenses this file to You under the Apache License, Version 2.0 |
||||||
|
* (the "License"); you may not use this file except in compliance with |
||||||
|
* the License. You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
package org.apache.dolphinscheduler.api.service; |
||||||
|
|
||||||
|
import org.apache.dolphinscheduler.api.enums.Status; |
||||||
|
import org.apache.dolphinscheduler.api.service.impl.ProjectServiceImpl; |
||||||
|
import org.apache.dolphinscheduler.api.service.impl.TaskDefinitionServiceImpl; |
||||||
|
import org.apache.dolphinscheduler.common.Constants; |
||||||
|
import org.apache.dolphinscheduler.common.enums.UserType; |
||||||
|
import org.apache.dolphinscheduler.common.model.TaskNode; |
||||||
|
import org.apache.dolphinscheduler.common.utils.JSONUtils; |
||||||
|
import org.apache.dolphinscheduler.dao.entity.Project; |
||||||
|
import org.apache.dolphinscheduler.dao.entity.TaskDefinition; |
||||||
|
import org.apache.dolphinscheduler.dao.entity.TaskDefinitionLog; |
||||||
|
import org.apache.dolphinscheduler.dao.entity.User; |
||||||
|
import org.apache.dolphinscheduler.dao.mapper.ProcessDefinitionMapper; |
||||||
|
import org.apache.dolphinscheduler.dao.mapper.ProcessTaskRelationMapper; |
||||||
|
import org.apache.dolphinscheduler.dao.mapper.ProjectMapper; |
||||||
|
import org.apache.dolphinscheduler.dao.mapper.TaskDefinitionLogMapper; |
||||||
|
import org.apache.dolphinscheduler.dao.mapper.TaskDefinitionMapper; |
||||||
|
import org.apache.dolphinscheduler.service.process.ProcessService; |
||||||
|
|
||||||
|
import java.text.MessageFormat; |
||||||
|
import java.util.HashMap; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
import org.junit.Assert; |
||||||
|
import org.junit.Test; |
||||||
|
import org.junit.runner.RunWith; |
||||||
|
import org.mockito.InjectMocks; |
||||||
|
import org.mockito.Mock; |
||||||
|
import org.mockito.Mockito; |
||||||
|
import org.mockito.junit.MockitoJUnitRunner; |
||||||
|
|
||||||
|
@RunWith(MockitoJUnitRunner.class) |
||||||
|
public class TaskDefinitionServiceImplTest { |
||||||
|
|
||||||
|
String taskDefinitionJson = "{\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"; |
||||||
|
|
||||||
|
@InjectMocks |
||||||
|
private TaskDefinitionServiceImpl taskDefinitionService; |
||||||
|
|
||||||
|
@Mock |
||||||
|
private TaskDefinitionMapper taskDefinitionMapper; |
||||||
|
|
||||||
|
@Mock |
||||||
|
private TaskDefinitionLogMapper taskDefinitionLogMapper; |
||||||
|
|
||||||
|
@Mock |
||||||
|
private ProcessDefinitionMapper processDefineMapper; |
||||||
|
|
||||||
|
@Mock |
||||||
|
private ProcessTaskRelationMapper processTaskRelationMapper; |
||||||
|
|
||||||
|
@Mock |
||||||
|
private ProjectMapper projectMapper; |
||||||
|
|
||||||
|
@Mock |
||||||
|
private ProjectServiceImpl projectService; |
||||||
|
|
||||||
|
@Mock |
||||||
|
private ProcessService processService; |
||||||
|
|
||||||
|
@Test |
||||||
|
public void createTaskDefinition() { |
||||||
|
String projectName = "project_test1"; |
||||||
|
|
||||||
|
Project project = getProject(projectName); |
||||||
|
Mockito.when(projectMapper.queryByName(projectName)).thenReturn(project); |
||||||
|
|
||||||
|
User loginUser = new User(); |
||||||
|
loginUser.setId(-1); |
||||||
|
loginUser.setUserType(UserType.GENERAL_USER); |
||||||
|
|
||||||
|
Map<String, Object> result = new HashMap<>(); |
||||||
|
putMsg(result, Status.SUCCESS, projectName); |
||||||
|
|
||||||
|
//project check auth fail
|
||||||
|
Mockito.when(projectService.checkProjectAndAuth(loginUser, project, projectName)).thenReturn(result); |
||||||
|
|
||||||
|
TaskNode taskNode = JSONUtils.parseObject(taskDefinitionJson, TaskNode.class); |
||||||
|
|
||||||
|
Mockito.when(processService.saveTaskDefinition(Mockito.eq(loginUser) |
||||||
|
, Mockito.eq(project.getCode()) |
||||||
|
, Mockito.eq(taskNode) |
||||||
|
, Mockito.any(TaskDefinition.class))) |
||||||
|
.thenReturn(1); |
||||||
|
|
||||||
|
Map<String, Object> relation = taskDefinitionService |
||||||
|
.createTaskDefinition(loginUser, projectName, taskDefinitionJson); |
||||||
|
|
||||||
|
Assert.assertEquals(Status.SUCCESS, relation.get(Constants.STATUS)); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
public void queryTaskDefinitionByName() { |
||||||
|
String projectName = "project_test1"; |
||||||
|
String taskName = "task"; |
||||||
|
Project project = getProject(projectName); |
||||||
|
Mockito.when(projectMapper.queryByName(projectName)).thenReturn(project); |
||||||
|
|
||||||
|
User loginUser = new User(); |
||||||
|
loginUser.setId(-1); |
||||||
|
loginUser.setUserType(UserType.GENERAL_USER); |
||||||
|
|
||||||
|
Map<String, Object> result = new HashMap<>(); |
||||||
|
putMsg(result, Status.SUCCESS, projectName); |
||||||
|
|
||||||
|
//project check auth fail
|
||||||
|
Mockito.when(projectService.checkProjectAndAuth(loginUser, project, projectName)).thenReturn(result); |
||||||
|
|
||||||
|
TaskNode taskNode = JSONUtils.parseObject(taskDefinitionJson, TaskNode.class); |
||||||
|
|
||||||
|
Mockito.when(taskDefinitionMapper.queryByDefinitionName(project.getCode(), taskName)) |
||||||
|
.thenReturn(new TaskDefinition()); |
||||||
|
|
||||||
|
Map<String, Object> relation = taskDefinitionService |
||||||
|
.queryTaskDefinitionByName(loginUser, projectName, taskName); |
||||||
|
|
||||||
|
Assert.assertEquals(Status.SUCCESS, relation.get(Constants.STATUS)); |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
public void deleteTaskDefinitionByCode() { |
||||||
|
String projectName = "project_test1"; |
||||||
|
|
||||||
|
Project project = getProject(projectName); |
||||||
|
Mockito.when(projectMapper.queryByName(projectName)).thenReturn(project); |
||||||
|
|
||||||
|
User loginUser = new User(); |
||||||
|
loginUser.setId(-1); |
||||||
|
loginUser.setUserType(UserType.GENERAL_USER); |
||||||
|
|
||||||
|
Map<String, Object> result = new HashMap<>(); |
||||||
|
putMsg(result, Status.SUCCESS, projectName); |
||||||
|
|
||||||
|
//project check auth fail
|
||||||
|
Mockito.when(projectService.checkProjectAndAuth(loginUser, project, projectName)).thenReturn(result); |
||||||
|
|
||||||
|
TaskNode taskNode = JSONUtils.parseObject(taskDefinitionJson, TaskNode.class); |
||||||
|
|
||||||
|
Mockito.when(taskDefinitionMapper.deleteByCode(Mockito.anyLong())) |
||||||
|
.thenReturn(1); |
||||||
|
|
||||||
|
Map<String, Object> relation = taskDefinitionService |
||||||
|
.deleteTaskDefinitionByCode(loginUser, projectName, 11L); |
||||||
|
|
||||||
|
Assert.assertEquals(Status.SUCCESS, relation.get(Constants.STATUS)); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
public void updateTaskDefinition() { |
||||||
|
String projectName = "project_test1"; |
||||||
|
|
||||||
|
Project project = getProject(projectName); |
||||||
|
Mockito.when(projectMapper.queryByName(projectName)).thenReturn(project); |
||||||
|
|
||||||
|
User loginUser = new User(); |
||||||
|
loginUser.setId(-1); |
||||||
|
loginUser.setUserType(UserType.GENERAL_USER); |
||||||
|
|
||||||
|
Map<String, Object> result = new HashMap<>(); |
||||||
|
putMsg(result, Status.SUCCESS, projectName); |
||||||
|
|
||||||
|
//project check auth fail
|
||||||
|
Mockito.when(projectService.checkProjectAndAuth(loginUser, project, projectName)).thenReturn(result); |
||||||
|
|
||||||
|
TaskNode taskNode = JSONUtils.parseObject(taskDefinitionJson, TaskNode.class); |
||||||
|
|
||||||
|
Mockito.when(processService.updateTaskDefinition(Mockito.eq(loginUser) |
||||||
|
, Mockito.eq(project.getCode()) |
||||||
|
, Mockito.eq(taskNode) |
||||||
|
, Mockito.any(TaskDefinition.class))) |
||||||
|
.thenReturn(1); |
||||||
|
|
||||||
|
Mockito.when(taskDefinitionMapper.queryByDefinitionCode(11L)) |
||||||
|
.thenReturn(new TaskDefinition()); |
||||||
|
|
||||||
|
Map<String, Object> relation = taskDefinitionService |
||||||
|
.updateTaskDefinition(loginUser, projectName, 11L, taskDefinitionJson); |
||||||
|
|
||||||
|
Assert.assertEquals(Status.SUCCESS, relation.get(Constants.STATUS)); |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
public void switchVersion() { |
||||||
|
String projectName = "project_test1"; |
||||||
|
int version = 1; |
||||||
|
Long taskCode = 11L; |
||||||
|
Project project = getProject(projectName); |
||||||
|
Mockito.when(projectMapper.queryByName(projectName)).thenReturn(project); |
||||||
|
|
||||||
|
User loginUser = new User(); |
||||||
|
loginUser.setId(-1); |
||||||
|
loginUser.setUserType(UserType.GENERAL_USER); |
||||||
|
|
||||||
|
Map<String, Object> result = new HashMap<>(); |
||||||
|
putMsg(result, Status.SUCCESS, projectName); |
||||||
|
|
||||||
|
//project check auth fail
|
||||||
|
Mockito.when(projectService.checkProjectAndAuth(loginUser, project, projectName)).thenReturn(result); |
||||||
|
|
||||||
|
TaskNode taskNode = JSONUtils.parseObject(taskDefinitionJson, TaskNode.class); |
||||||
|
|
||||||
|
Mockito.when(taskDefinitionLogMapper.queryByDefinitionCodeAndVersion(taskCode, version)) |
||||||
|
.thenReturn(new TaskDefinitionLog()); |
||||||
|
|
||||||
|
Mockito.when(taskDefinitionMapper.queryByDefinitionCode(taskCode)) |
||||||
|
.thenReturn(new TaskDefinition()); |
||||||
|
|
||||||
|
Map<String, Object> relation = taskDefinitionService |
||||||
|
.switchVersion(loginUser, projectName, taskCode, version); |
||||||
|
|
||||||
|
Assert.assertEquals(Status.SUCCESS, relation.get(Constants.STATUS)); |
||||||
|
} |
||||||
|
|
||||||
|
private void putMsg(Map<String, Object> result, Status status, Object... statusParams) { |
||||||
|
result.put(Constants.STATUS, status); |
||||||
|
if (statusParams != null && statusParams.length > 0) { |
||||||
|
result.put(Constants.MSG, MessageFormat.format(status.getMsg(), statusParams)); |
||||||
|
} else { |
||||||
|
result.put(Constants.MSG, status.getMsg()); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* get mock Project |
||||||
|
* |
||||||
|
* @param projectName projectName |
||||||
|
* @return Project |
||||||
|
*/ |
||||||
|
private Project getProject(String projectName) { |
||||||
|
Project project = new Project(); |
||||||
|
project.setId(1); |
||||||
|
project.setName(projectName); |
||||||
|
project.setUserId(1); |
||||||
|
return project; |
||||||
|
} |
||||||
|
|
||||||
|
} |
Loading…
Reference in new issue