AtsImsIot_Emergency.ttcn 226 KB
Newer Older
/**
 *  @author     TTF 010
 *  @version    $Id: $
 *  @desc       This module provides ATS specific test case definitions for IMS Emergency calls.
 *  @see        ETSI TS 103 795-2
 */
module AtsImsIot_Emergency {

    // LibCommon
    // LibSip
    // LibIms
    import from LibIms_UpperTester all;
    // LibIot
    import from LibIot_TestInterface all;
    import from LibIot_TestConfiguration all;
    import from LibIot_PIXITS all;
    import from LibIot_VxLTE_PIXITS all;
    import from LibIot_VxLTE_Functions all;
    // LibImsIot
    import from AtsImsIot_Functions all;
    // ImsIot
Yann Garcia's avatar
Yann Garcia committed
    import from AtsImsIot_TypesAndValues all;
    import from AtsImsIot_TestConfiguration all;
    import from AtsImsIot_TestSystem all;
    import from AtsImsIot_Functions all;
    import from AtsImsIot_Templates all;
    import from AtsImsIot_TP_behavior_GM all;
    import from AtsImsIot_TP_behavior_MW_PS all;
    import from AtsImsIot_TP_behavior_MW_SI all;
    import from AtsImsIot_TP_behavior_MW_IS all;
    import from AtsImsIot_TP_behavior_MX all;
    import from AtsImsIot_TP_behavior_MM all;
Yann Garcia's avatar
Yann Garcia committed
    import from AtsImsIot_TP_behavior_MI all;
    import from AtsImsIot_TP_behavior_ML all;
    import from AtsImsIot_TP_behavior_IC all;
    import from AtsImsIot_TP_behavior_CX all;
    import from AtsImsIot_TP_behavior_GX all;
    import from AtsImsIot_TP_behavior_ISC all;
    import from AtsImsIot_TP_behavior_S6A all;
    import from AtsImsIot_TP_behavior_S9 all;
    import from AtsImsIot_TP_behavior_SH all;
    import from AtsImsIot_TP_behavior_RX all;
Yann Garcia's avatar
Yann Garcia committed
    import from AtsImsIot_PIXITS all;
      * @see ETSI TS 103 795-2 Clause 5    Test Descriptions (Interoperability at HPLMN)
      */
    group Interoperability {

        /**
         * @see ETSI TS 103 795-2 Clause 5.1    Network Attachment
         */
        group NetworkAttachment {

            group UENetworkAttachmentWithUSIM {
                /**
                 * @desc    Emergency Network Attachment and Establishment of the Emergency Bearer with USIM.
                 * On successful emergency attachment, the UE/IVS should discover the P-CSCF IP address.
                 * The EPC will create the Emergency Bearers which will allow communication only between the UE and the P-CSCF
                 * and allowed forwarding towards E-CSCF
                 * @see TS 124 229 [2], clause 9.2.1 and L.2.2.6; TS 129 212 [7], clauses 4.5.15 and 4a.5.12;
                 * TS 129 272 [8], clause 5.2.1.1 (MME shall proceed even if Update Location fails)
                 * 
                 */
                testcase TC_VoLTE_ECO_INT_ATT_01 ( ) runs on ImsTestCoordinator system IotSystemInterface {

                    var IotEquipmentUser v_ueA    := f_cf_create_IotEquipmentUser ( c_userUE_A );
                    var ImsUserInfo v_userInfoA    := f_getImUser ( PX_EUT_A );

                    f_setVxLteMonIterfacesAvailability();
                    //Check required monitor interfaces due to TD
                    if (f_checkVxLteRequiredMonitorInterface({PX_DIAMETER_GX_INTERFACENAME,PX_DIAMETER_S6A_INTERFACENAME})){
                        f_cf_createVxLteMonitor();

                        // map/connect component ports
                        f_cf_adapter_up ( );
                        f_cf_user_up ( v_ueA );
                        f_cf_VxLteMonitor_Up();

                        // preamble
                        f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile

                        // test body
                        // Check that user A starts initial network attachment
                        f_mtc_check_TP_S6A_MME_ULR_01 ( vc_vxlte_monitor_components.s6a, true ); // Check (ULR – Event 2)
                        f_mtc_check_TP_S6A_HSS_ECO_ULA_01 ( vc_vxlte_monitor_components.s6a);        // Check (ULA – Event 3) 
                        f_mtc_check_TP_GX_PCRF_ECO_CCA_01 ( vc_vxlte_monitor_components.gx); // Check (CCR, CCA – Events 4, 5)

                        // postamble
                        f_mtc_userRadioEnabled ( v_ueA, false, true );

                        //unmap/disconnect component ports
                        f_cf_user_down ( v_ueA );
                        f_cf_VxLteMonitor_Down();
                        f_cf_adapter_down ( );
                    }else{
                        //log...
                        setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
                    }
                } // End of TC TC_VoLTE_ECO_INT_ATT_01
            } // End of group UENetworkAttachmentWithUSIM

            group UENetworkAttachmentWithoutUSIM {
                /**
                 * @desc    Emergency Network Attachment and Establishment of the Emergency Bearer without USIM.
                 * On successful emergency attachment, the UE/IVS should discover the P-CSCF IP address.
                 * The EPC will create the Emergency Bearers which will allow communication only between the UE and the P-CSCF
                 * and allowed forwarding towards E-CSCF
                 * @see TS 124 229 [2], clause 9.2.1 and L.2.2.6; TS 129 212 [7], clauses 4.5.15 and 4a.5.12;
                 * TS 129 272 [8], clause 5.2.1.1 (MME shall proceed even if Update Location fails)
                 * 
                 */
                testcase TC_VoLTE_EMC_INT_ATT_02 ( ) runs on ImsTestCoordinator system IotSystemInterface {

                    var IotEquipmentUser v_ueA    := f_cf_create_IotEquipmentUser ( c_userUE_A );
                    var ImsUserInfo v_userInfoA    := f_getImUser ( PX_EUT_A );

                    f_setVxLteMonIterfacesAvailability();
                    //Check required monitor interfaces due to TD
                    if (f_checkVxLteRequiredMonitorInterface({PX_DIAMETER_GX_INTERFACENAME,PX_DIAMETER_S6A_INTERFACENAME})){
                        f_cf_createVxLteMonitor();

                        // map/connect component ports
                        f_cf_adapter_up ( );
                        f_cf_user_up ( v_ueA );
                        f_cf_VxLteMonitor_Up();

                        // preamble
                        f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile

                        // test body
                        // Check that user A starts initial network attachment
                        f_mtc_check_TP_S6A_MME_ULR_01 ( vc_vxlte_monitor_components.s6a, true ); // Check (ULR – Event 2)
                        f_mtc_check_TP_S6A_HSS_ECO_ULA_01 ( vc_vxlte_monitor_components.s6a);        // Check (ULA – Event 3) 
                        f_mtc_check_TP_GX_PCRF_EMC_CCA_01 ( vc_vxlte_monitor_components.gx); // Check (CCR, CCA – Events 4, 5)

                        // postamble
                        f_mtc_userRadioEnabled ( v_ueA, false, true );

                        //unmap/disconnect component ports
                        f_cf_user_down ( v_ueA );
                        f_cf_VxLteMonitor_Down();
                        f_cf_adapter_down ( );
                    }else{
                        //log...
                        setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
                    }
                } // End of TC TC_VoLTE_ECO_INT_ATT_02
            } // End of group UENetworkAttachmentWithoutUSIM

        } // End of group NetworkAttachment

        /**
         * @see ETSI TS 103 795-2 Clause 5.2    IMS Emergency Registration
         */
        group EmergencyRegistration {

            /**
             * @desc    To perform emergency registration via the established emergency bearer. Note that some UEs perform emergency registration automatically on attachment - in which case this test becomes merged with the previous ones.
             * @see ETSI TS 103 795-2 Clause 5.2.1    IMS Emergency Registration - Successful
             */
            testcase TD_VoLTE_ECO_INT_REG_01() runs on ImsTestCoordinator system IotSystemInterface {
                var IotEquipmentUser v_ueA  := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency );
                var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A_EMERGENCY );
                f_setVxLteMonIterfacesAvailability();
                //Check required monitor interfaces due to TD
                if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME,
                                                          PX_SIP_MW_PI_INTERFACENAME,
                                                          PX_SIP_MW_IS_INTERFACENAME,
                                                          PX_DIAMETER_CX_SH_INTERFACENAME,
                                                          PX_DIAMETER_CX_IH_INTERFACENAME,
                                                          PX_DIAMETER_RX_INTERFACENAME,
                                                          PX_DIAMETER_GX_INTERFACENAME}))
                {  
                    f_cf_createVxLteMonitor();

                    // map/connect component ports
                    f_cf_adapter_up ( );
                    f_cf_user_up ( v_ueA );
                    f_cf_VxLteMonitor_Up();

                    // preamble
                    f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile
                    // Test body
                    f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_01(vc_vxlte_monitor_components.gmA); // Events 1, 12
                    f_mtc_check_TP_MW_PCSCF_ECO_REGISTER_01(vc_vxlte_monitor_components.mwPI); // Event 4, 11
                    f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_01(vc_vxlte_monitor_components.mwIS, true); // Event 7, 10
                    f_mtc_check_TP_CX_HSS_ECO_UAA_01(f_getCxInterface(PX_DIAMETER_CX_SINGLE_INTERFACE));// Event 5, 6
                    f_mtc_check_TP_CX_HSS_MAA_01(vc_vxlte_monitor_components.cxSH);// Event 8, 9

                    f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_02(vc_vxlte_monitor_components.gmA); // Events 13, 22
                    f_mtc_check_TP_MW_PCSCF_ECO_REGISTER_02(vc_vxlte_monitor_components.mwPI); // Events 14, 21
                    f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_02(vc_vxlte_monitor_components.mwIS, true); // Event 17, 20
                    f_mtc_check_TP_CX_HSS_ECO_UAA_02(f_getCxInterface(PX_DIAMETER_CX_SINGLE_INTERFACE));// Event 15, 16
                    f_mtc_check_TP_CX_HSS_SAA_01(vc_vxlte_monitor_components.cxSH);// Event 18, 19

                    // postamble
                    f_PO_user_home_deregistration ( v_ueA );
                    f_mtc_userRadioEnabled ( v_ueA, false, true );
                    //unmap/disconnet component ports
                    f_cf_user_down ( v_ueA );
                    f_cf_VxLteMonitor_Down();
                    f_cf_adapter_down ( );
                }else{
                    //log...
                    setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs");
                }
            } // End of testcase TD_VoLTE_ECO_INT_REG_01

            /**
             * @desc    To attempt initial emergency registration via the established emergency bearer. In this case, the emergency registration is not successful due to not accepted UE credentials. Emergency call can be established without emergency registration.
             * @see ETSI TS 103 795-2 Clause 5.2.2    IMS Emergency Registration - Unsuccessful
             */
            testcase TD_VoLTE_ECO_INT_REG_02() runs on ImsTestCoordinator system IotSystemInterface {
                var IotEquipmentUser v_ueA  := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency );
                var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A_EMERGENCY );
                f_setVxLteMonIterfacesAvailability();
                //Check required monitor interfaces due to TD
                if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME,
                                                          PX_SIP_MW_PI_INTERFACENAME,
                                                          PX_SIP_MW_IS_INTERFACENAME,
                                                          PX_DIAMETER_CX_SH_INTERFACENAME,
                                                          PX_DIAMETER_CX_IH_INTERFACENAME,
                                                          PX_DIAMETER_RX_INTERFACENAME,
                                                          PX_DIAMETER_GX_INTERFACENAME}))
                {  
                    f_cf_createVxLteMonitor();

                    // map/connect component ports
                    f_cf_adapter_up ( );
                    f_cf_user_up ( v_ueA );
                    f_cf_VxLteMonitor_Up();

                    // preamble
                    f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile
                    // Test body
                    f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_01(vc_vxlte_monitor_components.gmA); // Events 1, 12
                    f_mtc_check_TP_MW_PCSCF_ECO_REGISTER_01(vc_vxlte_monitor_components.mwPI); // Event 4, 11
                    f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_01(vc_vxlte_monitor_components.mwIS, true); // Event 7, 10
                    f_mtc_check_TP_CX_HSS_ECO_UAA_01(f_getCxInterface(PX_DIAMETER_CX_SINGLE_INTERFACE));// Event 5, 6
                    f_mtc_check_TP_CX_HSS_MAA_01(vc_vxlte_monitor_components.cxSH);// Event 8, 9

                    f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_03(vc_vxlte_monitor_components.gmA); // Events 13, 22
                    f_mtc_check_TP_MW_PCSCF_ECO_REGISTER_03(vc_vxlte_monitor_components.mwPI); // Events 14, 21
                    f_mtc_check_TP_MW_ICSCF_REGISTER_03(vc_vxlte_monitor_components.mwIS, true); // Event 17, 20

                    f_mtc_check_TP_CX_HSS_ECO_UAA_02(f_getCxInterface(PX_DIAMETER_CX_SINGLE_INTERFACE));// Event 15, 16
                    f_mtc_check_TP_CX_HSS_SAA_01(vc_vxlte_monitor_components.cxSH);// Event 18, 19

                    // postamble
                    f_PO_user_home_deregistration ( v_ueA );
                    f_mtc_userRadioEnabled ( v_ueA, false, true );
                    //unmap/disconnet component ports
                    f_cf_user_down ( v_ueA );
                    f_cf_VxLteMonitor_Down();
                    f_cf_adapter_down ( );
                }else{
                    //log...
                    setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs");
                }
            } // End of testcase TD_VoLTE_ECO_INT_REG_02

        } // End of group EmergencyRegistration

        /**
         * @see ETSI TS 103 795-2 Clause 5.3    Emergency Session and Emergency Bearer Operations
         */
        group EmergencySessionEmergencyBearerOperations {

            group EmergencySessionEstablishment {

                 * @desc    To demonstrate the establishment of dedicated bearers at the originating EPC due to SIP emergency session establishment within an emergency registration.
                 *          PSAP is located in the IM CN subsystem of IMS A
                 * @see ETSI TS 103 795-2 Clause 5.3.1.2    UE calling PSAP with emergency registration
                testcase TD_VoLTE_ECO_INT_INI_01() runs on ImsTestCoordinator system IotSystemInterface {
                    var IotEquipmentUser v_ueA  := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency );
                    var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap );
                    var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY );
                    var ImsUserInfo v_infoPsap  := f_getImUser ( PX_PSAP );

                    f_setVxLteMonIterfacesAvailability();
                    //Check required monitor interfaces due to TD
                    if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME,
                                                              PX_DIAMETER_GX_INTERFACENAME,
                                                              PX_DIAMETER_RX_INTERFACENAME,
                                                              PX_SIP_MW_PE_INTERFACENAME,
Yann Garcia's avatar
Yann Garcia committed
                                                              PX_SIP_MM_B_PSAP_INTERFACENAME // E-CSCCF -> PSAP
                                                              }))
                    {
                        var SipMessage v_sip;
                        f_cf_createVxLteMonitor();
                        // map/connect component ports
                        f_cf_adapter_up ( );
                        f_cf_user_up ( v_ueA );
                        f_cf_user_up ( v_psap );
                        f_cf_VxLteMonitor_Up();
                        // Preamble
                        f_mtc_userRegistration(v_ueA, v_userInfoA);
                        if (PX_PSAP_REGISTERED) {
                            f_mtc_userRegistration(v_psap, v_infoPsap);
                        } else {
                            // TODO Check OPTIONS from PSAP to E-CSCF
                        }
                        f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01();
                        // Test body
                        if (not PX_ECALL) {
                            f_mtc_check_TP_GM_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1
                        } else {
                            f_mtc_check_TP_GM_PCSCF_ECO_INVITE_04(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1
                        }
                        f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip);

                        //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF
                        f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx);// Event 2
                        f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 3
                        f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx);  // Event 4
                        f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 5
                        f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 7,8
                        f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 6,9

                        f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10
                        f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip);
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 11
                        f_mtc_check_TP_MM_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip);

                        // 183 Session Progress
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 183 In Progress Event 12
                        f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 13
                        f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 18
                        //Rx/Gx exchange after 183(SDP) was received at P-CSCF
                        f_mtc_check_TP_RX_PCSCF_AAR_04(vc_vxlte_monitor_components.rx);// Event 14
                        f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 15
                        f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx);  // Event 16
                        f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 17
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 180 Ringing – Event 20
                        f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 21
                        f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 22
                        f_mtc_userCheckRinging(v_psap); // Event 19
                        f_mtc_userCheckPeerIsRinging(v_ueA); // Event 19
                        f_mtc_userAnswerCall(v_psap); // Event 26
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 200 OK Event 23
                        f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24
                        f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25
                        f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // ACK Event 26 
                        f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 27
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // ACK – Event 28
                        f_mtc_userCheckCallEstablished(v_ueA); // Event 29
                        f_mtc_userCheckCallEstablished(v_psap); // Event 29
                        // Postamble
                        f_mtc_EndCall(v_ueA);
                        f_PO_user_home_deregistration(v_ueA);
                        f_PO_user_home_deregistration(v_psap);
                        //f_cf_int_call_down(v_config);
                        //unmap/disconnect component ports
                        f_cf_user_down ( v_psap );
                        f_cf_user_down ( v_ueA );
                        f_cf_VxLteMonitor_Down();
                    }else{
                        //log...
                        setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
                    }
                    f_cf_adapter_down ( );
                } // End of TC TD_VoLTE_ECO_INT_INI_01
                    function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01() runs on ImsTestCoordinator {
                        log("If the test case fails, please check the preconditions");
                        // TODO Add real code to check pre-conditions
                     } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01
                } // End of group f_TD_VoLTE_ECO_INT_INI_01
                 * @desc    To demonstrate the establishment of dedicated bearers at the originating EPC due to SIP emergency session session establishment within non-emergency registration.
                 *          PSAP is located in the IM CN subsystem of IMS A.
                 * @see ETSI TS 103 795-2 Clause 5.3.1.3    UE calling PSAP with non-emergency registration
                 * @remark This is option2: IBCF is connected to the PSAP, the interface IBCF and the PSAP is the Mm interface
                 */
                testcase TD_VoLTE_ECO_INT_INI_02() runs on ImsTestCoordinator system IotSystemInterface {

                    var IotEquipmentUser v_ueA  := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency );
                    var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap );
                    var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY );
                    var ImsUserInfo v_infoPsap  := f_getImUser ( PX_PSAP );

                    f_setVxLteMonIterfacesAvailability();
                    //Check required monitor interfaces due to TD
                    if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME,
                                                              PX_DIAMETER_GX_INTERFACENAME,
                                                              PX_DIAMETER_RX_INTERFACENAME,
                                                              PX_SIP_MW_PE_INTERFACENAME,
