com.ecofactor.qa.automation.drapi.DR_Execution_410_Test.java Source code

Java tutorial

Introduction

Here is the source code for com.ecofactor.qa.automation.drapi.DR_Execution_410_Test.java

Source

/*
 * DRAPI_Execution_Test.java
 * Copyright (c) 2014, EcoFactor, All Rights Reserved.
 *
 * This software is the confidential and proprietary information of EcoFactor
 * ("Confidential Information"). You shall not disclose such Confidential Information and shall use
 * it only in accordance with the terms of the license agreement you entered into with
 * EcoFactor.
 */
package com.ecofactor.qa.automation.drapi;

import static com.ecofactor.qa.automation.platform.util.LogUtil.setLogString;

import java.lang.reflect.Method;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
import java.util.Map.Entry;

import org.apache.http.HttpResponse;
import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Guice;
import org.testng.annotations.Test;

import com.ecofactor.common.pojo.EcpCoreLSEventLocation;
import com.ecofactor.common.pojo.Thermostat;

import com.ecofactor.qa.automation.dao.DaoModule;
import com.ecofactor.qa.automation.dao.dr.EFThermostatEventDao;

import com.ecofactor.qa.automation.dao.dr.LSProgramEventDao;
import com.ecofactor.qa.automation.dao.dr.LSProgramEventLocationDao;
import com.ecofactor.qa.automation.dao.dr.LSProgramEventReportDao;
import com.ecofactor.qa.automation.dao.dr.ThermostatDao;

import com.ecofactor.qa.automation.drapi.data.DRAPIDataProvider;
import com.ecofactor.qa.automation.platform.constants.Groups;
import com.ecofactor.qa.automation.pojo.ThermostatEvent;
import com.ecofactor.qa.automation.util.DateUtil;
import com.ecofactor.qa.automation.util.UtilModule;
import com.ecofactor.qa.automation.util.WaitUtil;
import com.google.inject.Inject;

/**
 * The Class DRAPI_Execution_Test.
 * 
 * @author $Author:$
 * @version $Rev:$ $Date:$
 */
@Guice(modules = { UtilModule.class, DaoModule.class, DRApiModule.class })
public class DR_Execution_410_Test extends AbstractTest {

    /** The astatus. */
    private static String ASTATUS = "ACTIVE";

    /** The sstatus. */
    private static String SSTATUS = "SKIPPED";

    /** The startevent. */
    private static String STARTEVENT = "startEvent";

    /** The endevent. */
    private static String ENDEVENT = "endEvent";

    /** The eventstatus. */
    private static String EVENTSTATUS = "PROCESSED";

    /** The eventype. */
    private static String EVENTYPE_ALGO = "ALGO";

    /** The algorithmid. */
    private static Integer ALGORITHMID_410 = 410;

    /** The starteventphase. */
    private static Integer EVENTPHASE_0 = 0;

    /** The endeventphase. */
    private static Integer EVENTPHASE_2 = 2;

    /** The ls pro event. */
    @Inject
    private LSProgramEventDao lsProEvent;

    /** The lsp event report. */
    @Inject
    private LSProgramEventReportDao lspEventReport;

    /** The lsp event location. */
    @Inject
    private LSProgramEventLocationDao lspEventLocation;

    /** The tsat. */
    @Inject
    private ThermostatDao tsat;

    /** The efTsatEvent. */
    @Inject
    private EFThermostatEventDao efTsatEvent;

    /**
     * Before method.
     * 
     * @param method
     *            the method
     * @param param
     *            the param
     * @see com.ecofactor.qa.automation.consumerapi.AbstractTest#beforeMethod(java.lang.reflect.Method,
     *      java.lang.Object[])
     */
    @BeforeMethod(alwaysRun = true)
    public void beforeMethod(final Method method, final Object[] param) {

        logUtil.logStart(method, param, null);
        startTime = System.currentTimeMillis();
    }

