public String getProcessInstance(String containerId, Number processInstanceId, boolean withVars, String marshallingType) { ProcessInstanceDesc instanceDesc = runtimeDataService.getProcessInstanceById(processInstanceId.longValue()); if (instanceDesc == null) { throw new IllegalStateException("Unable to find process instance with id " + processInstanceId); } containerId = context.getContainerId(containerId, new ByProcessInstanceIdContainerLocator(processInstanceId.longValue())); org.kie.server.api.model.instance.ProcessInstance processInstance = convertToProcessInstance(instanceDesc); if (Boolean.TRUE.equals(withVars) && processInstance.getState().equals(ProcessInstance.STATE_ACTIVE)) { Map<String, Object> variables = processService.getProcessInstanceVariables(containerId, processInstanceId.longValue()); processInstance.setVariables(variables); } logger.debug("About to marshal process instance with id '{}' {}", processInstanceId, processInstance); String response = marshallerHelper.marshal(containerId, marshallingType, processInstance, new ByProcessInstanceIdContainerLocator(processInstanceId.longValue())); return response; }
private void assertProcessInstance(Long pid, int processState, int slaStatus) { 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); } }
@Test public void testCallWebServiceFromProcess() throws Exception { Map<String, Object> params = new HashMap<>(); params.put("serviceUrl", TestConfig.getWebServiceHttpURL()); Long pid = processClient.startProcess(WS_CONTAINER_ID, PROCESS_ID_WS, params); assertThat(pid).isNotNull(); ProcessInstance pi = queryClient.findProcessInstanceById(pid); assertThat(pi.getState()).isEqualTo(STATE_COMPLETED); }
private void testStartProcessResponseHandler(ResponseHandler responseHandler) throws Exception { List<ProcessInstance> processInstances = queryClient.findProcessInstances(0, 100); assertThat(processInstances).isEmpty(); // change response handler for processClient others are not affected processClient.setResponseHandler(responseHandler); Long processInstanceId = processClient.startProcess(CONTAINER_ID, PROCESS_ID_USERTASK); // since we use fire and forget there will always be null response assertThat(processInstanceId).isNull(); KieServerSynchronization.waitForProcessInstanceStart(queryClient, CONTAINER_ID); // Process should be started completely async - fire and forget. processInstances = queryClient.findProcessInstances(0, 100); assertThat(processInstances).hasSize(1); ProcessInstance pi = processInstances.get(0); assertThat(pi.getState()).isEqualTo(org.kie.api.runtime.process.ProcessInstance.STATE_ACTIVE); }
private void testGetTaskResponseHandler(ResponseHandler responseHandler) throws Exception { List<ProcessInstance> processInstances = queryClient.findProcessInstances(0, 100); assertThat(processInstances).isEmpty(); Long processInstanceId = processClient.startProcess(CONTAINER_ID, PROCESS_ID_USERTASK); assertThat(processInstanceId).isNotNull(); KieServerSynchronization.waitForProcessInstanceStart(queryClient, CONTAINER_ID); // Process should be started completely async - fire and forget. processInstances = queryClient.findProcessInstances(0, 100); assertThat(processInstances).isNotNull().hasSize(1); ProcessInstance pi = processInstances.get(0); assertThat(pi.getState()).isEqualTo(org.kie.api.runtime.process.ProcessInstance.STATE_ACTIVE); // change response handler for taskClient others are not affected taskClient.setResponseHandler(responseHandler); List<TaskSummary> tasks = taskClient.findTasksAssignedAsPotentialOwner(USER_YODA, 0, 10); assertThat(tasks).isNull(); }
@Test public void testSignalNewProcessWithAlias() throws Exception { Map<String, Object> params = new HashMap<>(); params.put("nullAccepted", false); Long oldPid = processClient.startProcess(CONTAINER_ALIAS, PROCESS_ID_SIGNAL_PROCESS, params); assertThat(oldPid).isNotNull().isGreaterThan(0); createExtraContainer(); Long pid = processClient.startProcess(CONTAINER_ALIAS, PROCESS_ID_SIGNAL_PROCESS_2, params); assertThat(pid).isNotNull().isGreaterThan(0); List<String> availableSignals = processClient.getAvailableSignals(CONTAINER_ALIAS, pid); assertThat(availableSignals).isNotNull().hasSize(2); assertThat(availableSignals).contains("Signal1"); assertThat(availableSignals).contains("Signal2"); Object person = createPersonInstance(USER_JOHN); processClient.signalProcessInstance(CONTAINER_ALIAS, pid, "Signal1", person); processClient.signalProcessInstances(CONTAINER_ALIAS, Collections.singletonList(pid), "Signal2", "My custom string event"); ProcessInstance pi = processClient.getProcessInstance(CONTAINER_ALIAS, pid); assertThat(pi).isNotNull(); assertThat(pi.getState()).isEqualTo(org.kie.api.runtime.process.ProcessInstance.STATE_COMPLETED); pi = processClient.getProcessInstance(CONTAINER_ALIAS, oldPid); assertThat(pi).isNotNull(); assertThat(pi.getState()).isEqualTo(org.kie.api.runtime.process.ProcessInstance.STATE_ACTIVE); }
private void testGetProcessInstancesResponseHandler(ResponseHandler responseHandler) throws Exception { List<ProcessInstance> processInstances = queryClient.findProcessInstances(0, 100); assertThat(processInstances).isEmpty(); Long processInstanceId = processClient.startProcess(CONTAINER_ID, PROCESS_ID_USERTASK); assertThat(processInstanceId).isNotNull(); KieServerSynchronization.waitForProcessInstanceStart(queryClient, CONTAINER_ID); // change response handler for queryClient others are not affected queryClient.setResponseHandler(responseHandler); // Process should be started completely async - fire and forget. processInstances = queryClient.findProcessInstances(0, 100); assertThat(processInstances).isNull(); // set it back for the sake of verification queryClient.setResponseHandler(new RequestReplyResponseHandler()); // Process should be started completely async - fire and forget. processInstances = queryClient.findProcessInstances(0, 100); assertThat(processInstances).isNotNull().hasSize(1); ProcessInstance pi = processInstances.get(0); assertThat(pi.getState()).isEqualTo(org.kie.api.runtime.process.ProcessInstance.STATE_ACTIVE); }
@Test public void testProcessWithDecisionTask() throws Exception { Long processInstanceId = null; try { Map<String, Object> parameters = new HashMap<>(); parameters.put("age", 16); parameters.put("yearsOfService", 1); processInstanceId = processClient.startProcess(CONTAINER_ID, DECISION_PROCESS_ID, parameters); assertNotNull(processInstanceId); assertTrue(processInstanceId.longValue() > 0); ProcessInstance processInstance = queryClient.findProcessInstanceById(processInstanceId); assertNotNull(processInstance); assertEquals(org.kie.api.runtime.process.ProcessInstance.STATE_COMPLETED, processInstance.getState().intValue()); List<VariableInstance> variables = queryClient.findVariablesCurrentState(processInstanceId); assertNotNull(variables); assertEquals(4, variables.size()); Map<String, String> mappedVars = variables.stream().collect(Collectors.toMap(VariableInstance::getVariableName, VariableInstance::getValue)); assertEquals("27", mappedVars.get("vacationDays")); processInstanceId = null; } finally { if (processInstanceId != null) { processClient.abortProcessInstance(CONTAINER_ID, processInstanceId); } } }
@Test public void testStartProcessWithCustomTask() throws Exception { Map<String, Object> parameters = new HashMap<String, Object>(); parameters.put("id", "custom id"); Long processInstanceId = null; try { processInstanceId = processClient.startProcess(CONTAINER_ID, PROCESS_ID_CUSTOM_TASK); assertNotNull(processInstanceId); assertTrue(processInstanceId.longValue() > 0); ProcessInstance pi = queryClient.findProcessInstanceById(processInstanceId); assertNotNull(pi); assertEquals(org.kie.api.runtime.process.ProcessInstance.STATE_COMPLETED, pi.getState().intValue()); } catch(Exception e) { if (processInstanceId != null) { processClient.abortProcessInstance(CONTAINER_ID, processInstanceId); } fail("Exception " + e.getMessage()); } }
@Test public void getProcessInstanceDetailsTest() { final Long processInstanceId = 1L; final TaskSummary taskSummaryMock = mock(TaskSummary.class); final TaskSummaryList taskSummaryListSpy = spy(new TaskSummaryList(singletonList(taskSummaryMock))); final ProcessInstance processInstanceSpy = spy(ProcessInstance.builder() .activeUserTasks(taskSummaryListSpy) .build()); when(queryServicesClient.findProcessInstanceById(processInstanceId)).thenReturn(processInstanceSpy); service.getProcessInstance(new ProcessInstanceKey(serverTemplateId, containerId, processInstanceId)); verify(processInstanceSpy).getProcessId(); verify(processInstanceSpy).getState(); verify(processInstanceSpy).getContainerId(); verify(processInstanceSpy).getProcessVersion(); verify(processInstanceSpy).getCorrelationKey(); verify(processInstanceSpy).getParentId(); verify(processInstanceSpy).getSlaCompliance(); verify(processInstanceSpy).getSlaDueDate(); verifyActiveUserTasks(taskSummaryListSpy, taskSummaryMock); verifyCurrentActivities(processInstanceId); }
@Test(timeout = 60 * 1000) public void testProcessInstanceWithTimer() throws Exception { Map<String, Object> parameters = new HashMap<>(); parameters.put("timer", "1s"); Long processInstanceId = processClient.startProcess(CONTAINER_ID, PROCESS_ID_TIMER, parameters); assertNotNull(processInstanceId); assertTrue(processInstanceId.longValue() > 0); try { KieServerSynchronization.waitForProcessInstanceToFinish(processClient, CONTAINER_ID, processInstanceId); ProcessInstance pi = processClient.getProcessInstance(CONTAINER_ID, processInstanceId); assertNotNull(pi); assertEquals(org.kie.api.runtime.process.ProcessInstance.STATE_COMPLETED, pi.getState().intValue()); } catch (Exception e){ processClient.abortProcessInstance(CONTAINER_ID, processInstanceId); fail(e.getMessage()); } }
@Test public void getProcessInstanceDetailsTest() { final Long processInstanceId = 1L; final TaskSummary taskSummaryMock = mock(TaskSummary.class); final TaskSummaryList taskSummaryListSpy = spy(new TaskSummaryList(singletonList(taskSummaryMock))); final ProcessInstance processInstanceSpy = spy(ProcessInstance.builder() .activeUserTasks(taskSummaryListSpy) .build()); when(queryServicesClient.findProcessInstanceById(processInstanceId)).thenReturn(processInstanceSpy); service.getProcessInstance(new ProcessInstanceKey(serverTemplateId, containerId, processInstanceId)); verify(processInstanceSpy).getProcessId(); verify(processInstanceSpy).getState(); verify(processInstanceSpy).getContainerId(); verify(processInstanceSpy).getProcessVersion(); verify(processInstanceSpy).getCorrelationKey(); verify(processInstanceSpy).getParentId(); verify(processInstanceSpy).getSlaCompliance(); verify(processInstanceSpy).getSlaDueDate(); verifyActiveUserTasks(taskSummaryListSpy, taskSummaryMock); verifyCurrentActivities(processInstanceId); }
@Test() public void testAbortExistingProcess() { Map<String, Object> parameters = new HashMap<String, Object>(); Long processInstanceId = processClient.startProcess(CONTAINER_ID, PROCESS_ID_EVALUATION, parameters); try { assertNotNull(processInstanceId); assertTrue(processInstanceId.longValue() > 0); // Process instance is running and is active. ProcessInstance processInstance = processClient.getProcessInstance(CONTAINER_ID, processInstanceId); assertNotNull(processInstance); assertEquals(org.kie.api.runtime.process.ProcessInstance.STATE_ACTIVE, processInstance.getState().intValue()); processClient.abortProcessInstance(CONTAINER_ID, processInstanceId); // Process instance is now aborted. processInstance = processClient.getProcessInstance(CONTAINER_ID, processInstanceId); assertNotNull(processInstance); assertEquals(org.kie.api.runtime.process.ProcessInstance.STATE_ABORTED, processInstance.getState().intValue()); } catch (Exception e) { processClient.abortProcessInstance(CONTAINER_ID, processInstanceId); fail(e.getMessage()); } }
@Test public void testProcessWithBusinessRuleTask() throws Exception { Long processInstanceId = null; try { Object john = createPersonInstance(PERSON_JOHN); Map<String, Object> parameters = new HashMap<>(); parameters.put("person", john); processInstanceId = processClient.startProcess(CONTAINER_ID, RULE_PROCESS_ID, parameters); assertNotNull(processInstanceId); assertTrue(processInstanceId.longValue() > 0); ProcessInstance processInstance = queryClient.findProcessInstanceById(processInstanceId); assertNotNull(processInstance); assertEquals(org.kie.api.runtime.process.ProcessInstance.STATE_COMPLETED, processInstance.getState().intValue()); List<VariableInstance> variables = queryClient.findVariablesCurrentState(processInstanceId); assertNotNull(variables); assertEquals(2, variables.size()); Map<String, String> mappedVars = variables.stream().collect(Collectors.toMap(VariableInstance::getVariableName, VariableInstance::getValue)); assertEquals("Person{name='john' age='35'}", mappedVars.get("person")); processInstanceId = null; } finally { if (processInstanceId != null) { processClient.abortProcessInstance(CONTAINER_ID, processInstanceId); } } }
@Test(timeout = 60 * 1000) public void testStartProcessInstanceWithAsyncNodes() throws Exception { List<String> status = new ArrayList<String>(); status.add(STATUS.QUEUED.toString()); status.add(STATUS.RUNNING.toString()); status.add(STATUS.DONE.toString()); int originalJobCount = jobServicesClient.getRequestsByStatus(status, 0, 1000).size(); Long processInstanceId = processClient.startProcess(CONTAINER_ID, PROCESS_ID_ASYNC_SCRIPT); assertNotNull(processInstanceId); assertTrue(processInstanceId.longValue() > 0); try { // async node is executed as a job List<RequestInfoInstance> jobs = jobServicesClient.getRequestsByStatus(status, 0, 1000); assertNotNull(jobs); assertEquals(originalJobCount + 1, jobs.size()); // wait for process instance to be completed KieServerSynchronization.waitForProcessInstanceToFinish(processClient, CONTAINER_ID, processInstanceId); ProcessInstance pi = processClient.getProcessInstance(CONTAINER_ID, processInstanceId); assertNotNull(pi); assertEquals(org.kie.api.runtime.process.ProcessInstance.STATE_COMPLETED, pi.getState().intValue()); } catch (Exception e){ processClient.abortProcessInstance(CONTAINER_ID, processInstanceId); fail(e.getMessage()); } }
@Test @Category({UnstableOnJenkinsPrBuilder.class}) public void testSignalContainer() throws Exception { Long processInstanceId = processClient.startProcess(CONTAINER_ID, PROCESS_ID_SIGNAL_PROCESS); assertNotNull(processInstanceId); assertTrue(processInstanceId.longValue() > 0); try { checkAvailableSignals(CONTAINER_ID, processInstanceId); Object person = createPersonInstance(USER_JOHN); processClient.signal(CONTAINER_ID, "Signal1", person); processClient.signal(CONTAINER_ID, "Signal2", "My custom string event"); ProcessInstance pi = processClient.getProcessInstance(CONTAINER_ID, processInstanceId); assertNotNull(pi); assertEquals(org.kie.api.runtime.process.ProcessInstance.STATE_COMPLETED, pi.getState().intValue()); } catch (Exception e) { processClient.abortProcessInstance(CONTAINER_ID, processInstanceId); fail(e.getMessage()); } }
@Test @Category(Unstable.class) public void testCompleteTaskBeforeEscalation() throws InterruptedException { // Unstable on slow DBs where starting of task is called after escalation timeout. Long processInstanceId = processClient.startProcess(CONTAINER_ID, PROCESS_ID_USERTASK_ESCALATION, params); assertNotNull(processInstanceId); assertTrue(processInstanceId > 0); List<TaskSummary> taskList = taskClient.findTasksAssignedAsPotentialOwner(USER_YODA, 0, 10); assertNotNull(taskList); assertEquals(1, taskList.size()); TaskSummary taskSummary = taskList.get(0); assertEquals("User Task", taskSummary.getName()); Long taskId = taskSummary.getId(); taskClient.startTask(CONTAINER_ID, taskId, USER_YODA); taskClient.completeTask(CONTAINER_ID, taskId, USER_YODA, new HashMap<String, Object>()); ProcessInstance processInstance = processClient.getProcessInstance(CONTAINER_ID, processInstanceId); assertNotNull(processInstance); assertEquals(org.kie.api.runtime.process.ProcessInstance.STATE_COMPLETED, processInstance.getState().intValue()); KieServerAssert.assertNullOrEmpty("Email recieved!", wiser.getMessages()); //wait while, cause email is sent 6s after task start Thread.sleep(8000l); KieServerAssert.assertNullOrEmpty("Email recieved!", wiser.getMessages()); }
private void assertHrProcessInstance(ProcessInstance processInstance, String caseId, long processInstanceState) { assertNotNull(processInstance); assertNotNull(processInstance.getId()); assertEquals(caseId, processInstance.getCorrelationKey()); assertEquals(processInstanceState, processInstance.getState().intValue()); assertEquals(CASE_HR_DEF_ID, processInstance.getProcessId()); assertEquals(CASE_HR_NAME, processInstance.getProcessName()); assertEquals(CASE_HR_VERSION, processInstance.getProcessVersion()); assertEquals(CONTAINER_ID, processInstance.getContainerId()); assertEquals(CASE_HR_DESRIPTION, processInstance.getProcessInstanceDescription()); assertEquals(USER_YODA, processInstance.getInitiator()); assertEquals(-1L, processInstance.getParentId().longValue()); assertNotNull(processInstance.getCorrelationKey()); assertNotNull(processInstance.getDate()); }
private void assertCarInsuranceProcessInstance(ProcessInstance processInstance, String caseId) { assertNotNull(processInstance); assertNotNull(processInstance.getId()); assertEquals(caseId, processInstance.getCorrelationKey()); assertEquals(STATE_ACTIVE, processInstance.getState().intValue()); assertEquals(CLAIM_CASE_DEF_ID, processInstance.getProcessId()); assertEquals(CLAIM_CASE_NAME, processInstance.getProcessName()); assertEquals(CLAIM_CASE_VERSION, processInstance.getProcessVersion()); assertEquals(CONTAINER_ID, processInstance.getContainerId()); assertEquals(CLAIM_CASE_DESRIPTION, processInstance.getProcessInstanceDescription()); assertEquals(USER_YODA, processInstance.getInitiator()); assertEquals(-1L, processInstance.getParentId().longValue()); assertNotNull(processInstance.getCorrelationKey()); assertNotNull(processInstance.getDate()); }
private void assertProcessInstance(ProcessInstance expected, ProcessInstance actual) { assertNotNull(actual); assertEquals(expected.getId(), actual.getId()); assertEquals(expected.getState(), actual.getState()); assertEquals(expected.getProcessId(), actual.getProcessId()); assertEquals(expected.getProcessName(), actual.getProcessName()); assertEquals(expected.getProcessVersion(), actual.getProcessVersion()); assertEquals(expected.getContainerId(), actual.getContainerId()); assertEquals(expected.getProcessInstanceDescription(), actual.getProcessInstanceDescription()); assertEquals(expected.getInitiator(), actual.getInitiator()); assertEquals(expected.getParentId(), actual.getParentId()); assertNotNull(actual.getCorrelationKey()); assertNotNull(actual.getDate()); }