Yann Garcia's avatar
Yann Garcia committed
                                                              PX_SIP_MM_B_PSAP_INTERFACENAME // E-CSCCF -> PSAP
                        // map/connect component ports
                        f_cf_adapter_up ( );
                        f_cf_user_up ( v_ueA );
                        f_cf_user_up ( v_psap );
                        f_cf_VxLteMonitor_Up();
                        f_mtc_userRegistration(v_ueA, v_userInfoA);
                            f_mtc_userRegistration(v_psap, v_infoPsap);
                        } else {
                            // TODO Check OPTIONS from PSAP to E-CSCF
                        }
                        f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_02();
                        // Test body
                        //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB);

                        f_mtc_check_TP_GM_PCSCF_ECO_INVITE_03(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1
                        f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip);

                        //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF
                        f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx);// Event 2
                        f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 3
                        f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx);  // Event 4
                        f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 5
                        f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 7,8
                        f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 6,9

                        f_mtc_check_TP_MW_PCSCF_ECO_INVITE_03(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10
                        f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip);
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 11
                        f_mtc_check_TP_MM_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip);
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 183 In Progress Event 12
                        f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 13
                        f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 18
                        //Rx/Gx exchange after 183(SDP) was received at P-CSCF
                        f_mtc_check_TP_RX_PCSCF_AAR_04(vc_vxlte_monitor_components.rx);// Event 14
                        f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 15
                        f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx);  // Event 16
                        f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 17
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 180 Ringing – Event 22
                        f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24
                        f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25
                        f_mtc_userCheckRinging(v_psap); // Event 19
                        f_mtc_userCheckPeerIsRinging(v_ueA); // Event 19
                        f_mtc_userAnswerCall(v_psap); // Event 26
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 200 OK Event 23
                        f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24
                        f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25

                        f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 26 
                        f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 27
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // ACK – Event 28

                        f_mtc_userCheckCallEstablished(v_ueA); // Event 29
                        f_mtc_userCheckCallEstablished(v_psap); // Event 29
                        // Postamble
                        f_mtc_EndCall(v_ueA);
                        f_PO_user_home_deregistration(v_ueA);
                        f_PO_user_home_deregistration(v_psap);
                        //f_cf_int_call_down(v_config);
                        //unmap/disconnect component ports
                        f_cf_user_down ( v_psap );
                        f_cf_user_down ( v_ueA );
                        f_cf_VxLteMonitor_Down();
                    }else{
                        //log...
                        setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
                    }
                    f_cf_adapter_down ( );
                } // End of TC TD_VoLTE_ECO_INT_INI_02
                group f_TD_VoLTE_ECO_INT_INI_02 {
                    function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_02() runs on ImsTestCoordinator {
                        log("If the test case fails, please check the preconditions");
                        // TODO Add real code to check pre-conditions
                     } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_02
                } // End of group f_TD_VoLTE_ECO_INT_INI_02
                 * @desc    To demonstrate the establishment of emergency bearers at the originating EPC due to SIP emergency session establishment without any registration.
                 *          PSAP is located in the IM CN subsystem of IMS A.
                 * @see ETSI TS 103 795-2 Clause 5.3.1.4    UE calling PSAP without any registration
                 */
                testcase TD_VoLTE_ECO_INT_INI_03() runs on ImsTestCoordinator system IotSystemInterface {


                    var IotEquipmentUser v_ueA    := f_cf_create_IotEquipmentUser ( c_userUE_A );
                    var IotEquipmentUser v_psap   := f_cf_create_IotEquipmentUser ( c_psap );
                    var ImsUserInfo v_infoPsap  := f_getImUser ( PX_PSAP );

                    f_setVxLteMonIterfacesAvailability();
                    //Check required monitor interfaces due to TD
                    if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME,
                                                              PX_DIAMETER_GX_INTERFACENAME,
                                                              PX_DIAMETER_RX_INTERFACENAME,
                                                              PX_SIP_MW_PE_INTERFACENAME,
Yann Garcia's avatar
Yann Garcia committed
                                                              PX_SIP_MM_B_PSAP_INTERFACENAME // E-CSCF -> PSAP
                        // map/connect component ports
                        f_cf_adapter_up ( );
                        f_cf_user_up ( v_ueA );
                        f_cf_user_up ( v_psap );
                        f_cf_VxLteMonitor_Up();
                        // Preamble
                        // No registration for user A
                        f_mtc_userRegistration(v_psap, v_infoPsap);
                        f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_03();
                        // Test body
                        //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB);

                        f_mtc_check_TP_GM_PCSCF_ECO_INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1
                        f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip);

                        //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF
                        f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx);// Event 2
                        f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 3
                        f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx);  // Event 4
                        f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 5
                        f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 7,8
                        f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 6,9

                        f_mtc_check_TP_MW_PCSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10
                        f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip);
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 11
                        f_mtc_check_TP_MM_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip);
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 183 In Progress Event 12
                        f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 13
                        f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 18
                        //Rx/Gx exchange after 183(SDP) was received at P-CSCF
                        f_mtc_check_TP_RX_PCSCF_AAR_04(vc_vxlte_monitor_components.rx);// Event 14
                        f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 15
                        f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx);  // Event 16
                        f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 17
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 180 Ringing – Event 22
                        f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24
                        f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25
                        f_mtc_userCheckRinging(v_psap); // Event 19
                        f_mtc_userCheckPeerIsRinging(v_ueA); // Event 19
                        f_mtc_userAnswerCall(v_psap); // Event 26
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 200 OK Event 23
                        f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24
                        f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25

                        f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 26 
                        f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 27
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // ACK – Event 28

                        f_mtc_userCheckCallEstablished(v_ueA); // Event 29
                        f_mtc_userCheckCallEstablished(v_psap); // Event 29
                        // Postamble
                        f_mtc_EndCall(v_ueA);
                        f_PO_user_home_deregistration(v_ueA);
                        f_PO_user_home_deregistration(v_psap);
                        //f_cf_int_call_down(v_config);
                        //unmap/disconnect component ports
                        f_cf_user_down ( v_psap );
                        f_cf_user_down ( v_ueA );
                        f_cf_VxLteMonitor_Down();
                    }else{
                        //log...
                        setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
                    }
                    f_cf_adapter_down ( );
                } // End of TC TD_VoLTE_ECO_INT_INI_03
                group f_TD_VoLTE_ECO_INT_INI_03 {
                    function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_03() runs on ImsTestCoordinator {
                        log("If the test case fails, please check the preconditions");
                        // TODO Add real code to check pre-conditions
                     } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_03
                } // End of group f_TD_VoLTE_ECO_INT_INI_03

                /**
                 * @desc    To demonstrate the establishment of dedicated bearers at the originating EPC due to SIP emergency session establishment within an emergency registration.
                 *          PSAP is located in the IM CN subsystem of IMS A. The PSAP URI is delivered by the LRF.
                 * @see ETSI TS 103 795-2 Clause 5.3.1.5 UE calling PSAP in same network, LRF derived PSAP URI
                 * @remark This is option2: IBCF is connected to the PSAP, the interface IBCF and the PSAP is the Mm interface
                 */
                testcase TD_VoLTE_ECO_INT_INI_04() runs on ImsTestCoordinator system IotSystemInterface {

                    var IotEquipmentUser v_ueA  := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency );
                    var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap );
                    var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY );
                    var ImsUserInfo v_infoPsap  := f_getImUser ( PX_PSAP );

                    f_setVxLteMonIterfacesAvailability();
                    //Check required monitor interfaces due to TD
                    if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME,
                                                              PX_DIAMETER_GX_INTERFACENAME,
                                                              PX_DIAMETER_RX_INTERFACENAME,
                                                              PX_SIP_MW_PE_INTERFACENAME,
Yann Garcia's avatar
Yann Garcia committed
                                                              PX_SIP_MM_B_PSAP_INTERFACENAME, // E-CSCF -> PSAP
                                                              PX_SIP_ML_E_LRF_INTERFACENAME // E-CSCF -> LRF
                        // map/connect component ports
                        f_cf_adapter_up ( );
                        f_cf_user_up ( v_ueA );
                        f_cf_user_up ( v_psap );
                        f_cf_VxLteMonitor_Up();
                        f_mtc_userRegistration(v_ueA, v_userInfoA);
                        if (PX_PSAP_REGISTERED) {
                            f_mtc_userRegistration(v_psap, v_infoPsap);
                        } else {
                            // TODO Check OPTIONS from PSAP to E-CSCF
                        }
                        f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01();
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1
                        if (not(PX_ECALL)) {
                            f_mtc_check_TP_GM_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1
                        } else {
                            f_mtc_check_TP_GM_PCSCF_ECO_INVITE_04(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1
                        }
                        f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip);

                        //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF
                        f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx);// Event 2
                        f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 3
                        f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx);  // Event 4
                        f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 5
                        f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 7,8
                        f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 6,9

                        f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10
                        f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip);

                        f_mtc_check_TP_ML_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mlE_LRF, -, v_sip); // Event 11
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_check_TP_ML_ECSCF_ECO_3xx_01(vc_vxlte_monitor_components.mlE_LRF, -, v_sip); // Event 12
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_check_TP_MM_ECSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 13
                        f_mtc_check_TP_MM_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip);

                        // 183 Session Progress
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 183 In Progress Event 14
                        f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15
                        f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20
                        //Rx/Gx exchange after 183(SDP) was received at P-CSCF
                        f_mtc_check_TP_RX_PCSCF_AAR_04(vc_vxlte_monitor_components.rx);// Event 14
                        f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 15
                        f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx);  // Event 16
                        f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 17
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 180 Ringing – Event 22
                        f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 23
                        f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 24
                        f_mtc_userCheckRinging(v_psap); // Event 21
                        f_mtc_userCheckPeerIsRinging(v_ueA); // Event 21
                        f_mtc_userAnswerCall(v_psap); // Event 28
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 200 OK Event 25
                        f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 26
                        f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 27

                        f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // ACK Event 28 
                        f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 29
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // ACK – Event 30

                        f_mtc_userCheckCallEstablished(v_ueA); // Event 31
                        f_mtc_userCheckCallEstablished(v_psap); // Event 31
                        // Postamble
                        f_mtc_EndCall(v_ueA);
                        f_PO_user_home_deregistration(v_ueA);
                        f_PO_user_home_deregistration(v_psap);
                        //f_cf_int_call_down(v_config);
                        //unmap/disconnect component ports
                        f_cf_user_down ( v_psap );
                        f_cf_user_down ( v_ueA );
                        f_cf_VxLteMonitor_Down();
                    }else{
                        //log...
                        setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
                    }
                    f_cf_adapter_down ( );
                } // End of TC TD_VoLTE_ECO_INT_INI_04
                group f_TD_VoLTE_ECO_INT_INI_04 {
                    function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_04() runs on ImsTestCoordinator {
                        log("If the test case fails, please check the preconditions");
                        // TODO Add real code to check pre-conditions
                     } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_04
                } // End of group f_TD_VoLTE_ECO_INT_INI_04

                /**
                 * @desc    To demonstrate the establishment of dedicated bearers at the originating EPC due to SIP emergency session establishment within an emergency registration.
                 *          PSAP is located in the IM CN subsystem of another network connected via IBCF.
                 * @see ETSI TS 103 795-2 Clause 5.3.1.6    UE calling PSAP in other network via IBCF
                testcase TD_VoLTE_ECO_INT_INI_05 ( ) runs on ImsTestCoordinator system IotSystemInterface {
                    var IotEquipmentUser v_ueA  := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency );
                    var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap );
                    var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY );
                    var ImsUserInfo v_infoPsap  := f_getImUser ( PX_PSAP );
                    f_setVxLteMonIterfacesAvailability();
                    //Check required monitor interfaces due to TD
                    if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME,
                                                              PX_DIAMETER_GX_INTERFACENAME,
                                                              PX_DIAMETER_RX_INTERFACENAME,
                                                              PX_SIP_MW_PE_INTERFACENAME,
Yann Garcia's avatar
Yann Garcia committed
                                                              PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF
                                                              PX_SIP_IC_INTERFACENAME // IBCF -> IMS_B -> PSAP
                        // map/connect component ports
                        f_cf_adapter_up ( );
                        f_cf_user_up ( v_ueA );
                        f_cf_user_up ( v_psap );
                        f_cf_VxLteMonitor_Up();
                        f_mtc_userRegistration(v_ueA, v_userInfoA);
Yann Garcia's avatar
Yann Garcia committed
                        if (PX_PSAP_REGISTERED) {
                            f_mtc_userRegistration(v_psap, v_infoPsap);
                        } else {
                            // TODO Check OPTIONS from PSAP to E-CSCF
                        }
                        f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_05();
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1
                        // Test body
                        //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB);
                        if (not(PX_ECALL)) {
                            f_mtc_check_TP_GM_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1
                        } else {
                            f_mtc_check_TP_GM_PCSCF_ECO_INVITE_04(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1
                        }
                        f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip);

                        //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF
                        f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx);// Event 2
                        f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 3
                        f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx);  // Event 4
                        f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 5
                        f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 7,8
                        //f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 6,9

                        f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10
                        f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip);
                        f_mtc_check_TP_MX_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 11
                        f_mtc_check_TP_MX_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip);
                        f_mtc_check_TP_IC_IBCF_INVITE_01(vc_vxlte_monitor_components.ic, true); // INVITE Event 12 (NOTE: comment out if ISC simulated by Ic)
                        f_mtc_check_TP_IC_IBCF_INVITE_02(vc_vxlte_monitor_components.ic, true); // INVITE Event 12 (NOTE: comment out if ISC simulated by Ic)
                        f_mtc_check_TP_IC_IBCF_INVITE_03(vc_vxlte_monitor_components.ic); // INVITE ENUM Event 8

                        // 183 Session Progress
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_check_TP_IC_IBCF_183RESP_01(vc_vxlte_monitor_components.ic, -); // 183 Event 13
                        f_mtc_check_TP_MX_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 14
                        f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15
                        f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20
                        //Rx/Gx exchange after 183(SDP) was received at P-CSCF
                        f_mtc_check_TP_RX_PCSCF_AAR_04(vc_vxlte_monitor_components.rx);// Event 16
                        f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 17
                        f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx);  // Event 18
                        f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 19
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_check_TP_IC_IBCF_180RESP_01(vc_vxlte_monitor_components.ic); // 180 Ringing – Event 22
                        f_mtc_check_TP_MX_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 23
                        f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24
                        f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25
                        f_mtc_userCheckRinging(v_psap);
                        f_mtc_userCheckPeerIsRinging(v_ueA);
                        f_mtc_userAnswerCall(v_psap);
                        f_mtc_check_TP_IC_IBCF_2XXRESP_01(vc_vxlte_monitor_components.ic, true); // 200 OK – Event 26
                        f_mtc_check_TP_IC_IBCF_2XXRESP_02(vc_vxlte_monitor_components.ic, true); // 200 OK – Event 26
                        f_mtc_check_TP_IC_IBCF_2XXRESP_03(vc_vxlte_monitor_components.ic); // 200 OK – Event 26

                        f_mtc_check_TP_MX_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 27
                        f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 28                        
                        f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 29

                        f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 30 
                        f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 31
                        f_mtc_check_TP_MX_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 32  
                        f_mtc_check_TP_IC_IBCF_ACK_01(vc_vxlte_monitor_components.ic); // ACK – Event 33

                        f_mtc_userCheckCallEstablished(v_ueA); // Event 34
                        f_mtc_userCheckCallEstablished(v_psap); // Event 34
                        // Postamble
                        f_mtc_EndCall(v_ueA);
                        f_PO_user_home_deregistration(v_ueA);
                        f_PO_user_home_deregistration(v_psap);
                        //f_cf_int_call_down(v_config);
                        //unmap/disconnect component ports
                        f_cf_user_down ( v_psap );
                        f_cf_user_down ( v_ueA );
                        f_cf_VxLteMonitor_Down();
                    }else{
                        //log...
                        setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
                    }
                    f_cf_adapter_down ( );
                } // End of TC TD_VoLTE_ECO_INT_INI_05
                group f_TD_VoLTE_ECO_INT_INI_05 {
                    function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_05() runs on ImsTestCoordinator {
                        log("If the test case fails, please check the preconditions");
                     } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_05
                } // End of f_TD_VoLTE_ECO_INT_INI_05
                 * @desc    To demonstrate the establishment of dedicated bearers at the originating EPC due to SIP emergency session establishment within an emergency registration.
                 *          PSAP is located in the IM CN subsystem of another network vonnected via IBCF. The PSAP URI is delivered by the LRF.
                 * @see ETSI TS 103 795-2 Clause 5.3.1.7    UE calling PSAP in other network via IBCF, LRF derived PSAP URI
                 * @remark This is option2: IBCF is connected to the PSAP, the interface IBCF and the PSAP is the Mm interface
                 */
                testcase TD_VoLTE_ECO_INT_INI_06() runs on ImsTestCoordinator system IotSystemInterface {

                    var IotEquipmentUser v_ueA  := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency );
                    var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap );
                    var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY );
                    var ImsUserInfo v_infoPsap  := f_getImUser ( PX_PSAP );

                    f_setVxLteMonIterfacesAvailability();
                    //Check required monitor interfaces due to TD
                    if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME,
                                                              PX_DIAMETER_GX_INTERFACENAME,
                                                              PX_DIAMETER_RX_INTERFACENAME,
                                                              PX_SIP_MW_PE_INTERFACENAME,
Yann Garcia's avatar
Yann Garcia committed
                                                              PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF
                                                              PX_SIP_IC_INTERFACENAME, // IBCF -> IMS_B -> PSAP
                                                              PX_SIP_ML_E_LRF_INTERFACENAME // E-CSCF -> LRF: mlE_LRF
                        // map/connect component ports
                        f_cf_adapter_up ( );
                        f_cf_user_up ( v_ueA );
                        f_cf_user_up ( v_psap );
                        f_cf_VxLteMonitor_Up();
                        f_mtc_userRegistration(v_ueA, v_userInfoA);
