ItsIvim_TpFunctions.ttcn 53 KB
Newer Older
/**
 *    @author   ETSI STF517
 *    @version  $URL$
 *              $Id$
 *    @desc     IVIM TP functions
 *
 */

module ItsIvim_TpFunctions {
    
    // LibCommon
    import from LibCommon_Sync all;
    import from LibCommon_VerdictControl all;
    import from LibCommon_Time all;
    import from LibCommon_BasicTypesAndValues all;
    
    // LibItsCommon
    import from LibItsCommon_Pixits all;
    import from LibItsCommon_Functions all;
    import from LibItsCommon_TypesAndValues all;
    
    // LibIts
    import from ITS_Container language "ASN.1:1997" all;
    import from IVIM_PDU_Descriptions language "ASN.1:1997" all;
    import from IVI language "ASN.1:1997" all;
    
    // LibItsIVIM
    import from LibItsIvim_TypesAndValues all;
    import from LibItsIvim_Templates all;
    import from LibItsIvim_TestSystem all;
    import from LibItsIvim_Functions all;
    import from LibItsIvim_Pics all;
    
    group iviMessageTransmission { 
        
        group iviMessageFormat {
            
            /**
             * @desc    TP Function for TC_IS_IVI_MSGF_BV_01
             */
            function f_IS_IVI_MSGF_BV_01() runs on ItsIvim {
                
                // Local variables
                
                // Test control
                if (not PICS_IVIM_GENERATION) {
                    log("*** " & testcasename() & ": PICS_IVIM_GENERATION required for executing the TC ***");
                    setverdict(inconc);
                    stop;
                }
                
                // Test component configuration
                f_cfUp();
                
                // Test adapter configuration
                
                // Preamble
                f_prInitialState();
                f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
                
                // Test Body
                tc_ac.start;
                alt {
                    [] ivimPort.receive(
                        mw_ivimInd(
                            mw_anyIvimPdu(
                                mw_itsPduHeader
                    ))) { 
                        tc_ac.stop;
garciay's avatar
garciay committed
                        log("*** " & testcasename() & ": PASS: Expected IVIM received ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_success);  
                    }
                    [] tc_ac.timeout {
garciay's avatar
garciay committed
                        log("*** " & testcasename() & ": INCONC: IVIM not received ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
                    }
                }
                
                // Postamble
                f_poDefault();
                f_cfDown();
                
            } // End of function f_IVIM_MSD_FMT_BV_01
            
        } // End of group iviMessageFormat
        
        group iviEventGeneration {
            
            function f_IS_IVI_EVGN_BV_01() runs on ItsIvim {
                
                // Local variables
                var IviIdentificationNumber v_iviIdentificationNumber;
                
garciay's avatar
garciay committed
                // Test control
                if (not PICS_IVIM_GENERATION) {
                    log("*** " & testcasename() & ": PICS_IVIM_GENERATION required for executing the TC ***");
                    setverdict(inconc);
                    stop;
                }
                
                // Test component configuration
                f_cfUp();
                
                // Test adapter configuration
                
                // Preamble
                f_prInitialState();
                f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
                
                // Test Body
                v_iviIdentificationNumber := f_utTriggerEvent(m_utTriggerEvent());
                        
                tc_ac.start;
                alt {
                    [] ivimPort.receive(
                        mw_ivimInd(
                            mw_anyIvimPdu(
                                mw_itsPduHeader,
                                mw_ivimStructure(
                                    mw_iviManagementContainer
                    )))) {
                        tc_ac.stop;
                        log("*** " & testcasename() & ": PASS: Successfully received IVIM. ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
                    }
                    [] ivimPort.receive(
                        mw_ivimInd(
                            mw_anyIvimPdu
                    )) {
                        tc_ac.stop;
                        log("*** " & testcasename() & ": FAIL: Received a IVIM with incorrect information. ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
                    }
                    [] tc_ac.timeout {
                        log("*** " & testcasename() & ": INCONC: Timeout while awaiting the reception of a message. ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
                    }
                }
                
                // Postamble
                f_poCancelEvent(e_iut, v_iviIdentificationNumber);
                f_cfDown();
                
            } // End of function f_IVIM_MSD_FMT_BV_01
            
            function f_IS_IVI_EVGN_BV_02() runs on ItsIvim {
                
                // Local variables
                var template (value) UtIvimTriggerList v_utTriggers := {
                    m_utTriggerEvent(c_duration_2sec, f_getCurrentTime() - 1000 * c_duration_2sec, -, -, -),
                    m_utTriggerEvent(c_duration_4sec, f_getCurrentTime() - 1000 * c_duration_4sec, -, -, -),
                    m_utTriggerEvent(c_duration_6sec, f_getCurrentTime() - 1000 * c_duration_6sec, -, -, -)
                }
                var boolean v_success := true;
                var IviIdentificationNumberList v_iviIdentificationNumbers;
                var IvimInd v_ivimInd;
                var integer i;
                
garciay's avatar
garciay committed
                // Test control
                if (not PICS_IVIM_GENERATION) {
                    log("*** " & testcasename() & ": PICS_IVIM_GENERATION required for executing the TC ***");
                    setverdict(inconc);
                    stop;
                }
                
                // Test component configuration
                f_cfUp();
                
                // Test adapter configuration
                
                // Preamble
                f_prInitialState();
                for (i := 0; i < lengthof(v_utTriggers) - 1; i := i + 1) {
                    f_utTriggerEvent(v_utTriggers[i]);
                    f_awaitIviMessage(mw_ivimInd(mw_anyIvimPdu), v_ivimInd);
                    v_iviIdentificationNumbers[i] := v_ivimInd.msgIn.ivi.mandatory.iviIdentificationNumber;
                }
                f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
                
                // Test Body
                f_utTriggerEvent(v_utTriggers[lengthof(v_utTriggers) - 1]);
                f_awaitIviMessage(mw_ivimInd(mw_anyIvimPdu), v_ivimInd);
                v_iviIdentificationNumbers[lengthof(v_iviIdentificationNumbers) - 1] := v_ivimInd.msgIn.ivi.mandatory.iviIdentificationNumber;
                
                //check the action id
                for (i := 0; i < lengthof(v_iviIdentificationNumbers) - 1; i := i + 1) {
                    if (v_iviIdentificationNumbers[lengthof(v_iviIdentificationNumbers) - 1] == v_iviIdentificationNumbers[i]) {
                        v_success := false;
                    }
                }
                if (v_success==true) {
                    log("*** " & testcasename() & ": PASS: IviIdentificationNumber field indicating unused value. ***");
                    f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
                }
                else {
                    log("*** " & testcasename() & ": FAIL: IviIdentificationNumber field indicating used value. ***");
                    f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
                }
                
                // Postamble
                for (i := 0; i < lengthof(v_iviIdentificationNumbers); i := i + 1) {
                    f_poCancelEvent(e_iut, v_iviIdentificationNumbers[i]);
                }
                f_cfDown();
                
            } // End of function f_IVIM_MSD_FMT_BV_02
            
            function f_IS_IVI_EVGN_BV_03() runs on ItsIvim {
                
                // Local variables
                var template (value) UtIvimTriggerList v_utTriggers := {
                    m_utTriggerEvent(c_duration_2sec, f_getCurrentTime() - 1000 * c_duration_2sec, -, -, -),
                    m_utTriggerEvent(c_duration_4sec, f_getCurrentTime() - 1000 * c_duration_4sec, -, -, -),
                    m_utTriggerEvent(c_duration_6sec, f_getCurrentTime() - 1000 * c_duration_6sec, -, -, -)
                }
                var IviIdentificationNumber v_iviIdentificationNumber;
                var boolean v_success := true;
                var IvimInd v_ivimInd;
                var integer i;
                
garciay's avatar
garciay committed
                // Test control
                if (not PICS_IVIM_GENERATION) {
                    log("*** " & testcasename() & ": PICS_IVIM_GENERATION required for executing the TC ***");
                    setverdict(inconc);
                    stop;
                }
                
                // Test component configuration
                f_cfUp();
                
                // Test adapter configuration
                
                // Preamble
                f_prInitialState();
                for (i := 0; i < lengthof(v_utTriggers) - 1; i := i + 1) {
                    f_utTriggerEvent(v_utTriggers[i]);
                    f_awaitIviMessage(mw_ivimInd(mw_anyIvimPdu), v_ivimInd);
                    f_poCancelEvent(e_iut, v_ivimInd.msgIn.ivi.mandatory.iviIdentificationNumber);
                }
                //save the last IVI identification number
                v_iviIdentificationNumber := v_ivimInd.msgIn.ivi.mandatory.iviIdentificationNumber;
                f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
                
                // Test Body
                f_utTriggerEvent(v_utTriggers[lengthof(v_utTriggers) - 1]);
                
                tc_ac.start;
                alt {
                    [] ivimPort.receive(
                        mw_ivimInd(
                            mw_anyIvimPdu(
                                mw_itsPduHeader,
                                mw_ivimStructure(
                                    mw_iviManagementContainer(
                                        -, 
                                        v_iviIdentificationNumber + 1
                    ))))) -> value v_ivimInd {
                        tc_ac.stop;
                        log("*** " & testcasename() & ": PASS: Successfully received expected IVIM. ***");
                        v_iviIdentificationNumber := v_ivimInd.msgIn.ivi.mandatory.iviIdentificationNumber;
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
                    }
                    [] ivimPort.receive(
                        mw_ivimInd(
                            mw_anyIvimPdu
                    )) {
                        tc_ac.stop;
                        log("*** " & testcasename() & ": FAIL: Received a IVIM with incorrect information. ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
                    }
                    [] tc_ac.timeout {
                        log("*** " & testcasename() & ": INCONC: Timeout while awaiting the reception of a message. ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
                    }
                }
                
                // Postamble
                f_poCancelEvent(e_iut, v_iviIdentificationNumber);
                f_cfDown();
                
            } // End of function f_IVIM_MSD_FMT_BV_03
            
            function f_IS_IVI_EVGN_BV_04() runs on ItsIvim {
                
                // Local variables
                var IviIdentificationNumber v_iviIdentificationNumber;
                
garciay's avatar
garciay committed
                // Test control
                if (not PICS_IVIM_GENERATION) {
                    log("*** " & testcasename() & ": PICS_IVIM_GENERATION required for executing the TC ***");
                    setverdict(inconc);
                    stop;
                }
                
                // Test component configuration
                f_cfUp();
                
                // Test adapter configuration
                
                // Preamble
                f_prInitialState();
                f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
                
                // Test Body
                v_iviIdentificationNumber := f_utTriggerEvent(m_utTriggerEvent());
                
                tc_ac.start;
                alt {
                    [] ivimPort.receive(
                        mw_ivimInd(
                            mw_anyIvimPdu(
                                mw_itsPduHeader,
                                mw_ivimStructure(
                                    mw_iviManagementContainer(
                                        -, 
                                        v_iviIdentificationNumber, 
garciay's avatar
garciay committed
                                        IviStatus_new_
                    ))))) {
                        tc_ac.stop;
                        log("*** " & testcasename() & ": PASS: Successfully received expected IVIM. ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
                    }
                    [] ivimPort.receive(
                        mw_ivimInd(
                            mw_anyIvimPdu
                    )) {
                        tc_ac.stop;
                        log("*** " & testcasename() & ": FAIL: Received a IVIM with incorrect information. ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
                    }
                    [] tc_ac.timeout {
                        log("*** " & testcasename() & ": INCONC: Timeout while awaiting the reception of a message. ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
                    }
                }
                
                // Postamble
                f_poCancelEvent(e_iut, v_iviIdentificationNumber);
                f_cfDown();
                
            } // End of function f_IVIM_MSD_FMT_BV_04
            
garciay's avatar
garciay committed
            function f_IS_IVI_EVGN_BV_05() runs on ItsIvim {
                
                // Local variables
                const integer c_epsilon := 500; // maximum c_epsilon cannot exceed 500ms 
                var IviIdentificationNumber v_iviIdentificationNumber;
                var TimestampIts v_timestamp;
                var IvimInd v_iviMsg;
                
                // Test control
                if (not PICS_IVIM_GENERATION) {
                    log("*** " & testcasename() & ": PICS_IVIM_GENERATION required for executing the TC ***");
                    setverdict(inconc);
                    stop;
                }
                
                // Test component configuration
                f_cfUp();
                
                // Test adapter configuration
                
                // Preamble
                f_prInitialState();
                f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
                
                // Test Body
                v_timestamp := f_getCurrentTime();
                v_iviIdentificationNumber := f_utTriggerEvent(m_utTriggerEvent());
                
                tc_ac.start;
                alt {
                    [] ivimPort.receive(
                        mw_ivimInd(
                            mw_anyIvimPdu(
                                mw_itsPduHeader,
                                mw_ivimStructure(
                                    mw_iviManagementContainer_timestamp(
                                        -, 
                                        v_iviIdentificationNumber, 
                                        IviStatus_new_
                    ))))) -> value v_iviMsg {
                        tc_ac.stop;
                        if (f_abs(v_iviMsg.msgIn.ivi.mandatory.timeStamp - v_timestamp) < c_epsilon) {
                            log("*** " & testcasename() & ": PASS: Successfully received expected IVIM. ***");
                            f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
                        } else {
                            log("*** " & testcasename() & ": FAIL: TimeStamp value is out of range (" & int2str(c_epsilon) & "). ***");
                            f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
                        }
                    }
                    [] ivimPort.receive(
                        mw_ivimInd(
                            mw_anyIvimPdu
                    )) {
                        tc_ac.stop;
                        log("*** " & testcasename() & ": FAIL: Received a IVIM with incorrect information. ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
                    }
                    [] tc_ac.timeout {
                        log("*** " & testcasename() & ": INCONC: Timeout while awaiting the reception of a message. ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
                    }
                }
                
                // Postamble
                f_poCancelEvent(e_iut, v_iviIdentificationNumber);
                f_cfDown();
                
            } // End of function f_IVIM_MSD_FMT_BV_05
            
        } // End of group iviEventGeneration
        
        group iviEventUpdate {
            
            function f_IS_IVI_EVUP_BV_05() runs on ItsIvim {
                
                // Local variables
                var IviIdentificationNumber v_iviIdentificationNumber;
                var IvimInd v_rcvdMsg;
                
garciay's avatar
garciay committed
                // Test control
                if (not PICS_IVIM_UPDATE) {
                    log("*** " & testcasename() & ": PICS_IVIM_UPDATE required for executing the TC ***");
                    setverdict(inconc);
                    stop;
                }
                
                // Test component configuration
                f_cfUp();
                
                // Test adapter configuration
                
                // Preamble
                f_prInitialState();
                v_iviIdentificationNumber := f_utTriggerEvent(m_utTriggerEvent());
                f_awaitIviMessage(
                    mw_ivimInd(
                        mw_anyIvimPdu(
                            mw_itsPduHeader,
                            mw_ivimStructure(
                                mw_iviManagementContainer(
                                    -, 
garciay's avatar
garciay committed
                                    -, 
                                    IviStatus_new_
                    )))),
                    v_rcvdMsg
                );
                f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
                
                // Test Body
                f_utUpdateEvent(m_utUpdateEvent(v_iviIdentificationNumber));
                
                tc_ac.start;
                alt {
                    [] ivimPort.receive(
                        mw_ivimInd(
                            mw_anyIvimPdu(
                                mw_itsPduHeader,
                                mw_ivimStructure(
                                    mw_iviManagementContainer(
                                        -, 
garciay's avatar
garciay committed
                                        -, 
                                        IviStatus_update_
                    ))))) {
                        tc_ac.stop;
                        log("*** " & testcasename() & ": PASS: Successfully received expected IVIM. ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
                    }
                    [] ivimPort.receive(
                        mw_ivimInd(
                            mw_anyIvimPdu
                    )) {
                        tc_ac.stop;
                        log("*** " & testcasename() & ": FAIL: Received a IVIM with incorrect information. ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
                    }
                    [] tc_ac.timeout {
                        log("*** " & testcasename() & ": INCONC: Timeout while awaiting the reception of a message. ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
                    }
                }
                
                // Postamble
                f_poCancelEvent(e_iut, v_iviIdentificationNumber);
                f_cfDown();
                
            } // End of function f_IVIM_MSD_FMT_BV_05
            
            function f_IS_IVI_EVUP_BV_06() runs on ItsIvim {
                
                // Local variables
                var IviIdentificationNumber v_iviIdentificationNumber;
                var IvimInd v_rcvdMsg;
                var TimestampIts v_validTo;
                
garciay's avatar
garciay committed
                // Test control
                if (not PICS_IVIM_UPDATE) {
                    log("*** " & testcasename() & ": PICS_IVIM_UPDATE required for executing the TC ***");
                    setverdict(inconc);
                    stop;
                }
                
                // Test component configuration
                f_cfUp();
                
                // Test adapter configuration
                
                // Preamble
                f_prInitialState();
                v_iviIdentificationNumber := f_utTriggerEvent(m_utTriggerEvent());
                f_awaitIviMessage(
                    mw_ivimInd(
                        mw_anyIvimPdu(
                            mw_itsPduHeader,
                            mw_ivimStructure(
                                mw_iviManagementContainer(
                                    -, 
                                    v_iviIdentificationNumber, 
garciay's avatar
garciay committed
                                    IviStatus_new_
                    )))),
                    v_rcvdMsg
                );
                f_utUpdateEvent(m_utUpdateEvent(v_iviIdentificationNumber));
                f_awaitIviMessage(
                    mw_ivimInd(
                        mw_anyIvimPdu(
                            mw_itsPduHeader,
                            mw_ivimStructure(
                                mw_iviManagementContainer(
                                    -, 
                                    v_iviIdentificationNumber, 
garciay's avatar
garciay committed
                                    IviStatus_update_
                    )))),
                    v_rcvdMsg
                );
                f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
                
                // Test Body
                v_validTo := f_getCurrentTime() + 1000 * 3600; // Current ITS time + one hour
                f_utUpdateEvent(m_utUpdateEvent(v_iviIdentificationNumber, -, v_validTo));
                
                tc_ac.start;
                alt {
                    [] ivimPort.receive(
                        mw_ivimInd(
                            mw_anyIvimPdu(
                                mw_itsPduHeader,
                                mw_ivimStructure(
                                    mw_iviManagementContainer_validTo(
                                        -, 
                                        v_iviIdentificationNumber, 
garciay's avatar
garciay committed
                                        IviStatus_update_,
                                        v_validTo
                    ))))) {
                        tc_ac.stop;
                        log("*** " & testcasename() & ": PASS: Successfully received expected IVIM. ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
                    }
                    [] ivimPort.receive(
                        mw_ivimInd(
                            mw_anyIvimPdu
                    )) {
                        tc_ac.stop;
                        log("*** " & testcasename() & ": FAIL: Received a IVIM with incorrect information. ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
                    }
                    [] tc_ac.timeout {
                        log("*** " & testcasename() & ": INCONC: Timeout while awaiting the reception of a message. ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
                    }
                }
                
                // Postamble
                f_poCancelEvent(e_iut, v_iviIdentificationNumber);
                f_cfDown();
                
            } // End of function f_IVIM_MSD_FMT_BV_06
            
            function f_IS_IVI_EVUP_BV_07() runs on ItsIvim {
                
                // Local variables
                var IviIdentificationNumber v_iviIdentificationNumber;
                var IvimInd v_rcvdMsg;
                var TimestampIts v_validFrom;
                
garciay's avatar
garciay committed
                // Test control
                if (not PICS_IVIM_UPDATE) {
                    log("*** " & testcasename() & ": PICS_IVIM_UPDATE required for executing the TC ***");
                    setverdict(inconc);
                    stop;
                }
                
                // Test component configuration
                f_cfUp();
                
                // Test adapter configuration
                
                // Preamble
                f_prInitialState();
                v_iviIdentificationNumber := f_utTriggerEvent(m_utTriggerEvent());
                f_awaitIviMessage(
                    mw_ivimInd(
                        mw_anyIvimPdu(
                            mw_itsPduHeader,
                            mw_ivimStructure(
                                mw_iviManagementContainer(
                                    -, 
                                    v_iviIdentificationNumber, 
garciay's avatar
garciay committed
                                    IviStatus_new_
                    )))),
                    v_rcvdMsg
                );
                f_utUpdateEvent(m_utUpdateEvent(v_iviIdentificationNumber));
                f_awaitIviMessage(
                    mw_ivimInd(
                        mw_anyIvimPdu(
                            mw_itsPduHeader,
                            mw_ivimStructure(
                                mw_iviManagementContainer(
                                    -, 
                                    v_iviIdentificationNumber, 
garciay's avatar
garciay committed
                                    IviStatus_update_
                    )))),
                    v_rcvdMsg
                );
                f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
                
                // Test Body
                v_validFrom := f_getCurrentTime() + 1000 * 3600; // Current ITS time + one hour
                f_utUpdateEvent(m_utUpdateEvent(v_iviIdentificationNumber, -, v_validFrom));
                
                tc_ac.start;
                alt {
                    [] ivimPort.receive(
                        mw_ivimInd(
                            mw_anyIvimPdu(
                                mw_itsPduHeader,
                                mw_ivimStructure(
                                    mw_iviManagementContainer_validFrom(
                                        -, 
                                        v_iviIdentificationNumber, 
garciay's avatar
garciay committed
                                        IviStatus_update_,
                                        v_validFrom
                    ))))) {
                        tc_ac.stop;
                        log("*** " & testcasename() & ": PASS: Successfully received expected IVIM. ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
                    }
                    [] ivimPort.receive(
                        mw_ivimInd(
                            mw_anyIvimPdu
                    )) {
                        tc_ac.stop;
                        log("*** " & testcasename() & ": FAIL: Received a IVIM with incorrect information. ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
                    }
                    [] tc_ac.timeout {
                        log("*** " & testcasename() & ": INCONC: Timeout while awaiting the reception of a message. ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
                    }
                }
                
                // Postamble
                f_poCancelEvent(e_iut, v_iviIdentificationNumber);
                f_cfDown();
                
            } // End of function f_IVIM_MSD_FMT_BV_07
            
garciay's avatar
garciay committed
            function f_IS_IVI_EVUP_BV_08() runs on ItsIvim {
                
                // Local variables
                const integer c_epsilon := 500; // maximum c_epsilon cannot exceed 500ms 
                var IviIdentificationNumber v_iviIdentificationNumber;
                var TimestampIts v_timestamp;
                var IvimInd v_rcvdMsg;
                
                // Test control
                if (not PICS_IVIM_UPDATE) {
                    log("*** " & testcasename() & ": PICS_IVIM_UPDATE required for executing the TC ***");
                    setverdict(inconc);
                    stop;
                }
                
                // Test component configuration
                f_cfUp();
                
                // Test adapter configuration
                
                // Preamble
                f_prInitialState();
                v_iviIdentificationNumber := f_utTriggerEvent(m_utTriggerEvent());
                f_awaitIviMessage(
                    mw_ivimInd(
                        mw_anyIvimPdu(
                            mw_itsPduHeader,
                            mw_ivimStructure(
                                mw_iviManagementContainer(
                                    -, 
                                    v_iviIdentificationNumber, 
                                    IviStatus_new_
                    )))),
                    v_rcvdMsg
                );
                f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
                
                // Test Body
                v_timestamp := f_getCurrentTime();
                f_utUpdateEvent(m_utUpdateEvent(v_iviIdentificationNumber));
                
                tc_ac.start;
                alt {
                    [] ivimPort.receive(
                        mw_ivimInd(
                            mw_anyIvimPdu(
                                mw_itsPduHeader,
                                mw_ivimStructure(
                                    mw_iviManagementContainer_timestamp(
                                        -, 
                                        v_iviIdentificationNumber, 
                                        IviStatus_update_
                    ))))) -> value v_rcvdMsg {
                        tc_ac.stop;
                        if (f_abs(v_rcvdMsg.msgIn.ivi.mandatory.timeStamp - v_timestamp) < c_epsilon) {
                            log("*** " & testcasename() & ": PASS: Successfully received expected IVIM. ***");
                            f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
                        } else {
                            log("*** " & testcasename() & ": FAIL: TimeStamp value is out of range (" & int2str(c_epsilon) & "). ***");
                            f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
                        }
                    }
                    [] ivimPort.receive(
                        mw_ivimInd(
                            mw_anyIvimPdu
                    )) {
                        tc_ac.stop;
                        log("*** " & testcasename() & ": FAIL: Received a IVIM with incorrect information. ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
                    }
                    [] tc_ac.timeout {
                        log("*** " & testcasename() & ": INCONC: Timeout while awaiting the reception of a message. ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
                    }
                }
                
                // Postamble
                f_poCancelEvent(e_iut, v_iviIdentificationNumber);
                f_cfDown();
                
            } // End of function f_IVIM_MSD_FMT_BV_08
garciay's avatar
garciay committed
            function f_IS_IVI_EVUP_BV_09() runs on ItsIvim {
                
                // Local variables
                var IviIdentificationNumber v_iviIdentificationNumber;
                var IvimInd v_rcvdMsg;
                
                // Test control
                if (not PICS_IVIM_UPDATE) {
                    log("*** " & testcasename() & ": PICS_IVIM_UPDATE required for executing the TC ***");
                    setverdict(inconc);
                    stop;
                }
                
                // Test component configuration
                f_cfUp();
                
                // Test adapter configuration
                
                // Preamble
                f_prInitialState();
                v_iviIdentificationNumber := f_utTriggerEvent(m_utTriggerEvent());
                f_awaitIviMessage(
                    mw_ivimInd(
                        mw_anyIvimPdu(
                            mw_itsPduHeader,
                            mw_ivimStructure(
                                mw_iviManagementContainer(
                                    -, 
                                    v_iviIdentificationNumber, 
                                    IviStatus_new_
                    )))),
                    v_rcvdMsg
                );
                f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
                
                // Test Body
                f_utUpdateEvent(m_utUpdateEvent(v_iviIdentificationNumber));
                
                tc_ac.start;
                alt {
                    [] ivimPort.receive(
                        mw_ivimInd(
                            mw_anyIvimPdu(
                                mw_itsPduHeader,
                                mw_ivimStructure(
                                    mw_iviManagementContainer(
                                        -, 
                                        v_iviIdentificationNumber, 
                                        IviStatus_update_
                    ))))) {
                        tc_ac.stop;
                        log("*** " & testcasename() & ": PASS: Successfully received expected IVIM. ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
                    }
                    [] ivimPort.receive(
                        mw_ivimInd(
                            mw_anyIvimPdu
                    )) {
                        tc_ac.stop;
                        log("*** " & testcasename() & ": FAIL: Received a IVIM with incorrect information. ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
                    }
                    [] tc_ac.timeout {
                        log("*** " & testcasename() & ": INCONC: Timeout while awaiting the reception of a message. ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
                    }
                }
                
                // Postamble
                f_poCancelEvent(e_iut, v_iviIdentificationNumber);
                f_cfDown();
                
            } // End of function f_IVIM_MSD_FMT_BV_09
garciay's avatar
garciay committed
        } // End of group iviEventUpdate
        
        group iviEventTermination {
garciay's avatar
garciay committed
        } // End of group iviEventTermination
        
        group iviGenerationFrequency {
garciay's avatar
garciay committed
            function f_IS_IVIM_GFQ_TI_01() runs on ItsIvim {
                
                // Local variables
                const integer c_maxLoopValue := 10;
                timer t_minTransInterval := PICS_T_GENIVIMMIN * 0.90;
                var integer v_counter := 0;
                var IviIdentificationNumber v_iviIdentificationNumber;
                var IvimInd v_rcvdMsg;
                
                // Test control
                if (not PICS_IVIM_GENERATION) {
                    log("*** " & testcasename() & ": PICS_IVIM_GENERATION required for executing the TC ***");
                    setverdict(inconc);
                    stop;
                }
                
                // Test component configuration
                f_cfUp();
                
                // Test adapter configuration
                
                // Preamble
                f_prInitialState();
                v_iviIdentificationNumber := f_utTriggerEvent(m_utTriggerEvent(float2int(PICS_T_GENIVIMMIN)));
                ivimPort.clear;
                tc_ac.start;
                alt {
                    [] ivimPort.receive(
                        mw_ivimInd(
                            mw_anyIvimPdu(
                                mw_itsPduHeader,
                                mw_ivimStructure(
                                    mw_iviManagementContainer(
                                        -, 
                                        -, 
                                        IviStatus_new_
                    ))))) { 
                        tc_ac.stop;
                        t_minTransInterval.start;
                        log("*** " & testcasename() & ": INFO: Initial conditions: First IVIM received ***");
                        f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
                    }
                    [] tc_ac.timeout {
                        log("*** " & testcasename() & ": INCONC: Initial conditions: IVIM not received ***");
                        f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_timeout);
                    }
                }
                
                // Test Body
                tc_ac.start;
                alt {
                    [] ivimPort.receive(
                        mw_ivimInd(
                            mw_anyIvimPdu(
                                mw_itsPduHeader,
                                mw_ivimStructure(
                                    mw_iviManagementContainer
                    )))) {
                        tc_ac.stop;
                        if (t_minTransInterval.running) {
                            log("*** " & testcasename() & ": FAIL: IVIM received BEFORE expiry of the minimum generation timer interval ***");
                            f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
                        } else {
                            v_counter := v_counter + 1;
                            if (v_counter < c_maxLoopValue) {
                                t_minTransInterval.start;
                                repeat;
                            } else {
                                log("*** " & testcasename() & ": PASS: Generation of IVIMs was successful ***");
                                f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
                            }
                        }
                    }
                    [] t_minTransInterval.timeout {
                        repeat;
                    }
                    [] tc_ac.timeout {
                        t_minTransInterval.stop;
                        log("*** " & testcasename() & ": INCONC: IVIM not received ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
                    }
                }
                
                // Postamble
                f_poCancelEvent(e_iut, v_iviIdentificationNumber);
                f_cfDown();
                
            } // End of function f_IS_IVIM_GFQ_TI_01
garciay's avatar
garciay committed
            function f_IS_IVIM_GFQ_TI_02() runs on ItsIvim {
                
                // Local variables
                const integer c_maxLoopValue := 10;
                timer t_maxTransInterval := PICS_T_GENIVIMMAX * 1.10;
                var integer v_counter := 0;
                var IviIdentificationNumber v_iviIdentificationNumber;
                var IvimInd v_rcvdMsg;
                
                // Test control
                if (not PICS_IVIM_GENERATION) {
                    log("*** " & testcasename() & ": PICS_IVIM_GENERATION required for executing the TC ***");
                    setverdict(inconc);
                    stop;
                }
                
                // Test component configuration
                f_cfUp();
                
                // Test adapter configuration
                
                // Preamble
                f_prInitialState();
                v_iviIdentificationNumber := f_utTriggerEvent(m_utTriggerEvent(float2int(PICS_T_GENIVIMMIN)));
                ivimPort.clear;
                tc_ac.start;
                alt {
                    [] ivimPort.receive(
                        mw_ivimInd(
                            mw_anyIvimPdu(
                                mw_itsPduHeader,
                                mw_ivimStructure(
                                    mw_iviManagementContainer(
                                        -, 
                                        -, 
                                        IviStatus_new_
                    ))))) { 
                        tc_ac.stop;
                        t_maxTransInterval.start;
                        log("*** " & testcasename() & ": INFO: Initial conditions: First IVIM received ***");
                        f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
                    }
                    [] tc_ac.timeout {
                        log("*** " & testcasename() & ": INCONC: Initial conditions: IVIM not received ***");
                        f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_timeout);
                    }
                }
                
                // Test Body
                tc_ac.start;
                alt {
                    [] ivimPort.receive(
                        mw_ivimInd(
                            mw_anyIvimPdu(
                                mw_itsPduHeader,
                                mw_ivimStructure(
                                    mw_iviManagementContainer
                    )))) {
                        tc_ac.stop;
                        t_maxTransInterval.stop;
                        t_maxTransInterval.start;
                        v_counter := v_counter + 1;
                        if (v_counter < c_maxLoopValue) {
                            t_maxTransInterval.start;
                            repeat;
                        } else {
                                log("*** " & testcasename() & ": PASS: Generation of IVIMs was successful ***");
                                f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
                        }
                    }
                    [] t_maxTransInterval.timeout {
                        log("*** " & testcasename() & ": FAIL:  No IVIM received BEFORE expiry of the maximum generation timer interval ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
                    }
                    [] tc_ac.timeout {
                        t_maxTransInterval.stop;
                        log("*** " & testcasename() & ": INCONC: IVIM not received ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);