    /**
     * Test_create_dr_event_ecofactor Corporation.
     * 
     * @param drUrl
     *            the dr url
     * @param programID
     *            the program id
     * @param eventID
     *            the event id
     * @param targetType
     *            the target type
     * @param targetALLJson
     *            the target all json
     * @param tstId
     *            the tst id
     * @throws ParseException
     *             the parse exception
     */
    @Test(groups = {
            Groups.SANITY1 }, dataProvider = "createExecutionDRALLGatewaysECO", dataProviderClass = DRAPIDataProvider.class, priority = 1)
    public void drEventForEco(final String drUrl, final String programID, final String eventID,
            final String targetType, final String targetALLJson, final String tstId) throws ParseException {

        final long timeStamp = System.currentTimeMillis();
        String createUrl = drUrl;

        createUrl = createUrl.replaceFirst("<program_id>", programID)
                .replaceFirst("<event_id>", eventID + timeStamp).replaceFirst("<target_type>", targetType)
                .replaceFirst("<target_all>", "true");

        String json = targetALLJson;
        json = json.replaceFirst("<start_time>", Long.toString(DateUtil.addToUTCMilliSeconds(Calendar.MINUTE, 5)))
                .replaceFirst("<end_time>", Long.toString(DateUtil.addToUTCMilliSeconds(Calendar.MINUTE, 25)));
        setLogString("URL Values of the API \n" + createUrl + "\n" + json, true);

        final HttpResponse response = HTTPSClient.postResponse(createUrl, json,
                HTTPSClient.getPKCSKeyHttpClient("ecofactorcorp.p12", "ecofactor"));

        final String result = HTTPSClient.getResultString(response.getEntity());
        setLogString("response :'" + result + "'", true);

        Assert.assertTrue(response.getStatusLine().getStatusCode() == 200,
                "Error status: " + response.getStatusLine());

        final String eventName = getDrEventName(result);
        setLogString("DR EventName: " + eventName, true);

        // Finding the eventId

        final int proramEventId = lsProEvent.programEventId(eventName);
        setLogString("DR Event Id: " + proramEventId, true);

        final Double grpId = (double) proramEventId;

        WaitUtil.tinyWait();

        final String eventStatus = lsProEvent.listByEventName(eventName);
        setLogString("DR Event Status : " + eventStatus, true);

        // Updating start and end time in ef_ls_program_event table

        final Map<String, Object> values = lsProEvent.updateEventByStartDateAndEndDate(eventName);
        setLogString("Details Based on Event Name : " + values, true);

        final int algorithmId = getAlgorithmId(values);
        setLogString("Algorithm Id : " + algorithmId, true);

        // Gets the list of location.

        final List<Integer> eventLocation = lspEventLocation.fetchByLocationId(proramEventId);
        setLogString("Available Location : " + eventLocation, true);

        WaitUtil.largeWait();
        setLogString("After 30 Seconds ", true);

        // At this time location status should be SCHEDULED

        final String updatedEventStatus = lsProEvent.listByEventName(eventName);
        setLogString("DR Event Status : " + updatedEventStatus, true);
        Assert.assertTrue(updatedEventStatus.equalsIgnoreCase(ASTATUS), "Still status is not in ACTIVE mode");

        final List<String> locIdStatus1 = lspEventLocation.fullListByLocationIdStatus(proramEventId);
        setLogString("Available Locations : " + locIdStatus1, true);

        // This wait makes sure since start time was updated as now+2 mins we
        // have enough wait to
        // ensure the DR is kicked in

        final Map<String, Object> startTime = lsProEvent.updateEventByStartDate(eventName);
        setLogString("Details after updated the start time : " + startTime, true);

        // This should have location Ids with status as SKIPPED and ACTIVE
        /*
         * Action Item: get count of locations and thermostat linked to these
         * locations which have status as ACTIVE and SKIPPED This is needed for
         * report assertion
         */

        final List<String> locIdStatus = lspEventLocation.fullListByLocationIdStatus(proramEventId);
        setLogString("Location and Status after few seconds : " + locIdStatus, true);

        final Map<String, Integer> countDetails = getCountOfTstLocations(proramEventId);
        setLogString("Location and Thermostat Count based on status : " + countDetails, true);

        // Test thermostatId
        final int thermostatId = Integer.parseInt(tstId); /*
                                                          * tstatEvent.listByGroupId
                                                          * (grpId);
                                                          */
        setLogString("Thermostat Id : " + thermostatId, true);

        /*
         * WaitUtil.hugeWait(); setLogString("After 5 minutes ", true);
         */

        // This should give the record from ef_thermostat_event table for the
        // given thermostat and
        // event
        /*
         * Action Item: {start event enty:Assertions on algorithm 410 should
         * have event_type ALGO, event_status PROCESSED, event_phase 0 and
         * action startEvent}, {end event entry: Assertions on algorithm 210
         * should have event_type ALGO, event_status PROCESSED, event_phase 2,
         * action endEvent, groupevent_id = event_id.2(2713.2)}, eg: on qa-plat
         * run this query : select * from ef_thermostat_event where
         * thermostat_id = 2641 and group_event_id in (2715,2715.2)
         */

        final List<ThermostatEvent> tstatDetails = efTsatEvent.fetchDetailsByThermostatId(thermostatId, grpId);
        Assert.assertTrue(isStartEntryValidated(tstatDetails), "Values were not matched in Start Entry");
        setLogString("Verified with start event ", true);

        WaitUtil.veryHugeWait();
        WaitUtil.veryHugeWait();
        WaitUtil.veryHugeWait();
        setLogString("After 20+ minutes ", true);
        final List<ThermostatEvent> tstatDetails1 = efTsatEvent.fetchDetailsByThermostatId(thermostatId, grpId);
        Assert.assertTrue(isEndEntryValidated(tstatDetails1, grpId), "Values were not matched in End Entry");
        setLogString("Verified with end event", true);

        /*
         * Remaining code 1. Cancel DR 2. Reports Assertion
         */

        /*
         * setLogString("Though event completed, but updating status as Cancel ",
         * true); final int programEventId =
         * lsProEvent.updateEventStatus(eventName);
         * setLogString("Program Event Id: " + programEventId, true);
         * eControl.updateStatus(programEventId, ISTATUS);
         * setLogString("Updated ", true);
         */

        final Map<String, Object> detail = lspEventReport.updatedDetails(proramEventId);
        setLogString("Event Location Report : " + detail, true);
        Assert.assertTrue(isLocationCountValidated(countDetails, detail),
                "Location count is not as same as Report");
        setLogString("Verified with Locations Count", true);
        Assert.assertTrue(isTstCountValidated(countDetails, detail), "Thermostat count is not as same as Report");
        setLogString("Verified with Thermostats Count", true);
    }