Yann Garcia's avatar
Yann Garcia committed
                        if (PX_PSAP_REGISTERED) {
                            f_mtc_userRegistration(v_psap, v_infoPsap);
                        } else {
                            // TODO Check OPTIONS from PSAP to E-CSCF
                        }
                        f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_06();
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1
                        // Test body
                        //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB);
                        if (not(PX_ECALL)) {
                            f_mtc_check_TP_GM_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1
                        } else {
                            f_mtc_check_TP_GM_PCSCF_ECO_INVITE_04(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1
                        }
                        f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip);

                        //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF
                        f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx);// Event 2
                        f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 3
                        f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx);  // Event 4
                        f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 5
                        f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 7,8
                        //f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 6,9


                        f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10
                        f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip);

                        // FIXME f_mtc_check_TP_MW_IBCF_xxx <--> f_mtc_check_TP_ML_EBCF_xxx
                        f_mtc_check_TP_ML_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mlE_LRF, -, v_sip); // Event 11
                        f_mtc_check_TP_MX_LRF_3xxAny_01(vc_vxlte_monitor_components.mlE_LRF, -, v_sip); // Event 12

                        f_mtc_check_TP_MX_ECSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 13
                        f_mtc_check_TP_MX_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip);

                        f_mtc_check_TP_IC_IBCF_INVITE_01(vc_vxlte_monitor_components.ic, true); // INVITE Event 14
                        f_mtc_check_TP_IC_IBCF_INVITE_02(vc_vxlte_monitor_components.ic, true); // INVITE Event 14
                        f_mtc_check_TP_IC_IBCF_183RESP_01(vc_vxlte_monitor_components.ic,-); // 183 Event 15


                        // 183 Session Progress
                        f_mtc_check_TP_MX_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 16
                        f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 17
                        f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 24

                        //Rx/Gx exchange after 183(SDP) was received at P-CSCF
                        f_mtc_check_TP_RX_PCSCF_AAR_04(vc_vxlte_monitor_components.rx);// Event 18
                        f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 19
                        f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx);  // Event 20
                        f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 21

Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_check_TP_IC_IBCF_180RESP_01(vc_vxlte_monitor_components.ic, true); // 180 Ringing – Event 24
                        f_mtc_check_TP_MX_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 25
                        f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 26
                        f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 27

                        f_mtc_userCheckRinging(v_psap);
                        f_mtc_userCheckPeerIsRinging(v_ueA);
                        f_mtc_userAnswerCall(v_psap);

                        f_mtc_check_TP_IC_IBCF_2XXRESP_01(vc_vxlte_monitor_components.ic, true); // 200 OK – Event 28
                        f_mtc_check_TP_IC_IBCF_2XXRESP_02(vc_vxlte_monitor_components.ic, true); // 200 OK – Event 28
                        f_mtc_check_TP_IC_IBCF_2XXRESP_03(vc_vxlte_monitor_components.ic); // 200 OK – Event 28

                        f_mtc_check_TP_MX_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 29
                        f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 30
                        f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 31

                        f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 32
                        f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 33
                        f_mtc_check_TP_MX_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 34
                        f_mtc_check_TP_IC_IBCF_ACK_01(vc_vxlte_monitor_components.ic); // ACK – Event 35

                        f_mtc_userCheckCallEstablished(v_ueA); // Event 36
                        f_mtc_userCheckCallEstablished(v_psap); // Event 36

                        // Postamble
                        f_mtc_EndCall(v_ueA);
                        f_PO_user_home_deregistration(v_ueA);
                        f_PO_user_home_deregistration(v_psap);
                        //f_cf_int_call_down(v_config);
                        //unmap/disconnect component ports
                        f_cf_user_down ( v_psap );
                        f_cf_user_down ( v_ueA );
                        f_cf_VxLteMonitor_Down();
                    }else{
                        //log...
                        setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
                    }
                    f_cf_adapter_down ( );
                } // End of TC TD_VoLTE_ECO_INT_INI_06
                    function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_06() runs on ImsTestCoordinator {
                        log("If the test case fails, please check the preconditions");
                        // TODO Add real code to check pre-conditions
                     } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_06
                } // End of group f_TD_VoLTE_ECO_INT_INI_06

                /**
                 * @desc    To demonstrate the establishment of dedicated bearers at the originating EPC due to SIP emergency session establishment within an emergency registration.
                 *          PSAP is located in the PSTN connected via BGCF.
                 * @see ETSI TS 103 795-2 Clause 5.3.1.8    UE calling PSAP in PSTN via BGCF
                 */
                testcase TD_VoLTE_ECO_INT_INI_07() runs on ImsTestCoordinator system IotSystemInterface {

                    var IotEquipmentUser v_ueA  := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency );
                    var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap );
                    var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY );
                    var ImsUserInfo v_infoPsap  := f_getImUser ( PX_PSAP );
                    f_setVxLteMonIterfacesAvailability();
                    //Check required monitor interfaces due to TD
                    if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME,
                                                              PX_DIAMETER_GX_INTERFACENAME,
                                                              PX_DIAMETER_RX_INTERFACENAME,
                                                              PX_SIP_MW_PE_INTERFACENAME,
Yann Garcia's avatar
Yann Garcia committed
                                                              PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF
                                                              PX_SIP_IC_INTERFACENAME // IBCF -> IMS -> PSAP
                        // map/connect component ports
                        f_cf_adapter_up ( );
                        f_cf_user_up ( v_ueA );
                        f_cf_user_up ( v_psap );
                        f_cf_VxLteMonitor_Up();
                        f_mtc_userRegistration(v_ueA, v_userInfoA);
Yann Garcia's avatar
Yann Garcia committed
                        if (PX_PSAP_REGISTERED) {
                            f_mtc_userRegistration(v_psap, v_infoPsap);
                        } else {
                            // TODO Check OPTIONS from PSAP to E-CSCF
                        }
                        f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_07();
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1
                        if (not(PX_ECALL)) {
                            f_mtc_check_TP_GM_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1
                        } else {
                            f_mtc_check_TP_GM_PCSCF_ECO_INVITE_04(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1
                        }
                        f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip);

                        //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF
                        f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx);// Event 2
                        f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 3
                        f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx);  // Event 4
                        f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 5
                        f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 7,8
                        //f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 6,9

                        f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10
                        f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip);

                        f_mtc_check_TP_MI_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 11
                        f_mtc_check_TP_MI_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip);
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 12

                        // 183 Session Progress
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 13
                        f_mtc_check_TP_MI_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 14
                        f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15
                        f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20

                        //Rx/Gx exchange after 183(SDP) was received at P-CSCF
                        f_mtc_check_TP_RX_PCSCF_AAR_04(vc_vxlte_monitor_components.rx);// Event 16
                        f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 17
                        f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx);  // Event 18
                        f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 19

Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 180 Ringing – Event 22
                        f_mtc_check_TP_MI_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 23
                        f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24
                        f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25

                        f_mtc_userCheckRinging(v_psap);
                        f_mtc_userCheckPeerIsRinging(v_ueA);
                        f_mtc_userAnswerCall(v_psap);

Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 200 OK – Event 26
                        f_mtc_check_TP_MI_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 27
                        f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 28                        
                        f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 29

                        f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 30 
                        f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 31
                        f_mtc_check_TP_MI_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 32                        
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // ACK – Event 33

                        f_mtc_userCheckCallEstablished(v_ueA); // Event 34
                        f_mtc_userCheckCallEstablished(v_psap); // Event 34

                        // Postamble
                        f_mtc_EndCall(v_ueA);
                        f_PO_user_home_deregistration(v_ueA);
                        f_PO_user_home_deregistration(v_psap);
                        //f_cf_int_call_down(v_config);
                        //unmap/disconnect component ports
                        f_cf_user_down ( v_psap );
                        f_cf_user_down ( v_ueA );
                        f_cf_VxLteMonitor_Down();
                    }else{
                        //log...
                        setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
                    }
                    f_cf_adapter_down ( );
                } // End of TC TD_VoLTE_ECO_INT_INI_07
                    function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_07() runs on ImsTestCoordinator {
                        log("If the test case fails, please check the preconditions");
                        // TODO Add real code to check pre-conditions
                     } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_07
                } // End of group f_TD_VoLTE_ECO_INT_INI_07

                /**
                 * @desc    To demonstrate the establishment of dedicated bearers at the originating EPC due to SIP emergency session establishment within an emergency registration.
                 *          PSAP is located in the PSTN connected via BGCF. The PSAP URI is delivered by the LRF
                 * @see ETSI TS 103 795-2 Clause 5.3.1.9    UE calling PSAP in PSTN via BGCF, LRF derived PSAP URI
                 */
                testcase TD_VoLTE_ECO_INT_INI_08() runs on ImsTestCoordinator system IotSystemInterface {

                    var IotEquipmentUser v_ueA  := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency );
                    var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap );
                    var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY );
                    var ImsUserInfo v_infoPsap  := f_getImUser ( PX_PSAP );

                    f_setVxLteMonIterfacesAvailability();
                    //Check required monitor interfaces due to TD
                    if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME,
                                                              PX_DIAMETER_GX_INTERFACENAME,
                                                              PX_DIAMETER_RX_INTERFACENAME,
                                                              PX_SIP_MW_PE_INTERFACENAME,
Yann Garcia's avatar
Yann Garcia committed
                                                              PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> BGCF
                                                              PX_SIP_ML_E_LRF_INTERFACENAME // E-CSCF -> LRF: mlE_LRF
                        // map/connect component ports
                        f_cf_adapter_up ( );
                        f_cf_user_up ( v_ueA );
                        f_cf_user_up ( v_psap );
                        f_cf_VxLteMonitor_Up();
                        f_mtc_userRegistration(v_ueA, v_userInfoA);
Yann Garcia's avatar
Yann Garcia committed
                        if (PX_PSAP_REGISTERED) {
                            f_mtc_userRegistration(v_psap, v_infoPsap);
                        } else {
                            // TODO Check OPTIONS from PSAP to E-CSCF
                        }
                        f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_08();
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1
                        if (not(PX_ECALL)) {
                            f_mtc_check_TP_GM_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1
                        } else {
                            f_mtc_check_TP_GM_PCSCF_ECO_INVITE_04(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1
                        }
                        f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip);

                        //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF
                        f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx);// Event 2
                        f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 3
                        f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx);  // Event 4
                        f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 5
                        f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 7,8
                        //f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 6,9


                        f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10
                        f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip);

                        // FIXME f_mtc_check_TP_MW_IBCF_xxx <--> f_mtc_check_TP_ML_EBCF_xxx
                        f_mtc_check_TP_ML_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mlE_LRF, -, v_sip); // Event 11
                        f_mtc_check_TP_MX_LRF_3xxAny_01(vc_vxlte_monitor_components.mlE_LRF, -, v_sip); // Event 12

                        f_mtc_check_TP_MX_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 13
                        f_mtc_check_TP_MX_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip);

                        f_mtc_check_TP_IC_IBCF_INVITE_01(vc_vxlte_monitor_components.ic, true); // INVITE Event 14
                        f_mtc_check_TP_IC_IBCF_INVITE_02(vc_vxlte_monitor_components.ic, true); // INVITE Event 14
                        f_mtc_check_TP_IC_IBCF_183RESP_01(vc_vxlte_monitor_components.ic,-); // 183 Event 15

                        // 183 Session Progress
                        f_mtc_check_TP_MX_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 16
                        f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 17
                        f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 24

                        //Rx/Gx exchange after 183(SDP) was received at P-CSCF
                        f_mtc_check_TP_RX_PCSCF_AAR_04(vc_vxlte_monitor_components.rx);// Event 18
                        f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 19
                        f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx);  // Event 20
                        f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 21

Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_check_TP_IC_IBCF_180RESP_01(vc_vxlte_monitor_components.ic, true); // 180 Ringing – Event 24
                        f_mtc_check_TP_MX_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 25
                        f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 26
                        f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 27

                        f_mtc_userCheckRinging(v_psap);
                        f_mtc_userCheckPeerIsRinging(v_ueA);
                        f_mtc_userAnswerCall(v_psap);

                        f_mtc_check_TP_IC_IBCF_2XXRESP_01(vc_vxlte_monitor_components.ic, true); // 200 OK – Event 28
                        f_mtc_check_TP_IC_IBCF_2XXRESP_02(vc_vxlte_monitor_components.ic, true); // 200 OK – Event 28
                        f_mtc_check_TP_IC_IBCF_2XXRESP_03(vc_vxlte_monitor_components.ic); // 200 OK – Event 28

                        f_mtc_check_TP_MX_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 29
                        f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 30
                        f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 31

                        f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 32
                        f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 33
                        f_mtc_check_TP_MX_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 34
                        f_mtc_check_TP_IC_IBCF_ACK_01(vc_vxlte_monitor_components.ic); // ACK – Event 35

                        f_mtc_userCheckCallEstablished(v_ueA); // Event 36
                        f_mtc_userCheckCallEstablished(v_psap); // Event 36

                        // Postamble
                        f_mtc_EndCall(v_ueA);
                        f_PO_user_home_deregistration(v_ueA);
                        f_PO_user_home_deregistration(v_psap);
                        //f_cf_int_call_down(v_config);
                        //unmap/disconnect component ports
                        f_cf_user_down ( v_psap );
                        f_cf_user_down ( v_ueA );
                        f_cf_VxLteMonitor_Down();
                    }else{
                        //log...
                        setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
                    }
                    f_cf_adapter_down ( );
                } // End of TC TD_VoLTE_ECO_INT_INI_08
                    function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_08() runs on ImsTestCoordinator {
                        log("If the test case fails, please check the preconditions");
                        // TODO Add real code to check pre-conditions
                     } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_08
                 * @desc    
                 * @see ETSI TS 103 795-2 Clause 5.3.1.10    UE calling PSAP over AS with non-emergency registration
                testcase TD_VoLTE_ECO_INT_INI_09() runs on ImsTestCoordinator system IotSystemInterface {

                    var IotEquipmentUser v_ueA  := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency );
                    var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap );
                    var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY );
                    var ImsUserInfo v_infoPsap  := f_getImUser ( PX_PSAP );

                    f_setVxLteMonIterfacesAvailability();
                    //Check required monitor interfaces due to TD
                    if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME,
                                                              PX_DIAMETER_GX_INTERFACENAME,
                                                              PX_DIAMETER_RX_INTERFACENAME,
                                                              PX_SIP_MW_PE_INTERFACENAME,
Yann Garcia's avatar
Yann Garcia committed
                                                              PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF
                                                              PX_SIP_MM_B_PSAP_INTERFACENAME
                        // map/connect component ports
                        f_cf_adapter_up ( );
                        f_cf_user_up ( v_ueA );
                        f_cf_user_up ( v_psap );
                        f_cf_VxLteMonitor_Up();
                        f_mtc_userRegistration(v_ueA, v_userInfoA);
Yann Garcia's avatar
Yann Garcia committed
                        if (PX_PSAP_REGISTERED) {
                            f_mtc_userRegistration(v_psap, v_infoPsap);
                        } else {
                            // TODO Check OPTIONS from PSAP to E-CSCF
                        }
                        f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_09_01();
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1
                        // Test body
                        //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB);
                        // TODO
                        f_mtc_userCheckCallEstablished(v_ueA); // Event 34
                        f_mtc_userCheckCallEstablished(v_psap); // Event 34

                        // Postamble
                        f_mtc_EndCall(v_ueA);
                        f_PO_user_home_deregistration(v_ueA);
                        f_PO_user_home_deregistration(v_psap);
                        //f_cf_int_call_down(v_config);

                        //unmap/disconnect component ports
                        f_cf_user_down ( v_psap );
                        f_cf_user_down ( v_ueA );
                        f_cf_VxLteMonitor_Down();
                    }else{
                        //log...
                        setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
                    }
                    f_cf_adapter_down ( );
                } // End of TC TD_VoLTE_ECO_INT_INI_09

                group f_TD_VoLTE_ECO_INT_INI_09 {

                    function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_09_01() runs on ImsTestCoordinator {
                        log("If the test case fails, please check the preconditions");
                        // TODO Add real code to check pre-conditions
                     } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_09

                } // End of group f_TD_VoLTE_ECO_INT_INI_09

                /**
                 * @desc    To demonstrate that if an emergency call has been terminated, the attempt by the PSAP call taker to communicate back to the emergency caller shall be answered.
                 * @see ETSI TS 103 795-2 Clause 5.3.1.11     Callback from PSAP
                 * @remark Ipetion 1: PSAP in IMS A
                 */
                testcase TD_VoLTE_ECO_INT_INI_10_01() runs on ImsTestCoordinator system IotSystemInterface {

                    var IotEquipmentUser v_ueA  := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency );
                    var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap );
                    var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY );
                    var ImsUserInfo v_infoPsap  := f_getImUser ( PX_PSAP );

                    f_setVxLteMonIterfacesAvailability();
                    //Check required monitor interfaces due to TD
                    if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME,
                                                              PX_SIP_MW_PE_INTERFACENAME,
