Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
deeplearning
DolphinScheduler
提交
59610a56
DolphinScheduler
项目概览
deeplearning
/
DolphinScheduler
与 Fork 源项目一致
Fork自
apache / DolphinScheduler
通知
24
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
DolphinScheduler
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
59610a56
编写于
8月 18, 2020
作者:
H
Hsu Pu
提交者:
GitHub
8月 18, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[Improvement][dao,server] unit test for ConditionsTask (#3385)
上级
0b7b6d4e
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
160 addition
and
75 deletion
+160
-75
dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskInstance.java
.../org/apache/dolphinscheduler/dao/entity/TaskInstance.java
+12
-17
dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/entity/TaskInstanceTest.java
.../apache/dolphinscheduler/dao/entity/TaskInstanceTest.java
+32
-0
dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/master/ConditionsTaskTest.java
...he/dolphinscheduler/server/master/ConditionsTaskTest.java
+114
-57
pom.xml
pom.xml
+2
-1
未找到文件。
dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskInstance.java
浏览文件 @
59610a56
...
...
@@ -16,24 +16,23 @@
*/
package
org.apache.dolphinscheduler.dao.entity
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
org.apache.dolphinscheduler.common.enums.ExecutionStatus
;
import
org.apache.dolphinscheduler.common.enums.Flag
;
import
org.apache.dolphinscheduler.common.enums.Priority
;
import
org.apache.dolphinscheduler.common.enums.TaskType
;
import
org.apache.dolphinscheduler.common.model.TaskNode
;
import
org.apache.dolphinscheduler.common.utils.*
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
org.apache.dolphinscheduler.common.utils.JSONUtils
;
import
java.io.Serializable
;
import
java.util.Date
;
import
java.util.Map
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
/**
* task instance
*/
...
...
@@ -382,16 +381,16 @@ public class TaskInstance implements Serializable {
this
.
appLink
=
appLink
;
}
public
String
getDependency
(){
if
(
this
.
dependency
!=
null
){
public
String
getDependency
()
{
if
(
this
.
dependency
!=
null
)
{
return
this
.
dependency
;
}
TaskNode
taskNode
=
JSONUtils
.
parseObject
(
taskJson
,
TaskNode
.
class
);
return
taskNode
==
null
?
null
:
taskNode
.
getDependence
();
}
return
taskNode
.
getDependence
();
public
void
setDependency
(
String
dependency
)
{
this
.
dependency
=
dependency
;
}
public
Flag
getFlag
()
{
...
...
@@ -495,10 +494,6 @@ public class TaskInstance implements Serializable {
}
}
public
void
setDependency
(
String
dependency
)
{
this
.
dependency
=
dependency
;
}
public
Priority
getTaskInstancePriority
()
{
return
taskInstancePriority
;
}
...
...
dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/entity/TaskInstanceTest.java
浏览文件 @
59610a56
...
...
@@ -16,6 +16,9 @@
*/
package
org.apache.dolphinscheduler.dao.entity
;
import
org.apache.dolphinscheduler.common.model.TaskNode
;
import
org.apache.dolphinscheduler.common.utils.JSONUtils
;
import
org.junit.Assert
;
import
org.junit.Test
;
...
...
@@ -43,7 +46,36 @@ public class TaskInstanceTest {
//sub process
taskInstance
.
setTaskType
(
"DEPENDENT"
);
Assert
.
assertTrue
(
taskInstance
.
isDependTask
());
}
/**
* test for TaskInstance.getDependence
*/
@Test
public
void
testTaskInstanceGetDependence
()
{
TaskInstance
taskInstance
;
TaskNode
taskNode
;
taskInstance
=
new
TaskInstance
();
taskInstance
.
setTaskJson
(
null
);
Assert
.
assertNull
(
taskInstance
.
getDependency
());
taskInstance
=
new
TaskInstance
();
taskNode
=
new
TaskNode
();
taskNode
.
setDependence
(
null
);
taskInstance
.
setTaskJson
(
JSONUtils
.
toJsonString
(
taskNode
));
Assert
.
assertNull
(
taskInstance
.
getDependency
());
taskInstance
=
new
TaskInstance
();
taskNode
=
new
TaskNode
();
// expect a JSON here, and will be unwrap when toJsonString
taskNode
.
setDependence
(
"\"A\""
);
taskInstance
.
setTaskJson
(
JSONUtils
.
toJsonString
(
taskNode
));
Assert
.
assertEquals
(
"A"
,
taskInstance
.
getDependency
());
taskInstance
=
new
TaskInstance
();
taskInstance
.
setTaskJson
(
null
);
taskInstance
.
setDependency
(
"{}"
);
Assert
.
assertEquals
(
"{}"
,
taskInstance
.
getDependency
());
}
}
dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/master/ConditionsTaskTest.java
浏览文件 @
59610a56
...
...
@@ -16,14 +16,26 @@
*/
package
org.apache.dolphinscheduler.server.master
;
import
org.apache.dolphinscheduler.common.enums.DependentRelation
;
import
org.apache.dolphinscheduler.common.enums.ExecutionStatus
;
import
org.apache.dolphinscheduler.common.enums.TaskType
;
import
org.apache.dolphinscheduler.common.model.DependentItem
;
import
org.apache.dolphinscheduler.common.model.DependentTaskModel
;
import
org.apache.dolphinscheduler.common.model.TaskNode
;
import
org.apache.dolphinscheduler.common.task.conditions.ConditionsParameters
;
import
org.apache.dolphinscheduler.common.task.dependent.DependentParameters
;
import
org.apache.dolphinscheduler.common.utils.JSONUtils
;
import
org.apache.dolphinscheduler.dao.entity.ProcessInstance
;
import
org.apache.dolphinscheduler.dao.entity.TaskInstance
;
import
org.apache.dolphinscheduler.server.master.config.MasterConfig
;
import
org.apache.dolphinscheduler.server.master.runner.ConditionsTaskExecThread
;
import
org.apache.dolphinscheduler.service.bean.SpringApplicationContext
;
import
org.apache.dolphinscheduler.service.process.ProcessService
;
import
java.util.List
;
import
java.util.stream.Collectors
;
import
java.util.stream.Stream
;
import
org.junit.Assert
;
import
org.junit.Before
;
import
org.junit.Test
;
...
...
@@ -34,99 +46,144 @@ import org.slf4j.Logger;
import
org.slf4j.LoggerFactory
;
import
org.springframework.context.ApplicationContext
;
import
java.util.ArrayList
;
import
java.util.List
;
@RunWith
(
MockitoJUnitRunner
.
Silent
.
class
)
public
class
ConditionsTaskTest
{
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
DependentTaskTest
.
class
);
private
ProcessService
processService
;
private
ApplicationContext
applicationContext
;
/**
* TaskNode.runFlag : task can be run normally
*/
public
static
final
String
FLOWNODE_RUN_FLAG_NORMAL
=
"NORMAL"
;
private
ProcessService
processService
;
private
MasterConfig
config
;
private
ProcessInstance
processInstance
;
@Before
public
void
before
()
{
config
=
new
MasterConfig
();
ApplicationContext
applicationContext
=
Mockito
.
mock
(
ApplicationContext
.
class
);
SpringApplicationContext
springApplicationContext
=
new
SpringApplicationContext
();
springApplicationContext
.
setApplicationContext
(
applicationContext
);
MasterConfig
config
=
new
MasterConfig
();
Mockito
.
when
(
applicationContext
.
getBean
(
MasterConfig
.
class
)).
thenReturn
(
config
);
config
.
setMasterTaskCommitRetryTimes
(
3
);
config
.
setMasterTaskCommitInterval
(
1000
);
processService
=
Mockito
.
mock
(
ProcessService
.
class
);
applicationContext
=
Mockito
.
mock
(
ApplicationContext
.
class
);
SpringApplicationContext
springApplicationContext
=
new
SpringApplicationContext
();
springApplicationContext
.
setApplicationContext
(
applicationContext
);
Mockito
.
when
(
applicationContext
.
getBean
(
ProcessService
.
class
)).
thenReturn
(
processService
);
Mockito
.
when
(
applicationContext
.
getBean
(
MasterConfig
.
class
)).
thenReturn
(
config
);
processInstance
=
getProcessInstance
();
Mockito
.
when
(
processService
.
findTaskInstanceById
(
252612
))
.
thenReturn
(
getTaskInstance
());
.
findProcessInstanceById
(
processInstance
.
getId
()))
.
thenReturn
(
processInstance
);
}
Mockito
.
when
(
processService
.
saveTaskInstance
(
getTaskInstance
()))
.
thenReturn
(
tru
e
);
private
TaskInstance
testBasicInit
(
ExecutionStatus
expectResult
)
{
TaskInstance
taskInstance
=
getTaskInstance
(
getTaskNode
(),
processInstanc
e
);
Mockito
.
when
(
processService
.
findProcessInstanceById
(
10112
))
.
thenReturn
(
getProcessInstance
());
// for MasterBaseTaskExecThread.submit
Mockito
.
when
(
processService
.
submitTask
(
taskInstance
))
.
thenReturn
(
taskInstance
);
// for MasterBaseTaskExecThread.call
Mockito
.
when
(
processService
.
findTaskInstanceById
(
taskInstance
.
getId
()))
.
thenReturn
(
taskInstance
);
// for ConditionsTaskExecThread.initTaskParameters
Mockito
.
when
(
processService
.
saveTaskInstance
(
taskInstance
))
.
thenReturn
(
true
);
// for ConditionsTaskExecThread.updateTaskState
Mockito
.
when
(
processService
.
updateTaskInstance
(
taskInstance
))
.
thenReturn
(
true
);
// for ConditionsTaskExecThread.waitTaskQuit
List
<
TaskInstance
>
conditions
=
Stream
.
of
(
getTaskInstanceForValidTaskList
(
1001
,
"1"
,
expectResult
)
).
collect
(
Collectors
.
toList
());
Mockito
.
when
(
processService
.
findValidTaskListByProcessId
(
10112
))
.
thenReturn
(
getTaskInstances
());
.
findValidTaskListByProcessId
(
processInstance
.
getId
()))
.
thenReturn
(
conditions
);
return
taskInstance
;
}
@Test
public
void
testCondition
(){
TaskInstance
taskInstance
=
getTaskInstance
();
String
dependString
=
"{\"dependTaskList\":[{\"dependItemList\":[{\"depTasks\":\"1\",\"status\":\"SUCCESS\"}],\"relation\":\"AND\"}],\"relation\":\"AND\"}"
;
String
conditionResult
=
"{\"successNode\":[\"2\"],\"failedNode\":[\"3\"]}"
;
public
void
testBasicSuccess
()
throws
Exception
{
TaskInstance
taskInstance
=
testBasicInit
(
ExecutionStatus
.
SUCCESS
);
ConditionsTaskExecThread
taskExecThread
=
new
ConditionsTaskExecThread
(
taskInstance
);
taskExecThread
.
call
();
Assert
.
assertEquals
(
ExecutionStatus
.
SUCCESS
,
taskExecThread
.
getTaskInstance
().
getState
());
}
taskInstance
.
setDependency
(
dependString
);
Mockito
.
when
(
processService
.
submitTask
(
taskInstance
))
.
thenReturn
(
taskInstance
);
ConditionsTaskExecThread
conditions
=
new
ConditionsTaskExecThread
(
taskInstance
);
@Test
public
void
testBasicFailure
()
throws
Exception
{
TaskInstance
taskInstance
=
testBasicInit
(
ExecutionStatus
.
FAILURE
);
ConditionsTaskExecThread
taskExecThread
=
new
ConditionsTaskExecThread
(
taskInstance
);
taskExecThread
.
call
();
Assert
.
assertEquals
(
ExecutionStatus
.
FAILURE
,
taskExecThread
.
getTaskInstance
().
getState
());
}
try
{
conditions
.
call
();
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
private
TaskNode
getTaskNode
()
{
TaskNode
taskNode
=
new
TaskNode
();
taskNode
.
setId
(
"tasks-1000"
);
taskNode
.
setName
(
"C"
);
taskNode
.
setType
(
TaskType
.
CONDITIONS
.
toString
());
taskNode
.
setRunFlag
(
FLOWNODE_RUN_FLAG_NORMAL
);
Assert
.
assertEquals
(
ExecutionStatus
.
SUCCESS
,
conditions
.
getTaskInstance
().
getState
());
}
DependentItem
dependentItem
=
new
DependentItem
();
dependentItem
.
setDepTasks
(
"1"
);
dependentItem
.
setStatus
(
ExecutionStatus
.
SUCCESS
);
DependentTaskModel
dependentTaskModel
=
new
DependentTaskModel
();
dependentTaskModel
.
setDependItemList
(
Stream
.
of
(
dependentItem
).
collect
(
Collectors
.
toList
()));
dependentTaskModel
.
setRelation
(
DependentRelation
.
AND
);
private
TaskInstance
getTaskInstance
(){
TaskInstance
taskInstance
=
new
TaskInstance
();
taskInstance
.
setId
(
252612
);
taskInstance
.
setName
(
"C"
);
taskInstance
.
setTaskType
(
"CONDITIONS"
);
taskInstance
.
setProcessInstanceId
(
10112
);
taskInstance
.
setProcessDefinitionId
(
100001
);
return
taskInstance
;
}
DependentParameters
dependentParameters
=
new
DependentParameters
();
dependentParameters
.
setDependTaskList
(
Stream
.
of
(
dependentTaskModel
).
collect
(
Collectors
.
toList
()));
dependentParameters
.
setRelation
(
DependentRelation
.
AND
);
// in: AND(AND(1 is SUCCESS))
taskNode
.
setDependence
(
JSONUtils
.
toJsonString
(
dependentParameters
));
ConditionsParameters
conditionsParameters
=
new
ConditionsParameters
();
conditionsParameters
.
setSuccessNode
(
Stream
.
of
(
"2"
).
collect
(
Collectors
.
toList
()));
conditionsParameters
.
setFailedNode
(
Stream
.
of
(
"3"
).
collect
(
Collectors
.
toList
()));
private
List
<
TaskInstance
>
getTaskInstances
(){
List
<
TaskInstance
>
list
=
new
ArrayList
<>();
TaskInstance
taskInstance
=
new
TaskInstance
();
taskInstance
.
setId
(
199999
);
taskInstance
.
setName
(
"1"
);
taskInstance
.
setState
(
ExecutionStatus
.
SUCCESS
);
list
.
add
(
taskInstance
);
return
list
;
// out: SUCCESS => 2, FAILED => 3
taskNode
.
setConditionResult
(
JSONUtils
.
toJsonString
(
conditionsParameters
));
return
taskNode
;
}
private
ProcessInstance
getProcessInstance
(){
private
ProcessInstance
getProcessInstance
()
{
ProcessInstance
processInstance
=
new
ProcessInstance
();
processInstance
.
setId
(
10
112
);
processInstance
.
setProcessDefinitionId
(
1000
01
);
processInstance
.
setId
(
10
00
);
processInstance
.
setProcessDefinitionId
(
1000
);
processInstance
.
setState
(
ExecutionStatus
.
RUNNING_EXECUTION
);
return
processInstance
;
}
private
TaskInstance
getTaskInstance
(
TaskNode
taskNode
,
ProcessInstance
processInstance
)
{
TaskInstance
taskInstance
=
new
TaskInstance
();
taskInstance
.
setId
(
1000
);
taskInstance
.
setTaskJson
(
JSONUtils
.
toJsonString
(
taskNode
));
taskInstance
.
setName
(
taskNode
.
getName
());
taskInstance
.
setTaskType
(
taskNode
.
getType
());
taskInstance
.
setProcessInstanceId
(
processInstance
.
getId
());
taskInstance
.
setProcessDefinitionId
(
processInstance
.
getProcessDefinitionId
());
return
taskInstance
;
}
private
TaskInstance
getTaskInstanceForValidTaskList
(
int
id
,
String
name
,
ExecutionStatus
state
)
{
TaskInstance
taskInstance
=
new
TaskInstance
();
taskInstance
.
setId
(
id
);
taskInstance
.
setName
(
name
);
taskInstance
.
setState
(
state
);
return
taskInstance
;
}
}
pom.xml
浏览文件 @
59610a56
...
...
@@ -797,6 +797,7 @@
<include>
**/dao/mapper/CommandMapperTest.java
</include>
<include>
**/dao/mapper/ConnectionFactoryTest.java
</include>
<include>
**/dao/mapper/DataSourceMapperTest.java
</include>
<include>
**/dao/entity/TaskInstanceTest.java
</include>
<include>
**/dao/entity/UdfFuncTest.java
</include>
<include>
**/remote/JsonSerializerTest.java
</include>
<include>
**/remote/RemoveTaskLogResponseCommandTest.java
</include>
...
...
@@ -820,7 +821,7 @@
<include>
**/server/master/AlertManagerTest.java
</include>
<include>
**/server/master/MasterCommandTest.java
</include>
<include>
**/server/master/DependentTaskTest.java
</include>
<
!--<include>**/server/master/ConditionsTaskTest.java</include>--
>
<
include>
**/server/master/ConditionsTaskTest.java
</include
>
<include>
**/server/master/MasterExecThreadTest.java
</include>
<include>
**/server/master/ParamsTest.java
</include>
<include>
**/server/register/ZookeeperNodeManagerTest.java
</include>
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录