use of org.jbpm.bpmn2.objects.TestWorkItemHandler in project jbpm by kiegroup.
the class FlowTest method testInclusiveParallelExclusiveSplitLoopAsync.
@Test
public void testInclusiveParallelExclusiveSplitLoopAsync() throws Exception {
KieBase kbase = createKnowledgeBase("BPMN2-InclusiveNestedInParallelNestedInExclusive.bpmn2");
ksession = createKnowledgeSession(kbase);
TestWorkItemHandler handler = new TestWorkItemHandler();
ksession.getWorkItemManager().registerWorkItemHandler("testWI", handler);
ksession.getWorkItemManager().registerWorkItemHandler("testWI2", new SystemOutWorkItemHandler() {
@Override
public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
Integer x = (Integer) workItem.getParameter("input1");
x++;
Map<String, Object> results = new HashMap<String, Object>();
results.put("output1", x);
manager.completeWorkItem(workItem.getId(), results);
}
});
final Map<String, Integer> nodeInstanceExecutionCounter = new HashMap<String, Integer>();
ksession.addEventListener(new DefaultProcessEventListener() {
@Override
public void beforeNodeTriggered(ProcessNodeTriggeredEvent event) {
Integer value = nodeInstanceExecutionCounter.get(event.getNodeInstance().getNodeName());
if (value == null) {
value = new Integer(0);
}
value++;
nodeInstanceExecutionCounter.put(event.getNodeInstance().getNodeName(), value);
}
});
Map<String, Object> params = new HashMap<String, Object>();
params.put("x", -1);
ProcessInstance processInstance = ksession.startProcess("Process_1", params);
assertProcessInstanceActive(processInstance);
List<WorkItem> workItems = handler.getWorkItems();
assertNotNull(workItems);
assertEquals(2, workItems.size());
// complete work items within OR gateway
for (WorkItem workItem : workItems) {
ksession.getWorkItemManager().completeWorkItem(workItem.getId(), null);
}
assertProcessInstanceActive(processInstance);
workItems = handler.getWorkItems();
assertNotNull(workItems);
assertEquals(2, workItems.size());
// complete work items within OR gateway
for (WorkItem workItem : workItems) {
ksession.getWorkItemManager().completeWorkItem(workItem.getId(), null);
}
assertProcessInstanceActive(processInstance);
workItems = handler.getWorkItems();
assertNotNull(workItems);
assertEquals(1, workItems.size());
// complete last workitem after AND gateway
for (WorkItem workItem : workItems) {
ksession.getWorkItemManager().completeWorkItem(workItem.getId(), null);
}
assertProcessInstanceCompleted(processInstance);
assertEquals(12, nodeInstanceExecutionCounter.size());
assertEquals(1, (int) nodeInstanceExecutionCounter.get("Start"));
assertEquals(2, (int) nodeInstanceExecutionCounter.get("XORGateway-converging"));
assertEquals(2, (int) nodeInstanceExecutionCounter.get("ANDGateway-diverging"));
assertEquals(2, (int) nodeInstanceExecutionCounter.get("ORGateway-diverging"));
assertEquals(2, (int) nodeInstanceExecutionCounter.get("testWI3"));
assertEquals(2, (int) nodeInstanceExecutionCounter.get("testWI2"));
assertEquals(4, (int) nodeInstanceExecutionCounter.get("ORGateway-converging"));
assertEquals(2, (int) nodeInstanceExecutionCounter.get("Script"));
assertEquals(2, (int) nodeInstanceExecutionCounter.get("XORGateway-diverging"));
assertEquals(4, (int) nodeInstanceExecutionCounter.get("ANDGateway-converging"));
assertEquals(1, (int) nodeInstanceExecutionCounter.get("testWI6"));
assertEquals(1, (int) nodeInstanceExecutionCounter.get("End"));
}
use of org.jbpm.bpmn2.objects.TestWorkItemHandler in project jbpm by kiegroup.
the class FlowTest method testMultiInstanceLoopCharacteristicsProcessWithORGateway.
@Test
public void testMultiInstanceLoopCharacteristicsProcessWithORGateway() throws Exception {
KieBase kbase = createKnowledgeBaseWithoutDumper("BPMN2-MultiInstanceLoopCharacteristicsProcessWithORgateway.bpmn2");
ksession = createKnowledgeSession(kbase);
TestWorkItemHandler workItemHandler = new TestWorkItemHandler();
ksession.getWorkItemManager().registerWorkItemHandler("Human Task", workItemHandler);
Map<String, Object> params = new HashMap<String, Object>();
List<Integer> myList = new ArrayList<Integer>();
myList.add(12);
myList.add(15);
params.put("list", myList);
ProcessInstance processInstance = ksession.startProcess("MultiInstanceLoopCharacteristicsProcess", params);
List<WorkItem> workItems = workItemHandler.getWorkItems();
assertEquals(4, workItems.size());
Collection<NodeInstance> nodeInstances = ((WorkflowProcessInstanceImpl) processInstance).getNodeInstances();
assertEquals(1, nodeInstances.size());
NodeInstance nodeInstance = nodeInstances.iterator().next();
assertTrue(nodeInstance instanceof ForEachNodeInstance);
Collection<NodeInstance> nodeInstancesChild = ((ForEachNodeInstance) nodeInstance).getNodeInstances();
assertEquals(2, nodeInstancesChild.size());
for (NodeInstance child : nodeInstancesChild) {
assertTrue(child instanceof CompositeContextNodeInstance);
assertEquals(2, ((CompositeContextNodeInstance) child).getNodeInstances().size());
}
ksession.getWorkItemManager().completeWorkItem(workItems.get(0).getId(), null);
ksession.getWorkItemManager().completeWorkItem(workItems.get(1).getId(), null);
processInstance = ksession.getProcessInstance(processInstance.getId());
nodeInstances = ((WorkflowProcessInstanceImpl) processInstance).getNodeInstances();
assertEquals(1, nodeInstances.size());
nodeInstance = nodeInstances.iterator().next();
assertTrue(nodeInstance instanceof ForEachNodeInstance);
if (isPersistence()) {
// when persistence is used there is slightly different behaviour of ContextNodeInstance
// it's already tested by SimplePersistenceBPMNProcessTest.testMultiInstanceLoopCharacteristicsProcessWithORGateway
nodeInstancesChild = ((ForEachNodeInstance) nodeInstance).getNodeInstances();
assertEquals(1, nodeInstancesChild.size());
Iterator<NodeInstance> childIterator = nodeInstancesChild.iterator();
assertTrue(childIterator.next() instanceof CompositeContextNodeInstance);
ksession.getWorkItemManager().completeWorkItem(workItems.get(2).getId(), null);
ksession.getWorkItemManager().completeWorkItem(workItems.get(3).getId(), null);
assertProcessInstanceFinished(processInstance, ksession);
} else {
nodeInstancesChild = ((ForEachNodeInstance) nodeInstance).getNodeInstances();
assertEquals(2, nodeInstancesChild.size());
Iterator<NodeInstance> childIterator = nodeInstancesChild.iterator();
assertTrue(childIterator.next() instanceof CompositeContextNodeInstance);
assertTrue(childIterator.next() instanceof ForEachJoinNodeInstance);
ksession.getWorkItemManager().completeWorkItem(workItems.get(2).getId(), null);
ksession.getWorkItemManager().completeWorkItem(workItems.get(3).getId(), null);
assertProcessInstanceFinished(processInstance, ksession);
}
}
use of org.jbpm.bpmn2.objects.TestWorkItemHandler in project jbpm by kiegroup.
the class FlowTest method testInclusiveSplitAndJoinWithTimer.
@Test(timeout = 10000)
public void testInclusiveSplitAndJoinWithTimer() throws Exception {
NodeLeftCountDownProcessEventListener countDownListener = new NodeLeftCountDownProcessEventListener("timer", 2);
KieBase kbase = createKnowledgeBase("BPMN2-InclusiveSplitAndJoinWithTimer.bpmn2");
ksession = createKnowledgeSession(kbase);
ksession.addEventListener(countDownListener);
TestWorkItemHandler workItemHandler = new TestWorkItemHandler();
ksession.getWorkItemManager().registerWorkItemHandler("Human Task", workItemHandler);
Map<String, Object> params = new HashMap<String, Object>();
params.put("x", 15);
ProcessInstance processInstance = ksession.startProcess("com.sample.test", params);
List<WorkItem> activeWorkItems = workItemHandler.getWorkItems();
assertEquals(1, activeWorkItems.size());
ksession.getWorkItemManager().completeWorkItem(activeWorkItems.get(0).getId(), null);
countDownListener.waitTillCompleted();
assertProcessInstanceActive(processInstance);
activeWorkItems = workItemHandler.getWorkItems();
assertEquals(2, activeWorkItems.size());
ksession.getWorkItemManager().completeWorkItem(activeWorkItems.get(0).getId(), null);
assertProcessInstanceActive(processInstance);
ksession.getWorkItemManager().completeWorkItem(activeWorkItems.get(1).getId(), null);
assertProcessInstanceFinished(processInstance, ksession);
}
use of org.jbpm.bpmn2.objects.TestWorkItemHandler in project jbpm by kiegroup.
the class FlowTest method testInclusiveJoinWithLoopAndHumanTasks.
@Test
public void testInclusiveJoinWithLoopAndHumanTasks() throws Exception {
KieBase kbase = createKnowledgeBase("BPMN2-InclusiveGatewayWithHumanTasksProcess.bpmn2");
ksession = createKnowledgeSession(kbase);
final Map<String, Integer> nodeInstanceExecutionCounter = new HashMap<String, Integer>();
ksession.addEventListener(new DefaultProcessEventListener() {
@Override
public void beforeNodeTriggered(ProcessNodeTriggeredEvent event) {
logger.info("{} {}", event.getNodeInstance().getNodeName(), ((NodeInstanceImpl) event.getNodeInstance()).getLevel());
Integer value = nodeInstanceExecutionCounter.get(event.getNodeInstance().getNodeName());
if (value == null) {
value = new Integer(0);
}
value++;
nodeInstanceExecutionCounter.put(event.getNodeInstance().getNodeName(), value);
}
});
TestWorkItemHandler handler = new TestWorkItemHandler();
ksession.getWorkItemManager().registerWorkItemHandler("Human Task", handler);
Map<String, Object> params = new HashMap<String, Object>();
params.put("firstXor", true);
params.put("secondXor", true);
params.put("thirdXor", true);
ProcessInstance processInstance = ksession.startProcess("InclusiveWithAdvancedLoop", params);
// simulate completion of first task
assertProcessInstanceActive(processInstance);
ksession.getWorkItemManager().completeWorkItem(handler.getWorkItem().getId(), null);
assertProcessInstanceActive(processInstance);
List<WorkItem> workItems = handler.getWorkItems();
assertNotNull(workItems);
assertEquals(2, workItems.size());
WorkItem remainingWork = null;
for (WorkItem wi : workItems) {
assertProcessInstanceActive(processInstance);
// complete second task that will trigger converging OR gateway
if (wi.getParameter("NodeName").equals("HT Form2")) {
ksession.getWorkItemManager().completeWorkItem(wi.getId(), null);
} else {
remainingWork = wi;
}
}
assertProcessInstanceActive(processInstance);
ksession.getWorkItemManager().completeWorkItem(remainingWork.getId(), null);
assertProcessInstanceActive(processInstance);
ksession.getWorkItemManager().completeWorkItem(handler.getWorkItem().getId(), null);
assertProcessInstanceCompleted(processInstance);
assertEquals(13, nodeInstanceExecutionCounter.size());
assertEquals(1, (int) nodeInstanceExecutionCounter.get("Start"));
assertEquals(1, (int) nodeInstanceExecutionCounter.get("HT Form1"));
assertEquals(1, (int) nodeInstanceExecutionCounter.get("and1"));
assertEquals(1, (int) nodeInstanceExecutionCounter.get("HT Form2"));
assertEquals(1, (int) nodeInstanceExecutionCounter.get("xor1"));
assertEquals(1, (int) nodeInstanceExecutionCounter.get("xor2"));
assertEquals(1, (int) nodeInstanceExecutionCounter.get("HT Form3"));
assertEquals(1, (int) nodeInstanceExecutionCounter.get("Koniec"));
assertEquals(1, (int) nodeInstanceExecutionCounter.get("xor 3"));
assertEquals(1, (int) nodeInstanceExecutionCounter.get("HT Form4"));
assertEquals(1, (int) nodeInstanceExecutionCounter.get("xor4"));
assertEquals(1, (int) nodeInstanceExecutionCounter.get("Koniec2"));
assertEquals(1, (int) nodeInstanceExecutionCounter.get("or1"));
}
use of org.jbpm.bpmn2.objects.TestWorkItemHandler in project jbpm by kiegroup.
the class FlowTest method testTimerAndGateway.
@Test
public void testTimerAndGateway() throws Exception {
NodeLeftCountDownProcessEventListener countDownListener = new NodeLeftCountDownProcessEventListener("timer", 1);
KieBase kbase = createKnowledgeBase("timer/BPMN2-ParallelSplitWithTimerProcess.bpmn2");
ksession = createKnowledgeSession(kbase);
ksession.addEventListener(countDownListener);
TestWorkItemHandler handler1 = new TestWorkItemHandler();
TestWorkItemHandler handler2 = new TestWorkItemHandler();
ksession.getWorkItemManager().registerWorkItemHandler("task1", handler1);
ksession.getWorkItemManager().registerWorkItemHandler("task2", handler2);
ProcessInstance instance = ksession.createProcessInstance("timer-process", new HashMap<String, Object>());
ksession.startProcessInstance(instance.getId());
WorkItem workItem1 = handler1.getWorkItem();
assertNotNull(workItem1);
assertNull(handler1.getWorkItem());
// first safe state: task1 completed
ksession.getWorkItemManager().completeWorkItem(workItem1.getId(), null);
ksession = restoreSession(ksession, true);
ksession.addEventListener(countDownListener);
ksession.getWorkItemManager().registerWorkItemHandler("task1", handler1);
ksession.getWorkItemManager().registerWorkItemHandler("task2", handler2);
// second safe state: timer completed, waiting on task2
countDownListener.waitTillCompleted();
WorkItem workItem2 = handler2.getWorkItem();
// Both sides of the join are completed. But on the process instance, there are two
// JoinInstance for the same Join, and since it is an AND join, it never reaches task2
// It fails after the next assertion
assertNotNull(workItem2);
assertNull(handler2.getWorkItem());
ksession.getWorkItemManager().completeWorkItem(workItem2.getId(), null);
assertProcessInstanceCompleted(instance);
}
Aggregations