    /**
     * Test_create_dr_event_nve.
     * 
     * @param drUrl
     *            the dr url
     * @param programID
     *            the program id
     * @param eventID
     *            the event id
     * @param targetType
     *            the target type
     * @param targetAllJson
     *            the target all json
     * @param tstId
     *            the tst id
     * @throws ParseException
     *             the parse exception
     */
    @Test(groups = {
            Groups.SANITY1 }, dataProvider = "createDRAllGatewaysNVEExecution", dataProviderClass = DRAPIDataProvider.class, priority = 2)
    public void drEventForNve(final String drUrl, final String programID, final String eventID,
            final String targetType, final String targetAllJson, final String tstId) throws ParseException {

        long timeStamp = System.currentTimeMillis();
        String directURL = drUrl;

        directURL = directURL.replaceFirst("<program_id>", programID)
                .replaceFirst("<event_id>", eventID + timeStamp).replaceFirst("<target_type>", targetType)
                .replaceFirst("<target_all>", "true");

        String json = targetAllJson;
        json = json.replaceFirst("<start_time>", Long.toString(DateUtil.addToUTCMilliSeconds(Calendar.MINUTE, 5)))
                .replaceFirst("<end_time>", Long.toString(DateUtil.addToUTCMilliSeconds(Calendar.MINUTE, 25)));
        setLogString("URL Values of the API \n" + directURL + "\n" + json, true);

        final HttpResponse response = HTTPSClient.postResponse(directURL, json,
                HTTPSClient.getPKCSKeyHttpClient("ecofactorqanve.p12", "ecofactor"));
        Assert.assertTrue(response.getStatusLine().getStatusCode() == 200,
                "Error Status:" + response.getStatusLine());

        final String resultValueString = HTTPSClient.getResultString(response.getEntity());
        setLogString("response :'" + resultValueString + "'", true);

        final String eventName = getDrEventName(resultValueString);
        setLogString("DR EventName: " + eventName, true);

        // Finding the eventId

        final int proramEventId = lsProEvent.programEventId(eventName);
        setLogString("DR Event Id: " + proramEventId, true);

        final Double grpId = (double) proramEventId;

        WaitUtil.tinyWait();

        final String eventStatus = lsProEvent.listByEventName(eventName);
        setLogString("DR Event Status : " + eventStatus, true);

        // Updating start and end time in ef_ls_program_event table

        final Map<String, Object> values = lsProEvent.updateEventByStartDateAndEndDate(eventName);
        setLogString("Details Based on Event Name : " + values, true);

        final int algorithmId = getAlgorithmId(values);
        setLogString("Algorithm Id : " + algorithmId, true);

        // Gets the list of location.

        final List<Integer> eventLocation = lspEventLocation.fetchByLocationId(proramEventId);
        setLogString("Available Location : " + eventLocation, true);

        WaitUtil.threeMinutesWait();
        setLogString("After 3 mins ", true);

        // At this time location status should be SCHEDULED

        final String updatedEventStatus = lsProEvent.listByEventName(eventName);
        setLogString("DR Event Status : " + updatedEventStatus, true);
        Assert.assertTrue(updatedEventStatus.equalsIgnoreCase(ASTATUS), "Still status is not in ACTIVE mode");

        final List<String> locIdStatus1 = lspEventLocation.fullListByLocationIdStatus(proramEventId);
        setLogString("Available Locations : " + locIdStatus1, true);

        // This wait makes sure since start time was updated as now+2 mins we
        // have enough wait to
        // ensure the DR is kicked in
        final Map<String, Object> startTime = lsProEvent.updateEventByStartDate(eventName);
        setLogString("Details after updated the start time : " + startTime, true);

        // This should have location Ids with status as SKIPPED and ACTIVE
        /*
         * Action Item: get count of locations and thermostat linked to these
         * locations which have status as ACTIVE and SKIPPED This is needed for
         * report assertion
         */

        final List<String> locIdStatus = lspEventLocation.fullListByLocationIdStatus(proramEventId);
        setLogString("Location and Status after 5 mins : " + locIdStatus, true);

        final Map<String, Integer> countDetails = getCountOfTstBasedOnLocations(proramEventId);
        setLogString("Location and Thermostat Count based on status : " + countDetails, true);

        // Test thermostatId
        final int thermostatId = Integer.parseInt(tstId); // tstatEvent.listByGroupId(grpId);
        setLogString("Thermostat Id : " + thermostatId, true);

        // This should give the record from ef_thermostat_event table for the
        // given thermostat and
        // event
        /*
         * Action Item: {start event enty:Assertions on algorithm 410 should
         * have event_type ALGO, event_status PROCESSED, event_phase 0 and
         * action startEvent}, {end event entry: Assertions on algorithm 210
         * should have event_type ALGO, event_status PROCESSED, event_phase 2,
         * action endEvent, groupevent_id = event_id.2(2713.2)}, eg: on qa-plat
         * run this query : select * from ef_thermostat_event where
         * thermostat_id = 2641 and group_event_id in (2715,2715.2)
         */

        /*
         * WaitUtil.threeMinutesWait(); WaitUtil.hugeWait();
         * setLogString("After 3+ minutes ", true);
         */
        final List<ThermostatEvent> tstatDetails = efTsatEvent.fetchDetailsByThermostatId(thermostatId, grpId);
        Assert.assertTrue(isStartEntryValidated(tstatDetails), "Values were not matched in Start Entry");

        WaitUtil.veryHugeWait();
        WaitUtil.threeMinutesWait();
        // WaitUtil.veryHugeWait();
        // WaitUtil.veryHugeWait();
        setLogString("After 20+ minutes ", true);
        final List<ThermostatEvent> tstatDetails1 = efTsatEvent.fetchDetailsByThermostatId(thermostatId, grpId);
        Assert.assertTrue(isEndEntryValidated(tstatDetails1, grpId), "Values were not matched in End Entry");
        setLogString("Verified with end event", true);

        /*
         * Remaining code 1. Cancel DR 2. Reports Assertion
         */

        /*
         * setLogString("Though event completed, but updating status as Cancel ",
         * true); final int programEventId =
         * lsProEvent.updateEventStatus(eventName);
         * setLogString("Program Event Id: " + programEventId, true);
         * eControl.updateStatus(programEventId, ISTATUS);
         * setLogString("Updated ", true);
         */

        final Map<String, Object> detail = lspEventReport.updatedDetails(proramEventId);
        setLogString("Event Location Report : " + detail, true);
        Assert.assertTrue(isLocationCountValidated(countDetails, detail),
                "Location count is not as same as Report");
        Assert.assertTrue(isTstCountValidated(countDetails, detail), "Thermostat count is not as same as Report");
    }