Yann Garcia's avatar
Yann Garcia committed
                                                              PX_SIP_MW_EB_INTERFACENAME // E-CSCF -> BGCF
                                                              }))
                    {
                        var SipMessage v_sip;

                        f_cf_createVxLteMonitor();

                        // map/connect component ports
                        f_cf_adapter_up ( );
                        f_cf_user_up ( v_ueA );
                        f_cf_user_up ( v_psap );
                        f_cf_VxLteMonitor_Up();

                        // Preamble
                        f_mtc_userRegistration(v_ueA, v_userInfoA);
Yann Garcia's avatar
Yann Garcia committed
                        if (PX_PSAP_REGISTERED) {
                            f_mtc_userRegistration(v_psap, v_infoPsap);
                        } else {
                            // TODO Check OPTIONS from PSAP to E-CSCF
                        }
                        f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1
                        f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_10_01();

                        // Test body

                        f_mtc_check_TP_MM_ECSCF_ECO_INVITE_03(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // INVITE Event 1
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_check_TP_MM_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip);

                        f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 6
                        f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip);

                        f_mtc_check_TP_GM_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 7
                        f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip);

                        // 183 Session Progress
                        f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 8
                        f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 9
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 183 In Progress Event 10

                        f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 16
                        f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 17
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 180 Ringing – Event 20

                        f_mtc_userCheckRinging(v_ueA); // Event 15
                        f_mtc_userCheckPeerIsRinging(v_psap); // Event 15
                        f_mtc_userAnswerCall(v_ueA); // Event 26

                        f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 18
                        f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 19
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 200 OK Event 21
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // ACK – Event 22
                        f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 35
                        f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // ACK Event 36

                        f_mtc_userCheckCallEstablished(v_ueA); // Event 37
                        f_mtc_userCheckCallEstablished(v_psap); // Event 37

                        // Postamble
                        f_mtc_EndCall(v_ueA);
                        f_PO_user_home_deregistration(v_ueA);
                        f_PO_user_home_deregistration(v_psap);
                        //f_cf_int_call_down(v_config);
                        //unmap/disconnect component ports
                        f_cf_user_down ( v_psap );
                        f_cf_user_down ( v_ueA );
                        f_cf_VxLteMonitor_Down();
                    }else{
                        //log...
                        setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
                    }
                    f_cf_adapter_down ( );
                } // End of TC TD_VoLTE_ECO_INT_INI_10_01

                group f_TD_VoLTE_ECO_INT_INI_10_01 {

                    function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_10_01() runs on ImsTestCoordinator {
                        log("If the test case fails, please check the preconditions");
                        // TODO Add real code to check pre-conditions
                     } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_10_01

                } // End of group f_TD_VoLTE_ECO_INT_INI_10_01

                /**
                 * @desc    To demonstrate that if an emergency call has been terminated, the attempt by the PSAP call taker to communicate back to the emergency caller shall be answered.
                 * @see ETSI TS 103 795-2 Clause 5.3.1.11     Callback from PSAP
                 * @remark Ipetion 1: PSAP NOT in IMS A
                testcase TD_VoLTE_ECO_INT_INI_10_02() runs on ImsTestCoordinator system IotSystemInterface {

                    var IotEquipmentUser v_ueA  := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency );
                    var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap );
                    var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY );
                    var ImsUserInfo v_infoPsap  := f_getImUser ( PX_PSAP );

                    f_setVxLteMonIterfacesAvailability();
                    //Check required monitor interfaces due to TD
                    if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME,
                                                              PX_SIP_MW_PE_INTERFACENAME,
Yann Garcia's avatar
Yann Garcia committed
                                                              PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF
                                                              PX_SIP_IC_INTERFACENAME // IBCF -> IMS_B -> PSAP
                        // map/connect component ports
                        f_cf_adapter_up ( );
                        f_cf_user_up ( v_ueA );
                        f_cf_user_up ( v_psap );
                        f_cf_VxLteMonitor_Up();
                        f_mtc_userRegistration(v_ueA, v_userInfoA);
Yann Garcia's avatar
Yann Garcia committed
                        if (PX_PSAP_REGISTERED) {
                            f_mtc_userRegistration(v_psap, v_infoPsap);
                        } else {
                            // TODO Check OPTIONS from PSAP to E-CSCF
                        }
                        f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_10_02();
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1
                        // Test body
                        //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB);
                        f_mtc_check_TP_IC_IBCF_INVITE_01(vc_vxlte_monitor_components.ic); // Event 2
                        f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.ic, -, v_sip);

                        f_mtc_check_TP_MX_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 3
                        f_mtc_check_TP_MX_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip);

                        f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 6
                        f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip);

                        f_mtc_check_TP_GM_PCSCF_INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 7
                        f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip);

                        // 183 Session Progress
                        f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 8
                        f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 9
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 183 In Progress Event 10

                        f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 16
                        f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 17
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 180 Ringing – Event 20

                        f_mtc_userCheckRinging(v_ueA); // Event 15
                        f_mtc_userCheckPeerIsRinging(v_psap); // Event 15
                        f_mtc_userAnswerCall(v_ueA); // Event 26

                        f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 18
                        f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 19
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 200 OK Event 21
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // ACK – Event 22
                        f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 35
                        f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // ACK Event 36

                        f_mtc_userCheckCallEstablished(v_ueA); // Event 37
                        f_mtc_userCheckCallEstablished(v_psap); // Event 37

                        // Postamble
                        f_mtc_EndCall(v_ueA);
                        f_PO_user_home_deregistration(v_ueA);
                        f_PO_user_home_deregistration(v_psap);
                        //f_cf_int_call_down(v_config);
                        //unmap/disconnect component ports
                        f_cf_user_down ( v_psap );
                        f_cf_user_down ( v_ueA );
                        f_cf_VxLteMonitor_Down();
                    }else{
                        //log...
                        setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
                    }
                    f_cf_adapter_down ( );
                } // End of TC TD_VoLTE_ECO_INT_INI_10_02

                group f_TD_VoLTE_ECO_INT_INI_10_02 {

                    function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_10_02() runs on ImsTestCoordinator {
                        log("If the test case fails, please check the preconditions");
                        // TODO Add real code to check pre-conditions
                     } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_10_02

                } // End of group f_TD_VoLTE_ECO_INT_INI_10_02

                /**
                 * @desc    To demonstrate that if an emergency call has been terminated, the attempt by the PSAP call taker to communicate back to the emergency caller shall be answered.
                 * @see ETSI TS 103 795-2 Clause 5.3.1.11     Callback from PSAP
                 * @remark Ipetion 1: PSAP in PSTN A
                testcase TD_VoLTE_ECO_INT_INI_10_03() runs on ImsTestCoordinator system IotSystemInterface {

                    var IotEquipmentUser v_ueA  := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency );
                    var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap );
                    var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY );
                    var ImsUserInfo v_infoPsap  := f_getImUser ( PX_PSAP );

                    f_setVxLteMonIterfacesAvailability();
                    //Check required monitor interfaces due to TD
                    if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME,
                                                              PX_DIAMETER_GX_INTERFACENAME,
                                                              PX_DIAMETER_RX_INTERFACENAME,
                                                              PX_SIP_MW_PE_INTERFACENAME,
Yann Garcia's avatar
Yann Garcia committed
                                                              PX_SIP_MW_EB_INTERFACENAME // E-CSCF -> BGCF
                        // map/connect component ports
                        f_cf_adapter_up ( );
                        f_cf_user_up ( v_ueA );
                        f_cf_user_up ( v_psap );
                        f_cf_VxLteMonitor_Up();
                        f_mtc_userRegistration(v_ueA, v_userInfoA);
Yann Garcia's avatar
Yann Garcia committed
                        if (PX_PSAP_REGISTERED) {
                            f_mtc_userRegistration(v_psap, v_infoPsap);
                        } else {
                            // TODO Check OPTIONS from PSAP to E-CSCF
                        }
                        f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_10_03();
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1
                        f_mtc_check_TP_IC_IBCF_INVITE_02(vc_vxlte_monitor_components.ic); // Event 4
                        f_mtc_check_TP_MX_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 5
                        f_mtc_check_TP_MX_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip);

                        f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 6
                        f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip);

                        f_mtc_check_TP_GM_PCSCF_INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 7
                        f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip);

                        // 183 Session Progress
                        f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 8
                        f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 9
                        
                        f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 13
                        f_mtc_check_TP_IC_IBCF_183RESP_01(vc_vxlte_monitor_components.ic); // Event 14

                        f_mtc_userCheckRinging(v_ueA); // Event 15
                        f_mtc_userCheckPeerIsRinging(v_psap); // Event 15

                        f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 16
                        f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 17

                        f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 18
                        f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 19

                        f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 29
                        f_mtc_check_TP_IC_IBCF_180RESP_01(vc_vxlte_monitor_components.ic); // Event 30

                        f_mtc_check_TP_MW_PCSCF_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 31
                        f_mtc_check_TP_IC_IBCF_2XXRESP_01(vc_vxlte_monitor_components.ic); // Event 32

                        f_mtc_check_TP_IC_IBCF_ACK_01(vc_vxlte_monitor_components.ic); // Event 33
                        f_mtc_check_TP_MW_PCSCF_ACK_02(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 34

                        f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 35
                        f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // ACK Event 36

                        f_mtc_userCheckCallEstablished(v_ueA); // Event 37
                        f_mtc_userCheckCallEstablished(v_psap); // Event 37
                        // Postamble
                        f_mtc_EndCall(v_ueA);
                        f_PO_user_home_deregistration(v_ueA);
                        f_PO_user_home_deregistration(v_psap);
                        //f_cf_int_call_down(v_config);
                        //unmap/disconnect component ports
                        f_cf_user_down ( v_psap );
                        f_cf_user_down ( v_ueA );
                        f_cf_VxLteMonitor_Down();
                    }else{
                        //log...
                        setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
                    }
                    f_cf_adapter_down ( );
                } // End of TC TD_VoLTE_ECO_INT_INI_10_03

                group f_TD_VoLTE_ECO_INT_INI_10_03 {

                    function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_10_03() runs on ImsTestCoordinator {
                        log("If the test case fails, please check the preconditions");
                        // TODO Add real code to check pre-conditions
                     } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_10_03

                } // End of group f_TD_VoLTE_ECO_INT_INI_10_03

            } // End of group EmergencySessionEstablishment

            group EmergencySessionRelease {

                /**
                 * @desc    To perform originating UE session release and the tear down of related dedicated bearers.
                 * @see ETSI TS 103 795-2 Clause 5.3.3.1    UE Initiated Emergency Session Release
                 * @remark This is option 1: PSAP is in IMS A network
                testcase TD_VoLTE_EMC_INT_REL_01_01() runs on ImsTestCoordinator system IotSystemInterface {

                    var IotEquipmentUser v_ueA  := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency );
                    var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap );
                    var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY );
                    var ImsUserInfo v_infoPsap  := f_getImUser ( PX_PSAP );

                    f_setVxLteMonIterfacesAvailability();
                    //Check required monitor interfaces due to TD
                    if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME,
                                                              PX_DIAMETER_GX_INTERFACENAME,
                                                              PX_DIAMETER_RX_INTERFACENAME,
                                                              PX_SIP_MW_PE_INTERFACENAME,
Yann Garcia's avatar
Yann Garcia committed
                                                              PX_SIP_MM_B_PSAP_INTERFACENAME // E-CSCCF -> PSAP
                        // map/connect component ports
                        f_cf_adapter_up ( );
                        f_cf_user_up ( v_ueA );
                        f_cf_user_up ( v_psap );
                        f_cf_VxLteMonitor_Up();
                        f_mtc_userRegistration(v_ueA, v_userInfoA);
Yann Garcia's avatar
Yann Garcia committed
                        if (PX_PSAP_REGISTERED) {
                            f_mtc_userRegistration(v_psap, v_infoPsap);
                        } else {
                            // TODO Check OPTIONS from PSAP to E-CSCF
                        }
                        f_mtc_check_precond_TD_VoLTE_EMC_INT_REL_01_01();
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1
                        f_mtc_check_TP_GM_PCSCF_ECO_BYE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 2
                        f_mtc_check_TP_MW_PCSCF_ECO_BYE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 3
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_check_TP_MM_ECSCF_ECO_BYE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 4

                        //Rx/Gx exchange after BYE was received at P-CSCF
                        f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // (STR – Event 10
                        f_mtc_check_TP_GX_PCRF_RAR_02(vc_vxlte_monitor_components.gx, true); // (RAR – Event 11)
                        f_mtc_check_TP_GX_PGW_RAA_03(vc_vxlte_monitor_components.gx); // (RAA – Event 12)
                        f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 13)                        
                        f_mtc_check_TP_MX_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 13
                        f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 18
                        f_mtc_check_TP_GM_PCSCF_200OK_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 19

                        f_mtc_userCheckCallTerminated(v_ueA); // Event 20
                        f_mtc_userCheckCallCancelled(v_psap); // Event 21

                        // Postamble
                        f_PO_user_home_deregistration(v_ueA);
                        f_PO_user_home_deregistration(v_psap);
                        f_cf_user_down ( v_psap );
                        f_cf_user_down ( v_ueA );
                        f_cf_VxLteMonitor_Down();
                        f_cf_adapter_down ( );
                    }else{
                        //log...
                        setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
                    }
                    f_cf_adapter_down ( );
                } // End of TC TD_VoLTE_EMC_INT_REL_01_01
                    function f_mtc_check_precond_TD_VoLTE_EMC_INT_REL_01_01() runs on ImsTestCoordinator {
                        log("If the test case fails, please check the preconditions");
                        // TODO Add real code to check pre-conditions
                     } // End of function f_mtc_check_precond_TD_VoLTE_EMC_INT_REL_01_01
                } // End of group f_TD_VoLTE_EMC_INT_REL_01_01

                /**
                 * @desc    To perform originating UE session release and the tear down of related dedicated bearers.
                 * @see ETSI TS 103 795-2 Clause 5.3.3.1    UE Initiated Emergency Session Release
                 * @remark This is option 2: PSAP is not in IMS A network
                 */
                testcase TD_VoLTE_EMC_INT_REL_01_02 ( ) runs on ImsTestCoordinator system IotSystemInterface {
                    var IotEquipmentUser v_ueA  := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency );
                    var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap );
                    var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY );
                    var ImsUserInfo v_infoPsap  := f_getImUser ( PX_PSAP );

                    f_setVxLteMonIterfacesAvailability();
                    //Check required monitor interfaces due to TD
                    if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME,
                                                              PX_DIAMETER_GX_INTERFACENAME,
                                                              PX_DIAMETER_RX_INTERFACENAME,
                                                              PX_SIP_MW_PE_INTERFACENAME,
Yann Garcia's avatar
Yann Garcia committed
                                                              PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF
                                                              PX_SIP_IC_INTERFACENAME // IBCF -> IMS_B -> PSAP
                                                              }))
                    {
                        var SipMessage v_sip;
                        // map/connect component ports
                        f_cf_adapter_up ( );
                        f_cf_user_up ( v_ueA );
                        f_cf_user_up ( v_psap );
                        f_cf_VxLteMonitor_Up();
                        f_mtc_userRegistration(v_ueA, v_userInfoA);
Yann Garcia's avatar
Yann Garcia committed
                        if (PX_PSAP_REGISTERED) {
                            f_mtc_userRegistration(v_psap, v_infoPsap);
                        } else {
                            // TODO Check OPTIONS from PSAP to E-CSCF
                        }
                        f_mtc_check_precond_TD_VoLTE_EMC_INT_REL_01_02();
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1
                        f_mtc_check_TP_GM_PCSCF_ECO_BYE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 2
                        f_mtc_check_TP_MW_PCSCF_ECO_BYE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 3
                        f_mtc_check_TP_MX_ECSCF_ECO_BYE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 5
                        f_mtc_check_TP_IC_IBCF_ECO_BYE_01(vc_vxlte_monitor_components.ic); // Event 6

                        //Rx/Gx exchange after BYE was received at P-CSCF
                        f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // (STR – Event 10
                        f_mtc_check_TP_GX_PCRF_RAR_02(vc_vxlte_monitor_components.gx, true); // (RAR – Event 11)
                        f_mtc_check_TP_GX_PGW_RAA_03(vc_vxlte_monitor_components.gx); // (RAA – Event 12)
                        f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 13)                        
                        f_mtc_check_TP_MX_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 15
                        f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 18
                        f_mtc_check_TP_GM_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 19

                        f_mtc_userCheckCallTerminated(v_ueA); // Event 22
                        f_mtc_userCheckCallCancelled(v_psap); // Event 23
                        // Postamble
                        f_PO_user_home_deregistration(v_ueA);
                        f_PO_user_home_deregistration(v_psap);
                        f_cf_user_down ( v_psap );
                        f_cf_user_down ( v_ueA );
                        f_cf_VxLteMonitor_Down();
                        f_cf_adapter_down ( );
                    }else{
                        //log...
                        setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
                    }
                    f_cf_adapter_down ( );
                } // End of TC f_TD_VoLTE_EMC_INT_REL_01_01
                    function f_mtc_check_precond_TD_VoLTE_EMC_INT_REL_01_02() runs on ImsTestCoordinator {
                        log("If the test case fails, please check the preconditions");
                     } // End of function f_mtc_check_precond_TD_VoLTE_EMC_INT_REL_01_02
                } // End of f_TD_VoLTE_EMC_INT_REL_01_02

               /**
                 * @desc    To perform originating UE session release and the tear down of related dedicated bearers.
                 * @see ETSI TS 103 795-2 Clause 5.3.3.1    UE Initiated Emergency Session Release
                 * @remark This is option 3: PSAP is in PSTN network
                 */
                testcase TD_VoLTE_EMC_INT_REL_01_03() runs on ImsTestCoordinator system IotSystemInterface {

                    var IotEquipmentUser v_ueA  := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency );
                    var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap );
                    var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY );
                    var ImsUserInfo v_infoPsap  := f_getImUser ( PX_PSAP );

                    f_setVxLteMonIterfacesAvailability();
                    //Check required monitor interfaces due to TD
                    if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME,
                                                              PX_DIAMETER_GX_INTERFACENAME,
                                                              PX_DIAMETER_RX_INTERFACENAME,
Yann Garcia's avatar
Yann Garcia committed
                                                              PX_SIP_MW_PE_INTERFACENAME, // E-CSCF -> IBCF
                                                              PX_SIP_IC_INTERFACENAME // IBCF -> IMS -> PSAP
                        // map/connect component ports
                        f_cf_adapter_up ( );
                        f_cf_user_up ( v_ueA );
                        f_cf_user_up ( v_psap );
                        f_cf_VxLteMonitor_Up();
                        f_mtc_userRegistration(v_ueA, v_userInfoA);
Yann Garcia's avatar
Yann Garcia committed
                        if (PX_PSAP_REGISTERED) {
                            f_mtc_userRegistration(v_psap, v_infoPsap);
                        } else {
                            // TODO Check OPTIONS from PSAP to E-CSCF
                        }
                        f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1
                        f_mtc_check_precond_TD_VoLTE_EMC_INT_REL_01_03();
                        // Test body
                        //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB);

                        f_mtc_check_TP_GM_PCSCF_ECO_BYE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 2
                        f_mtc_check_TP_MW_PCSCF_ECO_BYE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 3
                        f_mtc_check_TP_MI_ECSCF_ECO_BYE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 7

                        //Rx/Gx exchange after BYE was received at P-CSCF
                        f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // (STR – Event 10
                        f_mtc_check_TP_GX_PCRF_RAR_02(vc_vxlte_monitor_components.gx, true); // (RAR – Event 11)
                        f_mtc_check_TP_GX_PGW_RAA_03(vc_vxlte_monitor_components.gx); // (RAA – Event 12)
                        f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 13)                        

                        f_mtc_check_TP_MI_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 17
                        f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 20
                        f_mtc_check_TP_GM_PCSCF_200OK_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 21

                        f_mtc_userCheckCallTerminated(v_ueA); // Event 22
                        f_mtc_userCheckCallCancelled(v_psap); // Event 23
                        // Postamble
                        f_PO_user_home_deregistration(v_ueA);
                        f_PO_user_home_deregistration(v_psap);
                        f_cf_user_down ( v_psap );
                        f_cf_user_down ( v_ueA );
                        f_cf_VxLteMonitor_Down();
                        f_cf_adapter_down ( );
                    }else{
                        //log...
                        setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
                    }
                    f_cf_adapter_down ( );
                } // End of TC TD_VoLTE_EMC_INT_REL_01_03
                    function f_mtc_check_precond_TD_VoLTE_EMC_INT_REL_01_03() runs on ImsTestCoordinator {
                        log("If the test case fails, please check the preconditions");
                        // TODO Add real code to check pre-conditions
                     } // End of function f_mtc_check_precond_TD_VoLTE_EMC_INT_REL_01_03
                } // End of group f_TD_VoLTE_EMC_INT_REL_01_03

               /**
                 * @desc    To perform originating PSAP session release and the tear down of related dedicated bearers.
                 * @see ETSI TS 103 795-2 Clause 5.3.3.2    PSAP Initiated Emergency Session Release
                 * @remark This is option 1: PSAP is in IMS A network
                 */
                testcase TD_VoLTE_ECO_INT_REL_02_01() runs on ImsTestCoordinator system IotSystemInterface {

                    var IotEquipmentUser v_ueA  := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency );
                    var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap );
                    var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY );
                    var ImsUserInfo v_infoPsap  := f_getImUser ( PX_PSAP );

                    f_setVxLteMonIterfacesAvailability();
                    //Check required monitor interfaces due to TD
                    if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME,
                                                              PX_DIAMETER_GX_INTERFACENAME,
                                                              PX_DIAMETER_RX_INTERFACENAME,
                                                              PX_SIP_MW_PE_INTERFACENAME,
Yann Garcia's avatar
Yann Garcia committed
                                                              PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF
                                                              PX_SIP_MM_B_PSAP_INTERFACENAME // E-CSCCF -> PSAP
                        // map/connect component ports
                        f_cf_adapter_up ( );
                        f_cf_user_up ( v_ueA );
                        f_cf_user_up ( v_psap );
                        f_cf_VxLteMonitor_Up();
                        f_mtc_userRegistration(v_ueA, v_userInfoA);
