@Test public void testSignalStart() throws Exception { KieBase kbase = createKnowledgeBase("BPMN2-SignalStart.bpmn2"); KieSession ksession = createKnowledgeSession(kbase); final List<Long> list = new ArrayList<Long>(); ksession.addEventListener(new DefaultProcessEventListener() { public void afterProcessStarted(ProcessStartedEvent event) { list.add(event.getProcessInstance().getId()); } }); ksession.signalEvent("MySignal", "NewValue"); assertThat(list.size()).isEqualTo(1); }
@Test public void testSubProcessWithTerminateEndEvent() throws Exception { KieBase kbase = createKnowledgeBase("BPMN2-SubProcessWithTerminateEndEvent.bpmn2"); ksession = createKnowledgeSession(kbase); final List<String> list = new ArrayList<String>(); ksession.addEventListener(new DefaultProcessEventListener() { public void afterNodeTriggered(ProcessNodeTriggeredEvent event) { list.add(event.getNodeInstance().getNodeName()); } }); ProcessInstance processInstance = ksession .startProcess("SubProcessTerminate"); assertProcessInstanceCompleted(processInstance); assertEquals(7, list.size()); }
@Test public void testSignalBoundaryEventOnTaskWithSignalName() throws Exception { KieBase kbase = createKnowledgeBase("BPMN2-BoundarySignalWithNameEventOnTaskbpmn2.bpmn"); ksession = createKnowledgeSession(kbase); ksession.getWorkItemManager().registerWorkItemHandler("Human Task", new TestWorkItemHandler()); ksession.addEventListener(LOGGING_EVENT_LISTENER); ProcessInstance processInstance = ksession .startProcess("BoundarySignalOnTask"); ksession.signalEvent("MySignal", "value"); assertProcessInstanceFinished(processInstance, ksession); }
@Test public void testBusinessRuleTaskDynamic() throws Exception { KieBase kbase = createKnowledgeBaseWithoutDumper( "BPMN2-BusinessRuleTaskDynamic.bpmn2", "BPMN2-BusinessRuleTask.drl"); ksession = createKnowledgeSession(kbase); ksession.addEventListener(new RuleAwareProcessEventLister()); Map<String, Object> params = new HashMap<String, Object>(); params.put("dynamicrule", "MyRuleFlow"); ProcessInstance processInstance = ksession.startProcess( "BPMN2-BusinessRuleTask", params); assertProcessInstanceFinished(processInstance, ksession); }
@Test public void testIntermediateCatchEventConditionRemovePIAfter() throws Exception { KieBase kbase = createKnowledgeBase("BPMN2-IntermediateCatchEventCondition.bpmn2"); ksession = createKnowledgeSession(kbase); ksession.addEventListener(new RuleAwareProcessEventLister()); ProcessInstance processInstance = ksession .startProcess("IntermediateCatchEvent"); assertProcessInstanceActive(processInstance); ksession = restoreSession(ksession, true); ksession.addEventListener(new RuleAwareProcessEventLister()); ksession.insert(person); assertProcessInstanceFinished(processInstance, ksession);
@Test public void testConditionalStart() throws Exception { KieBase kbase = createKnowledgeBaseWithoutDumper("BPMN2-ConditionalStart.bpmn2"); ksession = createKnowledgeSession(kbase); final List<Long> startedInstances = new ArrayList<>(); ksession.addEventListener(new DefaultProcessEventListener() { @Override public void afterProcessStarted(ProcessStartedEvent event) { startedInstances.add(event.getProcessInstance().getId()); } }); Person person = new Person(); person.setName("jack"); ksession.insert(person); assertThat(startedInstances).hasSize(0); person = new Person(); person.setName("john"); ksession.insert(person); assertThat(startedInstances).hasSize(1); assertNodeTriggered(startedInstances.get(0), "StartProcess", "Hello", "EndProcess"); }
@Test(timeout=10000) public void testTimerCycle() throws Exception { NodeLeftCountDownProcessEventListener countDownListener = new NodeLeftCountDownProcessEventListener("start", 5); KieBase kbase = createKnowledgeBase("timer/BPMN2-StartTimerCycle.bpmn2"); ksession = createKnowledgeSession(kbase); ksession.addEventListener(countDownListener); StartCountingListener listener = new StartCountingListener(); ksession.addEventListener(listener); countDownListener.waitTillCompleted(); assertThat(listener.getCount("start.cycle")).isEqualTo(5); }
@Test public void testDynamicAdd() { String test = session.addEventListener( new DebugRuleRuntimeEventListener( ) ); int fired = session.fireAllRules(); // 1 System.out.println(fired); effects = session.getObjects(); fired = session.fireAllRules(); // 0 System.out.println(fired); effects = session.getObjects();
private void testAdHocSubprocess() { RuntimeEngine runtime1 = manager.getRuntimeEngine(ProcessInstanceIdContext.get()); KieSession ksession1 = runtime1.getKieSession(); assertNotNull(ksession1); ProcessInstance processInstance = ksession1.startProcess("jbpm-abort-ht-issue.ad-hoc-abort-ht"); manager.disposeRuntimeEngine(runtime1); // then signal via first manager, should only signal instances owned by that manager runtime1 = manager.getRuntimeEngine(ProcessInstanceIdContext.get(processInstance.getId())); ksession1 = runtime1.getKieSession(); ksession1.addEventListener(new TaskCleanUpProcessEventListener(runtime1.getTaskService())); ksession1.signalEvent("Milestone", null, processInstance.getId()); manager.disposeRuntimeEngine(runtime1); JPAAuditLogService auditService = new JPAAuditLogService(emf); // process instance 1 should be completed by signal ProcessInstanceLog pi1Log = auditService.findProcessInstance(processInstance.getId()); assertNotNull(pi1Log); assertEquals(ProcessInstance.STATE_COMPLETED, pi1Log.getStatus().intValue()); auditService.dispose(); // close manager which will close session maintained by the manager manager.close(); }
@Test public void testSignalBoundaryEventOnTask() throws Exception { KieBase kbase = createKnowledgeBase("BPMN2-BoundarySignalEventOnTaskbpmn2.bpmn"); ksession = createKnowledgeSession(kbase); ksession.getWorkItemManager().registerWorkItemHandler("Human Task", new TestWorkItemHandler()); ksession.addEventListener(LOGGING_EVENT_LISTENER); ProcessInstance processInstance = ksession .startProcess("BoundarySignalOnTask"); ksession.signalEvent("MySignal", "value"); assertProcessInstanceFinished(processInstance, ksession); }
@Test public void testSubProcessWithTerminateEndEventProcessScope() throws Exception { KieBase kbase = createKnowledgeBase("BPMN2-SubProcessWithTerminateEndEventProcessScope.bpmn2"); ksession = createKnowledgeSession(kbase); final List<String> list = new ArrayList<String>(); ksession.addEventListener(new DefaultProcessEventListener() { public void afterNodeTriggered(ProcessNodeTriggeredEvent event) { list.add(event.getNodeInstance().getNodeName()); } }); ProcessInstance processInstance = ksession .startProcess("SubProcessTerminate"); assertProcessInstanceCompleted(processInstance); assertEquals(5, list.size()); }
@Test public void testMessageStart() throws Exception { KieBase kbase = createKnowledgeBase("BPMN2-MessageStart.bpmn2"); KieSession ksession = createKnowledgeSession(kbase); final List<Long> list = new ArrayList<Long>(); ksession.addEventListener(new DefaultProcessEventListener() { public void afterProcessStarted(ProcessStartedEvent event) { list.add(event.getProcessInstance().getId()); } }); ksession.signalEvent("Message-HelloMessage", "NewValue"); assertThat(list.size()).isEqualTo(1); }
@Test @RequirePersistence(true) public void testBusinessRuleTaskWithPersistence() throws Exception { KieBase kbase = createKnowledgeBaseWithoutDumper("BPMN2-BusinessRuleTask.bpmn2", "BPMN2-BusinessRuleTask.drl"); ksession = createKnowledgeSession(kbase); ksession.addEventListener(new RuleAwareProcessEventLister()); ProcessInstance processInstance = ksession .startProcess("BPMN2-BusinessRuleTask"); ksession = restoreSession(ksession, true); ksession.addEventListener(new RuleAwareProcessEventLister()); assertProcessInstanceFinished(processInstance, ksession); }
@Test public void testIntermediateCatchEventConditionSetVariableAfter() throws Exception { KieBase kbase = createKnowledgeBase("BPMN2-IntermediateCatchEventConditionSetVariableAfter.bpmn2"); ksession = createKnowledgeSession(kbase); ksession.addEventListener(new RuleAwareProcessEventLister()); ProcessInstance processInstance = ksession .startProcess("IntermediateCatchEvent"); assertProcessInstanceActive(processInstance); ksession = restoreSession(ksession, true); ksession.addEventListener(new RuleAwareProcessEventLister()); ksession.insert(person); assertProcessInstanceFinished(processInstance, ksession);
@Test public void testEventModel() throws Exception { final KieBase kbase = SerializationHelper.serializeObject(loadKnowledgeBase("test_EventModel.drl")); final KieSession wm = createKnowledgeSession(kbase); final RuleRuntimeEventListener wmel = mock(RuleRuntimeEventListener.class); wm.addEventListener(wmel); final Cheese stilton = new Cheese("stilton", 15); final FactHandle stiltonHandle = wm.insert(stilton); final ArgumentCaptor<ObjectInsertedEvent> oic = ArgumentCaptor.forClass(org.kie.api.event.rule.ObjectInsertedEvent.class); verify(wmel).objectInserted(oic.capture()); assertSame(stiltonHandle, oic.getValue().getFactHandle()); wm.update(stiltonHandle, stilton); final ArgumentCaptor<org.kie.api.event.rule.ObjectUpdatedEvent> ouc = ArgumentCaptor.forClass(org.kie.api.event.rule.ObjectUpdatedEvent.class); verify(wmel).objectUpdated(ouc.capture()); assertSame(stiltonHandle, ouc.getValue().getFactHandle()); wm.delete(stiltonHandle); final ArgumentCaptor<ObjectDeletedEvent> orc = ArgumentCaptor.forClass(ObjectDeletedEvent.class); verify(wmel).objectDeleted(orc.capture()); assertSame(stiltonHandle, orc.getValue().getFactHandle()); }
@Test public void testInterruptingEscalationBoundaryEventOnTask() throws Exception { KieBase kbase = createKnowledgeBase("escalation/BPMN2-EscalationBoundaryEventOnTaskInterrupting.bpmn2"); ksession = createKnowledgeSession(kbase); TestWorkItemHandler handler = new TestWorkItemHandler(); ksession.getWorkItemManager().registerWorkItemHandler("Human Task", handler); ksession.addEventListener(LOGGING_EVENT_LISTENER); ProcessInstance processInstance = ksession.startProcess("BPMN2-EscalationBoundaryEventOnTask"); List<WorkItem> workItems = handler.getWorkItems(); assertEquals(2, workItems.size()); WorkItem workItem = workItems.get(0); if (!"john".equalsIgnoreCase((String) workItem.getParameter("ActorId"))) { workItem = workItems.get(1); } ksession.getWorkItemManager().completeWorkItem(workItem.getId(), null); assertProcessInstanceFinished(processInstance, ksession); }
@Test public void testMultipleInOutgoingSequenceFlows() throws Exception { NodeLeftCountDownProcessEventListener countDownListener = new NodeLeftCountDownProcessEventListener("timer", 1); System.setProperty("jbpm.enable.multi.con", "true"); KieBase kbase = createKnowledgeBase("BPMN2-MultipleInOutgoingSequenceFlows.bpmn2"); ksession = createKnowledgeSession(kbase); ksession.addEventListener(countDownListener); final List<Long> list = new ArrayList<Long>(); ksession.addEventListener(new DefaultProcessEventListener() { public void beforeProcessStarted(ProcessStartedEvent event) { list.add(event.getProcessInstance().getId()); } }); assertEquals(0, list.size()); countDownListener.waitTillCompleted(); assertEquals(1, list.size()); System.clearProperty("jbpm.enable.multi.con"); }
@Test(timeout=10000) public void testTimerStart() throws Exception { NodeLeftCountDownProcessEventListener countDownListener = new NodeLeftCountDownProcessEventListener("StartProcess", 5); KieBase kbase = createKnowledgeBase("BPMN2-TimerStart.bpmn2"); KieSession ksession = createKnowledgeSession(kbase); ksession.addEventListener(countDownListener); final List<Long> list = new ArrayList<Long>(); ksession.addEventListener(new DefaultProcessEventListener() { public void beforeProcessStarted(ProcessStartedEvent event) { list.add(event.getProcessInstance().getId()); } }); assertThat(list.size()).isEqualTo(0); countDownListener.waitTillCompleted(); assertThat(list.size()).isEqualTo(5); }
@Test public void testBoundarySignalEventOnSubprocessWithVariableResolution() throws Exception { KieBase kbase = createKnowledgeBase("BPMN2-SubprocessWithSignalEndEventAndSignalBoundaryEvent.bpmn2"); ksession = createKnowledgeSession(kbase); ksession.addEventListener(LOGGING_EVENT_LISTENER); Map<String, Object> params = new HashMap<>(); params.put("document-ref", "signalling"); params.put("message", "hello"); ProcessInstance processInstance = ksession.startProcess("SubprocessWithSignalEndEventAndSignalBoundaryEvent", params); assertNodeTriggered(processInstance.getId(), "sysout from boundary", "end2"); assertNotNodeTriggered(processInstance.getId(),"end1"); assertProcessInstanceFinished(processInstance, ksession); }
@Test(timeout=10000) public void testTimerBoundaryEvent() throws Exception { NodeLeftCountDownProcessEventListener countDownListener = new NodeLeftCountDownProcessEventListener("TimerEvent", 1); KieBase kbase = createKnowledgeBase("BPMN2-TimerBoundaryEventDuration.bpmn2"); KieSession ksession = createKnowledgeSession(kbase); ksession.addEventListener(countDownListener); ksession.getWorkItemManager().registerWorkItemHandler("MyTask", new DoNothingWorkItemHandler()); ProcessInstance processInstance = ksession.startProcess("TimerBoundaryEvent"); assertThat(processInstance.getState()).isEqualTo(ProcessInstance.STATE_ACTIVE); countDownListener.waitTillCompleted(); assertProcessInstanceCompleted(processInstance.getId(), ksession); }