    /**
     * Fetch the Event Name after creation of DR Event.
     * 
     * @param response
     *            the response
     * @return String.
     */
    private String getDrEventName(final String response) {

        StringTokenizer st = new StringTokenizer(response, ",");
        String eventID = "";
        while (st.hasMoreElements()) {

            @SuppressWarnings("unused")
            String status = st.nextToken();
            eventID = st.nextToken();
        }
        String[] eventValues = eventID.split(":");
        final String eventName = eventValues[2];

        setLogString("DR EventName Fetched : " + eventName.substring(0, eventName.length() - 3), true);
        return eventName.substring(0, eventName.length() - 3);
    }

    /**
     * Fetch the location Id based on status.
     * 
     * @param allDetails
     *            the Map details.
     * @param status
     *            the status
     * @return Integer.
     */
    public int getLocationIdOfStatus(Map<Object, Object> allDetails, String status) {

        String keyStatus = "";
        int valueLocationId = 0;
        for (Map.Entry<Object, Object> allEntry : allDetails.entrySet()) {

            keyStatus = allEntry.getKey().toString();
            valueLocationId = (int) allEntry.getValue();
            if (keyStatus.equalsIgnoreCase(status)) {

                valueLocationId = (int) allEntry.getValue();
            }
        }
        return valueLocationId;
    }