Yann Garcia's avatar
Yann Garcia committed
                        if (PX_PSAP_REGISTERED) {
                            f_mtc_userRegistration(v_psap, v_infoPsap);
                        } else {
                            // TODO Check OPTIONS from PSAP to E-CSCF
                        }
                        f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_02_01();
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1
                        f_mtc_check_TP_MM_ECSCF_ECO_BYE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 1
                        f_mtc_check_TP_MW_PCSCF_ECO_BYE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 7
                        f_mtc_check_TP_GM_PCSCF_ECO_BYE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 8

                        //Rx/Gx exchange after BYE was received at P-CSCF
                        f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // Event 9
                        f_mtc_check_TP_GX_PCRF_RAR_02(vc_vxlte_monitor_components.gx, true); // Event 10
                        f_mtc_check_TP_GX_PGW_RAA_03(vc_vxlte_monitor_components.gx); // Event 1
                        f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // Event 12                       

                        f_mtc_check_TP_GM_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 13
                        f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 14

                        f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 15
                        f_mtc_userCheckCallTerminated(v_ueA); // Event 21
                        f_mtc_userCheckCallCancelled(v_psap); // Event 20
                        // Postamble
                        f_PO_user_home_deregistration(v_ueA);
                        f_PO_user_home_deregistration(v_psap);
                        f_cf_user_down ( v_psap );
                        f_cf_user_down ( v_ueA );
                        f_cf_VxLteMonitor_Down();
                        f_cf_adapter_down ( );
                    }else{
                        //log...
                        setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
                    }
                    f_cf_adapter_down ( );
                } // End of TC TD_VoLTE_ECO_INT_REL_02_01
                group f_TD_VoLTE_ECO_INT_REL_02_01 {
                    function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_02_01() runs on ImsTestCoordinator {
                        log("If the test case fails, please check the preconditions");
                        // TODO Add real code to check pre-conditions
                     } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_02_01
                } // End of group f_TD_VoLTE_ECO_INT_REL_02_01

               /**
                 * @desc    To perform originating PSAP session release and the tear down of related dedicated bearers.
                 * @see ETSI TS 103 795-2 Clause 5.3.3.2    PSAP Initiated Emergency Session Release
                 * @remark This is option2: PSAP is not in IMS A network
                 */
                testcase TD_VoLTE_ECO_INT_REL_02_02() runs on ImsTestCoordinator system IotSystemInterface {

                    var IotEquipmentUser v_ueA  := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency );
                    var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap );
                    var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY );
                    var ImsUserInfo v_infoPsap  := f_getImUser ( PX_PSAP );

                    f_setVxLteMonIterfacesAvailability();
                    //Check required monitor interfaces due to TD
                    if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME,
                                                              PX_DIAMETER_GX_INTERFACENAME,
                                                              PX_DIAMETER_RX_INTERFACENAME,
                                                              PX_SIP_MW_PE_INTERFACENAME,
Yann Garcia's avatar
Yann Garcia committed
                                                              PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF
                                                              PX_SIP_IC_INTERFACENAME // IBCF -> IMS
                                                              }))
                    {
                        var SipMessage v_sip;
                        // map/connect component ports
                        f_cf_adapter_up ( );
                        f_cf_user_up ( v_ueA );
                        f_cf_user_up ( v_psap );
                        f_cf_VxLteMonitor_Up();
                        f_mtc_userRegistration(v_ueA, v_userInfoA);
Yann Garcia's avatar
Yann Garcia committed
                        if (PX_PSAP_REGISTERED) {
                            f_mtc_userRegistration(v_psap, v_infoPsap);
                        } else {
                            // TODO Check OPTIONS from PSAP to E-CSCF
                        }
                        f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_02_02();
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1
                        f_mtc_check_TP_IC_IBCF_BYE_01(vc_vxlte_monitor_components.ic); // Event 3
                        f_mtc_check_TP_MM_ECSCF_ECO_BYE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 4

                        f_mtc_check_TP_MW_PCSCF_ECO_BYE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 7
                        f_mtc_check_TP_GM_PCSCF_ECO_BYE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 8

                        //Rx/Gx exchange after BYE was received at P-CSCF
                        f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // Event 9
                        f_mtc_check_TP_GX_PCRF_RAR_02(vc_vxlte_monitor_components.gx, true); // Event 10
                        f_mtc_check_TP_GX_PGW_RAA_03(vc_vxlte_monitor_components.gx); // Event 1
                        f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // Event 12                       

                        f_mtc_check_TP_GM_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 13
                        f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 14

                        f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 16
                        f_mtc_check_TP_IC_IBCF_2XXRESP_01(vc_vxlte_monitor_components.ic); // Event 17
                        f_mtc_userCheckCallTerminated(v_ueA); // Event 21
                        f_mtc_userCheckCallCancelled(v_psap); // Event 20
                        // Postamble
                        f_PO_user_home_deregistration(v_ueA);
                        f_PO_user_home_deregistration(v_psap);
                        f_cf_user_down ( v_psap );
                        f_cf_user_down ( v_ueA );
                        f_cf_VxLteMonitor_Down();
                        f_cf_adapter_down ( );
                    }else{
                        //log...
                        setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
                    }
                    f_cf_adapter_down ( );
                } // End of TC TD_VoLTE_ECO_INT_REL_02_02
                group f_TD_VoLTE_ECO_INT_REL_02_02 {
                    function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_02_02() runs on ImsTestCoordinator {
                        log("If the test case fails, please check the preconditions");
                        // TODO Add real code to check pre-conditions
                     } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_02_02
                } // End of group f_TD_VoLTE_ECO_INT_REL_02_02

               /**
                 * @desc    To perform originating PSAP session release and the tear down of related dedicated bearers.
                 *          On call release initiated bye PSAP, the P-CSCF A should trigger the removal of all relevant previously created bearers
                 * @see ETSI TS 103 795-2 Clause 5.3.3.2    PSAP Initiated Emergency Session Release
                 * @remark This is option2: PSAP is in the same network
                 */
                testcase TD_VoLTE_ECO_INT_REL_02_03() runs on ImsTestCoordinator system IotSystemInterface {

                    var IotEquipmentUser v_ueA  := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency );
                    var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap );
                    var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY );
                    var ImsUserInfo v_infoPsap  := f_getImUser ( PX_PSAP );

                    f_setVxLteMonIterfacesAvailability();
                    //Check required monitor interfaces due to TD
                    if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME,
                                                              PX_DIAMETER_GX_INTERFACENAME,
                                                              PX_DIAMETER_RX_INTERFACENAME,
                                                              PX_SIP_MW_PE_INTERFACENAME,
Yann Garcia's avatar
Yann Garcia committed
                                                              PX_SIP_MW_EB_INTERFACENAME // E-CSCF -> BGCF
                        // map/connect component ports
                        f_cf_adapter_up ( );
                        f_cf_user_up ( v_ueA );
                        f_cf_user_up ( v_psap );
                        f_cf_VxLteMonitor_Up();
                        f_mtc_userRegistration(v_ueA, v_userInfoA);
Yann Garcia's avatar
Yann Garcia committed
                        if (PX_PSAP_REGISTERED) {
                            f_mtc_userRegistration(v_psap, v_infoPsap);
                        } else {
                            // TODO Check OPTIONS from PSAP to E-CSCF
                        }
                        f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_02_03();
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1
                        f_mtc_check_TP_IC_IBCF_BYE_01(vc_vxlte_monitor_components.ic); // Event 4
                        f_mtc_check_TP_MX_ECSCF_ECO_BYE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 5

                        f_mtc_check_TP_MW_PCSCF_ECO_BYE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 7
                        f_mtc_check_TP_GM_PCSCF_ECO_BYE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 8

                        //Rx/Gx exchange after BYE was received at P-CSCF
                        f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // Event 9
                        f_mtc_check_TP_GX_PCRF_RAR_02(vc_vxlte_monitor_components.gx, true); // Event 10
                        f_mtc_check_TP_GX_PGW_RAA_03(vc_vxlte_monitor_components.gx); // Event 1
                        f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // Event 12                       

                        f_mtc_check_TP_GM_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 13
                        f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 14

                        f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 18
                        f_mtc_check_TP_IC_IBCF_2XXRESP_01(vc_vxlte_monitor_components.ic); // Event 19
                        f_mtc_userCheckCallTerminated(v_ueA); // Event 21
                        f_mtc_userCheckCallCancelled(v_psap); // Event 20
                        // Postamble
                        f_PO_user_home_deregistration(v_ueA);
                        f_PO_user_home_deregistration(v_psap);
                        f_cf_user_down ( v_psap );
                        f_cf_user_down ( v_ueA );
                        f_cf_VxLteMonitor_Down();
                        f_cf_adapter_down ( );
                    }else{
                        //log...
                        setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
                    }
                    f_cf_adapter_down ( );
                } // End of TC TD_VoLTE_ECO_INT_REL_02_03
                group f_TD_VoLTE_ECO_INT_REL_02_03 {
                    function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_02_03() runs on ImsTestCoordinator {
                        log("If the test case fails, please check the preconditions");
                        // TODO Add real code to check pre-conditions
                     } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_02_03
                } // End of group f_TD_VoLTE_ECO_INT_REL_02_03

            } // End of group EmergencySessionRelease

            group EmergencySessionAbortOrReject {

                /**
                 * @desc    To perform SIP session abort (originating side) and the related interactions with PCRF A and EPC A.
                 * @see ETSI TS 103 795-2 Clause 5.3.4.1    Emergency Session Abort 
                 * @remark This is option 1: PSAP is in IMS A network
                testcase TD_VoLTE_EMC_INT_ABT_01_01() runs on ImsTestCoordinator system IotSystemInterface {

                    var IotEquipmentUser v_ueA  := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency );
                    var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap );
                    var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY );
                    var ImsUserInfo v_infoPsap  := f_getImUser ( PX_PSAP );

                    f_setVxLteMonIterfacesAvailability();
                    //Check required monitor interfaces due to TD
                    if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME,
                                                              PX_DIAMETER_GX_INTERFACENAME,
                                                              PX_DIAMETER_RX_INTERFACENAME,
                                                              PX_SIP_MW_PE_INTERFACENAME,
Yann Garcia's avatar
Yann Garcia committed
                                                              PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF
                                                              PX_SIP_MM_B_PSAP_INTERFACENAME // E-CSCCF -> PSAP
                        // map/connect component ports
                        f_cf_adapter_up ( );
                        f_cf_user_up ( v_ueA );
                        f_cf_user_up ( v_psap );
                        f_cf_VxLteMonitor_Up();
                        f_mtc_userRegistration(v_ueA, v_userInfoA);
Yann Garcia's avatar
Yann Garcia committed
                        if (PX_PSAP_REGISTERED) {
                            f_mtc_userRegistration(v_psap, v_infoPsap);
                        } else {
                            // TODO Check OPTIONS from PSAP to E-CSCF
                        }
                        f_mtc_check_precond_TD_VoLTE_EMC_INT_ABT_01_01();
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1
                        // Test body
                        //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB);

                        f_mtc_check_TP_GM_PCSCF_EMC_CANCEL_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 1

                        //Rx/Gx exchange after CANCEL was received at P-CSCF
                        f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // (STR – Event 2
                        f_mtc_check_TP_GX_PCRF_RAR_02(vc_vxlte_monitor_components.gx, true); // (RAR – Event 3)
                        f_mtc_check_TP_GX_PGW_RAA_03(vc_vxlte_monitor_components.gx); // (RAA – Event 4)
                        f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 5)                        

                        f_mtc_check_TP_MW_PCSCF_EMC_CANCEL_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 6
                        f_mtc_check_TP_MM_ECSCF_EMC_CANCEL_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 7

                        f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 17
                        f_mtc_check_TP_GM_PCSCF_200OK_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 18

                        f_mtc_check_TP_MW_PCSCF_EMC_487INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_check_TP_GM_PCSCF_487INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25

                        f_mtc_check_TP_GM_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 26
                        f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 27
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 28
                        f_mtc_userCheckCallTerminated(v_ueA); // Event 33
                        f_mtc_userCheckCallCancelled(v_psap); // Event 34
                        // Postamble
                        f_PO_user_home_deregistration(v_ueA);
                        f_PO_user_home_deregistration(v_psap);
                        f_cf_user_down ( v_psap );
                        f_cf_user_down ( v_ueA );
                        f_cf_VxLteMonitor_Down();
                        f_cf_adapter_down ( );
                    }else{
                        //log...
                        setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
                    }
                    f_cf_adapter_down ( );
                } // End of TC TD_VoLTE_EMC_INT_ABT_01_01
                    function f_mtc_check_precond_TD_VoLTE_EMC_INT_ABT_01_01() runs on ImsTestCoordinator {
                        log("If the test case fails, please check the preconditions");
                        // TODO Add real code to check pre-conditions
                     } // End of function f_mtc_check_precond_TD_VoLTE_EMC_INT_ABT_01_01
                } // End of group f_TD_VoLTE_EMC_INT_ABT_01_01

                /**
                 * @desc    To perform SIP session abort (originating side) and the related interactions with PCRF A and EPC A.
                 * @see ETSI TS 103 795-2 Clause 5.3.4.1    Emergency Session Abort 
                 * @remark This is option 1: PSAP is not in IMS A network
                testcase TD_VoLTE_EMC_INT_ABT_01_02() runs on ImsTestCoordinator system IotSystemInterface {

                    var IotEquipmentUser v_ueA  := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency );
                    var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap );
                    var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY );
                    var ImsUserInfo v_infoPsap  := f_getImUser ( PX_PSAP );

                    f_setVxLteMonIterfacesAvailability();
                    //Check required monitor interfaces due to TD
                    if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME,
                                                              PX_DIAMETER_GX_INTERFACENAME,
                                                              PX_DIAMETER_RX_INTERFACENAME,
                                                              PX_SIP_MW_PE_INTERFACENAME,
Yann Garcia's avatar
Yann Garcia committed
                                                              PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF
                                                              PX_SIP_IC_INTERFACENAME // IBCF -> IMS -> PSAP
                                                              }))
                    {
                        var SipMessage v_sip;
                        // map/connect component ports
                        f_cf_adapter_up ( );
                        f_cf_user_up ( v_ueA );
                        f_cf_user_up ( v_psap );
                        f_cf_VxLteMonitor_Up();
                        f_mtc_userRegistration(v_ueA, v_userInfoA);
Yann Garcia's avatar
Yann Garcia committed
                        if (PX_PSAP_REGISTERED) {
                            f_mtc_userRegistration(v_psap, v_infoPsap);
                        } else {
                            // TODO Check OPTIONS from PSAP to E-CSCF
                        }
                        f_mtc_check_precond_TD_VoLTE_EMC_INT_ABT_01_02();
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1
                        // Test body
                        //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB);

                        f_mtc_check_TP_GM_PCSCF_EMC_CANCEL_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 1
Yann Garcia's avatar
Yann Garcia committed

                        //Rx/Gx exchange after CANCEL was received at P-CSCF
                        f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // (STR – Event 2
                        f_mtc_check_TP_GX_PCRF_RAR_02(vc_vxlte_monitor_components.gx, true); // (RAR – Event 3)
                        f_mtc_check_TP_GX_PGW_RAA_03(vc_vxlte_monitor_components.gx); // (RAA – Event 4)
                        f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 5)                        

                        f_mtc_check_TP_MW_PCSCF_EMC_CANCEL_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 6
                        f_mtc_check_TP_MX_ECSCF_EMC_CANCEL_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 9
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_check_TP_IC_IBCF_CANCEL_01(vc_vxlte_monitor_components.ic, true); // CANCEL Event 10 (NOTE: comment out if ISC simulated by Ic)

                        f_mtc_check_TP_IC_IBCF_2XXRESP_01(vc_vxlte_monitor_components.ic); // 200 CANCEL – Event 11
                        f_mtc_check_TP_MX_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 12
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 17
                        f_mtc_check_TP_GM_PCSCF_200OK_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 18

                        f_mtc_check_TP_IC_IBCF_487INVITE_01(vc_vxlte_monitor_components.ic); // Event 20
                        f_mtc_check_TP_MX_ECSCF_EMC_487INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 21
                        f_mtc_check_TP_MW_PCSCF_EMC_487INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_check_TP_GM_PCSCF_487INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25

                        f_mtc_check_TP_GM_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 26
                        f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 27
                        f_mtc_check_TP_MX_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 29
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_check_TP_IC_IBCF_ACK_01(vc_vxlte_monitor_components.ic, true); // Event 30
                        f_mtc_userCheckCallTerminated(v_ueA); // Event 33
                        f_mtc_userCheckCallCancelled(v_psap); // Event 34
                        // Postamble
                        f_PO_user_home_deregistration(v_ueA);
                        f_PO_user_home_deregistration(v_psap);
                        f_cf_user_down ( v_psap );
                        f_cf_user_down ( v_ueA );
                        f_cf_VxLteMonitor_Down();
                        f_cf_adapter_down ( );
                    }else{
                        //log...
                        setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
                    }
                    f_cf_adapter_down ( );
                } // End of TC TD_VoLTE_EMC_INT_ABT_01_02
                    function f_mtc_check_precond_TD_VoLTE_EMC_INT_ABT_01_02() runs on ImsTestCoordinator {
                        log("If the test case fails, please check the preconditions");
                        // TODO Add real code to check pre-conditions
                     } // End of function f_mtc_check_precond_TD_VoLTE_EMC_INT_ABT_01_02
                } // End of group f_TD_VoLTE_EMC_INT_ABT_01_02

                /**
                 * @desc    To perform SIP session abort (originating side) and the related interactions with PCRF A and EPC A.
                 * @see ETSI TS 103 795-2 Clause 5.3.4.1    Emergency Session Abort 
                 * @remark This is option 1: PSAP is in PSTN network
                testcase TD_VoLTE_EMC_INT_ABT_01_03() runs on ImsTestCoordinator system IotSystemInterface {

                    var IotEquipmentUser v_ueA  := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency );
                    var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap );
                    var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY );
                    var ImsUserInfo v_infoPsap  := f_getImUser ( PX_PSAP );

                    f_setVxLteMonIterfacesAvailability();
                    //Check required monitor interfaces due to TD
                    if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME,
                                                              PX_DIAMETER_GX_INTERFACENAME,
                                                              PX_DIAMETER_RX_INTERFACENAME,
                                                              PX_SIP_MW_PE_INTERFACENAME,
Yann Garcia's avatar
Yann Garcia committed
                                                              PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF
                                                              PX_SIP_IC_INTERFACENAME // IBCF -> IMS -> PSAP
                        f_cf_createVxLteMonitor();
                        // map/connect component ports
                        f_cf_adapter_up ( );
                        f_cf_user_up ( v_ueA );
                        f_cf_user_up ( v_psap );
                        f_cf_VxLteMonitor_Up();
                        f_mtc_userRegistration(v_ueA, v_userInfoA);
Yann Garcia's avatar
Yann Garcia committed
                        if (PX_PSAP_REGISTERED) {
                            f_mtc_userRegistration(v_psap, v_infoPsap);
                        } else {
                            // TODO Check OPTIONS from PSAP to E-CSCF
                        }
                        f_mtc_check_precond_TD_VoLTE_EMC_INT_ABT_01_03();
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1
                        // Test body
                        //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB);

                        f_mtc_check_TP_GM_PCSCF_EMC_CANCEL_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 1
Yann Garcia's avatar
Yann Garcia committed

                        //Rx/Gx exchange after CANCEL was received at P-CSCF
                        f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // (STR – Event 2
                        f_mtc_check_TP_GX_PCRF_RAR_02(vc_vxlte_monitor_components.gx, true); // (RAR – Event 3)
                        f_mtc_check_TP_GX_PGW_RAA_03(vc_vxlte_monitor_components.gx); // (RAA – Event 4)
                        f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 5)                        

                        f_mtc_check_TP_MW_PCSCF_EMC_CANCEL_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 6
                        f_mtc_check_TP_MI_ECSCF_EMC_CANCEL_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 13
                        f_mtc_check_TP_MM_ECSCF_EMC_CANCEL_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 14
Yann Garcia's avatar
Yann Garcia committed

                        f_mtc_check_TP_MI_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 16
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 17
                        f_mtc_check_TP_GM_PCSCF_200OK_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 18

                        f_mtc_check_TP_MM_ECSCF_EMC_487INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 22
                        f_mtc_check_TP_MI_ECSCF_EMC_487INVITE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 23
                        f_mtc_check_TP_MW_PCSCF_EMC_487INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_check_TP_GM_PCSCF_487INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25

                        f_mtc_check_TP_GM_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 26
                        f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 27
                        f_mtc_check_TP_MI_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 31
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 32
                        f_mtc_userCheckCallTerminated(v_ueA); // Event 33
                        f_mtc_userCheckCallCancelled(v_psap); // Event 34
                        // Postamble
                        f_PO_user_home_deregistration(v_ueA);
                        f_PO_user_home_deregistration(v_psap);
                        f_cf_user_down ( v_psap );
                        f_cf_user_down ( v_ueA );
                        f_cf_VxLteMonitor_Down();
                        f_cf_adapter_down ( );
                    }else{
                        //log...
                        setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
                    }
                    f_cf_adapter_down ( );
                } // End of TC TD_VoLTE_EMC_INT_ABT_01_03
                    function f_mtc_check_precond_TD_VoLTE_EMC_INT_ABT_01_03() runs on ImsTestCoordinator {
                        log("If the test case fails, please check the preconditions");
                        // TODO Add real code to check pre-conditions
                     } // End of function f_mtc_check_precond_TD_VoLTE_EMC_INT_ABT_01_03
                } // End of group f_TD_VoLTE_EMC_INT_ABT_01_03
                /**
                 * @desc    To demonstrate interaction between UE A and PSAP when an emergency session is rejected.
                 * @see ETSI TS 103 795-2 5.3.4.3    Emergency Session Reject
                 * @remark This is option 1: PSAP is in IMS A network
                 */
                testcase TD_VoLTE_ECO_INT_REJ_01_01() runs on ImsTestCoordinator system IotSystemInterface {

                    var IotEquipmentUser v_ueA  := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency );
                    var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap );
                    var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY );
                    var ImsUserInfo v_infoPsap  := f_getImUser ( PX_PSAP );

                    f_setVxLteMonIterfacesAvailability();
                    //Check required monitor interfaces due to TD
                    if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME,
                                                              PX_DIAMETER_GX_INTERFACENAME,
                                                              PX_DIAMETER_RX_INTERFACENAME,
                                                              PX_SIP_MW_PE_INTERFACENAME,
