Skip to content

Commit

Permalink
[JBPM-10185] Test for handling sla timer for processes (#2984)
Browse files Browse the repository at this point in the history
  • Loading branch information
gmunozfe committed Aug 1, 2023
1 parent fc6254e commit d45907c
Show file tree
Hide file tree
Showing 3 changed files with 105 additions and 2 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
<?xml version="1.0" encoding="UTF-8"?>
<definitions id="Definition"
targetNamespace="http://www.example.org/MinimalExample"
typeLanguage="http://www.java.com/javaTypes"
expressionLanguage="http://www.mvel.org/2.0"
xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd"
xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
xmlns:dc="http://www.omg.org/spec/DD/20100524/DC"
xmlns:di="http://www.omg.org/spec/DD/20100524/DI"
xmlns:tns="http://www.jboss.org/drools">

<itemDefinition id="_sItem" structureRef="String" />
<process processType="Private" isExecutable="true" id="definition-project.SLAOnProcess" name="SLA On Process" >
<extensionElements>
<tns:metaData name="customSLADueDate">
<tns:metaValue>1h</tns:metaValue>
</tns:metaData>
</extensionElements>
<property id="s" itemSubjectRef="_sItem"/>
<!-- nodes -->
<startEvent id="_1" name="StartProcess" />
<userTask id="_2" name="Hello" >
<ioSpecification>
<inputSet>
</inputSet>
<outputSet>
</outputSet>
</ioSpecification>
<potentialOwner>
<resourceAssignmentExpression>
<formalExpression>yoda</formalExpression>
</resourceAssignmentExpression>
</potentialOwner>
</userTask>
<endEvent id="_3" name="EndProcess" >
<terminateEventDefinition/>
</endEvent>

<!-- connections -->
<sequenceFlow id="_1-_2" sourceRef="_1" targetRef="_2" />
<sequenceFlow id="_2-_3" sourceRef="_2" targetRef="_3" />

</process>

<bpmndi:BPMNDiagram>
<bpmndi:BPMNPlane bpmnElement="UserTask" >
<bpmndi:BPMNShape bpmnElement="_1" >
<dc:Bounds x="16" y="16" width="48" height="48" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="_2" >
<dc:Bounds x="96" y="16" width="100" height="48" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="_3" >
<dc:Bounds x="228" y="16" width="48" height="48" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="_1-_2" >
<di:waypoint x="40" y="40" />
<di:waypoint x="146" y="40" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="_2-_3" >
<di:waypoint x="146" y="40" />
<di:waypoint x="252" y="40" />
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>

</definitions>
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ public abstract class JbpmKieServerBaseIntegrationTest extends RestJmsSharedBase
protected static final String PROCESS_ID_USERTASK_WITH_ROLLBACK = "UserTaskWithRollback";
protected static final String PROCESS_ID_USERTASK_DIFF_POTUSERS = "usertask-project.usertask-diff-potusers";
protected static final String PROCESS_ID_USERTASK_SECURED = "secured-project.usertask";
protected static final String PROCESS_ID_SLA_ON_PROCESS = "definition-project.SLAOnProcess";
protected static final String PROCESS_ID_SIGNAL_PROCESS_SECURED = "secured-project.signalprocess";
protected static final String PROCESS_ID_WORKITEM_SECURED = "secured-project.workitem";
protected static final String PROCESS_ID_NOTIFICATION = "notification";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,13 @@
package org.kie.server.integrationtests.jbpm;

import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.kie.api.runtime.process.ProcessInstance.SLA_MET;
import static org.kie.api.runtime.process.ProcessInstance.SLA_NA;
import static org.kie.api.runtime.process.ProcessInstance.SLA_PENDING;
import static org.kie.api.runtime.process.ProcessInstance.SLA_VIOLATED;
import static org.kie.api.runtime.process.ProcessInstance.STATE_ABORTED;
import static org.kie.api.runtime.process.ProcessInstance.STATE_ACTIVE;
import static org.kie.api.runtime.process.ProcessInstance.STATE_COMPLETED;

Expand All @@ -36,6 +39,7 @@
import org.kie.server.api.KieServerConstants;
import org.kie.server.api.model.KieServerConfigItem;
import org.kie.server.api.model.ReleaseId;
import org.kie.server.api.model.admin.TimerInstance;
import org.kie.server.api.model.instance.NodeInstance;
import org.kie.server.api.model.instance.ProcessInstance;
import org.kie.server.api.model.instance.TaskSummary;
Expand Down Expand Up @@ -196,14 +200,43 @@ public void testSLAonUserTaskMet() throws Exception {
assertProcessInstance(pid, STATE_COMPLETED, SLA_NA);

}

@Test(timeout = 60 * 1000)
public void testUpdateSLAOnProcess() throws Exception {
Long processInstanceId = processClient.startProcess(CONTAINER_ID, PROCESS_ID_SLA_ON_PROCESS, new HashMap<>());
// SLA on 1 hour
assertProcessInstance(processInstanceId, STATE_ACTIVE, SLA_PENDING, 3630*1000);

List<TimerInstance> timers = processAdminClient.getTimerInstances(CONTAINER_ID, processInstanceId);
assertNotNull(timers);
assertEquals(1, timers.size());

TimerInstance timerInstance = timers.get(0);
assertNotNull(timerInstance);
assertEquals("[SLA-Process] SLA On Process", timerInstance.getTimerName());

processAdminClient.updateTimer(CONTAINER_ID, processInstanceId, timerInstance.getId(), 5, 0, 0);
assertProcessInstance(processInstanceId, STATE_ACTIVE, SLA_PENDING, -1);

// Let's wait for SLA violation
KieServerSynchronization.waitForProcessInstanceSLAViolated(queryClient, processInstanceId, 10_000L);
assertProcessInstance(processInstanceId, STATE_ACTIVE, SLA_VIOLATED, -1);

processClient.abortProcessInstance(CONTAINER_ID, processInstanceId);
assertProcessInstance(processInstanceId, STATE_ABORTED, SLA_VIOLATED);
}

private void assertProcessInstance(Long pid, int processState, int slaStatus) {
assertProcessInstance(pid, processState, slaStatus, 30000);
}

private void assertProcessInstance(Long pid, int processState, int slaStatus, long deltaTime) {
assertThat(pid).isNotNull();
ProcessInstance pi = queryClient.findProcessInstanceById(pid);
assertThat(pi.getState()).isEqualTo(processState);
assertThat(pi.getSlaCompliance()).isEqualTo(slaStatus);
if (slaStatus != SLA_NA) {
assertThat(pi.getSlaDueDate()).isCloseTo(new Date(), 30000);
if (slaStatus != SLA_NA && deltaTime > 0) {
assertThat(pi.getSlaDueDate()).isCloseTo(new Date(), deltaTime);
}
}

Expand Down

0 comments on commit d45907c

Please sign in to comment.