    /**
     * Gets the algorithm id.
     * 
     * @param allDetails
     *            the all details
     * @return the algorithm id
     */
    public int getAlgorithmId(Map<String, Object> allDetails) {

        int algoId = 0;
        for (Entry<String, Object> values : allDetails.entrySet()) {
            if (values.getKey().contains("Algorithm Id")) {
                algoId = (int) values.getValue();
            }
        }
        return algoId;
    }

    /**
     * Gets the count of thermostat based on status.
     * 
     * @param programEventId
     *            the program event id
     * @param locationByStatus
     *            the location by status
     * @return the count of thermostat based on status
     */
    public List<Thermostat> getCountOfThermostatBasedOnStatus(final Integer programEventId,
            final List<EcpCoreLSEventLocation> locationByStatus) {

        final List<Thermostat> list = new ArrayList<>();
        for (final EcpCoreLSEventLocation locationEvent : locationByStatus) {

            list.addAll(tsat.listThermostatsByLocation(locationEvent.getLocationid()));
        }
        return list;
    }

    /**
     * Gets the count of thermostat based status.
     * 
     * @param programEventId
     *            the program event id
     * @param locationByStatus
     *            the location by status
     * @return the count of thermostat based status
     */
    public List<Thermostat> getCountOfThermostatBasedStatus(final Integer programEventId,
            final List<EcpCoreLSEventLocation> locationByStatus, final String status) {

        List<Thermostat> list1 = new ArrayList<>();
        if (status.equalsIgnoreCase(ASTATUS)) {

            for (final EcpCoreLSEventLocation locationEvent : locationByStatus) {

                list1.addAll(tsat.countOfThermostatByStatus(locationEvent.getLocationid(), ASTATUS));
            }
        } else if (status.equalsIgnoreCase(SSTATUS)) {

            for (final EcpCoreLSEventLocation locationEvent : locationByStatus) {

                list1.addAll(tsat.countOfThermostatByStatus(locationEvent.getLocationid(), ASTATUS));
            }
        }

        return list1;
    }

