From 1272237e7de55c36ed27fc3b039baf234cb8a1e2 Mon Sep 17 00:00:00 2001 From: Yann Garcia <yann.garcia@fscom.fr> Date: Wed, 31 May 2023 11:47:32 +0200 Subject: [PATCH] Finalyze TD_VoLTE_ECO_INT_INI_01_01 --- ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn | 288 +++++++++++- .../AtsImsIot_TP_behavior_MW_EB.ttcn | 428 +++++++++++++++++ .../AtsImsIot_TP_behavior_MW_EC.ttcn | 433 ++++++++++++++++++ ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn | 257 +++++++++++ 4 files changed, 1392 insertions(+), 14 deletions(-) create mode 100644 ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EB.ttcn create mode 100644 ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn diff --git a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn index ab2dbcb..4c3eb52 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn @@ -9,15 +9,15 @@ module AtsImsIot_Emergency { // LibCommon // LibSip // LibIms - import from LibIms_UpperTester { type ImsUserInfo }; + import from LibIms_UpperTester all; // LibIot - import from LibIot_TestInterface { type IotEquipmentUser }; - import from LibIot_TestConfiguration { function f_cf_create_IotEquipmentUser }; - import from LibIot_PIXITS { modulepar PX_EUT_A, PX_EUT_B, PX_EUT_C }; + 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 { function f_getImUser }; + import from AtsImsIot_Functions all; // ImsIot import from AtsImsIot_TestConfiguration all; import from AtsImsIot_TestSystem all; @@ -26,6 +26,8 @@ module AtsImsIot_Emergency { 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_MW_EC all; + import from AtsImsIot_TP_behavior_MW_EB all; import from AtsImsIot_TP_behavior_IC all; import from AtsImsIot_TP_behavior_CX all; import from AtsImsIot_TP_behavior_GX all; @@ -115,7 +117,7 @@ module AtsImsIot_Emergency { f_cf_adapter_down ( ); }else{ //log... - setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs"); } } // End of testcase TD_VoLTE_ECO_INT_REG_01 @@ -171,7 +173,7 @@ module AtsImsIot_Emergency { f_cf_adapter_down ( ); }else{ //log... - setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs"); } } // End of testcase TD_VoLTE_ECO_INT_REG_02 @@ -182,15 +184,262 @@ module AtsImsIot_Emergency { */ group EmergencySessionEmergencyBearerOperations { - } // End of group EmergencySessionEmergencyBearerOperations - - /** - * @see ETSI TS 103 795-2 Clause 5.4 Emergency Deregistration - */ - group EmergencyNetworkDetachment { - group EmergencySessionEstablishment { + /** + * @desc To demonstrate the establishment of dedicated bearers at the originating EPC due to SIP emergency session establishment. + * On successful emergency call setup with UE-A attached to EPC A, the P-CSCF should derive from the SDP offer and answer, descriptions of the Service Data Flow + * @see ETSI TS 103 795-2 Clause 5.3.1.2 UE calling PSAP with emergency registration + * @remark This is option1: IBCF is connect to another network and the interface between the IBCF and the PSAP is the Ic interface + */ + testcase TD_VoLTE_ECO_INT_INI_01_01 ( ) 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 ); + + 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_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_user_up ( v_psap ); + f_cf_VxLteMonitor_Up(); + + // Preamble +// f_mtc_userRegistration(v_ueA, v_userInfoA); +// f_mtc_userRegistration(v_psap, v_userInfoB); + f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01_01(); + + // Test body + //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); + + + f_mtc_check_TP_GM_PCSCF_INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 1 + f_mtc_check_TP_GM_PCSCF_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_ECSCF_INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 + f_mtc_check_TP_MW_ECSCF_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); + + f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mw??, -, v_sip); // Event 11 + f_mtc_check_TP_MW_IBCF_100Trying_01(vc_vxlte_monitor_components.mw??, -, 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 + f_mtc_check_TP_IC_IBCF_183RESP_01(vc_vxlte_monitor_components.ic,-); // 183 Event 13 + + // 183 Session Progress + f_mtc_check_TP_MW_IBCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 14 + f_mtc_check_TP_MW_ECSCF_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 + + f_mtc_check_TP_IC_IBCF_180RINGING_01(vc_vxlte_monitor_components.ic, true); // 180 Ringing – Event 22 + f_mtc_check_TP_MW_IBCF_180RINGING_01(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 23 + f_mtc_check_TP_MW_ECSCF_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_MW_IBCF_200OK_01(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 27 + f_mtc_check_TP_MW_ECSCF_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_ECSCF_ACK_01(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 31 + f_mtc_check_TP_MW_IBSCF_ACK_01(vc_vxlte_monitor_components.mwPS, -, 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_01_01 + + group f_TD_VoLTE_ECO_INT_INI_01_01 { + + function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01_01() 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_01_01 + + } // End of f_TD_VoLTE_ECO_INT_INI_01_01 + + /** + * @desc To demonstrate the establishment of dedicated bearers at the originating EPC due to SIP emergency session establishment. + * On successful emergency call setup with UE-A attached to EPC A, the P-CSCF should derive from the SDP offer and answer, descriptions of the Service Data Flow + * @see ETSI TS 103 795-2 Clause 5.3.1.2 UE calling PSAP with 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_01_02() 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 ); + + 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_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MM_PSAP_INTERFACENAME // IBCF -> 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_check_precond_TD_VoLTE_ECO_INT_INI_01(); + + // Test body + //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); + + + f_mtc_check_TP_GM_PCSCF_INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 1 + f_mtc_check_TP_GM_PCSCF_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_ECSCF_INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 + f_mtc_check_TP_MW_ECSCF_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); + + f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mw??, -, v_sip); // Event 11 + f_mtc_check_TP_MW_IBCF_100Trying_01(vc_vxlte_monitor_components.mw??, -, v_sip); + + f_mtc_check_TP_MM_PSAP_INVITE_01(vc_vxlte_monitor_components.mwB_PSAP, true); // INVITE Event 12 + + // 183 Session Progress + f_mtc_check_TP_MM_PSAP_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // Event 13 + f_mtc_check_TP_MW_ECSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 14 + f_mtc_check_TP_MW_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 15 + f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20 + + // PRACK after 183 Session Progress: require field is present + // FIXME Add check of requires SIP message header to check PRACK + //f_mtc_check_TP_MW_PCSCF_PRACK_01(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 15 + //f_mtc_check_TP_GM_PCSCF_PRACK_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 + + f_mtc_check_TP_MM_PSAP_1XXRESP_01(vc_vxlte_monitor_components.ic); // 180 Ringing – Event 22 + // FIXME f_mtc_check_TP_???_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 23 + f_mtc_check_TP_MW_ECSCF_180RINGING_01(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 24 + f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25 + + // PRACK after 180 Session Progress: require field is present + // FIXME Add check of requires SIP message header to check PRACK + // f_mtc_check_TP_MW_PCSCF_PRACK_01(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 15 + // f_mtc_check_TP_GM_PCSCF_PRACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20 + + 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 25 + f_mtc_check_TP_MM_PSAP_2XXRESP_03(vc_vxlte_monitor_components.ic); // 200 OK – Event 26 + // FIXME f_mtc_check_TP_???_2XXRESP_03(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 27 + f_mtc_check_TP_MW_ECSCF_200OK_01(vc_vxlte_monitor_components.mwPS, -, 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_ECSCF_ACK_01(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 31 + // FIXME f_mtc_check_TP_???_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 32 + f_mtc_check_TP_MM_PSAP_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_01_02 + + group f_TD_VoLTE_ECO_INT_INI_01_02 { + + 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_TD_VoLTE_ECO_INT_INI_01_02 + + } // End of f_TD_VoLTE_ECO_INT_INI_01 + } // End of group EmergencySessionEstablishment group EmergencySessionRelease { @@ -201,6 +450,17 @@ module AtsImsIot_Emergency { } // End of group EmergencySessionAbortOrReject + } // End of group EmergencySessionEmergencyBearerOperations + + /** + * @see ETSI TS 103 795-2 Clause 5.4 Emergency Deregistration + */ + group EmergencyNetworkDetachment { + + group EmergencySessionDetachment { + + } // End of group EmergencySessionDetachment + } // End of group EmergencyNetworkDetachment } // End of group Interoperability diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EB.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EB.ttcn new file mode 100644 index 0000000..850ca5a --- /dev/null +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EB.ttcn @@ -0,0 +1,428 @@ +/** + * @author TTF T010 + * @version $Id$ + * @desc This module provides the TP behaviour functions at Mw interface at E-CSCF/IBCF + */ + +module AtsImsIot_TP_behavior_MW_EB { + + // LibIms + import from LibIms_Templates all; + import from LibIms_UpperTester all; + // LibIot + import from LibIot_TypesAndValues all; + import from LibIot_Functions all; + import from LibIot_TestInterface all; + import from LibIot_PIXITS all; + // LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_Templates all; + import from LibSip_Common all; + import from LibSip_SDPTypes all; + // LibMsrp + import from LibMsrp_TypesAndValues all; + import from LibMsrp_Functions all; + import from LibMsrp_Templates all; + // AtsImsIot + import from AtsImsIot_TestSystem all; + import from AtsImsIot_Templates_MW all; + import from AtsImsIot_Templates all; + import from AtsImsIot_TypesAndValues all; + import from AtsImsIot_Functions all; + + group imsInvite { + + /** + * @desc Verify that the E-CSCF successfully processes an initial INVITE (Originating Leg).. + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the PSAP entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the PSAP entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_PSAP_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_E_CSCF_A entity sends an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_PSAP_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * to the IMS_IBCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_IBCF_INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var charstring v_EUT_A_Addr := f_GetEUTScscfAddress_1();//f_GetEUTScscfAddress(PX_EUT_A); + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mdw_TP_MW_IBCF_INVITE_01( + ( + mw_SipUrl_Host(v_EUT_A_Addr) //f_GetEUTScscfIpAddress(PX_EUT_A) + ) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MW_IBCF_INVITE_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_IBCF_INVITE_01 + + } // End of group imsInvite + + group ims100Trying { + + /** + * @desc Verify that the E-CSCF successfully processes a 100 (Trying) provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the PSAP entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the PSAP entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a 100_Trying + * from the IMS_IBCF_A entity + * } + * then { + * the IMS_E_CSCF_A entity sends a 100_Trying + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_IBSCF_100Trying_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 100 TRYING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MW_IBCF_100Trying_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_100Trying_Base) }, + { 0, omit }, + "TP_MW_IBCF_100Trying_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_IBSCF_100Trying_01 + + } // End of group ims100Trying + + group ims180Ringing { + + /** + * @desc Verify that the E-CSCF successfully processes a 180 (Ringing) provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the PSAP entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the PSAP entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a 180_Ringing containing + * From indicating value PX_PSAP_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_PSAP_CALLID, + * Via indicating value PX_PSAP_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE + * ; + * from the IMS_IBCF_A entity + * } + * then { + * the IMS_E_CSCF_A entity sends a 180_Ringing containing + * From indicating value PX_PSAP_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_PSAP_CALLID, + * Via indicating value PX_PSAP_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE + * ; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_IBCF_180RINGING_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 180 RINGING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MW_IBCF_180Ringing_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + mw_To_NameAddr_TelUrl( + -, + p_sip.request.msgHeader.toField.addressField.addrSpecUnion.components.tel.subscriber + ))) + }, + { mw_SipResponse(mw_180Ringing_Base) }, + { 0, omit }, + "TP_MW_IBCF_180RINGING_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_IBCF_180RINGING_01 + + } // End of group ims180Ringing + + group ims183SessionProgress { + + /** + * @desc Verify that the E-CSCF successfully processes a 183 (Ringing) provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the PSAP entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the PSAP entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a 183_SessionProgress containing + * From indicating value PX_SAP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_SAP_CALLID, + * Via indicating value PX_PSAP_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE + * ; + * from the IMS_IBCF_A entity + * } + * then { + * the IMS_E_CSCF_A entity sends a 183_SessionProgress containing + * From indicating value PX_PSAP_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_PSAP_CALLID, + * Via indicating value PX_PSAP_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE + * ; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_IBCF_183SESSION_PROGRESS_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 183 SESSION_PROGRESS + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MW_IBCF_183SessionProgress_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_183SessionProgress_Base) }, + { 0, omit }, + "TP_MW_IBCF_183SESSION_PROGRESS_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_IBCF_183SESSION_PROGRESS_01 + + } // End of group ims183SessionProgress + + group ims200Ok { + + /** + * @desc Verify that the E-CSCF successfully processes a 200 (OK) provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the PSAP entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the PSAP entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_EP_CSCF_A entity receives a 200_Ok containing + * From indicating value PX_PSAP_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_PSAP_CALLID, + * Via indicating value PX_PSAP_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * from the IMS_IBCF_A entity + * } + * then { + * the IMS_E_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_PSAP_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_PSAP_CALLID, + * Via indicating value PX_PSAP_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE, + * PChargingVector, + * PChargingFunctionAddresses, + * PPreferredIdentity + * ; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_IBCF_200OK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check the 200 OK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + ( + mw_To_NameAddr_TelUrl({quotedString:=f_getSipUserId(PX_EUT_B).publicId}), + mw_To_AddrUnion_TelUrl(f_getTelUserId(PX_EUT_B).publicId), + p_sip.request.msgHeader.toField + ) + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MW_IBCF_200OK_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + } + } // End of function f_mtc_check_TP_MW_IBCF_200OK_01 + + } // End of group ims200Ok + + group imsAck { + + /** + * @desc Verify that the E-CSCF successfully processes a ACK provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the PSAP entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the PSAP entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives an ACK containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_PSAP_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_E_CSCF_A entity sends an ACK containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_PSAP_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the IMS_IBCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_IBCF_ACK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the ACK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_IBCF_ACK_01( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_ACK_Request_Base) }, + { 0, omit }, + "TP_MW_IBCF_ACK_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_IBCF_ACK_01 + + } // End of group imsAck + +} // End of module AtsImsIot_TP_behavior_MW_EB \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn new file mode 100644 index 0000000..83ca8b7 --- /dev/null +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn @@ -0,0 +1,433 @@ +/** + * @author TTF T010 + * @version $Id$ + * @desc This module provides the TP behaviour functions at Mw interface at P-CSCF/E-CSCF + */ + +module AtsImsIot_TP_behavior_MW_EC { + + // LibIms + import from LibIms_Templates all; + import from LibIms_UpperTester all; + // LibIot + import from LibIot_TypesAndValues all; + import from LibIot_Functions all; + import from LibIot_TestInterface all; + import from LibIot_PIXITS all; + // LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_Templates all; + import from LibSip_Common all; + import from LibSip_SDPTypes all; + // LibMsrp + import from LibMsrp_TypesAndValues all; + import from LibMsrp_Functions all; + import from LibMsrp_Templates all; + // AtsImsIot + import from AtsImsIot_TestSystem all; + import from AtsImsIot_Templates_MW all; + import from AtsImsIot_Templates all; + import from AtsImsIot_TypesAndValues all; + import from AtsImsIot_Functions all; + + group imsInvite { + + /** + * @desc Verify that the P-CSCF successfully processes an initial INVITE (Originating Leg).. + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the PSAP entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the PSAP entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_PSAP_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_PSAP_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * to the IMS_EBCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_ECSCF_INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getTelUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_ECSCF_INVITE_01( + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(-), // v_userInfoA.publicId + mw_To_AddrUnion_TelUrl(-) // v_userInfoB.publicId + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MW_ECSCF_INVITE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + log("##### p_sip: ", p_sip); + } + } // End of function f_mtc_check_TP_MW_ECSCF_INVITE_01 + + } // End of group imsInvite + + group ims100Trying { + + /** + * @desc Verify that the P-CSCF successfully processes a 100 (Trying) provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the PSAP entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the PSAP entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a 100_Trying + * from the IMS_E_CSCF_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a 100_Trying + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MW_ECSCF_100Trying_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 100 TRYING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MW_ECSCF_100Trying_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_100Trying_Base) }, + { 0, omit }, + "TP_MW_ECSCF_100Trying_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_ECSCF_100Trying_01 + + } // End of group ims100Trying + + group ims180Ringing { + + /** + * @desc Verify that the P-CSCF successfully processes a 180 (Ringing) provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the PSAP entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the PSAP entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a 180_Ringing containing + * From indicating value PX_PSAP_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_PSAP_CALLID, + * Via indicating value PX_PSAP_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE + * ; + * from the IMS_E_CSCF_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a 180_Ringing containing + * From indicating value PX_PSAP_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_PSAP_CALLID, + * Via indicating value PX_PSAP_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE + * ; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MW_ECSCF_180RINGING_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 180 RINGING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MW_ECSCF_180Ringing_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + mw_To_NameAddr_TelUrl( + -, + p_sip.request.msgHeader.toField.addressField.addrSpecUnion.components.tel.subscriber + ))) + }, + { mw_SipResponse(mw_180Ringing_Base) }, + { 0, omit }, + "TP_MW_ECSCF_180RINGING_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_ECSCF_180RINGING_01 + + } // End of group ims180Ringing + + group ims183SessionProgress { + + /** + * @desc Verify that the P-CSCF successfully processes a 183 (Ringing) provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the PSAP entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the PSAP entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a 183_SessionProgress containing + * From indicating value PX_SAP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_SAP_CALLID, + * Via indicating value PX_PSAP_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE + * ; + * from the IMS_E_CSCF_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a 183_SessionProgress containing + * From indicating value PX_PSAP_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_PSAP_CALLID, + * Via indicating value PX_PSAP_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE + * ; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MW_ECSCF_183SESSION_PROGRESS_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 183 SESSION_PROGRESS + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MW_ECSCF_183SessionProgress_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_183SessionProgress_Base) }, + { 0, omit }, + "TP_MW_ECSCF_183SESSION_PROGRESS_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_ECSCF_183SESSION_PROGRESS_01 + + } // End of group ims183SessionProgress + + group ims200Ok { + + /** + * @desc Verify that the P-CSCF successfully processes a 200 (OK) provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the PSAP entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the PSAP entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a 200_Ok containing + * From indicating value PX_PSAP_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_PSAP_CALLID, + * Via indicating value PX_PSAP_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * from the IMS_E_CSCF_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_PSAP_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_PSAP_CALLID, + * Via indicating value PX_PSAP_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE, + * PChargingVector, + * PChargingFunctionAddresses, + * PPreferredIdentity + * ; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MW_ECSCF_200OK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check the 200 OK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + ( + mw_To_NameAddr_TelUrl({quotedString:=f_getSipUserId(PX_EUT_B).publicId}), + mw_To_AddrUnion_TelUrl(f_getTelUserId(PX_EUT_B).publicId), + p_sip.request.msgHeader.toField + ) + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MW_ECSCF_200OK_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + } + } // End of function f_mtc_check_TP_MW_ECSCF_200OK_01 + + } // End of group ims200Ok + + group imsAck { + + /** + * @desc Verify that the P-CSCF successfully processes a ACK provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the PSAP entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the PSAP entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives an ACK containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_PSAP_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends an ACK containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_PSAP_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the IMS_E_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_ECSCF_ACK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the ACK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_ECSCF_ACK_01( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_ACK_Request_Base) }, + { 0, omit }, + "TP_MW_ECSCF_ACK_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_ECSCF_ACK_01 + + } // End of group imsAck + +} // End of module AtsImsIot_TP_behavior_MW_EC \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn index 4d82cc0..64b7ee0 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn @@ -891,4 +891,261 @@ module AtsImsIot_Templates_MW { } // End of group g_icscf + group g_ecscf { + + template (present) INVITE_Request mw_TP_MW_ECSCF_INVITE_01( + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_INVITE_Request_Base := { + requestLine := { + method := INVITE_E, + requestUri := p_invite_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_MW_ECSCF_INVITE_01 + + template (present) INVITE_Request mw_TP_MW_ECSCF_INVITE_02( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_ECSCF_INVITE_01 := { + } // End of template mw_TP_MW_ECSCF_INVITE_02 + + + template (present) INVITE_Request mw_TP_MW_ECSCF_RE_INVITE_01( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_ECSCF_INVITE_01 := { + } // End of template mw_TP_MW_ECSCF_RE_INVITE_01 + + template (present) INVITE_Request mw_TP_MW_ECSCF_RE_INVITE_02( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_ECSCF_INVITE_01 := { + } // End of template mw_TP_MW_ECSCF_RE_INVITE_02 + + template (present) Response mw_TP_MW_ECSCF_100Trying_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_100Trying_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_MW_ECSCF_100Trying_01 + + template (present) Response mw_TP_MW_ECSCF_100Trying_02( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_ECSCF_100Trying_01 := { + } // End of template mw_TP_MW_ECSCF_100Trying_02 + + template (present) Response mw_TP_MW_ECSCF_180Ringing_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_180Ringing_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_MW_ECSCF_180Ringing_01 + + template (present) Response mw_TP_MW_ECSCF_180Ringing_02( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_ECSCF_180Ringing_01 := { + } // End of template mw_TP_MW_ECSCF_180Ringing_02 + + template (present) Response mw_TP_MW_ECSCF_183SessionProgress_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_183SessionProgress_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_MW_ECSCF_183SessionProgress_01 + + template (present) Response mw_TP_MW_ECSCF_183SessionProgress_02( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_ECSCF_183SessionProgress_01 := { + } // End of template mw_TP_MW_ECSCF_183SessionProgress_02 + + template (present) ACK_Request mw_TP_MW_ECSCF_ACK_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_ack_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_ACK_Request_Base := { + requestLine := { + method := ACK_E, + requestUri := p_ack_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + callId := p_callId, + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + ?, + * + } + } + } + } // End of template mw_TP_MW_ECSCF_ACK_01 + + template (present) ACK_Request mw_TP_MW_ECSCF_ACK_02( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_ack_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_ECSCF_ACK_01 := { + msgHeader := { + route := omit + } + } // End of template mw_TP_MW_ECSCF_ACK_02 + + } + + group g_ibcf { + + /** + * @desc INVITE Request checking TP_MW_IBCF_INVITE_01 + */ + template(present) INVITE_Request mdw_TP_MW_IBCF_INVITE_01 (template (present) SipUrl p_ECSCF_SIP_URI := ?, + template (present) From p_from := ?, + template (present) To p_to := ?) + modifies mw_INVITE_Request_Base := { + msgHeader := { + fromField := p_from, + toField := p_to, + route := ({ + fieldName := ROUTE_E, + routeBody := { + *, + complement(mw_routeBody(p_ECSCF_SIP_URI)), + * + } + }, omit), + recordRoute := { + fieldName := RECORD_ROUTE_E, + routeBody := {mw_routeBody(p_ECSCF_SIP_URI), *} + }, + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + *, +// {id := "icid-value", paramValue := ?}, + *, + {id := "orig-ioi", paramValue := ?}, + *, +// complement({id := "term-ioi", paramValue := ?}), + *, + complement({id := "access-network-charging-info", paramValue := ?}), + * + } + }, + pAccessNetworkInfo := omit + } + } + + template (present) Response mw_TP_MW_IBCF_100Trying_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_100Trying_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_MW_IBCF_100Trying_01 + + template (present) Response mw_TP_MW_IBCF_180Ringing_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_180Ringing_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_MW_IBCF_180Ringing_01 + + template (present) Response mw_TP_MW_IBCF_183SessionProgress_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_183SessionProgress_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_MW_IBCF_183SessionProgress_01 + + template (present) ACK_Request mw_TP_MW_IBCF_ACK_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_ack_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_ACK_Request_Base := { + requestLine := { + method := ACK_E, + requestUri := p_ack_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + callId := p_callId, + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + ?, + * + } + } + } + } // End of template mw_TP_MW_IBCF_ACK_01 + + template (present) ACK_Request mw_TP_MW_IBCF_ACK_02( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_ack_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_IBCF_ACK_01 := { + msgHeader := { + route := omit + } + } // End of template mw_TP_MW_IBCF_ACK_02 + + } + } // End of module AtsImsIot_Templates_MW \ No newline at end of file -- GitLab