Package com.wordpress.salaboy.procedures

Source Code of com.wordpress.salaboy.procedures.DefaultHeartAttackProcedureBaseTest

package com.wordpress.salaboy.procedures;

import com.wordpress.salaboy.context.tracking.ContextTrackingProvider;
import com.wordpress.salaboy.context.tracking.ContextTrackingService;


import org.drools.grid.SocketService;

import com.wordpress.salaboy.grid.GridBaseTest;
import com.wordpress.salaboy.messaging.MessageConsumerWorker;
import com.wordpress.salaboy.messaging.MessageConsumerWorkerHandler;
import com.wordpress.salaboy.messaging.MessageServerSingleton;
import com.wordpress.salaboy.model.Ambulance;
import com.wordpress.salaboy.model.Call;
import com.wordpress.salaboy.model.Emergency;
import com.wordpress.salaboy.model.Hospital;
import com.wordpress.salaboy.model.Location;
import com.wordpress.salaboy.model.Vehicle;
import com.wordpress.salaboy.model.messages.ProcedureCompletedMessage;
import com.wordpress.salaboy.model.messages.VehicleHitsEmergencyMessage;
import com.wordpress.salaboy.model.messages.VehicleHitsHospitalMessage;
import com.wordpress.salaboy.model.persistence.PersistenceService;
import com.wordpress.salaboy.model.persistence.PersistenceServiceProvider;
import com.wordpress.salaboy.services.HumanTaskServerService;
import com.wordpress.salaboy.services.ProceduresMGMTService;
import com.wordpress.salaboy.services.util.MessageToEventConverter;
import java.io.File;
import java.util.*;
import static org.junit.Assert.*;
import org.junit.Test;

/**
*
* @author salaboy
*/
public abstract class DefaultHeartAttackProcedureBaseTest extends GridBaseTest {

    private Emergency emergency = null;
    private Call call = null;
    private MessageConsumerWorker procedureEndedWorker;
    private int proceduresEndedCount;
    protected PersistenceService persistenceService;
    protected ContextTrackingService trackingService;
    private Ambulance ambulance1;
    private Ambulance ambulance2;

    public DefaultHeartAttackProcedureBaseTest() {
    }

    private static void deleteRecursively(File file) {
        if (!file.exists()) {
            return;
        }

        if (file.isDirectory()) {
            for (File child : file.listFiles()) {
                deleteRecursively(child);
            }
        }
        if (!file.delete()) {
            throw new RuntimeException(
                    "Couldn't empty database. Offending file:" + file);
        }
    }

    protected void setUp() throws Exception {
        System.out.println("Setting up in Super");

        deleteRecursively(new File(ContextTrackingProvider.defaultDB));
        deleteRecursively(new File("/data"));


        persistenceService = PersistenceServiceProvider.getPersistenceService();
        trackingService = ContextTrackingProvider.getTrackingService();
       
        HumanTaskServerService.getInstance().initTaskServer();

        call = new Call(1, 2, new Date());
        assertEquals(0, persistenceService.getAllCalls().size());
        persistenceService.storeCall(call);
        assertEquals(1, persistenceService.getAllCalls().size());
        emergency = new Emergency();
        emergency.setCall(call);
        emergency.setLocation(new Location(1, 2));
        emergency.setType(Emergency.EmergencyType.HEART_ATTACK);
        emergency.setNroOfPeople(1);
        assertEquals(0, persistenceService.getAllEmergencies().size());
        persistenceService.storeEmergency(emergency);
        assertEquals(1, persistenceService.getAllEmergencies().size());
        trackingService.attachEmergency(call.getId(), emergency.getId());
       
        persistenceService.storeHospital(new Hospital("My Hospital", 12, 1));
        assertEquals(0, persistenceService.getAllVehicles().size());
        ambulance1 = new Ambulance("My Ambulance Number 1");
        persistenceService.storeVehicle(ambulance1);
        ambulance2 = new Ambulance("My Ambulance Number 2");
        persistenceService.storeVehicle(ambulance2);
        assertEquals(2, persistenceService.getAllVehicles().size());
        MessageServerSingleton.getInstance().start();

        this.coreServicesMap = new HashMap();
        createRemoteNode();

        //Procedure Ended Worker
        procedureEndedWorker = new MessageConsumerWorker("ProcedureEndedCoreServer", new MessageConsumerWorkerHandler<ProcedureCompletedMessage>() {

            @Override
            public void handleMessage(ProcedureCompletedMessage procedureEndsMessage) {
                proceduresEndedCount++;
            }
        });

        procedureEndedWorker.start();
    }

