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.engine.*; import org.activiti.engine.RuntimeService; import org.activiti.engine.identity.User; import org.activiti.engine.task.Task; import org.activiti.engine.task.TaskQuery; import org.apache.commons.io.FileUtils; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer; import org.springframework.context.support.ClassPathXmlApplicationContext; import java.io.File; import java.util.*; public class TwoEnginesWithoutProcessTest { private static String LIVE_DB = "target/simulatorTest-LiveDB"; @Before public void setUp() throws Exception { String PROCESS_KEY = "threetasksprocess"; File prevDB = new File((new StringBuilder()).append(LIVE_DB).append(".h2.db").toString()); System.setProperty("liveDB", LIVE_DB); if(prevDB.exists()) prevDB.delete(); prevDB = null; ClassPathXmlApplicationContext appContext = new ClassPathXmlApplicationContext("org/activiti/crystalball/simulator/LiveEngine-context.xml"); RepositoryService repositoryService = (RepositoryService)appContext.getBean("repositoryService"); RuntimeService runtimeService = (RuntimeService)appContext.getBean("runtimeService"); TaskService taskService = (TaskService)appContext.getBean("taskService"); IdentityService identityService = (IdentityService)appContext.getBean("identityService"); ProcessEngine processEngine = (ProcessEngine)appContext.getBean("processEngine"); repositoryService.createDeployment().addClasspathResource("org/activiti/crystalball/simulator/ThreeTasksProcess.bpmn").deploy(); identityService.saveGroup(identityService.newGroup("Group1")); identityService.saveGroup(identityService.newGroup("Group2")); identityService.saveUser(identityService.newUser("user1")); identityService.saveUser(identityService.newUser("user2")); identityService.createMembership("user1", "Group1"); identityService.createMembership("user2", "Group2"); Calendar calendar = Calendar.getInstance(); calendar.set(2012, 11, 7, 18, 1, 0); Date dueDateFormal = calendar.getTime(); calendar.set(2012, 11, 7, 18, 1, 30); Date dueDateValue = calendar.getTime(); Map<String,Object> variables = new HashMap<String,Object>(); variables.put("dueDateFormal", dueDateFormal); variables.put("dueDateValue", dueDateValue); for(int i = 0; i < 10; i++) runtimeService.startProcessInstanceByKey(PROCESS_KEY, (new StringBuilder()).append("BUSINESS-KEY-").append(i).toString(), variables); List<Task> taskList = taskService.createTaskQuery().taskCandidateUser("user1").list(); for(int i = 0; i < 5; i++) { Task t = (Task)taskList.get(i); taskService.claim(t.getId(), "user1"); } Thread.sleep(500L); for(int i = 0; i < 5; i++) { Task t = (Task)taskList.get(i); taskService.complete(t.getId()); } processEngine.close(); appContext.close(); } @After public void tearDown() throws Exception { File prevDB = new File((new StringBuilder()).append(LIVE_DB).append(".h2.db").toString()); if(prevDB.exists()) prevDB.delete(); prevDB = new File(System.getProperty("_SIM_DB_PATH")); if(prevDB.exists()) prevDB.delete(); } @Test public void test() throws Exception { String tempDir = "target"; FileUtils.copyFile(FileUtils.getFile(new String[] { (new StringBuilder()).append(LIVE_DB).append(".h2.db").toString() }), FileUtils.getFile(new String[] { (new StringBuilder()).append(tempDir).append("/simulationRunDB-aaa-").append(Thread.currentThread().getId()).append(".h2.db").toString() })); System.setProperty("_SIM_DB_PATH", (new StringBuilder()).append(tempDir).append("/simulationRunDB-aaa-").append(Thread.currentThread().getId()).toString()); ClassPathXmlApplicationContext appContext = new ClassPathXmlApplicationContext("/org/activiti/crystalball/simulator/SimRun-h2-context.xml"); PropertyPlaceholderConfigurer propConfig = new PropertyPlaceholderConfigurer(); Properties properties = new Properties(); properties.put("simulationRunId", "simulationRunDB-aaa-"+Thread.currentThread().getId()); propConfig.setProperties(properties); appContext.addBeanFactoryPostProcessor(propConfig); appContext.refresh(); SimulationRun simRun = (SimulationRun)appContext.getBean(SimulationRun.class); String userId = "user1"; TaskService taskService = (TaskService)appContext.getBean("taskService"); TaskService simTaskService = (TaskService)appContext.getBean("simTaskService"); List<Task> liveTaskList = ((TaskQuery)taskService.createTaskQuery().taskCandidateUser(userId).orderByTaskPriority().desc()).listPage(0, 1); List<Task> execTaskList = ((TaskQuery)simTaskService.createTaskQuery().taskCandidateUser(userId).orderByTaskPriority().desc()).listPage(0, 1); Assert.assertTrue(liveTaskList.size() == execTaskList.size()); IdentityService identityService = (IdentityService)appContext.getBean("identityService"); IdentityService simIdentityService = (IdentityService)appContext.getBean("simIdentityService"); List<User> users = identityService.createUserQuery().list(); List<User> simUsers = simIdentityService.createUserQuery().list(); Assert.assertTrue(users.size() == simUsers.size()); simRun.execute(new Date(), null); appContext.close(); } }