Yann Garcia's avatar
Yann Garcia committed
                                                              PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF
                                                              PX_SIP_MM_B_PSAP_INTERFACENAME // E-CSCCF -> PSAP
                        // map/connect component ports
                        f_cf_adapter_up ( );
                        f_cf_user_up ( v_ueA );
                        f_cf_user_up ( v_psap );
                        f_cf_VxLteMonitor_Up();
                        f_mtc_userRegistration(v_ueA, v_userInfoA);
Yann Garcia's avatar
Yann Garcia committed
                        if (PX_PSAP_REGISTERED) {
                            f_mtc_userRegistration(v_psap, v_infoPsap);
                        } else {
                            // TODO Check OPTIONS from PSAP to E-CSCF
                        }
                        f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_01_01();
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 3
                        // Test body
                        //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB);

Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_check_TP_GM_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 3
                        f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip);

                        //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF
                        f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx);// Event 4
                        f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 5
                        f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx);  // Event 6
                        f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 7
                        f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 8,9
                        f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 10,11

                        f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 12
                        f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip);

                        f_mtc_check_TP_MW_PCSCF_ECO_INVITE_03(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 13
                        f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip);

                        f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 11

                        // 480 Temporary Unvailable
                        f_mtc_check_TP_MM_ECSCF_ECO_480INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 480 Temporary Unavailables Event 14
                        f_mtc_check_TP_MW_PCSCF_ECO_480INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 23
Yann Garcia's avatar
Yann Garcia committed

                        f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // Event 24
                        f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 25
                        f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx);  // Event 26
                        f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // Event 27                        

                        f_mtc_check_TP_GM_PCSCF_ECO_380ALTSRV_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 28
Yann Garcia's avatar
Yann Garcia committed

                        f_mtc_check_TP_GM_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 29
                        f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 30
                        f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 31
                        f_mtc_userCheckCallTerminated(v_ueA); // Event 36
                        f_mtc_userCheckCallCancelled(v_psap); // Event 37
                        // Postamble
                        f_PO_user_home_deregistration(v_ueA);
                        f_PO_user_home_deregistration(v_psap);
                        //unmap/disconnect component ports
                        f_cf_user_down ( v_psap );
                        f_cf_user_down ( v_ueA );
                        f_cf_VxLteMonitor_Down();
                        f_cf_adapter_down ( );
                    }else{
                        //log...
                        setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
                    }
                    f_cf_adapter_down ( );
                } // End of TC TD_VoLTE_ECO_INT_REJ_01_01
                group f_TD_VoLTE_ECO_INT_REJ_01_01 {
                    function f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_01_01() runs on ImsTestCoordinator {
                        log("If the test case fails, please check the preconditions");
                        // TODO Add real code to check pre-conditions
                     } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_01_01
                } // End of group f_TD_VoLTE_ECO_INT_REJ_01_01
                 * @desc    To demonstrate interaction between UE A and PSAP when an emergency session is rejected.
                 * @see ETSI TS 103 795-2 5.3.4.3    Emergency Session Reject
                 * @remark This is option 1: PSAP is not in IMS A network
                testcase TD_VoLTE_ECO_INT_REJ_01_02() runs on ImsTestCoordinator system IotSystemInterface {

                    var IotEquipmentUser v_ueA  := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency );
                    var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap );
                    var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY );
                    var ImsUserInfo v_infoPsap  := f_getImUser ( PX_PSAP );

                    f_setVxLteMonIterfacesAvailability();
                    //Check required monitor interfaces due to TD
                    if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME,
                                                              PX_DIAMETER_GX_INTERFACENAME,
                                                              PX_DIAMETER_RX_INTERFACENAME,
                                                              PX_SIP_MW_PE_INTERFACENAME,
Yann Garcia's avatar
Yann Garcia committed
                                                              PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF
                                                              PX_SIP_IC_INTERFACENAME // IBCF -> IMS -> PSAP
                        // map/connect component ports
                        f_cf_adapter_up ( );
                        f_cf_user_up ( v_ueA );
                        f_cf_user_up ( v_psap );
                        f_cf_VxLteMonitor_Up();
                        f_mtc_userRegistration(v_ueA, v_userInfoA);
Yann Garcia's avatar
Yann Garcia committed
                        if (PX_PSAP_REGISTERED) {
                            f_mtc_userRegistration(v_psap, v_infoPsap);
                        } else {
                            // TODO Check OPTIONS from PSAP to E-CSCF
                        }
                        f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_01_02();
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 3
                        // Test body
                        //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB);

Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_check_TP_GM_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 3
                        f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip);

                        //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF
                        f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx);// Event 4
                        f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 5
                        f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx);  // Event 6
                        f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 7
                        f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 8,9
                        f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 10,11

                        f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 12
                        f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip);

                        f_mtc_check_TP_MX_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 11
                        f_mtc_check_TP_MX_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip);
Yann Garcia's avatar
Yann Garcia committed

                        f_mtc_check_TP_IC_IBCF_INVITE_01(vc_vxlte_monitor_components.ic); // INVITE Event 12 (NOTE: comment out if ISC simulated by Ic)

                        // 480 Temporary Unavailable
                        f_mtc_check_TP_IC_IBCF_480TEMPAV_01(vc_vxlte_monitor_components.ic, -, v_sip); // INVITE Event 12 (NOTE: comment out if ISC simulated by Ic)
                        f_mtc_check_TP_MW_PCSCF_ECO_480INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 23
Yann Garcia's avatar
Yann Garcia committed

                        f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // Event 24
                        f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 25
                        f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx);  // Event 26
                        f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // Event 27                        

                        f_mtc_check_TP_GM_PCSCF_ECO_380ALTSRV_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 28
Yann Garcia's avatar
Yann Garcia committed

                        f_mtc_check_TP_GM_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 29
                        f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 30
                        f_mtc_check_TP_IC_IBCF_ACK_01(vc_vxlte_monitor_components.mmB_PSAP); // Event 31
Yann Garcia's avatar
Yann Garcia committed

                        f_mtc_userCheckCallTerminated(v_ueA); // Event 36
                        f_mtc_userCheckCallCancelled(v_psap); // Event 37
                        // Postamble
                        f_PO_user_home_deregistration(v_ueA);
                        f_PO_user_home_deregistration(v_psap);
                        f_cf_user_down ( v_psap );
                        f_cf_user_down ( v_ueA );
                        f_cf_VxLteMonitor_Down();
                        f_cf_adapter_down ( );
                    }else{
                        //log...
                        setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
                    }
                    f_cf_adapter_down ( );
                } // End of TC TD_VoLTE_ECO_INT_REJ_01_02
                group f_TD_VoLTE_ECO_INT_REJ_01_02 {
                    function f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_01_02() runs on ImsTestCoordinator {
                        log("If the test case fails, please check the preconditions");
                        // TODO Add real code to check pre-conditions
                     } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_01_02
                } // End of group f_TD_VoLTE_ECO_INT_REJ_01_02
                /**
                 * @desc    To demonstrate interaction between UE A and PSAP when an emergency session is rejected.
                 * @see ETSI TS 103 795-2 5.3.4.3    Emergency Session Reject
                 * @remark This is option 1: PSAP is in PSTN network
                 */
                testcase TD_VoLTE_ECO_INT_REJ_01_03() runs on ImsTestCoordinator system IotSystemInterface {

                    var IotEquipmentUser v_ueA  := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency );
                    var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap );
                    var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY );
                    var ImsUserInfo v_infoPsap  := f_getImUser ( PX_PSAP );

                    f_setVxLteMonIterfacesAvailability();
                    //Check required monitor interfaces due to TD
                    if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME,
                                                              PX_DIAMETER_GX_INTERFACENAME,
                                                              PX_DIAMETER_RX_INTERFACENAME,
                                                              PX_SIP_MW_PE_INTERFACENAME,
