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.PlaybackScheduleStartProcessEventHandler;
import org.activiti.engine.HistoryService;
import org.activiti.engine.IdentityService;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.history.HistoricProcessInstance;
import org.activiti.engine.history.HistoricVariableInstance;
import org.junit.After;
import org.junit.Before;
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 PlaybackTest {
@After @Before
public void after() {
File db = new File(System.getProperty("tempDir", "target") + "/Playback-test.h2.db");
db.delete();
db = new File(System.getProperty("tempDir", "target") + "/Playback-test2.h2.db");
db.delete();
}
@Test
public void testPlaybackRun() throws Exception {
System.setProperty("_SIM_DB_PATH", System.getProperty("tempDir", "target") + "/Playback-test");
System.setProperty("liveDB", "target/Playback");
ClassPathXmlApplicationContext appContext = new ClassPathXmlApplicationContext("/org/activiti/crystalball/simulator/PlaybackSimEngine-h2-context.xml");
HistoryService simHistoryService = (HistoryService)appContext.getBean("simHistoryService");
// init identity service
IdentityService identityService = (IdentityService) appContext.getBean("simIdentityService");
identityService.saveGroup( identityService.newGroup("Group1") );
identityService.saveUser( identityService.newUser("user1") );
identityService.createMembership("user1", "Group1");
SimulationRun simRun = (SimulationRun)appContext.getBean(SimulationRun.class);
RepositoryService simRepositoryService = (RepositoryService) appContext.getBean( "simRepositoryService" );
// deploy processes
simRepositoryService.createDeployment()
.addClasspathResource("org/activiti/crystalball/simulator/Playback.bpmn")
.deploy();
Calendar c = Calendar.getInstance();
c.clear();
c.set(2013, 3, 3);
Date startDate = c.getTime();
c.add( Calendar.SECOND, 10);
Date finishDate = c.getTime();
// run simulation for 10 seconds
simRun.execute(startDate, finishDate);
assertEquals( 3, simHistoryService.createHistoricProcessInstanceQuery().count());
List<HistoricProcessInstance> processInstances = simHistoryService.createHistoricProcessInstanceQuery()
.orderByProcessInstanceStartTime().asc()
.list();
HistoricProcessInstance processInstance = processInstances.get(0);
HistoricVariableInstance variableInstance = simHistoryService.createHistoricVariableInstanceQuery()
.processInstanceId( processInstance.getId())
.variableName( "x")
.singleResult();
assertEquals(3, ((Integer) variableInstance.getValue()).intValue());
processInstance = processInstances.get(1);
variableInstance = simHistoryService.createHistoricVariableInstanceQuery()
.processInstanceId( processInstance.getId())
.variableName( "x")
.singleResult();
assertEquals(2, ((Integer) variableInstance.getValue()).intValue());
processInstance = processInstances.get(2);
variableInstance = simHistoryService.createHistoricVariableInstanceQuery()
.processInstanceId( processInstance.getId())
.variableName( "x")
.singleResult();
assertEquals(3, ((Integer) variableInstance.getValue()).intValue());
appContext.close();
}
/**
* repeat playback 2 times + 2 seconds (2 new processes are started0
* @throws Exception
*/
@Test
public void testPlayback2Run() throws Exception {
System.setProperty("_SIM_DB_PATH", System.getProperty("tempDir", "target") + "/Playback-test2");
System.setProperty("liveDB", "target/Playback");
ClassPathXmlApplicationContext appContext = new ClassPathXmlApplicationContext("/org/activiti/crystalball/simulator/PlaybackSimEngine-h2-context.xml");
// deploy processes
RepositoryService simRepositoryService = (RepositoryService) appContext.getBean( "simRepositoryService" );
simRepositoryService.createDeployment()
.addClasspathResource("org/activiti/crystalball/simulator/Playback.bpmn")
.deploy();
HistoryService historyService = (HistoryService)appContext.getBean("simHistoryService");
// init identity service
IdentityService identityService = (IdentityService) appContext.getBean("simIdentityService");
identityService.saveGroup( identityService.newGroup("Group1") );
identityService.saveUser( identityService.newUser("user1") );
identityService.createMembership("user1", "Group1");
SimulationRun simRun = (SimulationRun)appContext.getBean(SimulationRun.class);
PlaybackScheduleStartProcessEventHandler schedule = (PlaybackScheduleStartProcessEventHandler)appContext.getBean("scheduleProcessEventHandler");
schedule.setRepeatPlayback( true );
Calendar c = Calendar.getInstance();
c.clear();
c.set(2013, 3, 3);
Date startDate = c.getTime();
c.add( Calendar.SECOND, 12);
Date finishDate = c.getTime();
// run simulation for 12 seconds
simRun.execute(startDate, finishDate);
assertEquals( 8, historyService.createHistoricProcessInstanceQuery().count());
List<HistoricProcessInstance> processInstances = historyService.createHistoricProcessInstanceQuery()
.orderByProcessInstanceStartTime().asc()
.list();
HistoricProcessInstance processInstance = processInstances.get(0);
HistoricVariableInstance variableInstance = historyService.createHistoricVariableInstanceQuery()
.processInstanceId( processInstance.getId())
.variableName( "x")
.singleResult();
assertEquals(3, ((Integer) variableInstance.getValue()).intValue());
processInstance = processInstances.get(1);
variableInstance = historyService.createHistoricVariableInstanceQuery()
.processInstanceId( processInstance.getId())
.variableName( "x")
.singleResult();
assertEquals(2, ((Integer) variableInstance.getValue()).intValue());
processInstance = processInstances.get(2);
variableInstance = historyService.createHistoricVariableInstanceQuery()
.processInstanceId( processInstance.getId())
.variableName( "x")
.singleResult();
assertEquals(3, ((Integer) variableInstance.getValue()).intValue());
processInstance = processInstances.get(3);
variableInstance = historyService.createHistoricVariableInstanceQuery()
.processInstanceId( processInstance.getId())
.variableName( "x")
.singleResult();
assertEquals(3, ((Integer) variableInstance.getValue()).intValue());
processInstance = processInstances.get(4);
variableInstance = historyService.createHistoricVariableInstanceQuery()
.processInstanceId( processInstance.getId())
.variableName( "x")
.singleResult();
assertEquals(2, ((Integer) variableInstance.getValue()).intValue());
processInstance = processInstances.get(5);
variableInstance = historyService.createHistoricVariableInstanceQuery()
.processInstanceId( processInstance.getId())
.variableName( "x")
.singleResult();
assertEquals(3, ((Integer) variableInstance.getValue()).intValue());
processInstance = processInstances.get(6);
variableInstance = historyService.createHistoricVariableInstanceQuery()
.processInstanceId( processInstance.getId())
.variableName( "x")
.singleResult();
//user task was not finished yet
assertEquals(1, ((Integer) variableInstance.getValue()).intValue());
processInstance = processInstances.get(7);
variableInstance = historyService.createHistoricVariableInstanceQuery()
.processInstanceId( processInstance.getId())
.variableName( "x")
.singleResult();
assertEquals(2, ((Integer) variableInstance.getValue()).intValue());
appContext.close();
}
}