WangHan
2024-09-12 d5855a4926926698b740bc6c7ba489de47adb68b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
package tech.powerjob.server.core.workflow.hanlder;
 
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import tech.powerjob.common.enums.WorkflowNodeType;
import tech.powerjob.common.model.PEWorkflowDAG;
import tech.powerjob.server.core.workflow.hanlder.impl.DecisionNodeHandler;
import tech.powerjob.server.persistence.remote.model.WorkflowInstanceInfoDO;
 
 
import static tech.powerjob.server.core.data.DataConstructUtil.*;
 
/**
 * @author Echo009
 * @since 2021/12/9
 * <p>
 * 如有变动,请同步变更文档
 * https://www.yuque.com/powerjob/dev/bgw03h/edit?toc_node_uuid=V9igz9SZ30lF59bX
 */
class DecisionNodeHandlerTest {
 
    private final DecisionNodeHandler decisionNodeHandler = new DecisionNodeHandler();
 
 
    @Test
    void testCase1() {
 
        PEWorkflowDAG peWorkflowDAG = constructEmptyDAG();
        PEWorkflowDAG.Node node1 = new PEWorkflowDAG.Node(1L, WorkflowNodeType.DECISION.getCode());
        // decision node return true
        node1.setNodeParams("true;");
        PEWorkflowDAG.Node node2 = new PEWorkflowDAG.Node(2L);
        PEWorkflowDAG.Node node3 = new PEWorkflowDAG.Node(3L);
        PEWorkflowDAG.Node node4 = new PEWorkflowDAG.Node(4L);
        addNodes(peWorkflowDAG, node1, node2, node3, node4);
 
        PEWorkflowDAG.Edge edge1_2 = new PEWorkflowDAG.Edge(1L, 2L, "false");
        PEWorkflowDAG.Edge edge1_3 = new PEWorkflowDAG.Edge(1L, 3L, "true");
        PEWorkflowDAG.Edge edge2_4 = new PEWorkflowDAG.Edge(2L, 4L);
        addEdges(peWorkflowDAG, edge1_2, edge1_3, edge2_4);
 
        decisionNodeHandler.handle(node1, peWorkflowDAG, new WorkflowInstanceInfoDO());
        Assertions.assertEquals(false, node2.getEnable());
        Assertions.assertEquals(true, node2.getDisableByControlNode());
        Assertions.assertEquals(false, node4.getEnable());
        Assertions.assertEquals(true, node4.getDisableByControlNode());
        //
        Assertions.assertEquals(false, edge1_2.getEnable());
        Assertions.assertEquals(false, edge2_4.getEnable());
 
    }
 
 
    @Test
    void testCase2() {
 
        PEWorkflowDAG peWorkflowDAG = constructEmptyDAG();
        PEWorkflowDAG.Node node1 = new PEWorkflowDAG.Node(1L, WorkflowNodeType.DECISION.getCode());
        // decision node return true
        node1.setNodeParams("true;");
        PEWorkflowDAG.Node node2 = new PEWorkflowDAG.Node(2L);
        PEWorkflowDAG.Node node3 = new PEWorkflowDAG.Node(3L);
        PEWorkflowDAG.Node node4 = new PEWorkflowDAG.Node(4L);
        PEWorkflowDAG.Node node5 = new PEWorkflowDAG.Node(5L);
        addNodes(peWorkflowDAG, node1, node2, node3, node4, node5);
 
        PEWorkflowDAG.Edge edge1_2 = new PEWorkflowDAG.Edge(1L, 2L, "false");
        PEWorkflowDAG.Edge edge1_3 = new PEWorkflowDAG.Edge(1L, 3L, "true");
        PEWorkflowDAG.Edge edge2_4 = new PEWorkflowDAG.Edge(2L, 4L);
        PEWorkflowDAG.Edge edge2_5 = new PEWorkflowDAG.Edge(2L, 5L);
        PEWorkflowDAG.Edge edge3_5 = new PEWorkflowDAG.Edge(3L, 5L);
        addEdges(peWorkflowDAG, edge1_2, edge1_3, edge2_4, edge2_5, edge3_5);
 
        decisionNodeHandler.handle(node1, peWorkflowDAG, new WorkflowInstanceInfoDO());
        Assertions.assertEquals(false, node2.getEnable());
        Assertions.assertEquals(true, node2.getDisableByControlNode());
        Assertions.assertEquals(false, node4.getEnable());
        Assertions.assertEquals(true, node4.getDisableByControlNode());
        //
        Assertions.assertEquals(false, edge1_2.getEnable());
        Assertions.assertEquals(false, edge2_4.getEnable());
        Assertions.assertEquals(false, edge2_5.getEnable());
 
    }
 