Yann Garcia's avatar
Yann Garcia committed
                                                              PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF
                                                              PX_SIP_IC_INTERFACENAME // IBCF -> IMS -> PSAP
                                                              }))
                    {
                        var SipMessage v_sip;
                        // map/connect component ports
                        f_cf_adapter_up ( );
                        f_cf_user_up ( v_ueA );
                        f_cf_user_up ( v_psap );
                        f_cf_VxLteMonitor_Up();
                        f_mtc_userRegistration(v_ueA, v_userInfoA);
Yann Garcia's avatar
Yann Garcia committed
                        if (PX_PSAP_REGISTERED) {
                            f_mtc_userRegistration(v_psap, v_infoPsap);
                        } else {
                            // TODO Check OPTIONS from PSAP to E-CSCF
                        }
                        f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_01_03();
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1
                        // Test body
                        //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB);

                        f_mtc_check_TP_GM_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 3
                        f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip);

                        //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF
                        f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx);// Event 4
                        f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 5
                        f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx);  // Event 6
                        f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 7
                        f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 8,9
                        f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 10,11

                        f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 12
                        f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip);

                        f_mtc_check_TP_MI_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 19
                        f_mtc_check_TP_MI_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip);
                        f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 20

                        // 480 Temporary Unavailable
                        f_mtc_check_TP_MM_ECSCF_ECO_480INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 21
                        f_mtc_check_TP_MI_ECSCF_ECO_480INVITE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 22
                        f_mtc_check_TP_MW_PCSCF_ECO_480INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 23

                        f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // Event 24
                        f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 25
                        f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx);  // Event 26
                        f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // Event 27                        

                        f_mtc_check_TP_GM_PCSCF_ECO_380ALTSRV_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 28

                        f_mtc_check_TP_GM_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 29
                        f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 30
                        f_mtc_check_TP_MI_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 34                        
                        f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // ACK – Event 35
                        f_mtc_userCheckCallTerminated(v_ueA); // Event 33
                        f_mtc_userCheckCallCancelled(v_psap); // Event 34
                        // Postamble
                        f_PO_user_home_deregistration(v_ueA);
                        f_PO_user_home_deregistration(v_psap);
                        //unmap/disconnect component ports
                        f_cf_user_down ( v_psap );
                        f_cf_user_down ( v_ueA );
                        f_cf_VxLteMonitor_Down();
                        f_cf_adapter_down ( );
                    }else{
                        //log...
                        setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
                    }
                    f_cf_adapter_down ( );
                } // End of TC TD_VoLTE_ECO_INT_REJ_01_03
                group f_TD_VoLTE_ECO_INT_REJ_01_03 {
                    function f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_01_03() runs on ImsTestCoordinator {
                        log("If the test case fails, please check the preconditions");
                        // TODO Add real code to check pre-conditions
                     } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_01_03
                } // End of group f_TD_VoLTE_ECO_INT_REJ_01_03
                /**
                 * @desc    To demonstrate interaction between UE A and P-CSCF when an emergency session is rejected.
                 * @see ETSI TS 103 795-2 Clause 5.3.3.3    Emergency Session Reject - IMS not able to handle emergency sessions
                testcase TD_VoLTE_ECO_INT_REJ_02() runs on ImsTestCoordinator system IotSystemInterface {

                    var IotEquipmentUser v_ueA  := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency );
                    var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap );
                    var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY );
                    var ImsUserInfo v_infoPsap  := f_getImUser ( PX_PSAP );

                    f_setVxLteMonIterfacesAvailability();
                    //Check required monitor interfaces due to TD
                    if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME,
                                                              PX_DIAMETER_GX_INTERFACENAME
                        f_cf_createVxLteMonitor();
                        // map/connect component ports
                        f_cf_adapter_up ( );
                        f_cf_user_up ( v_ueA );
                        f_cf_user_up ( v_psap );
                        f_cf_VxLteMonitor_Up();
                        f_mtc_userRegistration(v_ueA, v_userInfoA);
Yann Garcia's avatar
Yann Garcia committed
                        if (PX_PSAP_REGISTERED) {
                            f_mtc_userRegistration(v_psap, v_infoPsap);
                        } else {
                            // TODO Check OPTIONS from PSAP to E-CSCF
                        }
                        f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_02();
Yann Garcia's avatar
Yann Garcia committed
                        f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1
                        f_mtc_check_TP_GM_PCSCF_ECO_INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1
                        f_mtc_check_TP_GM_PCSCF_ECO_380ALTSRV_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 2
                        f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 3 
                        // Postamble
                        f_PO_user_home_deregistration(v_ueA);
                        f_PO_user_home_deregistration(v_psap);
                        //unmap/disconnect component ports
                        f_cf_user_down ( v_psap );
                        f_cf_user_down ( v_ueA );
                        f_cf_VxLteMonitor_Down();
                        f_cf_adapter_down ( );
                    }else{
                        //log...
                        setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
                    }
                    f_cf_adapter_down ( );
                } // End of TC TD_VoLTE_ECO_INT_REJ_02
                    function f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_02() runs on ImsTestCoordinator {
                        log("If the test case fails, please check the preconditions");
                        // TODO Add real code to check pre-conditions
                     } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_02
                } // End of group f_TD_VoLTE_ECO_INT_REJ_02
                /**
                 * @desc To demonstrate interaction between UE A and P-CSCF when an emergency session is rejected due to wrong urn
                 * @see ETSI TS 103 795-2 Clause 5.3.3.4    Emergency Session Reject – due to wrong urn
                 */
                testcase TD_VoLTE_ECO_INT_REJ_03() runs on ImsTestCoordinator system IotSystemInterface {

                    var IotEquipmentUser v_ueA  := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency );
                    var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap );
                    var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY );
                    var ImsUserInfo v_infoPsap  := f_getImUser ( PX_PSAP );

                    f_setVxLteMonIterfacesAvailability();
                    //Check required monitor interfaces due to TD
                    if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME,
                                                              PX_DIAMETER_GX_INTERFACENAME
                                                              }))
                    {
                        var SipMessage v_sip;

                        f_cf_createVxLteMonitor();

                        // map/connect component ports
                        f_cf_adapter_up ( );
                        f_cf_user_up ( v_ueA );
                        f_cf_user_up ( v_psap );
                        f_cf_VxLteMonitor_Up();

                        // Preamble
                        f_mtc_userRegistration(v_ueA, v_userInfoA);
                        if (PX_PSAP_REGISTERED) {
                            f_mtc_userRegistration(v_psap, v_infoPsap);
                        } else {
                            // TODO Check OPTIONS from PSAP to E-CSCF
                        }
                        f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_03();
                        f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1

                        // Test body
                        f_mtc_check_TP_GM_PCSCF_ECO_INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1
                        f_mtc_check_TP_GM_PCSCF_ECO_380ALTSRV_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 2
                        f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 3 

                        // Postamble
                        f_PO_user_home_deregistration(v_ueA);
                        f_PO_user_home_deregistration(v_psap);

                        //unmap/disconnect component ports
                        f_cf_user_down ( v_psap );
                        f_cf_user_down ( v_ueA );
                        f_cf_VxLteMonitor_Down();
                        f_cf_adapter_down ( );
                    }else{
                        //log...
                        setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
                    }
                    f_cf_adapter_down ( );
                } // End of TC TD_VoLTE_ECO_INT_REJ_03

                group f_TD_VoLTE_ECO_INT_REJ_03 {

                    function f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_03() runs on ImsTestCoordinator {
                        log("If the test case fails, please check the preconditions");
                        // TODO Add real code to check pre-conditions
                     } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_03

                } // End of group f_TD_VoLTE_ECO_INT_REJ_03

            } // End of group EmergencySessionAbortOrReject

        } // End of group EmergencySessionEmergencyBearerOperations

        /**
         * @see ETSI TS 103 795-2 Clause 5.5    Emergency Network Detachment
         */
        group EmergencyNetworkDetachment {

            group EmergencySessionDetachment {
                /**
                 * @desc    To demonstrate UE initiated network emergency detachment (IP-CAN session termination) for a UE that has not yet emergency registered to the IMS or for UE that has been emergency registered to the IMS
                 * @see ETSI TS 103 795-2 Clause 5.5.1    UE Emergency  Network Detachment (with/without Emergency Registration)
                 */
                testcase TC_VoLTE_ECO_INT_DTC_01 ( ) runs on ImsTestCoordinator system IotSystemInterface {

                    var IotEquipmentUser v_ueA    := f_cf_create_IotEquipmentUser ( c_userUE_A );
                    var ImsUserInfo v_userInfoA    := f_getImUser ( PX_EUT_A );

                    f_setVxLteMonIterfacesAvailability();
                    //Check required monitor interfaces due to TD
                    if (f_checkVxLteRequiredMonitorInterface({PX_DIAMETER_GX_INTERFACENAME})){
                        f_cf_createVxLteMonitor();

                        // map/connect component ports
                        f_cf_adapter_up ( );
                        f_cf_user_up ( v_ueA );
                        f_cf_VxLteMonitor_Up();

                        //preamble
                        f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile
                        f_mtc_userRadioEnabled ( v_ueA, false, true );
                        // test body
                        // Check that user A starts initial network attachment
                        f_mtc_check_TP_GX_PCRF_EMC_CCA_01(vc_vxlte_monitor_components.gx, false);//f_mtc_check_TP_GX_PCRF_ECO_CCA_02 ( vc_vxlte_monitor_components.gx, false ); // Check (CCA – Event 3)

                        //postamble

                        //unmap/disconnect component ports
                        f_cf_user_down ( v_ueA );
                        f_cf_VxLteMonitor_Down();
                        f_cf_adapter_down ( );
                    }else{
                        //log...
                        setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
                    }
                } // End of TC TC_VoLTE_ECO_INT_DTC_01

                /**
                 * @desc    To demonstrate UE initiated emergency network detachment (emergency IP-CAN session termination) for a UE that is emergency registered to IMS and also has active emergency session
                 * @see ETSI TS 103 795-2 Clause 5.5.2    UE Emergency Network Detachment with Previously Established Emergency Registration & Emergency Session
                 * @remark This is option 1: PSAP is in IMS A network
                 */
                testcase TC_VoLTE_ECO_INT_DTC_02_01 ( ) runs on ImsTestCoordinator system IotSystemInterface {

                    var IotEquipmentUser v_ueA    := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency );
                    var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap );
                    var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY );
                    var ImsUserInfo v_infoPsap  := f_getImUser ( PX_PSAP );

                    f_setVxLteMonIterfacesAvailability();
                    //Check required monitor interfaces due to TD
                    if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME,
                                                              PX_DIAMETER_GX_INTERFACENAME,
                                                              PX_DIAMETER_RX_INTERFACENAME,
                                                              PX_SIP_MW_PE_INTERFACENAME,
                                                              PX_SIP_MM_B_PSAP_INTERFACENAME // E-CSCCF -> PSAP
                                                              })){
                        var SipMessage v_sip;

                        f_cf_createVxLteMonitor();

                        // map/connect component ports
                        f_cf_adapter_up ( );
                        f_cf_user_up ( v_ueA );
                        f_cf_VxLteMonitor_Up();

                        // Preamble
                        f_mtc_userRegistration(v_ueA, v_userInfoA);
                        if (PX_PSAP_REGISTERED) {
                            f_mtc_userRegistration(v_psap, v_infoPsap);
                        } else {
                            // TODO Check OPTIONS from PSAP to E-CSCF
                        }
                        f_mtc_check_precond_TC_VoLTE_ECO_INT_DTC_02_01();
                        f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1

                        // Test body
                        f_mtc_check_TP_GM_PCSCF_ECO_BYE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 2

                        //Rx/Gx exchange after BYE was received at P-CSCF
                        f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // Event 3
                        f_mtc_check_TP_GX_PCRF_RAR_02(vc_vxlte_monitor_components.gx, true); // Event 4
                        f_mtc_check_TP_GX_PGW_RAA_03(vc_vxlte_monitor_components.gx); // Event 5
                        f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // Event 6                       

                        f_mtc_check_TP_MW_PCSCF_ECO_BYE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 7

                        f_mtc_check_TP_MM_ECSCF_ECO_BYE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 8

                        f_mtc_check_TP_MX_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 13
                        f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 18
                        f_mtc_check_TP_GM_PCSCF_200OK_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 19

                        f_mtc_check_TP_GX_PCRF_ECO_CCA_02 ( vc_vxlte_monitor_components.gx, false ); // Check (CCA – Event 20)

                        f_mtc_userCheckCallTerminated(v_ueA); // Event 22
                        f_mtc_userCheckCallCancelled(v_psap); // Event 23

                        // Postamble
                        f_PO_user_home_deregistration(v_ueA);
                        f_PO_user_home_deregistration(v_psap);

                        //unmap/disconnect component ports
                        f_cf_user_down ( v_psap );
                        f_cf_user_down ( v_ueA );
                        f_cf_VxLteMonitor_Down();
                        f_cf_adapter_down ( );
                    }else{
                        //log...
                        setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
                    }
                } // End of TC TC_VoLTE_ECO_INT_DTC_02_01

                group f_TC_VoLTE_ECO_INT_DTC_02_01 {

                    function f_mtc_check_precond_TC_VoLTE_ECO_INT_DTC_02_01() runs on ImsTestCoordinator {
                        log("If the test case fails, please check the preconditions");
                     } // End of function f_mtc_check_precond_TC_VoLTE_ECO_INT_DTC_02_01

                } // End of f_TC_VoLTE_ECO_INT_DTC_02_01

                /**
                 * @desc    To demonstrate UE initiated emergency network detachment (emergency IP-CAN session termination) for a UE that is emergency registered to IMS and also has active emergency session
                 * @see ETSI TS 103 795-2 Clause 5.5.2    UE Emergency Network Detachment with Previously Established Emergency Registration & Emergency Session
                 * @remark This is option 2: PSAP is not in IMS A network
                 */
                testcase TC_VoLTE_ECO_INT_DTC_02_02 ( ) runs on ImsTestCoordinator system IotSystemInterface {

                    var IotEquipmentUser v_ueA    := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency );
                    var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap );
                    var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY );
                    var ImsUserInfo v_infoPsap  := f_getImUser ( PX_PSAP );

                    f_setVxLteMonIterfacesAvailability();
                    //Check required monitor interfaces due to TD
                    if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME,
                                                              PX_DIAMETER_GX_INTERFACENAME,
                                                              PX_DIAMETER_RX_INTERFACENAME,
                                                              PX_SIP_MW_PE_INTERFACENAME,
                                                              PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF
                                                              PX_SIP_IC_INTERFACENAME // IBCF -> IMS_B -> PSAP
                                                              })){
                        var SipMessage v_sip;

                        f_cf_createVxLteMonitor();

                        // map/connect component ports
                        f_cf_adapter_up ( );
                        f_cf_user_up ( v_ueA );
                        f_cf_VxLteMonitor_Up();

                        // Preamble
                        f_mtc_userRegistration(v_ueA, v_userInfoA);
                        if (PX_PSAP_REGISTERED) {
                            f_mtc_userRegistration(v_psap, v_infoPsap);
                        } else {
                            // TODO Check OPTIONS from PSAP to E-CSCF
                        }
                        f_mtc_check_precond_TC_VoLTE_ECO_INT_DTC_02_02();
                        f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1

                        // Test body
                        f_mtc_check_TP_GM_PCSCF_ECO_BYE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 2

                        //Rx/Gx exchange after BYE was received at P-CSCF
                        f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // (STR – Event 3
                        f_mtc_check_TP_GX_PCRF_RAR_02(vc_vxlte_monitor_components.gx, true); // (RAR – Event 4)
                        f_mtc_check_TP_GX_PGW_RAA_03(vc_vxlte_monitor_components.gx); // (RAA – Event 5)
                        f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 6)                        

                        f_mtc_check_TP_MW_PCSCF_ECO_BYE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 7

                        f_mtc_check_TP_MX_ECSCF_ECO_BYE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 9
                        f_mtc_check_TP_IC_IBCF_ECO_BYE_01(vc_vxlte_monitor_components.ic); // Event 10

                        f_mtc_check_TP_MX_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 15
                        f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 18
                        f_mtc_check_TP_GM_PCSCF_200OK_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 19

                        f_mtc_check_TP_GX_PCRF_ECO_CCA_02 ( vc_vxlte_monitor_components.gx, false ); // Check (CCA – Event 20)

                        f_mtc_userCheckCallTerminated(v_ueA); // Event 22
                        f_mtc_userCheckCallCancelled(v_psap); // Event 23

                        // Postamble
                        f_PO_user_home_deregistration(v_ueA);
                        f_PO_user_home_deregistration(v_psap);

                        //unmap/disconnect component ports
                        f_cf_user_down ( v_psap );
                        f_cf_user_down ( v_ueA );
                        f_cf_VxLteMonitor_Down();
                        f_cf_adapter_down ( );
                    }else{
                        //log...
                        setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
                    }
                } // End of TC TC_VoLTE_ECO_INT_DTC_02_02

                group f_TC_VoLTE_ECO_INT_DTC_02_02 {

                    function f_mtc_check_precond_TC_VoLTE_ECO_INT_DTC_02_02() runs on ImsTestCoordinator {
                        log("If the test case fails, please check the preconditions");
                     } // End of function f_mtc_check_precond_TC_VoLTE_ECO_INT_DTC_02_02

                } // End of f_TC_VoLTE_ECO_INT_DTC_02_02

                /**
                 * @desc    To demonstrate UE initiated emergency network detachment (emergency IP-CAN session termination) for a UE that is emergency registered to IMS and also has active emergency session
                 * @see ETSI TS 103 795-2 Clause 5.5.2    UE Emergency Network Detachment with Previously Established Emergency Registration & Emergency Session
                 * @remark This is option 3: PSAP is in PSTN network
                 */
                testcase TC_VoLTE_ECO_INT_DTC_02_03 ( ) runs on ImsTestCoordinator system IotSystemInterface {

                    var IotEquipmentUser v_ueA    := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency );
                    var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap );
                    var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY );
                    var ImsUserInfo v_infoPsap  := f_getImUser ( PX_PSAP );

                    f_setVxLteMonIterfacesAvailability();
                    //Check required monitor interfaces due to TD
                    if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME,
                                                              PX_DIAMETER_GX_INTERFACENAME,
                                                              PX_DIAMETER_RX_INTERFACENAME,
                                                              PX_SIP_MW_PE_INTERFACENAME, // E-CSCF -> IBCF
                                                              PX_SIP_IC_INTERFACENAME // IBCF -> IMS -> PSAP
                                                              })){
                        var SipMessage v_sip;

                        f_cf_createVxLteMonitor();

                        // map/connect component ports
                        f_cf_adapter_up ( );
                        f_cf_user_up ( v_ueA );
                        f_cf_VxLteMonitor_Up();

                        // Preamble
                        f_mtc_userRegistration(v_ueA, v_userInfoA);
                        if (PX_PSAP_REGISTERED) {
                            f_mtc_userRegistration(v_psap, v_infoPsap);
                        } else {
                            // TODO Check OPTIONS from PSAP to E-CSCF
                        }
                        f_mtc_check_precond_TC_VoLTE_ECO_INT_DTC_02_03();
                        f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1

                        // Test body
                        f_mtc_check_TP_GM_PCSCF_ECO_BYE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 2

                        //Rx/Gx exchange after BYE was received at P-CSCF
                        f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // (STR – Event 3
                        f_mtc_check_TP_GX_PCRF_RAR_02(vc_vxlte_monitor_components.gx, true); // (RAR – Event 4)
                        f_mtc_check_TP_GX_PGW_RAA_03(vc_vxlte_monitor_components.gx); // (RAA – Event 5)
                        f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 6)                        

                        f_mtc_check_TP_MW_PCSCF_ECO_BYE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 7

                        f_mtc_check_TP_MI_ECSCF_ECO_BYE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 11

                        f_mtc_check_TP_MI_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 17
                        f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 18
                        f_mtc_check_TP_GM_PCSCF_200OK_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 19

                        f_mtc_check_TP_GX_PCRF_ECO_CCA_02 ( vc_vxlte_monitor_components.gx, false ); // Check (CCA – Event 20)

                        f_mtc_userCheckCallTerminated(v_ueA); // Event 22
                        f_mtc_userCheckCallCancelled(v_psap); // Event 23

                        // Postamble
                        f_PO_user_home_deregistration(v_ueA);
                        f_PO_user_home_deregistration(v_psap);

                        //unmap/disconnect component ports
                        f_cf_user_down ( v_psap );
                        f_cf_user_down ( v_ueA );
                        f_cf_VxLteMonitor_Down();
                        f_cf_adapter_down ( );
                    }else{
                        //log...
                        setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
                    }
                } // End of TC TC_VoLTE_ECO_INT_DTC_02_03

                group f_TC_VoLTE_ECO_INT_DTC_02_03 {

                    function f_mtc_check_precond_TC_VoLTE_ECO_INT_DTC_02_03() runs on ImsTestCoordinator {
                        log("If the test case fails, please check the preconditions");
                     } // End of function f_mtc_check_precond_TC_VoLTE_ECO_INT_DTC_02_03

                } // End of f_TC_VoLTE_ECO_INT_DTC_02_03
            } // End of group EmergencySessionDetachment

        } // End of group EmergencyNetworkDetachment

    } // End of group Interoperability

    /**
      * @see ETSI TS 103 795-2 Clause 6    Test Descriptions (Roaming)
      */
    group Roaming {

        /**
         * @see ETSI TS 103 795-2 6.1    Network Attachment
         */
        group NetworkAttachment {

            group UENetworkAttachmentWithUSIM {
                /**
                 * @desc    Emergency Network Attachment and Establishment of the Emergency Bearer with USIM.
                 * On successful emergency attachment, the UE/IVS should discover the P-CSCF IP address.
                 * The EPC will create the Emergency Bearers which will allow communication only between the UE and the P-CSCF
                 * and allowed forwarding towards E-CSCF
                 * @see TS 124 229 [2], clause 9.2.1 and L.2.2.6; TS 129 212 [7], clauses 4.5.15 and 4a.5.12;
                 * TS 129 272 [8], clause 5.2.1.1 (MME shall proceed even if Update Location fails)
                 * 
                 */
                testcase TC_VoLTE_ECO_RMI_ATT_01 ( ) runs on ImsTestCoordinator system IotSystemInterface {

                    var IotEquipmentUser v_ueB    := f_cf_create_IotEquipmentUser ( c_userUE_B );
                    var ImsUserInfo v_userInfoB    := f_getImUser ( PX_EUT_B );

                    f_setVxLteMonIterfacesAvailability();
                    //Check required monitor interfaces due to TD
                    if (f_checkVxLteRequiredMonitorInterface({PX_DIAMETER_GX_INTERFACENAME,PX_DIAMETER_S6A_INTERFACENAME})){
                        f_cf_createVxLteMonitor();

                        // map/connect component ports
                        f_cf_adapter_up ( );
                        f_cf_user_up ( v_ueB );
                        f_cf_VxLteMonitor_Up();

                        // preamble
                        f_mtc_userRadioEnabled ( v_ueB, true, true ); // UE-B trigger an initial network_attachment by enabling radio interface of its mobile
                        // TODO: Check that user B starts initial network attachment
                        f_mtc_check_TP_S6A_MME_ULR_01 ( vc_vxlte_monitor_components.s6a, true ); // Check (ULR – Event 2)
                        f_mtc_check_TP_S6A_HSS_ECO_ULA_01 ( vc_vxlte_monitor_components.s6a); // Check (ULA – Event 3) 
                        f_mtc_check_TP_GX_PCRF_ECO_CCA_01 ( vc_vxlte_monitor_components.gx); // Check (CCR, CCA – Events 4, 5)

                        // postamble
                        f_mtc_userRadioEnabled ( v_ueB, false, true );

                        //unmap/disconnect component ports
                        f_cf_user_down ( v_ueB );
                        f_cf_VxLteMonitor_Down();
                        f_cf_adapter_down ( );
                    }else{
                        //log...
                        setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
                    }
                } // End of TC TC_VoLTE_ECO_RMI_ATT_01
            } // End of group UENetworkAttachmentWithUSIM

            group UENetworkAttachmentWithoutUSIM {
                /**
                 * @desc    Emergency Network Attachment and Establishment of the Emergency Bearer without USIM.
                 * On successful emergency attachment, the UE/IVS should discover the P-CSCF IP address.
                 * The EPC will create the Emergency Bearers which will allow communication only between the UE and the P-CSCF
                 * and allowed forwarding towards E-CSCF
                 * @see TS 124 229 [2], clause 9.2.1 and L.2.2.6; TS 129 212 [7], clauses 4.5.15 and 4a.5.12;
                 * TS 129 272 [8], clause 5.2.1.1 (MME shall proceed even if Update Location fails)
                 * 
                 */
                testcase TC_VoLTE_EMC_RMI_ATT_02 ( ) runs on ImsTestCoordinator system IotSystemInterface {

                    var IotEquipmentUser v_ueB    := f_cf_create_IotEquipmentUser ( c_userUE_B );
                    var ImsUserInfo v_userInfoB    := f_getImUser ( PX_EUT_B );

                    f_setVxLteMonIterfacesAvailability();
                    //Check required monitor interfaces due to TD
                    if (f_checkVxLteRequiredMonitorInterface({PX_DIAMETER_GX_INTERFACENAME,PX_DIAMETER_S6A_INTERFACENAME})){
                        f_cf_createVxLteMonitor();

                        // map/connect component ports
                        f_cf_adapter_up ( );
                        f_cf_user_up ( v_ueB );
                        f_cf_VxLteMonitor_Up();

                        // preamble
                        f_mtc_userRadioEnabled ( v_ueB, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile
                        // TODO Check that user B starts initial network attachment
                        f_mtc_check_TP_S6A_MME_ULR_01 ( vc_vxlte_monitor_components.s6a, true ); // Check (ULR – Event 2)
                        f_mtc_check_TP_S6A_HSS_ECO_ULA_01 ( vc_vxlte_monitor_components.s6a);        // Check (ULA – Event 3) 
                        f_mtc_check_TP_GX_PCRF_EMC_CCA_01 ( vc_vxlte_monitor_components.gx); // Check (CCR, CCA – Events 4, 5)

                        // postamble
                        f_mtc_userRadioEnabled ( v_ueB, false, true );

                        //unmap/disconnect component ports
                        f_cf_user_down ( v_ueB );
                        f_cf_VxLteMonitor_Down();
                        f_cf_adapter_down ( );
                    }else{
                        //log...
                        setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
                    }
                } // End of TC TC_VoLTE_ECO_RMI_ATT_02
            } // End of group UENetworkAttachmentWithoutUSIM

        } // End of group NetworkAttachment

        /**
         * @see ETSI TS 103 795-2 Clause 6.2    IMS Emergency Registration in a visited network
         */
        group IMSEmergencyRegistration {

            /**
             * @desc    To attempt initial emergency registration via the established emergency bearer. In this case, the emergency registration is not successful due to not accepted UE credentials. Emergency call can be established without emergency registration.
             * @see ETSI TS 103 795-2 Clause 6.2.1    IMS Emergency Registration - Rejection
             * @remark This is option 1: Emergency registration rejected by the visited network
             */
            testcase TD_VoLTE_ECO_RMI_REG_01_01() runs on ImsTestCoordinator system IotSystemInterface {

                var IotEquipmentUser v_ueA  := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency );
                var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A_EMERGENCY );

                f_setVxLteMonIterfacesAvailability();
                //Check required monitor interfaces due to TD
                if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME,
                                                          PX_SIP_MW_PI_INTERFACENAME,
                                                          PX_DIAMETER_CX_SH_INTERFACENAME,
                                                          PX_DIAMETER_CX_IH_INTERFACENAME,
                                                          PX_DIAMETER_RX_INTERFACENAME}))
                {  
                    f_cf_createVxLteMonitor();

                    // map/connect component ports
                    f_cf_adapter_up ( );
                    f_cf_user_up ( v_ueA );
                    f_cf_VxLteMonitor_Up();

                    // preamble
                    f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile

                    // Test body
                    f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_04(vc_vxlte_monitor_components.gmA); // Events 1, 8
                    

                    f_mtc_check_TP_RX_PCSCF_ECO_AAR_01(vc_vxlte_monitor_components.rx, true);// Event 2 //true because AAR repeated in next TP
                    f_mtc_check_TP_RX_PCRF_ECO_AAA_01(vc_vxlte_monitor_components.rx); // Event 3
                    f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_04(vc_vxlte_monitor_components.mwPI); // Event 4, 7
                    f_mtc_check_TP_CX_HSS_UAA_03(f_getCxInterface(PX_DIAMETER_CX_SINGLE_INTERFACE));// Event 5, 6

                    // postamble
                    f_PO_user_home_deregistration ( v_ueA );
                    f_mtc_userRadioEnabled ( v_ueA, false, true );

                    //unmap/disconnet component ports
                    f_cf_user_down ( v_ueA );
                    f_cf_VxLteMonitor_Down();
                    f_cf_adapter_down ( );
                }else{
                    //log...
                    setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs");
                }
            } // End of testcase TD_VoLTE_ECO_RMI_REG_01_01

            /**
             * @desc    To attempt initial emergency registration via the established emergency bearer. In this case, the emergency registration is not successful due to not accepted UE credentials. Emergency call can be established without emergency registration.
             * @see ETSI TS 103 795-2 Clause 6.2.1    IMS Emergency Registration - Rejection
             * @remark This is option 1: Emergency registration rejected - UE not supporting GIBA
             */
            testcase TD_VoLTE_ECO_RMI_REG_01_02() runs on ImsTestCoordinator system IotSystemInterface {

                var IotEquipmentUser v_ueA  := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency );
                var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A_EMERGENCY );

                f_setVxLteMonIterfacesAvailability();
                //Check required monitor interfaces due to TD
                if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME,
                                                          PX_SIP_MW_PI_INTERFACENAME,
                                                          PX_DIAMETER_CX_SH_INTERFACENAME,
                                                          PX_DIAMETER_CX_IH_INTERFACENAME,
                                                          PX_DIAMETER_RX_INTERFACENAME}))
                {  
                    f_cf_createVxLteMonitor();

                    // map/connect component ports
                    f_cf_adapter_up ( );
                    f_cf_user_up ( v_ueA );
                    f_cf_VxLteMonitor_Up();

                    // preamble
                    f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile

                    // Test body
                    f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_05(vc_vxlte_monitor_components.gmA); // Events 1, 10
                    

                    f_mtc_check_TP_RX_PCSCF_ECO_AAR_01(vc_vxlte_monitor_components.rx, true);// Event 2 //true because AAR repeated in next TP
                    f_mtc_check_TP_RX_PCRF_ECO_AAA_01(vc_vxlte_monitor_components.rx); // Event 3
                    f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_05(vc_vxlte_monitor_components.mwPI); // Event 4, 9

                    f_mtc_check_TP_CX_HSS_UAA_03(f_getCxInterface(PX_DIAMETER_CX_SINGLE_INTERFACE));// Event 5, 6

                    // postamble
                    f_PO_user_home_deregistration ( v_ueA );
                    f_mtc_userRadioEnabled ( v_ueA, false, true );

                    //unmap/disconnet component ports
                    f_cf_user_down ( v_ueA );
                    f_cf_VxLteMonitor_Down();
                    f_cf_adapter_down ( );
                }else{
                    //log...
                    setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs");
                }
            } // End of testcase TD_VoLTE_ECO_RMI_REG_01_02

        } // End of group IMSEmergencyRegistration
        
         /**
         * @see ETSI TS 103 795-3 Clause 6.3    Emergency Session Establishment(Roaming)
         */
        group EmergencySessionEstablishmentRoaming {
3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916
        	   
			/**
		 	* @see ETSI TS 103 795-3 Clause 6.3.1    Roaming UE calling PSAP with emergency registration
		 	*/      
			group RoamingUECallingPSAPWithEmergencyRegistration {   
				
				/**
				 * @desc    To demonstrate the establishment of dedicated bearers at the originating EPC due to SIP roaming emergency session establishment within an emergency registration.
				 *          PSAP is located in the IM CN subsystem of IMS A
				 * @see ETSI TS 103 795-2 Clause 6.3.1    Roaming UE calling PSAP with emergency registration
				 */
				testcase TD_VoLTE_ECO_RMI_INI_01() runs on ImsTestCoordinator system IotSystemInterface {

					var IotEquipmentUser v_ueB  := f_cf_create_IotEquipmentUser ( c_userUE_B_emergency );
					var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap );
					var ImsUserInfo v_userInfoB := f_getImUser ( PX_EUT_B_EMERGENCY );
					var ImsUserInfo v_infoPsap  := f_getImUser ( PX_PSAP );

					f_setVxLteMonIterfacesAvailability();
					//Check required monitor interfaces due to TD
					if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME,
															  PX_DIAMETER_GX_INTERFACENAME,
															  PX_DIAMETER_RX_INTERFACENAME,
															  PX_SIP_MW_PE_INTERFACENAME,
															  PX_SIP_MM_B_PSAP_INTERFACENAME // E-CSCCF -> PSAP
															  }))
					{
						var SipMessage v_sip;

						f_cf_createVxLteMonitor();

						// map/connect component ports
						f_cf_adapter_up ( );
						f_cf_user_up ( v_ueB );
						f_cf_user_up ( v_psap );
						f_cf_VxLteMonitor_Up();

						// Preamble
						f_mtc_userRegistration(v_ueB, v_userInfoB);
						if (PX_PSAP_REGISTERED) {
							f_mtc_userRegistration(v_psap, v_infoPsap);
						} else {
							// TODO Check OPTIONS from PSAP to E-CSCF
						}
						f_mtc_check_precond_TD_VoLTE_ECO_RMI_INI_01();

						// Test body
						if (not PX_ECALL) {
							f_mtc_check_TP_GM_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.gmB, -, v_sip); // INVITE Event 1
						} else {
							f_mtc_check_TP_GM_PCSCF_ECO_INVITE_04(vc_vxlte_monitor_components.gmB, -, v_sip); // INVITE Event 1
						}
						f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmB, -, v_sip);

						//Rx/Gx exchange after INVITE (SDP) was received at P-CSCF
						f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx);// Event 2
						f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 3
						f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx);  // Event 4
						f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 5
						f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 7,8
						f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 6,9

						f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10
						f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip);

						f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 11
						f_mtc_check_TP_MM_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip);

						// 183 Session Progress
						f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 183 In Progress Event 12
						f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 13
						f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmB, -, v_sip); // Event 18

						//Rx/Gx exchange after 183(SDP) was received at P-CSCF
						f_mtc_check_TP_RX_PCSCF_AAR_04(vc_vxlte_monitor_components.rx);// Event 14
						f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 15
						f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx);  // Event 16
						f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 17

						f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 180 Ringing – Event 20
						f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 21
						f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmB, -, v_sip); // Event 22

						f_mtc_userCheckRinging(v_psap); // Event 19
						f_mtc_userCheckPeerIsRinging(v_ueB); // Event 19
						f_mtc_userAnswerCall(v_psap);

						f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 200 OK Event 23
						f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24
						f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmB, -, v_sip); // Event 25

						f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmB, -, v_sip); // ACK Event 26 
						f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // ACK Event 27
						f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // ACK – Event 28

						f_mtc_userCheckCallEstablished(v_ueB); // Event 29
						f_mtc_userCheckCallEstablished(v_psap); // Event 29

						// Postamble
						f_mtc_EndCall(v_ueB);
						f_PO_user_home_deregistration(v_ueB);
						f_PO_user_home_deregistration(v_psap);
						//f_cf_int_call_down(v_config);

						//unmap/disconnect component ports
						f_cf_user_down ( v_psap );
						f_cf_user_down ( v_ueB );
						f_cf_VxLteMonitor_Down();
					}else{
						//log...
						setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
					}
					f_cf_adapter_down ( );
				} // End of TC TD_VoLTE_ECO_INT_INI_01

				group f_TD_VoLTE_ECO_RMI_INI_01 {

					function f_mtc_check_precond_TD_VoLTE_ECO_RMI_INI_01() runs on ImsTestCoordinator {
						log("If the test case fails, please check the preconditions");
						// TODO Add real code to check pre-conditions
					 } // End of function f_mtc_check_precond_TD_VoLTE_ECO_RMI_INI_01

				} // End of group f_TD_VoLTE_ECO_RMI_INI_01
			} // End of group RoamingUECallingPSAPWithEmergencyRegistration

			/**
		 	* @see ETSI TS 103 795-3 Clause 6.3.2    Roaming UE calling PSAP with non-emergency registration
		 	*/      			
			group RoamingUECallingPSAPWithNonEmergencyRegistration { 
				
				/**
				 * @desc    To demonstrate the establishment of dedicated bearers at the originating EPC due to roaming SIP emergency session establishment within non-emergency registration.
				 *          PSAP is located in the IM CN subsystem of IMS A
				 * @see ETSI TS 103 795-2 Clause 6.3.2.1    Roaming UE calling PSAP in same network
				 */
				testcase TD_VoLTE_ECO_RMI_INI_02() runs on ImsTestCoordinator system IotSystemInterface {

					var IotEquipmentUser v_ueB  := f_cf_create_IotEquipmentUser ( c_userUE_B_emergency );
					var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap );
					var ImsUserInfo v_userInfoB := f_getImUser ( PX_EUT_B ); //non-emergency registration
					var ImsUserInfo v_infoPsap  := f_getImUser ( PX_PSAP );

					f_setVxLteMonIterfacesAvailability();
					//Check required monitor interfaces due to TD
					if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMB_INTERFACENAME,
															  PX_DIAMETER_GX_INTERFACENAME,
															  PX_DIAMETER_RX_INTERFACENAME,
															  PX_SIP_MW_PE_INTERFACENAME,
															  PX_SIP_MM_B_PSAP_INTERFACENAME // E-CSCCF -> PSAP
															  }))
					{
						var SipMessage v_sip;

						f_cf_createVxLteMonitor();

						// map/connect component ports
						f_cf_adapter_up ( );
						f_cf_user_up ( v_ueB );
						f_cf_user_up ( v_psap );
						f_cf_VxLteMonitor_Up();

						// Preamble
						f_mtc_userRegistration(v_ueB, v_userInfoB);
						if (PX_PSAP_REGISTERED) {
							f_mtc_userRegistration(v_psap, v_infoPsap);
						} else {
							// TODO Check OPTIONS from PSAP to E-CSCF
						}
						f_mtc_check_precond_TD_VoLTE_ECO_RMI_INI_02();

						// Test body
						// Test body
						if (not PX_ECALL) {
							f_mtc_check_TP_GM_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.gmB, -, v_sip); // INVITE Event 1
						} else {
							f_mtc_check_TP_GM_PCSCF_ECO_INVITE_04(vc_vxlte_monitor_components.gmB, -, v_sip); // INVITE Event 1
						}
						f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmB, -, v_sip);

						//Rx/Gx exchange after INVITE (SDP) was received at P-CSCF
						f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx);// Event 2
						f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 3
						f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx);  // Event 4
						f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 5
						f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 7,8
						f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 6,9

						f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10
						f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip);

						f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 11
						f_mtc_check_TP_MM_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip);

						// 183 Session Progress
						f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 183 In Progress Event 12
						f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 13
						f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmB, -, v_sip); // Event 18

						//Rx/Gx exchange after 183(SDP) was received at P-CSCF
						f_mtc_check_TP_RX_PCSCF_AAR_04(vc_vxlte_monitor_components.rx);// Event 14
						f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 15
						f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx);  // Event 16
						f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 17

						f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 180 Ringing – Event 20
						f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 21
						f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmB, -, v_sip); // Event 22

						f_mtc_userCheckRinging(v_psap); // Event 19
						f_mtc_userCheckPeerIsRinging(v_ueB); // Event 19
						f_mtc_userAnswerCall(v_psap);

						f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 200 OK Event 23
						f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24
						f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmB, -, v_sip); // Event 25

						f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmB, -, v_sip); // ACK Event 26 
						f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // ACK Event 27
						f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // ACK – Event 28

						f_mtc_userCheckCallEstablished(v_ueB); // Event 29
						f_mtc_userCheckCallEstablished(v_psap); // Event 29

						// Postamble
						f_mtc_EndCall(v_ueB);
						f_PO_user_home_deregistration(v_ueB);
						f_PO_user_home_deregistration(v_psap);
						//f_cf_int_call_down(v_config);

						//unmap/disconnect component ports
						f_cf_user_down ( v_psap );
						f_cf_user_down ( v_ueB );
						f_cf_VxLteMonitor_Down();
					}else{
						//log...
						setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
					}
					f_cf_adapter_down ( );
				} // End of TC TD_VoLTE_ECO_RMI_INI_02

				group f_TD_VoLTE_ECO_RMI_INI_02 {

					function f_mtc_check_precond_TD_VoLTE_ECO_RMI_INI_02() runs on ImsTestCoordinator {
						log("If the test case fails, please check the preconditions");
						// TODO Add real code to check pre-conditions
					 } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_02

				} // End of group f_TD_VoLTE_ECO_RMI_INI_02
				
				
				/**
				 * @desc    To demonstrate the rejection of roaming UE emergency session establishment when the 
				 * 			P-CFCF is in home operator's network within non-emergency registration.
				 *          P-CFCF is located in the IM CN subsystem of IMS A
				 * @see ETSI TS 103 795-2 Clause 6.3.2.2    Roaming UE calling PSAP in home operator's network
				 */
				testcase TD_VoLTE_ECO_RMI_INI_03() runs on ImsTestCoordinator system IotSystemInterface {
					
					var IotEquipmentUser v_ueA  := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency );
					var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); //non-emergency registration

					f_setVxLteMonIterfacesAvailability();
					//Check required monitor interfaces due to TD
					if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME,
															  PX_DIAMETER_GX_INTERFACENAME,
															  PX_DIAMETER_RX_INTERFACENAME
															  }))
					{
						var SipMessage v_sip;

						f_cf_createVxLteMonitor();

						// map/connect component ports
						f_cf_adapter_up ( );
						f_cf_user_up ( v_ueA );
						f_cf_VxLteMonitor_Up();

						// Preamble
						//registration is not needed
						
						//similar to TC_VxLTE_RMI_ATT_01 UE A has perform a network_attachment
						f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile

						// Test body
						f_mtc_check_TP_GM_PCSCF_ECO_INVITE_05(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 2
						f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip);

						// 380 (Alternative Service)
						f_mtc_check_TP_GM_PCSCF_ECO_380ALTSRV_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 3
						f_mtc_check_TP_GM_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 4

						//unmap/disconnect component ports
						f_cf_user_down ( v_ueA );
						f_cf_VxLteMonitor_Down();
					}else{
						//log...
						setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
					}
					f_cf_adapter_down ( );
				} // End of TC TD_VoLTE_ECO_RMI_INI_02

				group f_TD_VoLTE_ECO_RMI_INI_03 {

					function f_mtc_check_precond_TD_VoLTE_ECO_RMI_INI_03() runs on ImsTestCoordinator {
						log("If the test case fails, please check the preconditions");
						// TODO Add real code to check pre-conditions
					 } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_02

				} // End of group f_TD_VoLTE_ECO_RMI_INI_03
				
				
				/**
				 * @desc    To demonstrate the establishment of dedicated bearers for a roaming UE without any registration.
				 *          PSAP is located in the IM CN subsystem of IMS A
				 * @see ETSI TS 103 795-2 Clause 6.3.2.3    Roaming UE calling PSAP with non-registration
				 */
				testcase TD_VoLTE_ECO_RMI_INI_04() runs on ImsTestCoordinator system IotSystemInterface {
					var IotEquipmentUser v_ueB  := f_cf_create_IotEquipmentUser ( c_userUE_B_emergency );
					var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap );
					var ImsUserInfo v_infoPsap  := f_getImUser ( PX_PSAP );

					f_setVxLteMonIterfacesAvailability();
					//Check required monitor interfaces due to TD
					if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMB_INTERFACENAME,
															  PX_DIAMETER_GX_INTERFACENAME,
															  PX_DIAMETER_RX_INTERFACENAME,
															  PX_SIP_MW_PE_INTERFACENAME,
															  PX_SIP_MM_B_PSAP_INTERFACENAME // E-CSCCF -> PSAP
															  }))
					{
						var SipMessage v_sip;

						f_cf_createVxLteMonitor();

						// map/connect component ports
						f_cf_adapter_up ( );
						f_cf_user_up ( v_ueB );
						f_cf_user_up ( v_psap );
						f_cf_VxLteMonitor_Up();

						// Preamble
						//UE B non-registered
						if (PX_PSAP_REGISTERED) {
							f_mtc_userRegistration(v_psap, v_infoPsap);
						} else {
							// TODO Check OPTIONS from PSAP to E-CSCF
						}
						f_mtc_check_precond_TD_VoLTE_ECO_RMI_INI_04();

						// Test body
						f_mtc_check_TP_GM_PCSCF_ECO_INVITE_03(vc_vxlte_monitor_components.gmB, -, v_sip); // INVITE Event 1
						f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmB, -, v_sip);

						//Rx/Gx exchange after INVITE (SDP) was received at P-CSCF
						f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx);// Event 2
						f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 3
						f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx);  // Event 4
						f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 5
						f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 7,8
						f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 6,9

						f_mtc_check_TP_MW_PCSCF_ECO_INVITE_03(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10
						f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip);

						f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 11
						f_mtc_check_TP_MM_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip);

						// 183 Session Progress
						f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 183 In Progress Event 12
						f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 13
						f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmB, -, v_sip); // Event 18

						//Rx/Gx exchange after 183(SDP) was received at P-CSCF
						f_mtc_check_TP_RX_PCSCF_AAR_04(vc_vxlte_monitor_components.rx);// Event 14
						f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 15
						f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx);  // Event 16
						f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 17

						f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 180 Ringing – Event 22
						f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24
						f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmB, -, v_sip); // Event 25

						f_mtc_userCheckRinging(v_psap); // Event 19
						f_mtc_userCheckPeerIsRinging(v_ueB); // Event 19
						f_mtc_userAnswerCall(v_psap); // Event 26

						f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 200 OK Event 23
						f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24
						f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmB, -, v_sip); // Event 25

						f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmB, -, v_sip); // Event 26 
						f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 27
						f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // ACK – Event 28

						f_mtc_userCheckCallEstablished(v_ueB); // Event 29
						f_mtc_userCheckCallEstablished(v_psap); // Event 29

						// Postamble
						f_mtc_EndCall(v_ueB);
						f_PO_user_home_deregistration(v_ueB);
						f_PO_user_home_deregistration(v_psap);
						//f_cf_int_call_down(v_config);

						//unmap/disconnect component ports
						f_cf_user_down ( v_psap );
						f_cf_user_down ( v_ueB );
						f_cf_VxLteMonitor_Down();
					}else{
						//log...
						setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs")
					}
					f_cf_adapter_down ( );
				}
				group f_TD_VoLTE_ECO_RMI_INI_04 {

					function f_mtc_check_precond_TD_VoLTE_ECO_RMI_INI_04() runs on ImsTestCoordinator {
						log("If the test case fails, please check the preconditions");
						// TODO Add real code to check pre-conditions
					 } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_04

				} // End of group f_TD_VoLTE_ECO_RMI_INI_02
				
				
				
				
			} // End of group RoamingUECallingPSAPWithNonEmergencyRegistration
				
        } // End of group EmergencySessionEstablishmentRoaming

    } // End of group Roaming

} // End of module AtsImsIot_Emergency