    /**
     * Gets the count of tst locations.
     * 
     * @param proramEventId
     *            the proram event id
     * @return the count of tst locations
     */
    public Map<String, Integer> getCountOfTstLocations(final Integer proramEventId) {

        Map<String, Integer> locationCount = new HashMap<String, Integer>();
        List<Thermostat> tstByActiveStatus = null;
        List<Thermostat> tstBySkippedStatus = null;

        // count of locations based on active
        final List<EcpCoreLSEventLocation> locationByStatus = lspEventLocation
                .listByProgramEventAndStatus(proramEventId, ASTATUS);
        locationCount.put("Total No of Locations based on Active Status",
                locationByStatus == null ? 0 : locationByStatus.size());

        // count of tst based on active
        tstByActiveStatus = getCountOfThermostatBasedOnStatus(proramEventId, locationByStatus);
        locationCount.put("Total No of Thermostats based on Active Status", tstByActiveStatus.size());

        // count of locations based on skipped
        final List<EcpCoreLSEventLocation> locationByStatus1 = lspEventLocation
                .listByProgramEventAndStatus(proramEventId, SSTATUS);
        locationCount.put("Total No of Locations based on Skipped Status",
                locationByStatus1 == null ? 0 : locationByStatus1.size());

        // count of thst by skipped
        tstBySkippedStatus = getCountOfThermostatBasedOnStatus(proramEventId, locationByStatus1);
        locationCount.put("Total No of Thermostats based on Skipped Status", tstBySkippedStatus.size());

        // total no of locations and tst
        locationCount.put("Total No of Locations", (locationByStatus.size() + locationByStatus1.size()));
        locationCount.put("Total No of Thermostats", (tstByActiveStatus.size() + tstBySkippedStatus.size()));

        return locationCount;
    }

    /**
     * Gets the count of tst based on locations.
     * 
     * @param proramEventId
     *            the proram event id
     * @return the count of tst based on locations
     */
    public Map<String, Integer> getCountOfTstBasedOnLocations(final Integer proramEventId) {

        Map<String, Integer> locationCount = new HashMap<String, Integer>();
        List<Thermostat> tstByActiveStatus = null;
        List<Thermostat> tstBySkippedStatus = null;

        // count of locations based on active
        final List<EcpCoreLSEventLocation> locationByStatus = lspEventLocation
                .listByProgramEventAndStatus(proramEventId, ASTATUS);
        locationCount.put("Total No of Locations based on Active Status",
                locationByStatus == null ? 0 : locationByStatus.size());

        // count of tst based on active
        tstByActiveStatus = getCountOfThermostatBasedStatus(proramEventId, locationByStatus, ASTATUS);
        locationCount.put("Total No of Thermostats based on Active Status", tstByActiveStatus.size());

        // count of locations based on skipped
        final List<EcpCoreLSEventLocation> locationByStatus1 = lspEventLocation
                .listByProgramEventAndStatus(proramEventId, SSTATUS);
        locationCount.put("Total No of Locations based on Skipped Status",
                locationByStatus1 == null ? 0 : locationByStatus1.size());

        // count of thst by skipped
        tstBySkippedStatus = getCountOfThermostatBasedStatus(proramEventId, locationByStatus1, SSTATUS);
        locationCount.put("Total No of Thermostats based on Skipped Status", tstBySkippedStatus.size());

        // total no of locations and tst
        locationCount.put("Total No of Locations", (locationByStatus.size() + locationByStatus1.size()));
        locationCount.put("Total No of Thermostats", (tstByActiveStatus.size() + tstBySkippedStatus.size()));

        return locationCount;
    }

