-
Notifications
You must be signed in to change notification settings - Fork 47
/
BoundaryTimerEventProcessTest.java
148 lines (118 loc) · 5.37 KB
/
BoundaryTimerEventProcessTest.java
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
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.plugtree.training.jbpm;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseFactory;
import org.drools.builder.KnowledgeBuilder;
import org.drools.builder.KnowledgeBuilderError;
import org.drools.builder.KnowledgeBuilderFactory;
import org.drools.builder.ResourceType;
import org.drools.io.impl.ClassPathResource;
import org.drools.logger.KnowledgeRuntimeLogger;
import org.drools.logger.KnowledgeRuntimeLoggerFactory;
import org.drools.runtime.StatefulKnowledgeSession;
import org.drools.runtime.process.ProcessInstance;
import org.drools.runtime.process.WorkflowProcessInstance;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.plugtree.training.jbpm.handler.HumanTaskMockHandler;
/**
*
* @author esteban
*/
public class BoundaryTimerEventProcessTest {
private KnowledgeRuntimeLogger fileLogger;
private StatefulKnowledgeSession ksession;
private HumanTaskMockHandler humanTaskMockHandler;
@Before
public void setup() throws IOException {
this.ksession = this.createKSession();
//Console log. Try to analyze it first
KnowledgeRuntimeLoggerFactory.newConsoleLogger(ksession);
//File logger: try to open its output using Audit View in eclipse
File logFile = File.createTempFile("process-output", "");
System.out.println("Log file= " + logFile.getAbsolutePath() + ".log");
fileLogger = KnowledgeRuntimeLoggerFactory.newFileLogger(ksession, logFile.getAbsolutePath());
}
@After
public void cleanup() {
if (this.fileLogger != null) {
this.fileLogger.close();
}
}
@Test
public void validScenarioTest() throws InterruptedException {
Map<String,Object> parameters = new HashMap<String, Object>();
parameters.put("emailService", new ArrayList<String>());
//Start the process using its id
ProcessInstance process = ksession.startProcess("org.plugtree.training.jbpm.BoundaryTimerEvent",parameters);
//The process is in the Human Task waiting for its completion
Assert.assertEquals(ProcessInstance.STATE_ACTIVE, process.getState());
//wait 5 seconds to complete the task
Thread.sleep(5000);
//The Human Task is completed
this.humanTaskMockHandler.completeWorkItem();
//The process reaches the end node
Assert.assertEquals(ProcessInstance.STATE_COMPLETED, process.getState());
//The boss shouldn't be notified
List<String> emailService = (List<String>) ((WorkflowProcessInstance)process).getVariable("emailService");
Assert.assertTrue(emailService.isEmpty());
}
@Test
public void invalidScenarioTest() throws InterruptedException {
Map<String,Object> parameters = new HashMap<String, Object>();
parameters.put("emailService", new ArrayList<String>());
//Start the process using its id
ProcessInstance process = ksession.startProcess("org.plugtree.training.jbpm.BoundaryTimerEvent",parameters);
//The process is in the Human Task waiting for its completion
Assert.assertEquals(ProcessInstance.STATE_ACTIVE, process.getState());
//wait 1 minute to see if the boss is notified
Thread.sleep(60000);
//The Human Task is completed
this.humanTaskMockHandler.completeWorkItem();
//The process reaches the end node
Assert.assertEquals(ProcessInstance.STATE_COMPLETED, process.getState());
//The boss should have been notified
List<String> emailService = (List<String>) ((WorkflowProcessInstance)process).getVariable("emailService");
Assert.assertFalse(emailService.isEmpty());
}
/**
* Creates a ksession from a kbase containing process definition
* @return
*/
public StatefulKnowledgeSession createKSession() {
//Create the kbuilder
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
//Add simpleProcess.bpmn to kbuilder
kbuilder.add(new ClassPathResource("process/boundaryTimerProcess.bpmn"), ResourceType.BPMN2);
System.out.println("Compiling resources");
//Check for errors
if (kbuilder.hasErrors()) {
if (kbuilder.getErrors().size() > 0) {
for (KnowledgeBuilderError error : kbuilder.getErrors()) {
System.out.println("Error building kbase: " + error.getMessage());
}
}
throw new RuntimeException("Error building kbase!");
}
//Create a knowledge base and add the generated package
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
//create a new statefull session
final StatefulKnowledgeSession newSession = kbase.newStatefulKnowledgeSession();
//Register Human Task Handler
humanTaskMockHandler = new HumanTaskMockHandler();
newSession.getWorkItemManager().registerWorkItemHandler("Human Task", humanTaskMockHandler);
return newSession;
}
}