package org.activiti.crystalball.simulator; /* * #%L * simulator * %% * Copyright (C) 2012 - 2013 crystalball * %% * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * 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. * #L% */ import org.activiti.crystalball.simulator.impl.persistence.entity.ResultEntity; import org.activiti.engine.ProcessEngine; import org.activiti.engine.TaskService; import org.junit.Test; import org.springframework.context.support.ClassPathXmlApplicationContext; import java.io.File; import java.util.Calendar; import java.util.Date; import java.util.List; import static org.junit.Assert.assertEquals; public class TimerBoundaryEventTest { protected static final String tempDir = System.getProperty("tempDir", "target"); // live db is not needed protected static final String LIVE_DB = tempDir +"/" + TimerBoundaryEventTest.class.getName() + "-live"; protected static final String PROCESS_KEY = "boundarytimereventtest"; @Test public void testTimerBoundaryEvent() throws Exception { System.setProperty("liveDB", LIVE_DB); System.setProperty("_SIM_DB_PATH", tempDir+"/"+TimerBoundaryEventTest.class.getName() + "-sim-"+Thread.currentThread().getId()); // delete database file File f = new File( System.getProperty("_SIM_DB_PATH") +".h2.db"); if ( !f.delete() ) System.err.println("unable to delete file"); ClassPathXmlApplicationContext appContext = new ClassPathXmlApplicationContext("/org/activiti/crystalball/simulator/SimEngine-BoundaryTimer-h2-context.xml"); ProcessEngine processEngine = (ProcessEngine) appContext.getBean("simProcessEngine"); // deploy processes processEngine.getRepositoryService().createDeployment() .addClasspathResource("org/activiti/crystalball/simulator/TimerBoundaryEventTest.bpmn") .deploy(); SimulationRun simRun = (SimulationRun)appContext.getBean(SimulationRun.class); Calendar c = Calendar.getInstance(); Date startDate = c.getTime(); c.add( Calendar.MINUTE, 5); Date finishDate = c.getTime(); // run simulation for 5 minutes @SuppressWarnings("unused") List<ResultEntity> resultEventList = simRun.execute(startDate, finishDate); TaskService simTaskService = processEngine.getTaskService(); // in 5 minutes 11 processes will be started (0 is included too) assertEquals( 11, simTaskService.createTaskQuery().taskDefinitionKey("firstLine").count()); // two tasks were not escalated yet escalation timer is 35sec assertEquals( 9, simTaskService.createTaskQuery().taskDefinitionKey("escalation").count()); processEngine.close(); appContext.close(); } }