    /**
     * Checks if is location count validated.
     * 
     * @param locationCount
     *            the location count
     * @param detail
     *            the detail
     * @return true, if is location count validated
     */
    public boolean isLocationCountValidated(final Map<String, Integer> locationCount,
            final Map<String, Object> detail) {

        boolean validate = false;

        for (Map.Entry<String, Integer> values : locationCount.entrySet()) {
            for (Map.Entry<String, Object> value : detail.entrySet()) {

                if ((values.getKey().contains("Total No of Locations based on Active Status"))
                        && value.getKey().contains("Number Actual Locations")) {

                    validate = values.getValue().equals(value.getValue());
                }
            }
        }
        return validate;
    }

    /**
     * Checks if is tst count validated.
     * 
     * @param tstCount
     *            the tst count
     * @param detail
     *            the detail
     * @return true, if is tst count validated
     */
    public boolean isTstCountValidated(final Map<String, Integer> tstCount, final Map<String, Object> detail) {

        boolean tstValidate = false;

        for (Map.Entry<String, Integer> values : tstCount.entrySet()) {
            for (Map.Entry<String, Object> value : detail.entrySet()) {

                if ((values.getKey().contains("Total No of Thermostats based on Active Status"))
                        && value.getKey().contains("Number Actual Thermostats")) {

                    tstValidate = values.getValue().equals(value.getValue());
                }
            }
        }
        return tstValidate;
    }

    /**
     * Gets the details of tst event.
     * 
     * @param details
     *            the details
     * @return the details of tst event
     */
    public boolean isStartEntryValidated(final List<ThermostatEvent> details) {

        boolean startEntryValidate = false;
        for (ThermostatEvent thermostatEvent : details) {
            if ((thermostatEvent.getAction().equalsIgnoreCase(STARTEVENT))
                    // &&
                    // (thermostatEvent.getAlgorithmId().equals(ALGORITHMID_410)
                    // ||
                    // thermostatEvent.getAlgorithmId().equals("310"))
                    && (thermostatEvent.getEventPhase().equals(EVENTPHASE_0))
                    && (thermostatEvent.getEventStatus().equalsIgnoreCase(EVENTSTATUS))
                    && (thermostatEvent.getEventType().equalsIgnoreCase(EVENTYPE_ALGO))) {
                startEntryValidate = true;
                break;
            }
        }
        return startEntryValidate;
    }

    /**
     * Checks if is end entry validated.
     * 
     * @param details
     *            the details
     * @param groupEventId
     *            the group event id
     * @return true, if is end entry validated
     */
    public boolean isEndEntryValidated(final List<ThermostatEvent> details, final Double groupEventId) {

        boolean endEntryValidate = false;
        final Double grpEventIdCompleted = groupEventId + 0.2;
        setLogString("Group Event ID Compleated : " + grpEventIdCompleted, true);
        for (ThermostatEvent thermostatEvent : details) {
            if ((thermostatEvent.getAction().equalsIgnoreCase(ENDEVENT))
                    // &&
                    // (thermostatEvent.getAlgorithmId().equals(ALGORITHMID_410))
                    && (thermostatEvent.getEventPhase().equals(EVENTPHASE_2))
                    && (thermostatEvent.getEventStatus().equalsIgnoreCase(EVENTSTATUS))
                    && (thermostatEvent.getEventType().equalsIgnoreCase(EVENTYPE_ALGO))
                    && (grpEventIdCompleted.equals(thermostatEvent.getGroupEventId()))) {
                endEntryValidate = true;
                break;
            }
        }
        return endEntryValidate;
    }
}