org.activiti.crystalball.simulator.PlaybackTest.java Source code

Java tutorial

Introduction

Here is the source code for org.activiti.crystalball.simulator.PlaybackTest.java

Source

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();
    }

}