    protected void tearDown() throws Exception {
        System.out.println("Tearing Down in Super");
       
        HumanTaskServerService.getInstance().stopTaskServer();
        MessageServerSingleton.getInstance().stop();
        if (remoteN1 != null) {
            remoteN1.dispose();
        }
        if (grid1 != null) {
            grid1.get(SocketService.class).close();
        }
        if (procedureEndedWorker != null) {
            procedureEndedWorker.stopWorker();
        }
        PersistenceServiceProvider.clear();
        ContextTrackingProvider.clear();
        ProceduresMGMTService.clear();
       
    }

    @Test
    public void defaultHeartAttackSimpleTest() throws Exception {


        Map<String, Object> parameters = new HashMap<String, Object>();
        parameters.put("call", call);
        parameters.put("emergency", emergency);

        assertEquals(0, persistenceService.getAllProcedures().size());
        ProceduresMGMTService.getInstance().newRequestedProcedure(emergency.getId(), "DefaultHeartAttackProcedure", parameters);

        Thread.sleep(5000);
        assertEquals(1, persistenceService.getAllProcedures().size());
       
        List<Vehicle> vehicles = new ArrayList<Vehicle>();
        vehicles.add(ambulance1);

        doGarageTask(emergency, vehicles);

        Thread.sleep(5000);

        //The vehicle reaches the emergency
        ProceduresMGMTService.getInstance().notifyProcedures(MessageToEventConverter.convertMessageToEvent(new VehicleHitsEmergencyMessage(ambulance1.getId(), emergency.getId(), new Date())));

        Thread.sleep(4000);

        //1 task for the doctor
        Map<String, String> doctorTasksId = getDoctorTasksId();
        assertEquals(1, doctorTasksId.size());

        //The doctor completes the task
        doDoctorTask(doctorTasksId.keySet().iterator().next());

        Thread.sleep(4000);

        //The process didn't finish yet
        assertEquals(0, proceduresEndedCount);

        //The vehicle reaches the hospital
        ProceduresMGMTService.getInstance().notifyProcedures(MessageToEventConverter.convertMessageToEvent(new VehicleHitsHospitalMessage(ambulance1.getId(), new Hospital("Hospital A", 0, 0), emergency.getId(), new Date())));

        Thread.sleep(5000);

        //The emergency has ended
        assertEquals(1, proceduresEndedCount);

    }

    @Test
    public void defaultHeartAttackWith2VehiclesTest() throws Exception {
        Map<String, Object> parameters = new HashMap<String, Object>();
        parameters.put("call", call);
        parameters.put("emergency", emergency);

        //we want to dispatch 2 ambulances
        List<Vehicle> vehicles = new ArrayList<Vehicle>();

        vehicles.add(ambulance1);
        vehicles.add(ambulance2);
        assertEquals(0, persistenceService.getAllProcedures().size());
        ProceduresMGMTService.getInstance().newRequestedProcedure(emergency.getId(), "DefaultHeartAttackProcedure", parameters);
        Thread.sleep(5000);
        assertEquals(1, persistenceService.getAllProcedures().size());

        doGarageTask(emergency, vehicles);
        Thread.sleep(5000);

        //The vehicle 2 reaches the emergency
        ProceduresMGMTService.getInstance().notifyProcedures(MessageToEventConverter.convertMessageToEvent(new VehicleHitsEmergencyMessage(ambulance2.getId(), emergency.getId(), new Date())));

        Thread.sleep(4000);

        //1 task for doctor now
        Map<String, String> doctorTasksId = getDoctorTasksId();
        assertEquals(1, doctorTasksId.size());


    }

    protected abstract void doGarageTask(Emergency emergency, List<Vehicle> selectedVehicles) throws Exception;

    protected abstract Map<String, String> getDoctorTasksId() throws Exception;

    protected abstract void doDoctorTask(String taskId) throws Exception;
}
TOP

Related Classes of com.wordpress.salaboy.procedures.DefaultHeartAttackProcedureBaseTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.