    @Test
    void testCase3() {
 
        PEWorkflowDAG peWorkflowDAG = constructEmptyDAG();
        PEWorkflowDAG.Node node1 = new PEWorkflowDAG.Node(1L, WorkflowNodeType.DECISION.getCode());
        // decision node return true
        node1.setNodeParams("true;");
        PEWorkflowDAG.Node node2 = new PEWorkflowDAG.Node(2L, WorkflowNodeType.DECISION.getCode());
        // decision node return true
        node2.setNodeParams("true;");
        PEWorkflowDAG.Node node3 = new PEWorkflowDAG.Node(3L);
        PEWorkflowDAG.Node node4 = new PEWorkflowDAG.Node(4L);
        PEWorkflowDAG.Node node5 = new PEWorkflowDAG.Node(5L);
        addNodes(peWorkflowDAG, node1, node2, node3, node4, node5);
 
        PEWorkflowDAG.Edge edge1_2 = new PEWorkflowDAG.Edge(1L, 2L, "true");
        PEWorkflowDAG.Edge edge1_3 = new PEWorkflowDAG.Edge(1L, 3L, "false");
        PEWorkflowDAG.Edge edge2_5 = new PEWorkflowDAG.Edge(2L, 5L, "false");
        PEWorkflowDAG.Edge edge2_4 = new PEWorkflowDAG.Edge(2L, 4L, "true");
        PEWorkflowDAG.Edge edge3_5 = new PEWorkflowDAG.Edge(3L, 5L);
        addEdges(peWorkflowDAG, edge1_2, edge1_3, edge2_4, edge2_5, edge3_5);
        // 处理第一个判断节点后
        decisionNodeHandler.handle(node1, peWorkflowDAG, new WorkflowInstanceInfoDO());
        Assertions.assertEquals(false, node3.getEnable());
        Assertions.assertEquals(true, node3.getDisableByControlNode());
        //
        Assertions.assertEquals(false, edge1_3.getEnable());
        Assertions.assertEquals(false, edge3_5.getEnable());
        Assertions.assertNull(edge2_5.getEnable());
        // 节点 5 还是初始状态
        Assertions.assertNull(node5.getEnable());
        // 处理第二个判断节点
        decisionNodeHandler.handle(node2, peWorkflowDAG, new WorkflowInstanceInfoDO());
        // 节点 5 被 disable
        Assertions.assertFalse(node5.getEnable());
        Assertions.assertFalse(edge2_5.getEnable());
    }
 
 
    @Test
    void testCase4() {
 
        PEWorkflowDAG peWorkflowDAG = constructEmptyDAG();
        PEWorkflowDAG.Node node1 = new PEWorkflowDAG.Node(1L, WorkflowNodeType.DECISION.getCode());
        // decision node return true
        node1.setNodeParams("true;");
        PEWorkflowDAG.Node node2 = new PEWorkflowDAG.Node(2L, WorkflowNodeType.DECISION.getCode());
        // decision node return true
        node2.setNodeParams("true;");
        PEWorkflowDAG.Node node3 = new PEWorkflowDAG.Node(3L);
        PEWorkflowDAG.Node node4 = new PEWorkflowDAG.Node(4L);
        PEWorkflowDAG.Node node5 = new PEWorkflowDAG.Node(5L);
        addNodes(peWorkflowDAG, node1, node2, node3, node4, node5);
 
        PEWorkflowDAG.Edge edge1_2 = new PEWorkflowDAG.Edge(1L, 2L, "true");
        PEWorkflowDAG.Edge edge1_3 = new PEWorkflowDAG.Edge(1L, 3L, "false");
        PEWorkflowDAG.Edge edge2_5 = new PEWorkflowDAG.Edge(2L, 5L, "true");
        PEWorkflowDAG.Edge edge2_4 = new PEWorkflowDAG.Edge(2L, 4L, "false");
        PEWorkflowDAG.Edge edge3_5 = new PEWorkflowDAG.Edge(3L, 5L);
        addEdges(peWorkflowDAG, edge1_2, edge1_3, edge2_4, edge2_5, edge3_5);
        // 处理第一个判断节点后
        decisionNodeHandler.handle(node1, peWorkflowDAG, new WorkflowInstanceInfoDO());
        Assertions.assertEquals(false, node3.getEnable());
        Assertions.assertEquals(true, node3.getDisableByControlNode());
        //
        Assertions.assertEquals(false, edge1_3.getEnable());
        Assertions.assertEquals(false, edge3_5.getEnable());
        Assertions.assertNull(edge2_5.getEnable());
        // 节点 5 还是初始状态
        Assertions.assertNull(node5.getEnable());
        // 处理第二个判断节点
        decisionNodeHandler.handle(node2, peWorkflowDAG, new WorkflowInstanceInfoDO());
        // 节点 5 还是初始状态
        Assertions.assertNull(node5.getEnable());
        Assertions.assertFalse(node4.getEnable());
        Assertions.assertTrue(node4.getDisableByControlNode());
        Assertions.assertFalse(edge2_4.getEnable());
    }
 
}