Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[incubator-kie-issues-1131] v7 migration to code generation
Browse files Browse the repository at this point in the history
Abhitocode committed Aug 29, 2024
1 parent 4cd44dc commit 010aeb8
Showing 2 changed files with 78 additions and 43 deletions.
91 changes: 57 additions & 34 deletions jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/ErrorEventTest.java
Original file line number Diff line number Diff line change
@@ -38,6 +38,8 @@
import org.jbpm.bpmn2.error.EndErrorWithEventSubprocessProcess;
import org.jbpm.bpmn2.error.ErrorBoundaryEventOnServiceTaskModel;
import org.jbpm.bpmn2.error.ErrorBoundaryEventOnServiceTaskProcess;
import org.jbpm.bpmn2.error.ErrorBoundaryEventOnTaskModel;
import org.jbpm.bpmn2.error.ErrorBoundaryEventOnTaskProcess;
import org.jbpm.bpmn2.error.ErrorVariableModel;
import org.jbpm.bpmn2.error.ErrorVariableProcess;
import org.jbpm.bpmn2.error.EventSubProcessErrorWithScriptModel;
@@ -130,45 +132,51 @@ public void afterNodeLeft(ProcessNodeLeftEvent event) {
}

@Test
public void testEventSubprocessErrorThrowOnTask() throws Exception {
kruntime = createKogitoProcessRuntime("org/jbpm/bpmn2/error/BPMN2-EventSubprocessError.bpmn2");
final List<String> executednodes = new ArrayList<>();
public void testEventSubprocessErrorThrowOnTask() {
Application app = ProcessTestHelper.newApplication();
final List<String> executedNodes = new ArrayList<>();
KogitoProcessEventListener listener = new DefaultKogitoProcessEventListener() {

@Override
public void afterNodeLeft(ProcessNodeLeftEvent event) {
if (event.getNodeInstance().getNodeName()
.equals("Script Task 1")) {
executednodes.add(((KogitoNodeInstance) event.getNodeInstance()).getStringId());
if (event.getNodeInstance().getNodeName().equals("Script Task 1")) {
executedNodes.add(event.getNodeInstance().getId());
}
}

};
kruntime.getProcessEventManager().addEventListener(listener);
kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Human Task", new TestWorkItemHandler() {

EventTrackerProcessListener eventTrackerProcessListener = new EventTrackerProcessListener();
ProcessTestHelper.registerProcessEventListener(app, eventTrackerProcessListener);
ProcessTestHelper.registerProcessEventListener(app, listener);
ProcessTestHelper.registerHandler(app, "Human Task", new TestWorkItemHandler() {
@Override
public void executeWorkItem(KogitoWorkItem workItem, KogitoWorkItemManager manager) {
throw new MyError();

}

@Override
public void abortWorkItem(KogitoWorkItem workItem, KogitoWorkItemManager manager) {
manager.abortWorkItem(workItem.getStringId());
}

});
org.kie.kogito.process.Process<EventSubprocessErrorModel> processDefinition = EventSubprocessErrorProcess.newProcess(app);
ProcessInstance<EventSubprocessErrorModel> processInstance = processDefinition.createInstance(processDefinition.createModel());
processInstance.start();
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_ERROR);
assertThat(eventTrackerProcessListener.tracked())
.anyMatch(ProcessTestHelper.left("start"))
.anyMatch(ProcessTestHelper.triggered("User Task 1"))
.anyMatch(ProcessTestHelper.left("Sub Process 1"))
.anyMatch(ProcessTestHelper.left("start-sub"))
.anyMatch(ProcessTestHelper.left("Script Task 1"))
.anyMatch(ProcessTestHelper.left("end-sub"));

KogitoProcessInstance processInstance = kruntime.startProcess("EventSubprocessError");

assertProcessInstanceFinished(processInstance, kruntime);
assertProcessInstanceAborted(processInstance);
assertNodeTriggered(processInstance.getStringId(), "start", "User Task 1",
"Sub Process 1", "start-sub", "Script Task 1", "end-sub");
assertThat(executednodes).hasSize(1);

assertThat(executedNodes).hasSize(1);
}
/*
* instead of abort state it is going into error state due to class cast exception:
* class org.jbpm.process.instance.impl.humantask.HumanTaskWorkItemDecoratorImpl cannot be cast to class
* org.kie.kogito.process.workitems.impl.KogitoWorkItemImpl (org.jbpm.process.instance.impl.humantask.HumanTaskWorkItemDecoratorImpl
* and org.kie.kogito.process.workitems.impl.KogitoWorkItemImpl are in unnamed module of loader 'app')
*/

@Test
public void testEventSubprocessErrorWithErrorCode() throws Exception {
@@ -327,13 +335,12 @@ public void testMultiErrorBoundaryEventsOnBusinessRuleTask() throws Exception {
}

@Test
public void testCatchErrorBoundaryEventOnTask() throws Exception {
kruntime = createKogitoProcessRuntime("org/jbpm/bpmn2/error/BPMN2-ErrorBoundaryEventOnTask.bpmn2");
kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Human Task", new TestWorkItemHandler() {

public void testCatchErrorBoundaryEventOnTask() {
Application app = ProcessTestHelper.newApplication();
TestWorkItemHandler workItemHandler = new TestWorkItemHandler() {
@Override
public void executeWorkItem(KogitoWorkItem workItem, KogitoWorkItemManager manager) {
if (workItem.getParameter("ActorId").equals("mary")) {
if ("mary".equals(workItem.getParameter("ActorId"))) {
throw new MyError();
}
}
@@ -342,14 +349,30 @@ public void executeWorkItem(KogitoWorkItem workItem, KogitoWorkItemManager manag
public void abortWorkItem(KogitoWorkItem workItem, KogitoWorkItemManager manager) {
manager.abortWorkItem(workItem.getStringId());
}

});

KogitoProcessInstance processInstance = kruntime.startProcess("ErrorBoundaryEventOnTask");

assertProcessInstanceActive(processInstance);
assertNodeTriggered(processInstance.getStringId(), "start", "split", "User Task", "User task error attached",
"Script Task", "error1", "error2");
};
ProcessTestHelper.registerHandler(app, "Human Task", workItemHandler);
org.kie.kogito.process.Process<ErrorBoundaryEventOnTaskModel> processDefinition = ErrorBoundaryEventOnTaskProcess.newProcess(app);
ProcessInstance<ErrorBoundaryEventOnTaskModel> processInstance = processDefinition.createInstance(processDefinition.createModel());
processInstance.start();
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_ACTIVE);
EventTrackerProcessListener tracker = new EventTrackerProcessListener();
ProcessTestHelper.registerProcessEventListener(app, tracker);
assertThat(tracker.tracked())
.anyMatch(ProcessTestHelper.triggered("start"))
.anyMatch(ProcessTestHelper.triggered("split"))
.anyMatch(ProcessTestHelper.triggered("User Task"))
.anyMatch(ProcessTestHelper.triggered("User task error attached"))
.anyMatch(ProcessTestHelper.triggered("Script Task"))
.anyMatch(ProcessTestHelper.triggered("error1"))
.anyMatch(ProcessTestHelper.triggered("error2"));

/*
* Caused by: org.jbpm.workflow.instance.WorkflowRuntimeException:
* [ErrorBoundaryEventOnTask:09a6d44f-cbac-4033-a468-555a3b76b8ba - Boundary event:[uuid=BoundaryEvent_1]]
* -- class org.jbpm.process.instance.impl.humantask.HumanTaskWorkItemDecoratorImpl cannot be cast to
* class org.kie.kogito.process.workitems.impl.KogitoWorkItemImpl (org.jbpm.process.instance.impl.humantask.HumanTaskWorkItemDecoratorImpl
* and org.kie.kogito.process.workitems.impl.KogitoWorkItemImpl are in unnamed module of loader 'app')
*/

}

Original file line number Diff line number Diff line change
@@ -23,6 +23,8 @@
import java.util.List;

import org.jbpm.bpmn2.escalation.EscalationBoundaryEventModel;
import org.jbpm.bpmn2.escalation.EscalationBoundaryEventOnTaskInterruptingModel;
import org.jbpm.bpmn2.escalation.EscalationBoundaryEventOnTaskInterruptingProcess;
import org.jbpm.bpmn2.escalation.EscalationBoundaryEventProcess;
import org.jbpm.bpmn2.escalation.EscalationBoundaryEventWithTaskModel;
import org.jbpm.bpmn2.escalation.EscalationBoundaryEventWithTaskProcess;
@@ -51,6 +53,7 @@
import org.kie.api.event.process.SignalEvent;
import org.kie.api.runtime.process.ProcessInstance;
import org.kie.kogito.Application;
import org.kie.kogito.auth.SecurityPolicy;
import org.kie.kogito.internal.process.event.DefaultKogitoProcessEventListener;
import org.kie.kogito.internal.process.event.KogitoProcessEventListener;
import org.kie.kogito.internal.process.runtime.KogitoNodeInstance;
@@ -233,24 +236,33 @@ public void testGeneralEscalationBoundaryEventWithTask() throws Exception {
}

@Test
public void testInterruptingEscalationBoundaryEventOnTask() throws Exception {
kruntime = createKogitoProcessRuntime("org/jbpm/bpmn2/escalation/BPMN2-EscalationBoundaryEventOnTaskInterrupting.bpmn2");

public void testInterruptingEscalationBoundaryEventOnTask() {
Application app = ProcessTestHelper.newApplication();
TestWorkItemHandler handler = new TestWorkItemHandler();
kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Human Task", handler);
kruntime.getProcessEventManager().addEventListener(LOGGING_EVENT_LISTENER);
KogitoProcessInstance processInstance = kruntime.startProcess("EscalationBoundaryEventOnTaskInterrupting");
ProcessTestHelper.registerHandler(app, "Human Task", handler);

EventTrackerProcessListener listener = new EventTrackerProcessListener();
ProcessTestHelper.registerProcessEventListener(app, listener);
org.kie.kogito.process.Process<EscalationBoundaryEventOnTaskInterruptingModel> processDefinition = EscalationBoundaryEventOnTaskInterruptingProcess.newProcess(app);
EscalationBoundaryEventOnTaskInterruptingModel model = processDefinition.createModel();
org.kie.kogito.process.ProcessInstance<EscalationBoundaryEventOnTaskInterruptingModel> instance = processDefinition.createInstance(model);
instance.start();
List<KogitoWorkItem> workItems = handler.getWorkItems();
assertThat(workItems).hasSize(2);

KogitoWorkItem workItem = workItems.get(0);
if (!"john".equalsIgnoreCase((String) workItem.getParameter("ActorId"))) {
workItem = workItems.get(1);
}
instance.completeWorkItem(workItem.getStringId(), null, SecurityPolicy.of("john", Collections.emptyList()));
assertThat(instance.status()).isEqualTo(ProcessInstance.STATE_COMPLETED);

/*
* [ERROR] EscalationEventTest.testInterruptingEscalationBoundaryEventOnTask:315
* expected: 2
* but was: 1
* The process instance does not reach completed state but remains active instead.
*/

kruntime.getKogitoWorkItemManager().completeWorkItem(workItem.getStringId(), null);
assertProcessInstanceFinished(processInstance, kruntime);
}

@Test

0 comments on commit 010aeb8

Please sign in to comment.