/* * Copyright 2015 Red Hat, Inc. and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jbpm.test.functional; import java.util.HashMap; import java.util.List; import java.util.Map; import org.jbpm.test.JbpmTestCase; import org.junit.Test; import org.kie.api.runtime.KieSession; import org.kie.api.runtime.manager.RuntimeEngine; import org.kie.api.runtime.manager.RuntimeManager; import org.kie.api.runtime.process.ProcessInstance; import org.kie.api.task.TaskService; import org.kie.api.task.model.TaskSummary; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * This is a sample file to launch a process. */ public class ParalellLoopTest extends JbpmTestCase { private static final Logger logger = LoggerFactory.getLogger(ParalellLoopTest.class); TaskService taskService; @Test public void testProcessMaryReject() { RuntimeManager manager = createRuntimeManager("org/jbpm/test/functional/ParalellLoopTest.bpmn"); RuntimeEngine engine = getRuntimeEngine(null); KieSession ksession = engine.getKieSession(); taskService = engine.getTaskService(); ProcessInstance processInstance = ksession.startProcess("hu.tsm.ParalellLoopTest"); assertProcessInstanceActive(processInstance.getId()); for (int i = 0; i < 20; i++) { logger.debug(">>> Loop: {}", i); assertNodeTriggered(processInstance.getId(), "ApproveMary"); assertNodeTriggered(processInstance.getId(), "ApproveJohn"); String user = "mary"; complete(user, "Reject"); } // assertNodeTriggered(processInstance.getId(), "ApproveMary"); // assertNodeTriggered(processInstance.getId(), "ApproveJohn"); // A Jóváhagyás folyamatnak vége complete("john", "Approve"); complete("mary", "Approve"); assertProcessInstanceCompleted(processInstance.getId()); manager.disposeRuntimeEngine(engine); manager.close(); } @Test public void testProcessJohnReject() { RuntimeManager manager = createRuntimeManager("org/jbpm/test/functional/ParalellLoopTest.bpmn"); RuntimeEngine engine = getRuntimeEngine(null); KieSession ksession = engine.getKieSession(); // ksession.addEventListener(new TestProcessEventListener()); taskService = engine.getTaskService(); ProcessInstance processInstance = ksession.startProcess("hu.tsm.ParalellLoopTest"); assertProcessInstanceActive(processInstance.getId()); for (int i = 0; i < 20; i++) { logger.debug(">>> Loop: {}", i); assertNodeTriggered(processInstance.getId(), "ApproveMary"); assertNodeTriggered(processInstance.getId(), "ApproveJohn"); String user = "john"; complete(user, "Reject"); } // assertNodeTriggered(processInstance.getId(), "ApproveMary"); // assertNodeTriggered(processInstance.getId(), "ApproveJohn"); // A Jóváhagyás folyamatnak vége complete("john", "Approve"); complete("mary", "Approve"); assertProcessInstanceCompleted(processInstance.getId()); manager.disposeRuntimeEngine(engine); manager.close(); } @Test public void testProcessMaryApproveJohnReject() { RuntimeManager manager = createRuntimeManager("org/jbpm/test/functional/ParalellLoopTest.bpmn"); RuntimeEngine engine = getRuntimeEngine(null); KieSession ksession = engine.getKieSession(); // ksession.addEventListener(new TestProcessEventListener()); taskService = engine.getTaskService(); ProcessInstance processInstance = ksession.startProcess("hu.tsm.ParalellLoopTest"); assertProcessInstanceActive(processInstance.getId()); for (int i = 0; i < 20; i++) { logger.debug(">>> Loop: {}", i); complete("mary", "Approve"); complete("john", "Reject"); } // A Jóváhagyás folyamatnak vége complete("john", "Approve"); complete("mary", "Approve"); assertProcessInstanceCompleted(processInstance.getId()); manager.disposeRuntimeEngine(engine); manager.close(); } @Test public void testProcessJohnApproveMaryReject() { RuntimeManager manager = createRuntimeManager("org/jbpm/test/functional/ParalellLoopTest.bpmn"); RuntimeEngine engine = getRuntimeEngine(null); KieSession ksession = engine.getKieSession(); // ksession.addEventListener(new TestProcessEventListener()); taskService = engine.getTaskService(); ProcessInstance processInstance = ksession.startProcess("hu.tsm.ParalellLoopTest"); assertProcessInstanceActive(processInstance.getId()); for (int i = 0; i < 20; i++) { logger.debug(">>> Loop: {}", i); complete("john", "Approve"); complete("mary", "Reject"); } // A Jóváhagyás folyamatnak vége complete("john", "Approve"); complete("mary", "Approve"); assertProcessInstanceCompleted(processInstance.getId()); manager.disposeRuntimeEngine(engine); manager.close(); } @Test public void testProcessAlternateReject() { RuntimeManager manager = createRuntimeManager("org/jbpm/test/functional/ParalellLoopTest.bpmn"); RuntimeEngine engine = getRuntimeEngine(null); KieSession ksession = engine.getKieSession(); // ksession.addEventListener(new TestProcessEventListener()); taskService = engine.getTaskService(); ProcessInstance processInstance = ksession.startProcess("hu.tsm.ParalellLoopTest"); assertProcessInstanceActive(processInstance.getId()); for (int i = 0; i < 20; i++) { logger.debug(">>> Loop: {}", i); assertNodeTriggered(processInstance.getId(), "ApproveMary"); assertNodeTriggered(processInstance.getId(), "ApproveJohn"); String user = "mary"; boolean alternate = true; if (alternate && i % 2 == 1) { user = "john"; } complete(user, "Reject"); } complete("john", "Approve"); complete("mary", "Approve"); assertProcessInstanceCompleted(processInstance.getId()); manager.disposeRuntimeEngine(engine); manager.close(); } @Test public void testProcessMaryApproveJohnApprove() { RuntimeManager manager = createRuntimeManager("org/jbpm/test/functional/ParalellLoopTest.bpmn"); RuntimeEngine engine = getRuntimeEngine(null); KieSession ksession = engine.getKieSession(); // ksession.addEventListener(new TestProcessEventListener()); taskService = engine.getTaskService(); ProcessInstance processInstance = ksession.startProcess("hu.tsm.ParalellLoopTest"); assertProcessInstanceActive(processInstance.getId()); complete("john", "Approve"); complete("mary", "Approve"); assertProcessInstanceCompleted(processInstance.getId()); manager.disposeRuntimeEngine(engine); manager.close(); } private void complete(String user, String outcome) { List<TaskSummary> list = taskService.getTasksAssignedAsPotentialOwner(user, "en-UK"); TaskSummary task = list.get(0); logger.debug("complete task"); logger.debug("- {} is executing task {}", user, task.getName()); taskService.start(task.getId(), user); Map<String, Object> map = new HashMap<String, Object>(); map.put("OUTCOME", outcome); taskService.complete(task.getId(), user, map); logger.debug("- {} executed task {}", user, task.getName()); } public ParalellLoopTest() { super(true, true); } }