From ea6a0eb0fc2f84b73cf453f2761241e7ca870fa6 Mon Sep 17 00:00:00 2001 From: garciay Date: Wed, 30 Aug 2023 09:42:17 +0200 Subject: [PATCH 01/19] Review TD_VoLTE_ECO_INT_INI_010, TD_VoLTE_ECO_INT_REJ_01_xx; Add TD_VoLTE_ECO_INT_REJ_02/03 --- ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn | 186 +++++++++++++++--- ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn | 96 +++++++++ ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn | 48 ++++- .../AtsImsIot_TP_behavior_MW_EC.ttcn | 75 ++++++- ttcn/AtsImsIot/AtsImsIot_Templates.ttcn | 12 ++ 5 files changed, 381 insertions(+), 36 deletions(-) diff --git a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn index 8004e35..2afa111 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn @@ -1175,7 +1175,6 @@ module AtsImsIot_Emergency { f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 // Test body - //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); f_mtc_check_TP_GM_PCSCF_INVITE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 1 f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); @@ -1193,7 +1192,7 @@ module AtsImsIot_Emergency { 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_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mlE_LRF); // Event 11 + 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_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mwEB); // Event 13 @@ -1380,7 +1379,6 @@ module AtsImsIot_Emergency { f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_10_01(); // Test body - //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // INVITE Event 1 f_mtc_check_TP_MM_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); @@ -1405,7 +1403,7 @@ module AtsImsIot_Emergency { 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 10 + f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 19 f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 200 OK Event 21 f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // ACK – Event 22 @@ -1484,7 +1482,7 @@ module AtsImsIot_Emergency { // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - f_mtc_check_TP_IC_IBCF_INVITE_01(vc_vxlte_monitor_components.ic); // Event 21 + 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_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mwEB); // Event 3 @@ -1510,7 +1508,7 @@ module AtsImsIot_Emergency { 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 10 + f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 19 f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 200 OK Event 21 f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // ACK – Event 22 @@ -1588,11 +1586,47 @@ module AtsImsIot_Emergency { f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 // Test body - //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - // TODO + f_mtc_check_TP_IC_IBCF_INVITE_02(vc_vxlte_monitor_components.ic); // Event 4 - f_mtc_userCheckCallEstablished(v_ueA); // Event 34 - f_mtc_userCheckCallEstablished(v_psap); // Event 34 + f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mwEB); // Event 5 + f_mtc_check_TP_MW_IBSCF_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); @@ -1753,7 +1787,6 @@ module AtsImsIot_Emergency { 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_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 @@ -1926,9 +1959,21 @@ module AtsImsIot_Emergency { f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 // Test body - //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); + f_mtc_check_TP_MM_ECSCF_ECO_BYE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 1 - // TODO + 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 @@ -2001,9 +2046,24 @@ module AtsImsIot_Emergency { f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 // Test body - //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - // TODO + 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 @@ -2076,9 +2136,24 @@ module AtsImsIot_Emergency { f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 // Test body - //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - // TODO + f_mtc_check_TP_IC_IBCF_BYE_01(vc_vxlte_monitor_components.ic); // Event 4 + f_mtc_check_TP_MW_IBCF_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 @@ -2477,7 +2552,7 @@ module AtsImsIot_Emergency { 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_480TEMPAV_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 28 + 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 @@ -2584,7 +2659,7 @@ module AtsImsIot_Emergency { 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_480TEMPAV_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 28 + 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 @@ -2691,7 +2766,7 @@ module AtsImsIot_Emergency { 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_480TEMPAV_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 28 + 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 @@ -2728,7 +2803,7 @@ module AtsImsIot_Emergency { /** * @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.4.3 Emergency Session Reject + * @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 { @@ -2765,7 +2840,7 @@ module AtsImsIot_Emergency { // 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_480TEMPAV_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 2 + 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 @@ -2793,6 +2868,73 @@ module AtsImsIot_Emergency { } // 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 diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn index 7dcd6f0..a9f530b 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn @@ -2958,6 +2958,44 @@ module AtsImsIot_TP_behavior_GM { } } // End of function f_mtc_check_TP_GM_PCSCF_BYE_02 + function f_mtc_check_TP_GM_PCSCF_ECO_BYE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_BYE_02( + p_sip.request.msgHeader.callId, + -, // New CSeq + -, // FIXME To be set + { + fieldName := FROM_E, + addressField := p_sip.request.msgHeader.toField.addressField, + fromParams := * + }, //p_sip.request.msgHeader.fromField, + { + fieldName := TO_E, + addressField := p_sip.request.msgHeader.fromField.addressField, + toParams := * + } //p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_BYE_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_ECO_BYE_02 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_BYE_02 + /** * @desc Verify that the P-CSCF successfully processes a BYE (Network initiated). * Initial conditions with { @@ -4149,6 +4187,64 @@ module AtsImsIot_TP_behavior_GM { } // End of group imsRequestTermination + group imsAlternateService { + + function f_mtc_check_TP_GM_PCSCF_ECO_380ALTSRV_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_380AlternateService(p_sip.request.msgHeader.cSeq)) + }, + { + mw_SipResponse(mdw_3XX_Base) + }, + { 0, omit }, + "TP_GM_PCSCF_ECO_380ALTSRV_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_380ALTSRV_01 + + function f_mtc_check_TP_GM_PCSCF_ECO_380ALTSRV_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_380AlternateService(p_sip.request.msgHeader.cSeq)) + }, + { + mw_SipResponse(mdw_3XX_Base) + }, + { 0, omit }, + "TP_GM_PCSCF_ECO_380ALTSRV_02", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_380ALTSRV_02 + + } // End of group imsTemporaryUnavailable + group imsTemporaryUnavailable { function f_mtc_check_TP_GM_PCSCF_480TEMPAV_01( diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn index 8b7b62e..b029915 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn @@ -491,10 +491,10 @@ module AtsImsIot_TP_behavior_MM { * } */ function f_mtc_check_TP_MM_ECSCF_ECO_BYE_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - inout SipMessage p_sip - ) runs on ImsTestCoordinator { + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)) { // Check the BYE p_monitorCompRef.start( @@ -517,7 +517,7 @@ module AtsImsIot_TP_behavior_MM { }, { mw_SipRequest(mw_BYE_Request_Base) }, { 0, omit }, - "TP_MM_ECSCF_BYE_01 - Request", + "TP_MM_ECSCF_ECO_BYE_01 - Request", true, p_checkMessage ) @@ -528,6 +528,44 @@ module AtsImsIot_TP_behavior_MM { } } // End of function f_mtc_check_TP_MM_ECSCF_ECO_BYE_01 + function f_mtc_check_TP_MM_ECSCF_ECO_BYE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MM_ECSCF_BYE_01( + p_sip.request.msgHeader.callId, + -, // New CSeq, + -, // FIXME To be set + { + fieldName := FROM_E, + addressField := p_sip.request.msgHeader.toField.addressField, + fromParams := * + }, //p_sip.request.msgHeader.fromField, + { + fieldName := TO_E, + addressField := p_sip.request.msgHeader.fromField.addressField, + toParams := * + } //p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_BYE_Request_Base) }, + { 0, omit }, + "TP_MM_ECSCF_ECO_BYE_02 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MM_ECSCF_ECO_BYE_02 + } // End of group imsBye group ims200OkBye { diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn index 559f61d..e73f457 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn @@ -571,10 +571,10 @@ module AtsImsIot_TP_behavior_MW_EC { * } */ function f_mtc_check_TP_MW_PCSCF_ECO_BYE_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - inout SipMessage p_sip - ) runs on ImsTestCoordinator { + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)) { // Check the BYE p_monitorCompRef.start( @@ -589,7 +589,7 @@ module AtsImsIot_TP_behavior_MW_EC { }, { mw_SipRequest(mw_BYE_Request_Base) }, { 0, omit }, - "TP_MW_ECSCF_BYE_01 - Request", + "TP_MW_ECSCF_ECO_BYE_01 - Request", true, p_checkMessage ) @@ -600,6 +600,36 @@ module AtsImsIot_TP_behavior_MW_EC { } } // End of function f_mtc_check_TP_MW_PCSCF_ECO_BYE_01 + function f_mtc_check_TP_MW_PCSCF_ECO_BYE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_ECSCF_BYE_01( + p_sip.request.msgHeader.callId, + -, // New CSeq + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_BYE_Request_Base) }, + { 0, omit }, + "TP_MW_ECSCF_ECO_BYE_02 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_BYE_02 + } // End of group imsBye group ims200OkBye { @@ -644,10 +674,10 @@ module AtsImsIot_TP_behavior_MW_EC { * } */ function f_mtc_check_TP_MW_PCSCF_ECO_200OK_BYE_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)) { // Check the 200 OK BYE p_monitorCompRef.start( @@ -670,6 +700,33 @@ module AtsImsIot_TP_behavior_MW_EC { } } // End of function f_mtc_check_TP_MW_PCSCF_ECO_200OK_BYE_01 + function f_mtc_check_TP_MW_PCSCF_ECO_200OK_BYE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK BYE + 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, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MW_ECSCF_200OK_BYE_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_200OK_BYE_02 + } // End of group ims200OkBye group imsCancel { diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates.ttcn index 32db8f6..2ee78db 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates.ttcn @@ -2278,6 +2278,18 @@ module AtsImsIot_Templates { } } // End of template mw_200OK + template Response mw_380AlternateService( + template (present) CSeq p_cSeq := ?, + template (present) CallId p_callId := ?, + template WwwAuthenticate p_wwwAuthenticate := * + ) modifies mdw_3XX_Base := { + msgHeader := { + cSeq := p_cSeq, + callId := p_callId, + wwwAuthenticate := p_wwwAuthenticate + } + } // End of template mw_380AlternateService + template Response mw_401Unauthorized( template (present) CSeq p_cSeq := ?, template (present) WwwAuthenticate p_wwwAuthenticate := ? -- GitLab From 426b0a2b25ecada6cdc0cab26809941d52df5b84 Mon Sep 17 00:00:00 2001 From: pintar Date: Fri, 1 Sep 2023 17:07:35 +0200 Subject: [PATCH 02/19] New TPs added for TDs --- test_purposes/E_CSCF/TP_E_CSCF.tplan2 | 343 +++++++++++++++++++++++--- test_purposes/Gm/TP_GM.tplan2 | 96 ++++++- test_purposes/Mw/TP_MW_PS.tplan2 | 136 +++++++++- test_purposes/Sip_Common.tplan2 | 1 + 4 files changed, 526 insertions(+), 50 deletions(-) diff --git a/test_purposes/E_CSCF/TP_E_CSCF.tplan2 b/test_purposes/E_CSCF/TP_E_CSCF.tplan2 index af50eee..8f99c15 100644 --- a/test_purposes/E_CSCF/TP_E_CSCF.tplan2 +++ b/test_purposes/E_CSCF/TP_E_CSCF.tplan2 @@ -218,6 +218,54 @@ Package TP_E_CSCF { } // End of TP_MM_ECSCF_ECO_INVITE_02 + Test Purpose { + + TP Id TP_MM_ECSCF_ECO_INVITE_03 + /* Mm interface at E-CSCF/IM CN subsystem of own network */ + + Test objective "Verify that the E-CSCF successfully processes an callback INVITE from PSAP over the IM CN subsystem of own network and routes the request to the P-CSCF." + + Reference + "ETSI TS 123 167 [1], Clause 4.1 item 12" + + Config Id CF_VoLTE_INT_ES + + PICS Selection NONE + + Initial conditions with { + the IMS_E_CSCF entity supportsRoutingTo the IM_CN + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives an INVITE 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_P_CSCF_A_VIA, + Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + PAssertedIdentity, + MessageBody; + from the IM_CN entity + } + then { + the IMS_E_CSCF entity sends an INVITE 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_E_CSCF_VIA, + Route indicating value PX_PSAP_SERVICE_ROUTE_IM_CN, + RecordRoute PX_E_CSCF_SERVICE_ROUTE, + PChargingVector, + not PChargingFunctionAddresses, + MessageBody; + to the IMS_P_CSCF_A entity + } + } + + } // End of TP_MM_ECSCF_ECO_INVITE_03 + Test Purpose { TP Id TP_MX_ECSCF_ECO_INVITE_01 @@ -316,6 +364,56 @@ Package TP_E_CSCF { } // End of TP_MX_ECSCF_ECO_INVITE_02 + Test Purpose { + + TP Id TP_MX_ECSCF_ECO_INVITE_03 + /* Mx interface at E-CSCF/IBCF */ + + Test objective "Verify that the E-CSCF successfully processes a callback INVITE from the PSAP in another network over the IBCF and routes the request to the P-CSCF." + + Reference + "ETSI TS 123 167 [1], Clause 4.1 item 12" + + Config Id CF_VoLTE_INT_ES + + PICS Selection NONE + + Initial conditions with { + the IMS_E_CSCF entity supportsRoutingTo the IMS_IBCF_A + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives an INVITE 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_P_CSCF_A_VIA, + Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + PAssertedIdentity, + MessageBody; + from the IMS_IBCF_A entity + } + then { + the IMS_E_CSCF entity sends an INVITE 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_E_CSCF_VIA, + Route indicating value PX_P_SCSF_SERVICE_ROUTE_IBCF, + RecordRoute PX_E_CSCF_SERVICE_ROUTE, + PChargingVector containing + not term_ioi_parameter, + orig_ioi_parameter + indicating value "Operator Identifier Of ImsA";, + MessageBody; + to the IMS_P_CSCF_A entity + } + } + + } // End of TP_MX_ECSCF_ECO_INVITE_03 + Test Purpose { TP Id TP_MI_ECSCF_ECO_INVITE_01 @@ -414,6 +512,57 @@ Package TP_E_CSCF { } // End of TP_MI_ECSCF_ECO_INVITE_02 + Test Purpose { + + TP Id TP_MI_ECSCF_ECO_INVITE_03 + /* Mx interface at E-CSCF/BGCF */ + + Test objective "Verify that the E-CSCF successfully processes a callback INVITE from PSAP in the PSTN over BGCF and routes the request to the P-CSCF." + + Reference + "ETSI TS 123 167 [1], Clause 4.1 item 12" + + Config Id CF_VoLTE_INT_ES + + PICS Selection NONE + + Initial conditions with { + the IMS_E_CSCF entity supportsRoutingTo the BGCF + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives an INVITE containing + From indicating value PX_PSAP_TEL_URI,// see 5.11.2 6) b) + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_PSAP_CALLID, + Via indicating value PX_BGCF_VIA, + Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + PAssertedIdentity, + MessageBody; + from the IMS_BGCF_A entity + } + then { + the IMS_E_CSCF entity sends an INVITE containing + RequestLine indicating value PX_UE_A_SIP_URI, + From indicating value PX_PSAP_TEL_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_PSAP_CALLID, + Via indicating value PX_E_CSCF_VIA, + Route indicating value PX_P_CSCD_SERVICE_ROUTE, + RecordRoute PX_E_CSCF_SERVICE_ROUTE, + PChargingVector containing + not term_ioi_parameter, + orig_ioi_parameter + indicating value "Operator Identifier Of ImsA";, + MessageBody; + to the IMS_P_CSCF_A entity + } + } + + } // End of TP_MI_ECSCF_ECO_INVITE_03 + Test Purpose { TP Id TP_MM_ECSCF_ECO_BYE_01 @@ -479,20 +628,18 @@ Package TP_E_CSCF { ensure that { when { the IMS_E_CSCF entity receives a BYE containing - From indicating value PX_UE_A_SIP_URI, - To indicating value PX_SIP_EMERGENCY_SERVICE_URN, - CallId indicating value PX_UE_A_CALLID, - Via indicating value PX_UE_A_VIA, - Route indicating value PX_UE_A_SERVICE_ROUTE; + 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; from the IM_CN entity } then { the IMS_E_CSCF entity sends a BYE containing - From indicating value PX_UE_A_SIP_URI, - To indicating value PX_SIP_EMERGENCY_SERVICE_URN, - CallId indicating value PX_UE_A_CALLID, - Via indicating value PX_UE_A_VIA, - Route indicating value PX_UE_A_SERVICE_ROUTE; + 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; to the IMS_P_CSCF_A entity } } @@ -565,20 +712,18 @@ Package TP_E_CSCF { ensure that { when { the IMS_E_CSCF entity receives a BYE containing - From indicating value PX_UE_A_SIP_URI, - To indicating value PX_SIP_EMERGENCY_SERVICE_URN, - CallId indicating value PX_UE_A_CALLID, - Via indicating value PX_UE_A_VIA, - Route indicating value PX_UE_A_SERVICE_ROUTE; + 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; from the IMS_IBCF_A entity } then { the IMS_E_CSCF entity sends a BYE containing - From indicating value PX_UE_A_SIP_URI, - To indicating value PX_SIP_EMERGENCY_SERVICE_URN, - CallId indicating value PX_UE_A_CALLID, - Via indicating value PX_UE_A_VIA, - Route indicating value PX_UE_A_SERVICE_ROUTE; + 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; to the IMS_P_CSCF_A entity } } @@ -651,20 +796,18 @@ Package TP_E_CSCF { ensure that { when { the IMS_E_CSCF entity receives a BYE containing - From indicating value PX_UE_A_SIP_URI, - To indicating value PX_SIP_EMERGENCY_SERVICE_URN, - CallId indicating value PX_UE_A_CALLID, - Via indicating value PX_UE_A_VIA, - Route indicating value PX_UE_A_SERVICE_ROUTE; + 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; from the IMS_BGCF_A entity } then { the IMS_E_CSCF entity sends a BYE containing - From indicating value PX_UE_A_SIP_URI, - To indicating value PX_SIP_EMERGENCY_SERVICE_URN, - CallId indicating value PX_UE_A_CALLID, - Via indicating value PX_UE_A_VIA, - Route indicating value PX_UE_A_SERVICE_ROUTE; + 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; to the IMS_P_CSCF_A entity } } @@ -673,7 +816,7 @@ Package TP_E_CSCF { Test Purpose { - TP Id TP_MM_ECSCF_ECO_CANCEL_01 + TP Id TP_MM_ECSCF_EMC_CANCEL_01 /* Mm interface at E-CSCF/IM CN subsystem of own network */ Test objective "Verify that the E-CSCF successfully processes a CANCEL from the P-CSCF for an Emergency Call under establishment and routes the request to the PSAP in the IM CN subsystem of own network." @@ -712,11 +855,11 @@ Package TP_E_CSCF { } } - } // End of TP_MM_ECSCF_ECO_CANCEL_01 + } // End of TP_MM_ECSCF_EMC_CANCEL_01 Test Purpose { - TP Id TP_MX_ECSCF_ECO_CANCEL_01 + TP Id TP_MX_ECSCF_EMC_CANCEL_01 /* Mx interface at E-CSCF/IBCF */ Test objective "Verify that the E-CSCF successfully processes a CANCEL from the P-CSCF for an Emergency Call under establishment and routes the request to the IBCF for a PSAP in another network." @@ -755,11 +898,11 @@ Package TP_E_CSCF { } } - } // End of TP_MX_ECSCF_ECO_CANCEL_01 + } // End of TP_MX_ECSCF_EMC_CANCEL_01 Test Purpose { - TP Id TP_MI_ECSCF_ECO_CANCEL_01 + TP Id TP_MI_ECSCF_EMC_CANCEL_01 /* Mx interface at E-CSCF/BGCF */ Test objective "Verify that the E-CSCF successfully processes a CANCEL from the P-CSCF for an Emergency Call under establishment and routes the request to the BGCF for a PSAP in the PSTN." @@ -798,7 +941,7 @@ Package TP_E_CSCF { } } - } // End of TP_MI_ECSCF_ECO_CANCEL_01 + } // End of TP_MI_ECSCF_EMC_CANCEL_01 Test Purpose { @@ -927,6 +1070,134 @@ Package TP_E_CSCF { } } // End of TP_MI_ECSCF_ECO_480INVITE_01 + + Test Purpose { + + TP Id TP_MM_ECSCF_EMC_487INVITE_01 + /* Mm interface at E-CSCF/IM CN subsystem of own network */ + Test objective "Verify that the E-CSCF successfully processes a 487 response from the PSAP in the IM CN subsystem for an Emergency Call and routes the response to the P-CSCF of home network." + + Reference + "ETSI TS 124 229 [1], Clauses 5.11.2" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the IMS_E_CSCF entity supportsRoutingTo the IM_CN and + the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives a 487INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + from the IM_CN entity + } + then { + the IMS_E_CSCF entity sends a 487INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + to the IMS_P_CSCF_A entity + } + } + + } // End of TP_MM_ECSCF_EMC_487INVITE_01 + + Test Purpose { + + TP Id TP_MX_ECSCF_EMC_487INVITE_01 + /* Mx interface at E-CSCF/IBCF */ + + Test objective "Verify that the E-CSCF successfully processes a 487 response from the IBCF for a PSAP in another network for an Emergency Call and routes the response to the P-CSCF." + + Reference + "ETSI TS 124 229 [1], Clauses 5.11.2" + + Config Id CF_VoLTE_INT_ES + + PICS Selection NONE + + Initial conditions with { + the IMS_E_CSCF entity supportsRoutingTo the IMS_IBCF_A and + the UE_A entity previouslyEstablishedEmergencyCallWith the PSA via IMS_IBCF_A + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives a 487INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + 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 + } + then { + the IMS_E_CSCF entity sends a 487INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + to the IMS_P_CSCF_A entity + } + } + + } // End of TP_MX_ECSCF_EMC_487INVITE_01 + + Test Purpose { + + TP Id TP_MI_ECSCF_EMC_487INVITE_01 + /* Mx interface at E-CSCF/BGCF */ + + Test objective "Verify that the E-CSCF successfully processes a 487 response from the BGCF for a PSAP in the PSTN for an Emergency Call and routes the response to the P-CSCF." + + Reference + "ETSI TS 124 229 [1], Clauses 5.11.2" + + Config Id CF_VoLTE_INT_ES + + PICS Selection NONE + + Initial conditions with { + the IMS_E_CSCF entity supportsRoutingTo the BGCF and + the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP via IMS_BGCF_A + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives a 487INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + 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_BGCF_A entity + } + then { + the IMS_E_CSCF entity sends a 487INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + to the IMS_P_CSCF_A entity + } + } + + } // End of TP_MI_ECSCF_EMC_487INVITE_01 } // End of Package TP_E_CSCF diff --git a/test_purposes/Gm/TP_GM.tplan2 b/test_purposes/Gm/TP_GM.tplan2 index 55cb9a5..5abe649 100644 --- a/test_purposes/Gm/TP_GM.tplan2 +++ b/test_purposes/Gm/TP_GM.tplan2 @@ -461,7 +461,7 @@ Package TP_GM { Test Purpose { - TP Id TP_GM_PCSCF_ECO_CANCEL_01 + TP Id TP_GM_PCSCF_EMC_CANCEL_01 Test objective "Verify that the P-CSCF successfully processes a CANCEL during Emergency Call establishment." @@ -494,7 +494,7 @@ Package TP_GM { } } - } // End of TP_GM_PCSCF_ECO_CANCEL_01 + } // End of TP_GM_PCSCF_EMC_CANCEL_01 Test Purpose { @@ -518,20 +518,20 @@ Package TP_GM { ensure that { when { the IMS_P_CSCF_A entity sends a 200_Ok containing - From indicating value PX_UE_B_SIP_URI, + From indicating value PX_PSAP_SIP_URI, To indicating value PX_UE_A_SIP_URI, - CallId indicating value PX_UE_B_CALLID, - Via indicating value PX_UE_B_VIA, - Route indicating value PX_UE_B_SERVICE_ROUTE; + CallId indicating value PX_PSAP_CALLID, + Via indicating value PX_PSAP_VIA, + Route indicating value PX_PSAP_SERVICE_ROUTE; from the IMS_E_CSCF entity } then { the IMS_P_CSCF_A entity sends a 200_Ok containing - From indicating value PX_UE_B_SIP_URI, + From indicating value PX_PSAP_SIP_URI, To indicating value PX_UE_A_SIP_URI, - CallId indicating value PX_UE_B_CALLID, - Via indicating value PX_UE_B_VIA, - Route indicating value PX_UE_B_SERVICE_ROUTE, + 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; @@ -564,7 +564,7 @@ Package TP_GM { when { the IMS_P_CSCF_A entity receives a 200_Ok containing From indicating value PX_UE_A_SIP_URI, - To indicating value PX_UE_B_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, @@ -576,7 +576,7 @@ Package TP_GM { then { the IMS_P_CSCF_A entity sends a 200_Ok containing From indicating value PX_UE_A_SIP_URI, - To indicating value PX_UE_B_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; @@ -585,6 +585,78 @@ Package TP_GM { } } // End of TP_GM_PCSCF_ECO_200OK_02 + + Test Purpose { + + TP Id TP_GM_PCSCF_EMS_200OK_CANCEL_01 + // TP_GM_PCSCF_200OK_CANCEL_01 from ETSI TS 103 653-1 + + Test objective "Verify that the P-CSCF successfully processes a 200 (OK) CANCEL (Originating Leg)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.1.3 and 6.1" + + Config Id CF_VoLTE_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_A and + the UE_A entity isRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the UE_A entity isRequestedToSend a CANCEL + } + then { + the IMS_P_CSCF_A entity receives a 200_Ok containing + not PChargingVector, + not PChargingFunctionAddresses, + not PPreferredIdentity; + from the IMS_E_CSCF entity + } + } + + } // End of TP_GM_PCSCF_EMS_200OK_CANCEL_01 + + Test Purpose { + + TP Id TP_GM_PCSCF_EMC_487INVITE_01 + // TP_GM_PCSCF_487INVITE_01 from ETSI TS 103 653-1 + + Test objective "Verify that the P-CSCF successfully processes a 487 INVITE (Request Terminated) (Originating Leg)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.1.3 and 6.1" + + Config Id CF_VoLTE_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_A and + the UE_A entity isRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the UE_A entity isRequestedToSend an CANCEL + } + then { + the IMS_P_CSCF_A entity sends a 487_INVITE 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 + } + } + + } // End of TP_GM_PCSCF_EMC_487INVITE_01 } // End of Package TP_GM diff --git a/test_purposes/Mw/TP_MW_PS.tplan2 b/test_purposes/Mw/TP_MW_PS.tplan2 index 45b0645..b049914 100644 --- a/test_purposes/Mw/TP_MW_PS.tplan2 +++ b/test_purposes/Mw/TP_MW_PS.tplan2 @@ -396,6 +396,52 @@ Package TP_MW_PS { } // End of TP_MW_PCSCF_ECO_INVITE_04 + Test Purpose { + + TP Id TP_MW_PCSCF_ECO_INVITE_05 + + Test objective "Verify that the E-CSCF successfully processes a callback INVITE from PSAP towards P-CSCF." + + Reference + "ETSI TS 124 229 [1], Clauses 5.2.10.3 and 5.2.6.3.3" + + Config Id CF_VoLTE_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isEmergencyAttachedTo the EPC_A and + the UE_A entity isEmergencyRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity receives an INVITE 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_P_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + PAssertedIdentity, + MessageBody; + from the IMS_E_CSCF entity + } + then { + the IMS_P_CSCF_A entity sends an INVITE 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_P_CSCF_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE, + PPreferredIdentity, // one or two instances + MessageBody; + to the UE_A entity + } + } + + } // End of TP_MW_PCSCF_ECO_INVITE_05 + Test Purpose { TP Id TP_MW_PCSCF_ECO_480INVITE_01 @@ -593,7 +639,7 @@ Package TP_MW_PS { Test Purpose { - TP Id TP_MW_PCSCF_ECO_CANCEL_01 + TP Id TP_MW_PCSCF_EMC_CANCEL_01 Test objective "Verify that the P-CSCF successfully processes a CANCEL during Emergency Call establishment." @@ -633,7 +679,93 @@ Package TP_MW_PS { } } - } // End of TP_MW_PCSCF_ECO_CANCEL_01 + } // End of TP_MW_PCSCF_EMC_CANCEL_01 + + Test Purpose { + + TP Id TP_MW_PCSCF_EMC_200OK_CANCEL_01 + + Test objective "Verify that the P-CSCF successfully processes a 200 (OK) CANCEL (Originating Leg)." + + Reference + "ETSI TS 124 229 [1], clauses 5.2.7 and 6.2" + + Config Id CF_VoLTE_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_A and + the UE_A entity isRegisteredTo the IMS_A + } + + 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; + from the IMS_E_CSCF 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; + to the UE_A entity + } + } + + } // End of TP_MW_PCSCF_EMC_200OK_CANCEL_01 + + Test Purpose { + + TP Id TP_MW_PCSCF_EMC_487INVITE_01 + // TP_MW_PCSCF_487INVITE_01 from ETSI TS 103 653-1 + + Test objective "Verify that the P-CSCF successfully processes a 487 INVITE (Request Terminated) to reject call (Originating Leg)." + + Reference + "ETSI TS 124 229 [1], clauses 5.2.7 and 6.2" + + Config Id CF_VoLTE_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_A and + the UE_A entity isRegisteredTo the IMS_A and + the UE_A entity isRequestedToSend a CANCEL + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity receives a 487_INVITE 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 entity + } + then { + the IMS_P_CSCF_A entity sends a 487_INVITE 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 + } + } + + } // End of TP_MW_PCSCF_EMC_487INVITE_01 } // End of Package TP_MW_PS diff --git a/test_purposes/Sip_Common.tplan2 b/test_purposes/Sip_Common.tplan2 index c593bf4..e14773e 100644 --- a/test_purposes/Sip_Common.tplan2 +++ b/test_purposes/Sip_Common.tplan2 @@ -109,6 +109,7 @@ Package Sip_Common { - hasAchievedINVITE - hasSentINVITETo - supportsRoutingTo + - supportsCallbackTo ; } // End of Domain section -- GitLab From 3847892632b50ba76fd2b9f40183a72578f55062 Mon Sep 17 00:00:00 2001 From: garciay Date: Fri, 15 Sep 2023 10:37:04 +0200 Subject: [PATCH 03/19] Review of TTCN-3 implementation & templates of all emergency TPs for the SIP part --- test_purposes/Gm/TP_GM.tplan2 | 10 +- ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn | 40 +- ttcn/AtsImsIot/AtsImsIot_PIXITS.ttcn | 5 + ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn | 615 +++++++++++++++--- .../AtsImsIot_TP_behavior_MW_PS.ttcn | 6 +- ttcn/AtsImsIot/AtsImsIot_Templates.ttcn | 91 ++- ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn | 71 +- ttcn/AtsImsIot/AtsImsIot_TypesAndValues.ttcn | 2 +- 8 files changed, 730 insertions(+), 110 deletions(-) diff --git a/test_purposes/Gm/TP_GM.tplan2 b/test_purposes/Gm/TP_GM.tplan2 index 5abe649..27d8105 100644 --- a/test_purposes/Gm/TP_GM.tplan2 +++ b/test_purposes/Gm/TP_GM.tplan2 @@ -54,7 +54,7 @@ Package TP_GM { not term_ioi, not SecurityClient, Contact indicating value "sos";; - to the UE_A entity + from the UE_A entity } then { the IMS_P_CSCF_A entity sends a 401_Unauthorized containing @@ -163,7 +163,7 @@ Package TP_GM { Via indicating value PX_UE_A_VIA, Authorization indicating value "Invalid credentials", Contact indicating value "sos"; - to the UE_A entity + from the UE_A entity } then { the IMS_P_CSCF_A entity sends a 403_Forbiden containing @@ -171,7 +171,7 @@ Package TP_GM { To indicating value PX_UE_A_SIP_URI, CallId indicating value PX_UE_A_CALLID, Via indicating value PX_UE_A_VIA; - from the UE_A entity + to the UE_A entity } } } // End of TP_GM_PCSCF_ECO_REGISTER_03 @@ -204,7 +204,7 @@ Package TP_GM { Via indicating value PX_UE_A_VIA, Authorization not indicating value GPRS_IMS_Bundled_authentication, Contact indicating value "sos"; - to the UE_A entity + from the UE_A entity } then { the IMS_P_CSCF_B entity sends a 403_Forbidden containing @@ -215,7 +215,7 @@ Package TP_GM { MessageBody containing XML containing ims_3gpp_element indicating value anonymous_emergencycall;;; - from the UE_A entity + to the UE_A entity } } } // End of TP_GM_PCSCF_ECO_REGISTER_04 diff --git a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn index 2afa111..3a56e3f 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn @@ -256,7 +256,7 @@ module AtsImsIot_Emergency { 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_ECO_UAA_02(f_getCxInterface(PX_DIAMETER_CX_SINGLE_INTERFACE));// Event 15, 16 + 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 @@ -323,7 +323,11 @@ module AtsImsIot_Emergency { f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01(); // Test body - f_mtc_check_TP_GM_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE 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 @@ -669,9 +673,11 @@ module AtsImsIot_Emergency { 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 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 @@ -792,7 +798,11 @@ module AtsImsIot_Emergency { // 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); // 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 @@ -922,7 +932,11 @@ module AtsImsIot_Emergency { // 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); // 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 @@ -1054,7 +1068,11 @@ module AtsImsIot_Emergency { f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 // Test body - f_mtc_check_TP_GM_PCSCF_INVITE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // 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 @@ -1176,7 +1194,11 @@ module AtsImsIot_Emergency { // Test body - f_mtc_check_TP_GM_PCSCF_INVITE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // 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 diff --git a/ttcn/AtsImsIot/AtsImsIot_PIXITS.ttcn b/ttcn/AtsImsIot/AtsImsIot_PIXITS.ttcn index 02bda0b..b862a52 100644 --- a/ttcn/AtsImsIot/AtsImsIot_PIXITS.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_PIXITS.ttcn @@ -27,6 +27,11 @@ group SUT_CONF { * @desc Set to true of PSAP shall be registered to the IMS */ modulepar boolean PX_PSAP_REGISTERED := true; + + /** + * @desc Set to true if the emergency call is an issued by an eCall + */ + modulepar boolean PX_ECALL := false; } // end group SUT_CONF diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn index a9f530b..ac59884 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn @@ -224,33 +224,31 @@ module AtsImsIot_TP_behavior_GM { * @desc Verify that the P-CSCF successfully processes a first registration (Successful) * Initial conditions with { * the UE_A entity isAttachedTo the EPC_A and - * the UE_A entity isNotRegisteredTo the IMS_A and - * the UE_B entity isNotRegisteredTo the IMS_B + * the UE_A entity not isRegisteredTo the IMS_A * } * * Expected behaviour * ensure that { * when { - * the UE_A entity isTriggeredToStart - * } - * then { - * the UE_A entity sends a REGISTER containing + * the IMS_P_CSCF_A entity receives a REGISTER containing * From indicating value PX_UE_A_SIP_URI, * To indicating value PX_UE_A_SIP_URI, * CallId indicating value PX_UE_A_CALLID, * Via indicating value PX_UE_A_VIA, - * Authorization containing - * Authentication_Schema indicating value PX_TO_BE_DEFINED, - * Authentication_URI indicating value PX_TO_BE_DEFINED, - * Username indicating value PX_UE_A_USERNAME, + * Path, + * Warning, + * WwwAuthenticate containing + * Digest,, * Realm indicating value PX_UE_A_REALM, * Algorithm indicating value PX_UE_A_AUTH_ALG, * Nonce indicating value "", * not term_ioi, - * not SecurityClient - * ;; - * to the IMS_P_CSCF_A entity - * and the UE_A entity receives an 401_Unauthorized containing + * not SecurityClient, + * Contact indicating value "sos";; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a 401_Unauthorized containing * From indicating value PX_UE_A_SIP_URI, * To indicating value PX_UE_A_SIP_URI, * CallId indicating value PX_UE_A_CALLID, @@ -263,11 +261,9 @@ module AtsImsIot_TP_behavior_GM { * Realm indicating value PX_UE_A_REALM, * Algorithm indicating value PX_UE_A_AUTH_ALG, * Nonce indicating value "not empty", - * qop indicating value "auth" - * ;, - * Contact indicating value "sos" + * qop indicating value "auth";; * ; - * from the IMS_P_CSCF_A entity + * from the UE_A entity * } * } */ @@ -322,7 +318,7 @@ module AtsImsIot_TP_behavior_GM { )) }, {0, omit}, - "TP_GM_PCSCF_REGISTER_01 - 401 Unauthorized", + "TP_GM_PCSCF_ECO_REGISTER_01 - 401 Unauthorized", false, p_checkMessage ) @@ -439,6 +435,54 @@ module AtsImsIot_TP_behavior_GM { } } // End of function f_mtc_check_TP_GM_PCSCF_REGISTER_02 + /** + * @desc Verify that the P-CSCF successfully processes a full emergency registration (Successful). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A and + * the UE_A entity hasAchievedFirstRegistration + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization containing + * Authentication_Schema indicating value PX_TO_BE_DEFINED, + * Authentication_URI indicating value PX_TO_BE_DEFINED, + * Username indicating value PX_UE_A_USERNAME, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth", + * not SecurityClient, + * Contact indicating value "sos";; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends an 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * AuthenticationInfo, + * PAccessNetworkInfo, + * PAssociatedURI indicating value PX_UE_A_SIP_URI, + * PChargingVector, + * orig_ioi_parameter + * indicating value "Operator Identifier Of ImsA" , + * term_ioi_parameter + * indicating value "Operator Identifier Of ImsB" + * Path, + * ServiceRoute; + * to the UE_A entity + * } + * } + */ function f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_02( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false @@ -452,18 +496,20 @@ module AtsImsIot_TP_behavior_GM { f_Iot_Sip_receive( { mw_SipRequest( - mw_TP_GM_PCSCF_REGISTER_02( - mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), - mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), - mw_Authorization_other - ) + mw_TP_GM_PCSCF_ECO_REGISTER_02( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other, + -, -, + mw_contact(mw_ContactAddress) + ) ) }, { mw_SipRequest(mw_REGISTER_Request_Base) }, {0, omit}, - "TP_GM_PCSCF_REGISTER_02 - Second request", + "TP_GM_PCSCF_ECO_REGISTER_02 - Second request", true, p_checkMessage ) @@ -595,11 +641,10 @@ module AtsImsIot_TP_behavior_GM { } // End of function f_mtc_check_TP_GM_PCSCF_REGISTER_03 /** - * @desc Verify that the P-CSCF successfully processes an invalid first registration (Unsuccessful). + * @desc Verify that the emergency registration is rejected with 403 (Forbidden) in case invalid credentials sent from UE. (Unsuccessful emergency registration). * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_A entity isNotRegisteredTo the IMS_A and - * the UE_B entity isNotRegisteredTo the IMS_B + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity not isRegisteredTo the IMS_A * } * * Expected behaviour @@ -613,20 +658,14 @@ module AtsImsIot_TP_behavior_GM { * To indicating value PX_UE_A_SIP_URI, * CallId indicating value PX_UE_A_CALLID, * Via indicating value PX_UE_A_VIA, - * Authorization containing - * Authentication_Schema indicating value PX_TO_BE_DEFINED, - * Authentication_URI indicating value PX_TO_BE_DEFINED, - * Username indicating value PX_UE_A_INVALID_USERNAME, - * Realm indicating value PX_UE_A_REALM, - * Algorithm indicating value PX_UE_A_AUTH_ALG, - * Nonce indicating value "" - * ;; + * Authorization indicating value "Invalid credentials", + * Contact indicating value "sos"; * from the UE_A entity - * and the IMS_P_CSCF_A entity sends an 404_NotFound containing + * and the IMS_P_CSCF_A entity sends an 403_Forbiden containing * From indicating value PX_UE_A_SIP_URI, * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_A_CALLID - * ; + * CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA; * to the UE_A entity * } * } @@ -647,7 +686,7 @@ module AtsImsIot_TP_behavior_GM { mw_TP_GM_PCSCF_ECO_REGISTER_03( mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), - mw_Authorization_other, + mw_Authorization_other, // FIXME indicating value "Invalid credentials" -, -, mw_contact(mw_ContactAddress) ) @@ -657,7 +696,7 @@ module AtsImsIot_TP_behavior_GM { mw_SipRequest(mw_REGISTER_Request_Base) }, {0, omit}, - "TP_GM_PCSCF_REGISTER_03 - First request", + "TP_GM_PCSCF_ECO_REGISTER_03 - First request", true, p_checkMessage ) @@ -673,7 +712,7 @@ module AtsImsIot_TP_behavior_GM { p_monitorCompRef.start( f_Iot_Sip_receive( { - mw_SipResponse(mw_404NotFound(v_sip.request.msgHeader.cSeq/*, mw_WwwAuthenticate*/)), + mw_SipResponse(mw_403Forbidden(v_sip.request.msgHeader.cSeq/*, mw_WwwAuthenticate*/)), mw_SipResponse(mw_480TemporaryUnavailable(-, v_sip.request.msgHeader.cSeq/*, mw_WwwAuthenticate*/)) }, { @@ -752,6 +791,98 @@ module AtsImsIot_TP_behavior_GM { } } // End of function f_mtc_check_TP_GM_PCSCF_REGISTER_04 + /** + * @desc Verify that the emergency registration is rejected with 403 (Forbidden) in case the UE and P-CSCF does not support GPRS-IMS-Bundled authentication. (Unsuccessful emergency registration). + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_B and + * the UE_A entity not isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_B entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization indicating value GPRS_IMS_Bundled_authentication, + * Contact indicating value "sos"; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_B entity sends an 403_Forbiden containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * MessageBody containing + * XML containing + * ims_3gpp_element indicating value anonymous_emergencycall;;; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_GM_PCSCF_ECO_REGISTER_04( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other // FIXME not indicating value GPRS_IMS_Bundled_authenticatio + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_GM_PCSCF_ECO_REGISTER_04 - First request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + + // Check REGISTER 404 Not Found response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_403Forbidden(v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)), + mw_SipResponse(mw_480TemporaryUnavailable(-, v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)) + }, + { + mw_SipResponse(mw_401Unauthorized_Base), + mw_SipResponse(mw_Response_4xx_Base( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq + )) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_04 - 401 Unauthorized", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_04 + function f_mtc_check_TP_GM_PCSCF_REGISTER_05( // FIXME RMI To be reviewed in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false @@ -811,6 +942,68 @@ module AtsImsIot_TP_behavior_GM { } } // End of function f_mtc_check_TP_GM_PCSCF_REGISTER_05 + function f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_05( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_GM_PCSCF_ECO_REGISTER_05( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_GM_PCSCF_ECO_REGISTER_05 - Second request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 200 OK response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_420BadExtension( + v_sip.request.msgHeader.cSeq, + mw_WwwAuthenticate, + mw_MBody_MIME_Ims3gpp( + *, + ? // FIXME XML message body + ) + )), + mw_SipResponse(mw_480TemporaryUnavailable(-, v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)) + }, + { + mw_SipResponse(mw_Response_2xx_Base) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_05 - 200 OK", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_05 + } // End of group imsRegistration group imsDeRegistration { @@ -1321,7 +1514,7 @@ module AtsImsIot_TP_behavior_GM { } // End of function f_mtc_check_TP_GM_PCSCF_INVITE_01 /** - * @desc "Verify that the P-CSCF successfully receives an initial emergency INVITE from an unregistered UE." + * @desc Verify that the P-CSCF successfully receives an initial emergency INVITE from an unregistered UE. * Reference * "ETSI TS 124 229 [1], Clauses 5.1.6.8.2" * Config Id CF_VxLTE_INT @@ -1360,15 +1553,15 @@ module AtsImsIot_TP_behavior_GM { // Check the INVITE p_monitorCompRef.start( f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_GM_PCSCF_INVITE_01( - -, // FIXME Set expected value - mw_From_AddrUnion_TelUrl(-), // v_userInfoA.publicId - mw_To_AddrUnion_TelUrl(-) // v_userInfoB.publicId - )) + { mw_SipRequest(mw_TP_GM_PCSCF_ECO_INVITE_01( + -, // FIXME Set expected value + mw_SipUrl_Anonymous, + mw_To_AddrUnion_TelUrl(v_userInfoB.publicId) + )) }, { mw_SipRequest(mw_INVITE_Request_Base) }, {0, omit}, - "TP_GM_PCSCF_INVITE_01 - Request", + "TP_GM_PCSCF_ECO_INVITE_01 - Request", true, p_checkMessage ) @@ -1492,18 +1685,18 @@ module AtsImsIot_TP_behavior_GM { { mw_SipRequest(mw_TP_GM_PCSCF_ECO_INVITE_02( -, // FIXME Set expected value ( - mw_From_NameAddr_SipUrl({quotedString:=v_userInfoB.publicId}, v_userInfoB.publicId, v_userInfoB.domain), - mw_From_AddrUnion_TelUrl(v_userInfoB.publicId) + mw_From_NameAddr_SipUrl({quotedString:=v_userInfoA.publicId}, v_userInfoA.publicId, v_userInfoA.domain), + mw_From_AddrUnion_TelUrl(v_userInfoA.publicId) ), ( - mw_To_NameAddr_SipUrl({quotedString:=v_userInfoA.publicId}, v_userInfoA.publicId/*, v_userInfoA.domain*/), - mw_To_AddrUnion_TelUrl(-)//v_userInfoA.publicId + mw_To_NameAddr_SipUrl({quotedString:=v_userInfoB.publicId}, v_userInfoB.publicId/*, v_userInfoA.domain*/), + mw_To_AddrUnion_TelUrl(v_userInfoB.publicId) ) )) }, { mw_SipRequest(mw_INVITE_Request_Base) }, {0, omit}, - "TP_GM_PCSCF_INVITE_02 - Request", + "TP_GM_PCSCF_ECO_INVITE_02 - Request", true, p_checkMessage ) @@ -1546,7 +1739,36 @@ module AtsImsIot_TP_behavior_GM { } } // End of function f_mtc_check_TP_GM_PCSCF_INVITE_03 - function f_mtc_check_TP_GM_PCSCF_ECO_INVITE_03( // FIXME RMI To be reviewed + /** + * @desc Verify that the P-CSCF successfully receives an initial emergency INVITE from a registered but not emergency registered UE. + * Reference + * "ETSI TS 124 229 [1], Clauses 5.1.6.8.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_A entity not isEmergencyRegisteredTo the IMS_A + * } + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToEstablishEmergencyCall + * } + * then { + * the IMS_P_CSCF_A entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PPreferredIdentity, // one or two instances + * MessageBody; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_ECO_INVITE_03( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, out SipMessage p_sip @@ -1559,15 +1781,15 @@ module AtsImsIot_TP_behavior_GM { p_monitorCompRef.start( f_Iot_Sip_receive( { - mw_SipRequest(mw_TP_GM_PCSCF_INVITE_03( - -, // FIXME Set expected value - mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), - mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain) - )) + mw_SipRequest(mw_TP_GM_PCSCF_ECO_INVITE_03( + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain) + )) }, { mw_SipRequest(mw_INVITE_Request_Base) }, {0, omit}, - "TP_GM_PCSCF_INVITE_03 - Request", + "TP_GM_PCSCF_ECO_INVITE_03 - Request", true, p_checkMessage ) @@ -1578,6 +1800,34 @@ module AtsImsIot_TP_behavior_GM { } } // End of function f_mtc_check_TP_GM_PCSCF_ECO_INVITE_03 + /** + * @desc Verify that the P-CSCF successfully receives an initial eCall type INVITE from an emergency registered UE. + * Reference + * "ETSI TS 124 229 [1], Clauses 5.1.6.8.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A + * } + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToEstablishEmergencyCall + * } + * then { + * the IMS_P_CSCF_A entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PPreferredIdentity, // one or two instances + * MessageBody; + * from the UE_A entity + * } + * } + */ function f_mtc_check_TP_GM_PCSCF_ECO_INVITE_04( // FIXME RMI To be reviewed in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, @@ -1591,11 +1841,15 @@ module AtsImsIot_TP_behavior_GM { p_monitorCompRef.start( f_Iot_Sip_receive( { - mw_SipRequest(mw_TP_GM_PCSCF_INVITE_04( - -, // FIXME Set expected value - mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), - mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain) - )) + mw_SipRequest(mw_TP_GM_PCSCF_ECO_INVITE_04( + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain), + -, -, + mw_PPreferredID, + mw_accept({mw_acceptBody("application/EmergencyCallData.Control+xml")}), + mw_recevInfo({mw_infoPackage_Type("EmergencyCallData.eCall.MSD")}) + )) }, { mw_SipRequest(mw_INVITE_Request_Base) }, {0, omit}, @@ -1899,10 +2153,10 @@ module AtsImsIot_TP_behavior_GM { } // End of function f_mtc_check_TP_GM_PCSCF_100Trying_01 function f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { + 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( @@ -1915,7 +2169,7 @@ module AtsImsIot_TP_behavior_GM { }, { mw_SipResponse(mw_100Trying_Base) }, { 0, omit }, - "TP_GM_PCSCF_100Trying_01", + "TP_GM_PCSCF_ECO_100Trying_01", false, p_checkMessage ) @@ -2312,10 +2566,10 @@ module AtsImsIot_TP_behavior_GM { * } */ function f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_02( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { + 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( @@ -2364,10 +2618,10 @@ module AtsImsIot_TP_behavior_GM { } // End of function f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_03 function f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_04( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { + 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( @@ -2454,6 +2708,38 @@ module AtsImsIot_TP_behavior_GM { } } // End of function f_mtc_check_TP_GM_PCSCF_200OK_01 + /** + * @desc Verify that the P-CSCF successfully processes a 200 (OK) BYE (Originating Leg) + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE; + * from the IMS_E_CSCF entity + * } + * then { + * the IMS_P_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity; + * to the UE_A entity + * } + * } + */ function f_mtc_check_TP_GM_PCSCF_ECO_200OK_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, @@ -2863,6 +3149,30 @@ module AtsImsIot_TP_behavior_GM { } } // End of function f_mtc_check_TP_GM_PCSCF_BYE_01 + /** + * @desc Verify that the P-CSCF successfully processes a BYE for an emergency call. + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToSend a BYE + * } + * then { + * the IMS_P_CSCF_A entity receives a BYE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * 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 + * } + * } + */ function f_mtc_check_TP_GM_PCSCF_ECO_BYE_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, @@ -3195,6 +3505,66 @@ module AtsImsIot_TP_behavior_GM { } } // End of function f_mtc_check_TP_GM_PCSCF_200OK_BYE_01 + /** + * @desc Verify that the P-CSCF successfully processes a 200 (OK) BYE (Originating Leg) + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE; + * from the IMS_E_CSCF entity + * } + * then { + * the IMS_P_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * to the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_ECO_200OK_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_ECO_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_GM_PCSCF_ECO_200OK_BYE_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_200OK_BYE_01 + /** * @desc Verify that the P-CSCF successfully processes a 200 (OK) BYE (Terminating Leg). * Initial conditions with { @@ -3251,6 +3621,65 @@ module AtsImsIot_TP_behavior_GM { } } // End of function f_mtc_check_TP_GM_PCSCF_200OK_BYE_02 + /** + * @desc Verify that the P-CSCF successfully processes a 200 (OK) BYE (Terminating Leg) + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * to the IMS_E_CSCF entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_ECO_200OK_BYE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_ECO_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_GM_PCSCF_ECO_200OK_BYE_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_200OK_BYE_02 + function f_mtc_check_TP_GM_PCSCF_200OK_BYE_03( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, @@ -3420,6 +3849,30 @@ module AtsImsIot_TP_behavior_GM { } } // End of function f_mtc_check_TP_GM_PCSCF_CANCEL_01 + /** + * @desc Verify that the P-CSCF successfully processes a CANCEL during Emergency Call establishment. + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A and + * the UE_A entity hasAchievedInitialEmergencyINVITE + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToSend a CANCEL + * } + * then { + * the IMS_P_CSCF_A entity receives a CANCEL containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * 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 + * } + * } + */ function f_mtc_check_TP_GM_PCSCF_ECO_CANCEL_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, @@ -3439,7 +3892,7 @@ module AtsImsIot_TP_behavior_GM { }, { mw_SipRequest(mw_CANCEL_Request_Base) }, { 0, omit }, - "TP_GM_PCSCF_CANCEL_01", + "TP_GM_PCSCF_ECO_CANCEL_01", true, p_checkMessage ) diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn index ab66af6..8a2afee 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn @@ -260,10 +260,8 @@ module AtsImsIot_TP_behavior_MW_PS { * Realm indicating value PX_UE_A_REALM, * Algorithm indicating value PX_UE_A_AUTH_ALG, * Nonce indicating value "not empty", - * qop indicating value "auth" - * ;, - * Contact indicating value "sos" - * ; + * qop indicating value "auth";, + * Contact indicating value "sos"; * to the UE_A entity * } * } diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates.ttcn index 2ee78db..3604831 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates.ttcn @@ -1920,6 +1920,14 @@ module AtsImsIot_Templates { payload := * } + template Response mw_420BadExtension_Base modifies m_Response_Dummy := + { + statusLine := {c_sipNameVersion, 420, ?}, + msgHeader := ?, + messageBody := *, + payload := * + } + template Response mw_480TemporaryUnavailable_Base modifies m_Response_Dummy := { statusLine := c_statusLine480, @@ -2278,15 +2286,32 @@ module AtsImsIot_Templates { } } // End of template mw_200OK + template (present) Response mw_ECO_200OK( + template (present) CSeq p_cSeq := ?, + template (present) CallId p_callId := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_200OK := { + msgHeader := { + callId := p_callId, + cSeq := p_cSeq, + fromField := p_from, + toField := p_to, + pChargingVector := omit, + pChargingFunctionAddresses := omit, + pPreferredID := omit + } + } // End of template mw_200OK + template Response mw_380AlternateService( template (present) CSeq p_cSeq := ?, template (present) CallId p_callId := ?, template WwwAuthenticate p_wwwAuthenticate := * ) modifies mdw_3XX_Base := { msgHeader := { - cSeq := p_cSeq, - callId := p_callId, - wwwAuthenticate := p_wwwAuthenticate + cSeq := p_cSeq, + callId := p_callId, + wwwAuthenticate := p_wwwAuthenticate } } // End of template mw_380AlternateService @@ -2300,6 +2325,16 @@ module AtsImsIot_Templates { } } // End of template mw_401Unauthorized + template Response mw_403Forbidden( + template (present) CSeq p_cSeq := ?, + template (present) WwwAuthenticate p_wwwAuthenticate := ? + ) modifies mw_403Forbidden_Base := { + msgHeader := { + cSeq := p_cSeq, + wwwAuthenticate := p_wwwAuthenticate + } + } // End of template mw_403Forbidden + template Response mw_404NotFound( template (present) CSeq p_cSeq := ?, template (present) WwwAuthenticate p_wwwAuthenticate := ? @@ -2310,6 +2345,18 @@ module AtsImsIot_Templates { } } // End of template mw_404NotFound + template Response mw_420BadExtension( + template (present) CSeq p_cSeq := ?, + template (present) WwwAuthenticate p_wwwAuthenticate := ?, + template (present) MessageBody p_messageBody := ? + ) modifies mw_420BadExtension_Base := { + msgHeader := { + cSeq := p_cSeq, + wwwAuthenticate := p_wwwAuthenticate + }, + messageBody := p_messageBody + } // End of template mw_420BadExtension + template Response mw_480TemporaryUnavailable( template (present) CallId p_callId := ?, template (present) CSeq p_cSeq := ?, @@ -2507,7 +2554,27 @@ module AtsImsIot_Templates { } } - + template (present) Accept mw_accept( + template (present) AcceptBody_List p_acceptArgs := ? + ) := { + fieldName := ACCEPT_E, + acceptArgs := p_acceptArgs + } + + template (present) RecvInfo mw_recvInfo( + template InfoPackage_List p_infoPackageList := ? + ) := { + fieldName := RECV_INFO_E, + infoPackageList := l_infoPackageList + } + + template(present) PPreferredID mw_PPreferredID( + template(present) PPreferredIDValue_List p_pPreferredIDValue_List := ? + ) := { + fieldName := P_PREFERRED_ID_E, + pPreferredIDValueList := p_pPreferredIDValue_List + } + } // end group HeaderTemplates group AuxiliaryInformationElementTemplates { @@ -2579,6 +2646,22 @@ module AtsImsIot_Templates { } } } + template (present) AcceptBody mw_acceptBody( + template (present) charstring p_mediaRange := ?, + template SemicolonParam_List p_acceptParam := * + ) :={ + mediaRange := p_mediaRange, + acceptParam := p_acceptParam + } + + template (present) InfoPackage_Type mw_infoPackage_Type( + template (present) charstring p_infoPackageName := ?, + template SemicolonParam_List p_infoPackageParams := * + ) := { + infoPackageName := p_infoPackageName, + infoPackageParams := p_infoPackageParams + } + } // End of group AuxiliaryInformationElementTemplates group adapterTemplates { diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn index 106f465..3e91695 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn @@ -212,10 +212,14 @@ module AtsImsIot_Templates_GM { template (present) Authorization p_authorization := ?, template PChargingVector p_pChargingVector := *, template PVisitedNetworkID p_pVisitedNetworkID := *, - template (present) Contact p_contact := ? + template (present) Contact p_contact := ?, + template Path p_path := ?, + template Warning p_warning := ? ) modifies mw_TP_GM_PCSCF_REGISTER_01 := { msgHeader := { - contact := p_contact + contact := p_contact, + path := p_path, + Warning := p_warning } } // End of template mw_TP_GM_PCSCF_ECO_REGISTER_01 @@ -228,6 +232,18 @@ module AtsImsIot_Templates_GM { ) modifies mw_TP_GM_PCSCF_REGISTER_01 := { } // End of template mw_TP_GM_PCSCF_REGISTER_02 + template(present) REGISTER_Request mw_TP_GM_PCSCF_ECO_REGISTER_02( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := *, + template (present) Contact p_contact := ?, + template Path p_path := ?, + template Warning p_warning := ? + ) modifies mw_TP_GM_PCSCF_ECO_REGISTER_01 := { + } // End of template mw_TP_GM_PCSCF_REGISTER_02 + template(present) REGISTER_Request mw_TP_GM_PCSCF_REGISTER_03( template (present) From p_from := ?, template (present) To p_to := ?, @@ -243,7 +259,9 @@ module AtsImsIot_Templates_GM { template (present) Authorization p_authorization := ?, template PChargingVector p_pChargingVector := *, template PVisitedNetworkID p_pVisitedNetworkID := *, - template (present) Contact p_contact := ? + template (present) Contact p_contact := ?, + template Path p_path := ?, + template Warning p_warning := ? ) modifies mw_TP_GM_PCSCF_ECO_REGISTER_01 := { } // End of template mw_TP_GM_PCSCF_ECO_REGISTER_03 @@ -256,6 +274,18 @@ module AtsImsIot_Templates_GM { ) modifies mw_TP_GM_PCSCF_REGISTER_01 := { } // End of template mw_TP_GM_PCSCF_REGISTER_04 + template(present) REGISTER_Request mw_TP_GM_PCSCF_ECO_REGISTER_04( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := *, + template (present) Contact p_contact := ?, + template Path p_path := ?, + template Warning p_warning := ? + ) modifies mw_TP_GM_PCSCF_ECO_REGISTER_01 := { + } // End of template mw_TP_GM_PCSCF_ECO_REGISTER_04 + template(present) REGISTER_Request mw_TP_GM_PCSCF_REGISTER_05( template (present) From p_from := ?, template (present) To p_to := ?, @@ -376,11 +406,13 @@ module AtsImsIot_Templates_GM { template (present) SipUrl p_invite_uri := ?, template (present) From p_from := ?, template (present) To p_to := ?, - template (present) Contact p_contact := ? + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ? ) modifies mw_TP_GM_PCSCF_INVITE_01 := { msgHeader := { contact := p_contact - } + }, + bessageBody := p_messageBody } // End of template mw_TP_GM_PCSCF_ECO_INVITE_01 template (present) INVITE_Request mw_TP_GM_PCSCF_INVITE_02( // TODO To be enforced @@ -394,7 +426,8 @@ module AtsImsIot_Templates_GM { template (present) SipUrl p_invite_uri := ?, template (present) From p_from := ?, template (present) To p_to := ?, - template (present) Contact p_contact := ? + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ? ) modifies mw_TP_GM_PCSCF_ECO_INVITE_01 := { } // End of template mw_TP_GM_PCSCF_ECO_INVITE_02 @@ -405,6 +438,15 @@ module AtsImsIot_Templates_GM { ) modifies mw_TP_GM_PCSCF_INVITE_01 := { } // End of template mw_TP_GM_PCSCF_INVITE_03 + template (present) INVITE_Request mw_TP_GM_PCSCF_ECO_INVITE_03( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ? + ) modifies mw_TP_GM_PCSCF_ECO_INVITE_01 := { + } // End of template mw_TP_GM_PCSCF_ECO_INVITE_03 + template (present) INVITE_Request mw_TP_GM_PCSCF_INVITE_04( // TODO To be enforced template (present) SipUrl p_invite_uri := ?, template (present) From p_from := ?, @@ -412,6 +454,23 @@ module AtsImsIot_Templates_GM { ) modifies mw_TP_GM_PCSCF_INVITE_01 := { } // End of template mw_TP_GM_PCSCF_INVITE_04 + template (present) INVITE_Request mw_TP_GM_PCSCF_ECO_INVITE_04( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PPreferredID p_pPreferredID := ?, + template (present) Accept p_accept := ?, + template (present) RecvInfo p_recvInfo := ? + ) modifies mw_TP_GM_PCSCF_ECO_INVITE_01 := { + msgHeader := { + accept := p_accept, + recvInfo := p_recvInfo, + pPreferredID := p_pPreferredID + } + } // End of template mw_TP_GM_PCSCF_ECO_INVITE_04 + template (present) INVITE_Request mw_TP_GM_PCSCF_RE_INVITE_01( // TODO To be enforced template (present) SipUrl p_invite_uri := ?, template (present) From p_from := ?, diff --git a/ttcn/AtsImsIot/AtsImsIot_TypesAndValues.ttcn b/ttcn/AtsImsIot/AtsImsIot_TypesAndValues.ttcn index 961f35c..7c0384e 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TypesAndValues.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TypesAndValues.ttcn @@ -9,7 +9,7 @@ module AtsImsIot_TypesAndValues { import from LibCommon_BasicTypesAndValues all; import from LibSip_SIPTypesAndValues all; import from LibMsrp_TypesAndValues all; - import from LibDiameter_TypesAndValues {type DIAMETER_MSG} + import from LibDiameter_TypesAndValues all; import from LibCommon_DataStrings all; group SIPmessageTypes { -- GitLab From 8b4f1bd6b047be936407fb91abee2afbcbe7f917 Mon Sep 17 00:00:00 2001 From: garciay Date: Fri, 15 Sep 2023 10:50:29 +0200 Subject: [PATCH 04/19] Review of TTCN-3 implementation & templates of all emergency TPs for the SIP part --- test_purposes/Gm/TP_GM.tplan2 | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test_purposes/Gm/TP_GM.tplan2 b/test_purposes/Gm/TP_GM.tplan2 index 27d8105..4696be0 100644 --- a/test_purposes/Gm/TP_GM.tplan2 +++ b/test_purposes/Gm/TP_GM.tplan2 @@ -71,7 +71,7 @@ Package TP_GM { Algorithm indicating value PX_UE_A_AUTH_ALG, Nonce indicating value "not empty", qop indicating value "auth";; - from the UE_A entity + to the UE_A entity } } } // End of TP_GM_PCSCF_ECO_REGISTER_01 @@ -248,7 +248,7 @@ Package TP_GM { Via indicating value PX_UE_A_VIA, Authorization not indicating value GPRS_IMS_Bundled_authentication, Contact indicating value "sos"; - to the UE_A entity + from the UE_A entity } then { the IMS_P_CSCF_B entity sends a 420_BadExtension containing @@ -260,7 +260,7 @@ Package TP_GM { MessageBody containing XML containing ims_3gpp_element indicating value anonymous_emergencycall;;; - from the UE_A entity + to the UE_A entity } } } // End of TP_GM_PCSCF_ECO_REGISTER_05 @@ -294,7 +294,7 @@ Package TP_GM { From indicating value "Anonymous", To indicating value PX_SIP_EMERGENCY_SERVICE_URN, CallId indicating value PX_UE_A_CALLID, - Via indicating value PX_UE_A_VIA, // see 5.1.6.8.2 7) + Via indicating value PX_UE_A_VIA, // see 5.1.6.8.2 7 Route indicating value PX_UE_A_SERVICE_ROUTE, MessageBody; from the UE_A entity @@ -523,7 +523,7 @@ Package TP_GM { CallId indicating value PX_PSAP_CALLID, Via indicating value PX_PSAP_VIA, Route indicating value PX_PSAP_SERVICE_ROUTE; - from the IMS_E_CSCF entity + to the IMS_E_CSCF entity } then { the IMS_P_CSCF_A entity sends a 200_Ok containing -- GitLab From 274f90b7233800f276f0a822341ba68483b20951 Mon Sep 17 00:00:00 2001 From: garciay Date: Fri, 15 Sep 2023 11:05:24 +0200 Subject: [PATCH 05/19] Change ECO into EMC when required --- ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn | 90 ++++++++++---------- ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn | 6 +- 2 files changed, 48 insertions(+), 48 deletions(-) diff --git a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn index 3a56e3f..d11d47e 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn @@ -1685,7 +1685,7 @@ module AtsImsIot_Emergency { * @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_ECO_INT_REL_01_01() runs on ImsTestCoordinator system IotSystemInterface { + 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 ); @@ -1718,7 +1718,7 @@ module AtsImsIot_Emergency { } else { // TODO Check OPTIONS from PSAP to E-CSCF } - f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_01(); + f_mtc_check_precond_TD_VoLTE_EMC_INT_REL_01_01(); f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 // Test body @@ -1755,23 +1755,23 @@ module AtsImsIot_Emergency { 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_01_01 + } // End of TC TD_VoLTE_EMC_INT_REL_01_01 - group f_TD_VoLTE_ECO_INT_REL_01_01 { + group f_TD_VoLTE_EMC_INT_REL_01_01 { - function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_01() runs on ImsTestCoordinator { + 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_ECO_INT_REL_01_01 + } // End of function f_mtc_check_precond_TD_VoLTE_EMC_INT_REL_01_01 - } // End of group f_TD_VoLTE_ECO_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_ECO_INT_REL_01_02 ( ) runs on ImsTestCoordinator system IotSystemInterface { + 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 ); @@ -1805,7 +1805,7 @@ module AtsImsIot_Emergency { } else { // TODO Check OPTIONS from PSAP to E-CSCF } - f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_02(); + f_mtc_check_precond_TD_VoLTE_EMC_INT_REL_01_02(); f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 // Test body @@ -1842,22 +1842,22 @@ module AtsImsIot_Emergency { 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_01_02 + } // End of TC f_TD_VoLTE_EMC_INT_REL_01_01 - group f_TD_VoLTE_ECO_INT_REL_01_02 { + group f_TD_VoLTE_EMC_INT_REL_01_02 { - function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_02() runs on ImsTestCoordinator { + 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_ECO_INT_REL_01_02 + } // End of function f_mtc_check_precond_TD_VoLTE_EMC_INT_REL_01_02 - } // End of f_TD_VoLTE_ECO_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_ECO_INT_REL_01_03() runs on ImsTestCoordinator system IotSystemInterface { + 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 ); @@ -1891,7 +1891,7 @@ module AtsImsIot_Emergency { // 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_REL_01_03(); + f_mtc_check_precond_TD_VoLTE_EMC_INT_REL_01_03(); // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); @@ -1927,16 +1927,16 @@ module AtsImsIot_Emergency { 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_01_03 + } // End of TC TD_VoLTE_EMC_INT_REL_01_03 - group f_TD_VoLTE_ECO_INT_REL_01_03 { + group f_TD_VoLTE_EMC_INT_REL_01_03 { - function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_03() runs on ImsTestCoordinator { + 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_ECO_INT_REL_01_03 + } // End of function f_mtc_check_precond_TD_VoLTE_EMC_INT_REL_01_03 - } // End of group f_TD_VoLTE_ECO_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. @@ -2214,7 +2214,7 @@ module AtsImsIot_Emergency { * @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_ECO_INT_ABT_01_01() runs on ImsTestCoordinator system IotSystemInterface { + 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 ); @@ -2248,12 +2248,12 @@ module AtsImsIot_Emergency { } else { // TODO Check OPTIONS from PSAP to E-CSCF } - f_mtc_check_precond_TD_VoLTE_ECO_INT_ABT_01_01(); + f_mtc_check_precond_TD_VoLTE_EMC_INT_ABT_01_01(); 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_CANCEL_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 1 + 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 @@ -2291,23 +2291,23 @@ module AtsImsIot_Emergency { setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") } f_cf_adapter_down ( ); - } // End of TC TD_VoLTE_ECO_INT_ABT_01_01 + } // End of TC TD_VoLTE_EMC_INT_ABT_01_01 - group f_TD_VoLTE_ECO_INT_ABT_01_01 { + group f_TD_VoLTE_EMC_INT_ABT_01_01 { - function f_mtc_check_precond_TD_VoLTE_ECO_INT_ABT_01_01() runs on ImsTestCoordinator { + 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_ECO_INT_ABT_01_01 + } // End of function f_mtc_check_precond_TD_VoLTE_EMC_INT_ABT_01_01 - } // End of group f_TD_VoLTE_ECO_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_ECO_INT_ABT_01_02() runs on ImsTestCoordinator system IotSystemInterface { + 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 ); @@ -2341,13 +2341,13 @@ module AtsImsIot_Emergency { } else { // TODO Check OPTIONS from PSAP to E-CSCF } - f_mtc_check_precond_TD_VoLTE_ECO_INT_ABT_01_02(); + f_mtc_check_precond_TD_VoLTE_EMC_INT_ABT_01_02(); 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_CANCEL_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 1 + 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 @@ -2391,23 +2391,23 @@ module AtsImsIot_Emergency { setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") } f_cf_adapter_down ( ); - } // End of TC TD_VoLTE_ECO_INT_ABT_01_02 + } // End of TC TD_VoLTE_EMC_INT_ABT_01_02 - group f_TD_VoLTE_ECO_INT_ABT_01_02 { + group f_TD_VoLTE_EMC_INT_ABT_01_02 { - function f_mtc_check_precond_TD_VoLTE_ECO_INT_ABT_01_02() runs on ImsTestCoordinator { + 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_ECO_INT_ABT_01_02 + } // End of function f_mtc_check_precond_TD_VoLTE_EMC_INT_ABT_01_02 - } // End of group f_TD_VoLTE_ECO_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_ECO_INT_ABT_01_03() runs on ImsTestCoordinator system IotSystemInterface { + 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 ); @@ -2441,13 +2441,13 @@ module AtsImsIot_Emergency { } else { // TODO Check OPTIONS from PSAP to E-CSCF } - f_mtc_check_precond_TD_VoLTE_ECO_INT_ABT_01_03(); + f_mtc_check_precond_TD_VoLTE_EMC_INT_ABT_01_03(); 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_CANCEL_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 1 + 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 @@ -2490,16 +2490,16 @@ module AtsImsIot_Emergency { setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") } f_cf_adapter_down ( ); - } // End of TC TD_VoLTE_ECO_INT_ABT_01_03 + } // End of TC TD_VoLTE_EMC_INT_ABT_01_03 - group f_TD_VoLTE_ECO_INT_ABT_01_03 { + group f_TD_VoLTE_EMC_INT_ABT_01_03 { - function f_mtc_check_precond_TD_VoLTE_ECO_INT_ABT_01_03() runs on ImsTestCoordinator { + 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_ECO_INT_ABT_01_03 + } // End of function f_mtc_check_precond_TD_VoLTE_EMC_INT_ABT_01_03 - } // End of group f_TD_VoLTE_ECO_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. diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn index ac59884..a58f008 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn @@ -3873,7 +3873,7 @@ module AtsImsIot_TP_behavior_GM { * } * } */ - function f_mtc_check_TP_GM_PCSCF_ECO_CANCEL_01( + function f_mtc_check_TP_GM_PCSCF_EMC_CANCEL_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, inout SipMessage p_sip @@ -3892,7 +3892,7 @@ module AtsImsIot_TP_behavior_GM { }, { mw_SipRequest(mw_CANCEL_Request_Base) }, { 0, omit }, - "TP_GM_PCSCF_ECO_CANCEL_01", + "TP_GM_PCSCF_EMC_CANCEL_01", true, p_checkMessage ) @@ -3901,7 +3901,7 @@ module AtsImsIot_TP_behavior_GM { // Retrieve messge f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); } - } // End of function f_mtc_check_TP_GM_PCSCF_ECO_CANCEL_01 + } // End of function f_mtc_check_TP_GM_PCSCF_EMC_CANCEL_01 /** * @desc Verify that the P-CSCF successfully processes a CANCEL (Terminating Leg). -- GitLab From 7e5795ab442228266c7918e6e3c33ea9d72b9353 Mon Sep 17 00:00:00 2001 From: garciay Date: Mon, 18 Sep 2023 09:44:47 +0200 Subject: [PATCH 06/19] Review of TTCN-3 implementation & templates of all emergency TPs for the SIP part --- ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn | 14 +- ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn | 36 +- .../AtsImsIot_TP_behavior_MW_EC.ttcn | 766 +------------- .../AtsImsIot_TP_behavior_MW_PS.ttcn | 967 ++++++++++++++++-- ttcn/AtsImsIot/AtsImsIot_Templates.ttcn | 26 +- ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn | 17 +- 6 files changed, 972 insertions(+), 854 deletions(-) diff --git a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn index d11d47e..ccaa9b5 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn @@ -2261,13 +2261,13 @@ module AtsImsIot_Emergency { 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_ECO_CANCEL_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 6 + f_mtc_check_TP_MW_PCSCF_EMC_CANCEL_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 6 f_mtc_check_TP_MM_ECSCF_ECO_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_ECO_487INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 + f_mtc_check_TP_MW_PCSCF_EMC_487INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 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 @@ -2355,7 +2355,7 @@ module AtsImsIot_Emergency { 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_ECO_CANCEL_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 6 + f_mtc_check_TP_MW_PCSCF_EMC_CANCEL_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 6 f_mtc_check_TP_MW_IBCF_ECO_CANCEL_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 9 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) @@ -2366,7 +2366,7 @@ module AtsImsIot_Emergency { f_mtc_check_TP_IC_IBCF_487INVITE_01(vc_vxlte_monitor_components.ic); // Event 20 f_mtc_check_TP_MW_IBCF_ECO_487INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 21 - f_mtc_check_TP_MW_PCSCF_ECO_487INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 + f_mtc_check_TP_MW_PCSCF_EMC_487INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 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 @@ -2455,7 +2455,7 @@ module AtsImsIot_Emergency { 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_ECO_CANCEL_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 6 + f_mtc_check_TP_MW_PCSCF_EMC_CANCEL_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 6 f_mtc_check_TP_MI_BGCF_ECO_CANCEL_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 13 f_mtc_check_TP_MM_ECSCF_ECO_CANCEL_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 14 @@ -2465,7 +2465,7 @@ module AtsImsIot_Emergency { f_mtc_check_TP_MM_ECSCF_ECO_487INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 22 f_mtc_check_TP_MI_BGCF_ECO_487INVITE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 23 - f_mtc_check_TP_MW_PCSCF_ECO_487INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 + f_mtc_check_TP_MW_PCSCF_EMC_487INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 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 @@ -2992,7 +2992,7 @@ module AtsImsIot_Emergency { f_mtc_userRadioEnabled ( v_ueA, false, true ); // test body // Check that user A starts initial network attachment - f_mtc_check_TP_GX_PCRF_ECO_CCA_02 ( vc_vxlte_monitor_components.gx, false ); // Check (CCA – Event 3) + 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 diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn index a58f008..f8d01ae 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn @@ -272,7 +272,7 @@ module AtsImsIot_TP_behavior_GM { in boolean p_checkMessage := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)) { - var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); var SipMessage v_sip; // Check the first REGISTER @@ -488,7 +488,7 @@ module AtsImsIot_TP_behavior_GM { in boolean p_checkMessage := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ - var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); var SipMessage v_sip; // Check the first REGISTER @@ -675,7 +675,7 @@ module AtsImsIot_TP_behavior_GM { in boolean p_checkMessage := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)) { - var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); // User removed from HSS + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); // User removed from HSS var SipMessage v_sip; // Check the first REGISTER @@ -828,7 +828,7 @@ module AtsImsIot_TP_behavior_GM { in boolean p_checkMessage := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ - var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); var SipMessage v_sip; // Check the first REGISTER @@ -947,7 +947,7 @@ module AtsImsIot_TP_behavior_GM { in boolean p_checkMessage := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ - var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); var SipMessage v_sip; // Check the first REGISTER @@ -956,9 +956,9 @@ module AtsImsIot_TP_behavior_GM { { mw_SipRequest( mw_TP_GM_PCSCF_ECO_REGISTER_05( - mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), - mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), - mw_Authorization_other + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other ) ) }, @@ -1548,15 +1548,15 @@ module AtsImsIot_TP_behavior_GM { ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A_EMERGENCY); - var ImsUserInfo v_userInfoB := f_getTelUserId(PX_PSAP); + var ImsUserInfo v_psap := f_getTelUserId(PX_PSAP); // Check the INVITE p_monitorCompRef.start( f_Iot_Sip_receive( { mw_SipRequest(mw_TP_GM_PCSCF_ECO_INVITE_01( -, // FIXME Set expected value - mw_SipUrl_Anonymous, - mw_To_AddrUnion_TelUrl(v_userInfoB.publicId) + mw_From_AddrUnion_TelUrl(mw_SipUrl_Anonymous.components.sip.userInfo.userOrTelephoneSubscriber), + mw_To_AddrUnion_TelUrl(v_psap.publicId) )) }, { mw_SipRequest(mw_INVITE_Request_Base) }, @@ -1774,8 +1774,8 @@ module AtsImsIot_TP_behavior_GM { out SipMessage p_sip ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ - var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psap := f_getSipUserId(PX_PSAP); // Check the INVITE p_monitorCompRef.start( @@ -1784,7 +1784,7 @@ module AtsImsIot_TP_behavior_GM { mw_SipRequest(mw_TP_GM_PCSCF_ECO_INVITE_03( -, // FIXME Set expected value mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), - mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain) + mw_To_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain) )) }, { mw_SipRequest(mw_INVITE_Request_Base) }, @@ -1834,8 +1834,8 @@ module AtsImsIot_TP_behavior_GM { out SipMessage p_sip ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ - var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psap := f_getSipUserId(PX_PSAP); // Check the INVITE p_monitorCompRef.start( @@ -1844,11 +1844,11 @@ module AtsImsIot_TP_behavior_GM { mw_SipRequest(mw_TP_GM_PCSCF_ECO_INVITE_04( -, // FIXME Set expected value mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), - mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain), + mw_To_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain), -, -, mw_PPreferredID, mw_accept({mw_acceptBody("application/EmergencyCallData.Control+xml")}), - mw_recevInfo({mw_infoPackage_Type("EmergencyCallData.eCall.MSD")}) + mw_recvInfo({mw_infoPackage_Type("EmergencyCallData.eCall.MSD")}) )) }, { mw_SipRequest(mw_INVITE_Request_Base) }, diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn index e73f457..1ccc491 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn @@ -4,7 +4,7 @@ * @desc This module provides the TP behaviour functions at Mw interface at P-CSCF/E-CSCF */ -module AtsImsIot_TP_behavior_MW_EC { +module AtsImsIot_TP_behavior_MW_EC { // TODO: To be removed // LibIms import from LibIms_Templates all; @@ -30,768 +30,4 @@ module AtsImsIot_TP_behavior_MW_EC { import from AtsImsIot_TypesAndValues all; import from AtsImsIot_Functions all; - group imsInvite { - - /** - * @desc "Verify that the P-CSCF successfully processes an initial INVITE from an unregistered UE." - * Reference - * "ETSI TS 124 229 [1], Clauses 5.2.10.2 and 5.2.6.3.3" - * Config Id CF_VxLTE_INT - * PICS Selection NONE - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_A entity not isRegisteredTo the IMS_A and - * the UE_A entity not isEmergencyRegisteredTo the IMS_A - * } - * Expected behaviour - * ensure that { - * when { - * the IMS_P_CSCF_A entity receives an INVITE containing - * From indicating value "Anonymous", - * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE, - * MessageBody; - * from the UE_A entity - * } - * then { - * the IMS_P_CSCF_A entity sends an INVITE containing - * From indicating value "Anonymous", - * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_P_CSCF_A_VIA, - * Route indicating value PX_E_CSCF_SERVICE_ROUTE, - * MessageBody; - * to the IMS_E_CSCF entity - * } - * } - */ - function f_mtc_check_TP_MW_PCSCF_ECO_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_psapInfo := f_getSipUserId(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_psapInfo.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_PCSCF_ECO_INVITE_01 - - /** - * @desc "Verify that the P-CSCF successfully processes an initial INVITE from an registered UE." - * Reference - * "ETSI TS 124 229 [1], Clauses 5.2.10.3 and 5.2.6.3.3" - * Config Id CF_VxLTE_INT - * PICS Selection NONE - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_A entity isEmergencyRegisteredTo the IMS_A - * } - * 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_SIP_EMERGENCY_SERVICE_URN, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE, - * PPreferredIdentity, // one or two instances - * MessageBody; - * from the UE_A entity - * } - * then { - * the IMS_P_CSCF_A entity sends an INVITE containing - * From indicating valuePX_UE_A_SIP_URI, - * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_P_CSCF_A_VIA, - * Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed - * PAssertedIdentity, - * MessageBody; - * to the IMS_E_CSCF entity - * } - * } - */ - function f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02( - 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_EMERGENCY); - var ImsUserInfo v_psapInfo := f_getSipUserId(PX_PSAP); - - // Check the INVITE - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_MW_ECSCF_INVITE_02( - -, // FIXME Set expected value - ( - mw_From_NameAddr_SipUrl({quotedString:=v_psapInfo.publicId}, v_psapInfo.publicId, v_psapInfo.domain), - mw_From_AddrUnion_TelUrl(v_psapInfo.publicId) - ), - ( - mw_To_NameAddr_SipUrl({quotedString:=v_userInfoA.publicId}, v_userInfoA.publicId/*, v_userInfoA.domain*/), - mw_To_AddrUnion_TelUrl(-)//v_userInfoA.publicId - ) - )) - }, - { mw_SipRequest(mw_INVITE_Request_Base) }, - {0, omit}, - "TP_MW_PCSCF_INVITE_02 - 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_PCSCF_ECO_INVITE_02 - - function f_mtc_check_TP_MW_PCSCF_ECO_INVITE_03( - 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_EMERGENCY); - var ImsUserInfo v_psapInfo := f_getSipUserId(PX_PSAP); - - // Check the INVITE - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_MW_ECSCF_INVITE_02( - -, // FIXME Set expected value - ( - mw_From_NameAddr_SipUrl({quotedString:=v_psapInfo.publicId}, v_psapInfo.publicId, v_psapInfo.domain), - mw_From_AddrUnion_TelUrl(v_psapInfo.publicId) - ), - ( - mw_To_NameAddr_SipUrl({quotedString:=v_userInfoA.publicId}, v_userInfoA.publicId/*, v_userInfoA.domain*/), - mw_To_AddrUnion_TelUrl(-)//v_userInfoA.publicId - ) - )) - }, - { mw_SipRequest(mw_INVITE_Request_Base) }, - {0, omit}, - "TP_MW_PCSCF_INVITE_02 - 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_PCSCF_ECO_INVITE_03 - - } // 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_PCSCF_ECO_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_PCSCF_ECO_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_PCSCF_ECO_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_PCSCF_ECO_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_PCSCF_ECO_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_PCSCF_ECO_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_PCSCF_ECO_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_psapInfo := 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_PCSCF_ECO_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_PCSCF_ECO_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_PCSCF_ECO_ACK_01 - - } // End of group imsAck - - group imsBye { - - /** - * @desc Verify that the P-CSCF successfully processes a BYE (Originating Leg). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_B entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the UE_B entity isRegisteredTo the IMS_B and - * the UE_A entity previouslyEstablishedCallWith the UE_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the IMS_P_CSCF_A entity receives a BYE containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_B_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 a BYE containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_B_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_PCSCF_ECO_BYE_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - inout SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the BYE - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_MW_ECSCF_BYE_01( - p_sip.request.msgHeader.callId, - -, // New CSeq - -, // FIXME To be set - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipRequest(mw_BYE_Request_Base) }, - { 0, omit }, - "TP_MW_ECSCF_ECO_BYE_01 - Request", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); - } - } // End of function f_mtc_check_TP_MW_PCSCF_ECO_BYE_01 - - function f_mtc_check_TP_MW_PCSCF_ECO_BYE_02( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - inout SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the BYE - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_MW_ECSCF_BYE_01( - p_sip.request.msgHeader.callId, - -, // New CSeq - -, // FIXME To be set - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipRequest(mw_BYE_Request_Base) }, - { 0, omit }, - "TP_MW_ECSCF_ECO_BYE_02 - Request", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); - } - } // End of function f_mtc_check_TP_MW_PCSCF_ECO_BYE_02 - - } // End of group imsBye - - group ims200OkBye { - - /** - * @desc Verify that the P-CSCF successfully processes a 200 (OK) BYE (Originating Leg). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_B entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the UE_B entity isRegisteredTo the IMS_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the IMS_P_CSCF_A entity sends a 200_Ok containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_B_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE, - * not PChargingVector, - * not PChargingFunctionAddresses, - * not PPreferredIdentity - * ; - * to the IMS_E_CSCF_A entity - * } - * then { - * the IMS_P_CSCF_A entity sends a 200_Ok containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_B_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE, - * not PChargingVector, - * not PChargingFunctionAddresses, - * not PPreferredIdentity - * ; - * to the UE_A entity - * } - * } - */ - function f_mtc_check_TP_MW_PCSCF_ECO_200OK_BYE_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 200 OK BYE - 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, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipResponse(mw_200OK_Base) }, - { 0, omit }, - "TP_MW_ECSCF_200OK_BYE_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_MW_PCSCF_ECO_200OK_BYE_01 - - function f_mtc_check_TP_MW_PCSCF_ECO_200OK_BYE_02( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 200 OK BYE - 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, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipResponse(mw_200OK_Base) }, - { 0, omit }, - "TP_MW_ECSCF_200OK_BYE_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_MW_PCSCF_ECO_200OK_BYE_02 - - } // End of group ims200OkBye - - group imsCancel { - - function f_mtc_check_TP_MW_PCSCF_ECO_CANCEL_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - inout SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the CANCEL - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_MW_ECSCF_CANCEL_01( - p_sip.request.msgHeader.callId, - -, // New CSeq - -, // FIXME To be set - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipRequest(mw_CANCEL_Request_Base) }, - { 0, omit }, - "TP_MW_ECSCF_CANCEL_01 - Request", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); - } - } // End of function f_mtc_check_TP_MW_PCSCF_ECO_CANCEL_01 - - } // End of group imsCancel - - group imsTemporaryUnavailable { - - function f_mtc_check_TP_MW_PCSCF_ECO_480TEMPAV_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - inout SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 487 Request Terminated - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipResponse(mw_480TemporaryUnavailable(-, p_sip.request.msgHeader.cSeq)) - }, - { - mw_SipResponse(mdw_4XX_Base) - }, - { 0, omit }, - "TP_MW_PCSCF_ECO_480TEMPAV_01", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); - } - } // End of function f_mtc_check_TP_MW_PCSCF_ECO_480TEMPAV_01 - - } // End of group imsTemporaryUnavailable - } // End of module AtsImsIot_TP_behavior_MW_EC \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn index 8a2afee..8416a9a 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn @@ -216,11 +216,10 @@ module AtsImsIot_TP_behavior_MW_PS { } // End of function f_mtc_check_TP_MW_PCSCF_REGISTER_01 /** - * @desc Verify that the P-CSCF successfully processes a first registration (Successful). + * @desc Verify that the P-CSCF successfully processes a first emergency registration (Successful) * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_A entity isNotRegisteredTo the IMS_A and - * the UE_B entity isNotRegisteredTo the IMS_B + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity not isRegisteredTo the IMS_A * } * * Expected behaviour @@ -231,7 +230,7 @@ module AtsImsIot_TP_behavior_MW_PS { * To indicating value PX_UE_A_SIP_URI, * CallId indicating value PX_UE_A_CALLID, * Via indicating value PX_UE_A_VIA, - * ; + * Contact indicating value "sos";; * from the UE_A entity * } * then { @@ -240,13 +239,14 @@ module AtsImsIot_TP_behavior_MW_PS { * To indicating value PX_UE_A_SIP_URI, * CallId indicating value PX_UE_A_CALLID, * Via indicating value PX_UE_A_VIA, + * Path, * PChargingVector containing * icid indicating value PX_TO_BE_DEFINED, - * PVisitedNetworkID indicating value PX_TO_BE_DEFINED, - * Require_HDR indicating value "path", - * Supported indicating value "path" - * ;; - * to the IMS_I_CSCF_A entity + * PVisitedNetworkID indicating value PX_TO_BE_DEFINED, + * Require indicating value "path", + * Supported indicating value "path", + * Contact indicating value "sos";; + * to the IMS_I_CSCF_A entity * and the IMS_P_CSCF_A entity sends an 401_Unauthorized containing * From indicating value PX_UE_A_SIP_URI, * To indicating value PX_UE_A_SIP_URI, @@ -260,8 +260,7 @@ module AtsImsIot_TP_behavior_MW_PS { * Realm indicating value PX_UE_A_REALM, * Algorithm indicating value PX_UE_A_AUTH_ALG, * Nonce indicating value "not empty", - * qop indicating value "auth";, - * Contact indicating value "sos"; + * qop indicating value "auth";; * to the UE_A entity * } * } @@ -271,7 +270,7 @@ module AtsImsIot_TP_behavior_MW_PS { in boolean p_checkMessage := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)) { - var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); var SipMessage v_sip; // Check first REGISTER request @@ -292,7 +291,7 @@ module AtsImsIot_TP_behavior_MW_PS { mw_SipRequest(mw_REGISTER_Request_Base) }, {0, omit}, - "TP_MW_PCSCF_REGISTER_01 - First request", + "TP_MW_PCSCF_ECO_REGISTER_01 - First request", true, p_checkMessage ) @@ -451,12 +450,75 @@ module AtsImsIot_TP_behavior_MW_PS { } } // End of function f_mtc_check_TP_MW_PCSCF_REGISTER_02 + /** + * @desc Verify that the P-CSCF successfully processes a full emergency registration (Successful) + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity not isRegisteredTo the IMS_A and + * the UE_A entity hasAchievedFirstREGISTER + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization containing + * Authentication_Scheme indicating value PX_TO_BE_DEFINED, + * Authentication_URI indicating value PX_TO_BE_DEFINED, + * Username indicating value PX_UE_A_USERNAME, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth", + * Contact indicating value "sos";; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization containing + * Authentication_Scheme indicating value PX_TO_BE_DEFINED, + * Authentication_URI indicating value PX_TO_BE_DEFINED, + * Username indicating value PX_UE_A_USERNAME, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth", + * PChargingVector, + * Contact indicating value "sos";; + * to the IMS_I_CSCF_A entity + * and the IMS_P_CSCF_A entity sends an 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * AuthenticationInfo, + * PAccessNetworkInfo, + * PAssociatedURI indicating value PX_UE_A_SIP_URI, + * PChargingVector, + * orig_ioi_parameter + * indicating value "Operator Identifier Of ImsA" , + * term_ioi_parameter + * indicating value "Operator Identifier Of ImsB" + * Path, + * ServiceRoute; + * to the UE_A entity + * } + * } + */ function f_mtc_check_TP_MW_PCSCF_ECO_REGISTER_02( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)) { - var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); var SipMessage v_sip; // Check the second REGISTER @@ -464,18 +526,18 @@ module AtsImsIot_TP_behavior_MW_PS { f_Iot_Sip_receive( { mw_SipRequest( - mw_TP_MW_PCSCF_REGISTER_02( - mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), - mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), - mw_Authorization_other - ) + mw_TP_MW_PCSCF_ECO_REGISTER_02( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other + ) ) }, { mw_SipRequest(mw_REGISTER_Request_Base) }, {0, omit}, - "TP_MW_PCSCF_REGISTER_02 - Second request", + "TP_MW_PCSCF_ECO_REGISTER_02 - Second request", true, p_checkMessage ) @@ -618,62 +680,49 @@ module AtsImsIot_TP_behavior_MW_PS { } // End of function f_mtc_check_TP_MW_PCSCF_REGISTER_03 /** - * @desc Verify that the P-CSCF successfully processes a invalid first registration (Unsuccessful). + * @desc Verify that the P-CSCF rejects invalid credentials within registration (Unsuccessful). * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_A entity isNotRegisteredTo the IMS_A and - * the UE_B entity isNotRegisteredTo the IMS_B + * the UE_A entity isAttachedTo the EPC_B and + * the UE_A entity isNotRegisteredTo the IMS_B and + * the UE_B entity isNotRegisteredTo the IMS_B and + * the UE_A entity hasAchievedFirstREGISTER * } * * Expected behaviour * ensure that { * when { - * the IMS_P_CSCF_A entity receives a REGISTER containing + * the IMS_P_CSCF_B entity receives a REGISTER containing * From indicating value PX_UE_A_SIP_URI, * To indicating value PX_UE_A_SIP_URI, * CallId indicating value PX_UE_A_CALLID, * Via indicating value PX_UE_A_VIA, - * Authorization containing - * Authentication_Schema indicating value PX_TO_BE_DEFINED, - * Authentication_URI indicating value PX_TO_BE_DEFINED, - * Username indicating value PX_UE_A_INVALID_USERNAME, - * Realm indicating value PX_UE_A_REALM, - * Algorithm indicating value PX_UE_A_AUTH_ALG, - * Nonce indicating value "" - * ;; + * Authorization indicating value "invalid credentials"; * from the UE_A entity * } * then { - * the IMS_P_CSCF_A entity sends a REGISTER containing + * the IMS_P_CSCF_B entity sends a REGISTER containing * From indicating value PX_UE_A_SIP_URI, * To indicating value PX_UE_A_SIP_URI, * CallId indicating value PX_UE_A_CALLID, * Via indicating value PX_UE_A_VIA, - * Authorization containing - * Authentication_Schema indicating value PX_TO_BE_DEFINED, - * Authentication_URI indicating value PX_TO_BE_DEFINED, - * Username indicating value PX_UE_A_INVALID_USERNAME, - * Realm indicating value PX_UE_A_REALM, - * Algorithm indicating value PX_UE_A_AUTH_ALG, - * Nonce indicating value "" - * ;; - * to the IMS_I_CSCF_A entity - * and the IMS_I_CSCF_A entity sends an 404_NotFound containing + * Authorization indicating value "invalid credentials", + * PChargingVector, + * PVisitedNetwork; + * to the IMS_I_CSCF_B entity + * and the IMS_P_CSCF_B entity sends an 403_Forbidden containing * From indicating value PX_UE_A_SIP_URI, * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * ; - * to the IMS_P_CSCF_A entity + * CallId indicating value PX_UE_A_CALLID; + * to the UE_A entity * } * } */ function f_mtc_check_TP_MW_PCSCF_ECO_REGISTER_03( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false - ) runs on ImsTestCoordinator { + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)) { - var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); // User removed from HSS + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); // User removed from HSS var SipMessage v_sip; // Check the first REGISTER @@ -684,7 +733,7 @@ module AtsImsIot_TP_behavior_MW_PS { mw_TP_MW_PCSCF_ECO_REGISTER_01( mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), - mw_Authorization_other, + mw_Authorization_other, // FIXME indicating value "invalid credentials" -, -, mw_contact(mw_ContactAddress) ) @@ -692,7 +741,7 @@ module AtsImsIot_TP_behavior_MW_PS { }, { mw_SipRequest(mw_REGISTER_Request_Base) }, {0, omit}, - "TP_MW_PCSCF_REGISTER_03 - First request", + "TP_MW_PCSCF_ECO_REGISTER_03 - First request", true, p_checkMessage ) @@ -703,11 +752,11 @@ module AtsImsIot_TP_behavior_MW_PS { if (not(isbound(v_sip))) { return; } - // Check REGISTER 404 Not Found response + // Check REGISTER 403 Forbidden response p_monitorCompRef.start( f_Iot_Sip_receive( { - mw_SipResponse(mw_404NotFound(v_sip.request.msgHeader.cSeq/*, mw_WwwAuthenticate*/)), + mw_SipResponse(mw_403Forbidden(v_sip.request.msgHeader.cSeq/*, mw_WwwAuthenticate*/)), mw_SipResponse(mw_480TemporaryUnavailable(-, v_sip.request.msgHeader.cSeq/*, mw_WwwAuthenticate*/)) }, { @@ -1436,6 +1485,73 @@ module AtsImsIot_TP_behavior_MW_PS { } } // End of function f_mtc_check_TP_MW_PCSCF_INVITE_01 + /** + * @desc "Verify that the P-CSCF successfully processes an initial INVITE from an unregistered UE." + * Reference + * "ETSI TS 124 229 [1], Clauses 5.2.10.2 and 5.2.6.3.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity not isRegisteredTo the IMS_A and + * the UE_A entity not isEmergencyRegisteredTo the IMS_A + * } + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives an INVITE containing + * From indicating value "Anonymous", + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * MessageBody; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends an INVITE containing + * From indicating value "Anonymous", + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_P_CSCF_A_VIA, + * Route indicating value PX_E_CSCF_SERVICE_ROUTE, + * MessageBody; + * to the IMS_E_CSCF entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_ECO_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_EMERGENCY); + var ImsUserInfo v_psap := f_getTelUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_PCSCF_ECO_INVITE_01( + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(mw_SipUrl_Anonymous.components.sip.userInfo.userOrTelephoneSubscriber), + mw_To_AddrUnion_TelUrl(v_psap.publicId) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_ECO_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_PCSCF_ECO_INVITE_01 + /** * @desc Verify that the P-CSCF successfully processes an initial INVITE (Terminating Leg). * Initial conditions with { @@ -1517,6 +1633,80 @@ module AtsImsIot_TP_behavior_MW_PS { } } // End of function f_mtc_check_TP_MW_PCSCF_INVITE_02 + /** + * @desc "Verify that the P-CSCF successfully processes an initial INVITE from an emergency registered UE." + * Reference + * "ETSI TS 124 229 [1], Clauses 5.2.10.2 and 5.2.6.3.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A + * } + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives an INVITE containing + * From indicating value "Anonymous", + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PPreferredIdentity, // one or two instances + * MessageBody; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends an INVITE containing + * From indicating value "Anonymous", + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_P_CSCF_A_VIA, + * Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + * PAssertedIdentity, + * MessageBody; + * to the IMS_E_CSCF entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02( + 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_getSipUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psap := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_PCSCF_ECO_INVITE_02( + -, // FIXME Set expected value + ( + mw_From_NameAddr_SipUrl({quotedString:=v_psap.publicId}, v_psap.publicId, v_psap.domain), + mw_From_AddrUnion_TelUrl(v_psap.publicId) + ), + ( + mw_To_NameAddr_SipUrl({quotedString:=v_userInfoA.publicId}, v_userInfoA.publicId/*, v_userInfoA.domain*/), + mw_To_AddrUnion_TelUrl(-)//v_userInfoA.publicId + ) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_ECO_INVITE_02 - 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_PCSCF_ECO_INVITE_02 + function f_mtc_check_TP_MW_PCSCF_INVITE_03( // FIXME RMI To be reviewed in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, @@ -1550,6 +1740,76 @@ module AtsImsIot_TP_behavior_MW_PS { } } // End of function f_mtc_check_TP_MW_PCSCF_INVITE_03 + /** + * @desc "Verify that the P-CSCF successfully processes an initial INVITE from a registered but not emergency registered UE." + * Reference + * "ETSI TS 124 229 [1], Clauses 5.2.10.2 and 5.2.6.3.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_A entity not isEmergencyRegisteredTo the IMS_A + * } + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives an INVITE containing + * From indicating value "Anonymous", + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PPreferredIdentity, // one or two instances + * MessageBody; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends an INVITE containing + * From indicating value "Anonymous", + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_P_CSCF_A_VIA, + * Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + * PAssertedIdentity, + * MessageBody; + * to the IMS_E_CSCF entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_ECO_INVITE_03( // FIXME RMI To be reviewed + 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_getSipUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psap := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_MW_PCSCF_ECO_INVITE_03( + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_INVITE_ECO_03 - 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_PCSCF_ECO_INVITE_03 + function f_mtc_check_TP_MW_PCSCF_INVITE_04( // FIXME RMI To be reviewed in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, @@ -1583,6 +1843,154 @@ module AtsImsIot_TP_behavior_MW_PS { } } // End of function f_mtc_check_TP_MW_PCSCF_INVITE_04 + /** + * @desc "Verify that the P-CSCF rejects an initial INVITE from a not emergency registered UE + * if the IM CN subsystem of the P-CSCF is not capable to handle emergency sessions." + * Reference + * "ETSI TS 124 229 [1], Clauses 5.2.10.2 and 5.2.6.3.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_A entity not isEmergencyRegisteredTo the IMS_A + * } + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives an INVITE containing + * From indicating value "Anonymous", + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * MessageBody; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends an INVITE containing + * From indicating value "Anonymous", + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_P_CSCF_A_VIA, + * Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + * PAssertedIdentity, + * MessageBody containing + * XML containing + * Version indicating value "1", + * Type_child indicating value "emergency", + * Reason_child, + * Action_child;;; + * to the IMS_E_CSCF entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_ECO_INVITE_04( // FIXME RMI To be reviewed + 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_getSipUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psap := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_MW_PCSCF_ECO_INVITE_04( + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain), + -, + mw_MBody_MIME_Ims3gpp( + *, + mw_Ims_Eco_3gpp_CW + ))) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_INVITE_ECO_04 - 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_PCSCF_ECO_INVITE_04 + + /** + * @desc "Verify that the E-CSCF successfully processes a callback INVITE from PSAP towards P-CSCF." + * Reference + * "ETSI TS 124 229 [1], Clauses 5.2.10.2 and 5.2.6.3.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A + * } + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives an INVITE containing + * From indicating value "Anonymous", + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + * PAssertedIdentity, + * MessageBody; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends an INVITE containing + * From indicating value "Anonymous", + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_P_CSCF_A_VIA, + * Route indicating value PX_E_CSCF_SERVICE_ROUTE, + * PPreferredIdentity, // one or two instances + * MessageBody; + * to the IMS_E_CSCF entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_ECO_INVITE_05( // FIXME RMI To be reviewed + 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_getSipUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psap := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_MW_PCSCF_ECO_INVITE_05( + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_INVITE_ECO_05 - 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_PCSCF_ECO_INVITE_05 + /** * @desc Verify that the P-CSCF successfully processes an initial RE-INVITE (Originating Leg). * Initial conditions with { @@ -1847,6 +2255,32 @@ module AtsImsIot_TP_behavior_MW_PS { } } // End of function f_mtc_check_TP_MW_PCSCF_100Trying_01 + function f_mtc_check_TP_MW_PCSCF_ECO_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_ECO_100Trying_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01 + /** * @desc Verify that the P-CSCF successfully processes a 100 (Trying) provisional response on initial INVITE (Terminating Leg). * Initial conditions with { @@ -2011,6 +2445,34 @@ module AtsImsIot_TP_behavior_MW_PS { } } // End of function f_mtc_check_TP_MW_PCSCF_180RINGING_01 + function f_mtc_check_TP_MW_PCSCF_ECO_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_ECO_180RINGING_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01 + /** * @desc Verify that the P-CSCF successfully processes a 180 (Ringing) provisional response on initial INVITE (Terminating Leg).. * Initial conditions with { @@ -2189,6 +2651,32 @@ module AtsImsIot_TP_behavior_MW_PS { } } // End of function f_mtc_check_TP_MW_PCSCF_183SESSION_PROGRESS_01 + function f_mtc_check_TP_MW_PCSCF_ECO_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_ECO_183SESSION_PROGRESS_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01 + /** * @desc Verify that the P-CSCF successfully processes a 183 (Ringing) provisional response on initial INVITE (Terminating Leg).. * Initial conditions with { @@ -2371,7 +2859,41 @@ module AtsImsIot_TP_behavior_MW_PS { }, { mw_SipResponse(mw_200OK_Base) }, { 0, omit }, - "TP_MW_PCSCF_200OK_01", + "TP_MW_PCSCF_200OK_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + } + } // End of function f_mtc_check_TP_MW_PCSCF_200OK_01 + + function f_mtc_check_TP_MW_PCSCF_ECO_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_psapInfo := f_getSipUserId(PX_PSAP); + + // 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:=v_psapInfo.publicId}), + mw_To_AddrUnion_TelUrl(v_psapInfo.publicId), + p_sip.request.msgHeader.toField + ) + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MW_ECSCF_ECO_200OK_01", false, p_checkMessage ) @@ -2379,7 +2901,7 @@ module AtsImsIot_TP_behavior_MW_PS { p_monitorCompRef.done; } - } // End of function f_mtc_check_TP_MW_PCSCF_200OK_01 + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_200OK_01 /** * @desc Verify that the P-CSCF successfully processes a 200 (Ok) provisional response on initial INVITE (Terminating Leg). @@ -2566,6 +3088,34 @@ module AtsImsIot_TP_behavior_MW_PS { } } // End of function f_mtc_check_TP_MW_PCSCF_ACK_01 + function f_mtc_check_TP_MW_PCSCF_ECO_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_ECO_ACK_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_ACK_01 + /** * @desc Verify that the P-CSCF successfully processes a ACK provisional response on initial INVITE (Terminating Leg). * Initial conditions with { @@ -2751,6 +3301,98 @@ module AtsImsIot_TP_behavior_MW_PS { } } // End of function f_mtc_check_TP_MW_PCSCF_BYE_01 + /** + * @desc Verify that the P-CSCF successfully processes a BYE for an emergency call. + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_A entity not isEmergencyRegisteredTo the IMS_A and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a BYE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * 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 a BYE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * 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_PCSCF_ECO_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_ECSCF_BYE_01( + p_sip.request.msgHeader.callId, + -, // New CSeq + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_BYE_Request_Base) }, + { 0, omit }, + "TP_MW_ECSCF_ECO_BYE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_BYE_01 + + function f_mtc_check_TP_MW_PCSCF_ECO_BYE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_ECSCF_BYE_01( + p_sip.request.msgHeader.callId, + -, // New CSeq + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_BYE_Request_Base) }, + { 0, omit }, + "TP_MW_ECSCF_ECO_BYE_02 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_BYE_02 + /** * @desc Verify that the P-CSCF successfully processes a BYE (Terminating Leg). * Initial conditions with { @@ -3029,6 +3671,60 @@ module AtsImsIot_TP_behavior_MW_PS { } } // End of function f_mtc_check_TP_MW_PCSCF_200OK_BYE_01 + function f_mtc_check_TP_MW_PCSCF_ECO_200OK_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK BYE + 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, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MW_ECSCF_ECO_200OK_BYE_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_200OK_BYE_01 + + function f_mtc_check_TP_MW_PCSCF_ECO_200OK_BYE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK BYE + 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, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MW_ECSCF_ECO_200OK_BYE_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_200OK_BYE_02 + /** * @desc Verify that the P-CSCF successfully processes a 200 (OK) BYE (Terminating Leg). * Initial conditions with { @@ -3258,6 +3954,67 @@ module AtsImsIot_TP_behavior_MW_PS { } } // End of function f_mtc_check_TP_MW_PCSCF_CANCEL_01 + /** + * @desc Verify that the P-CSCF successfully processes a CANCEL during Emergency Call establishment. + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A and + * the UE_A entity hasAchievedInitialEmergencyINVITE and + * the UE_A entity isRequestedToSend a CANCEL + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a CANCEL containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * 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 a CANCEL containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * 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_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_EMC_CANCEL_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_ECSCF_CANCEL_01( + p_sip.request.msgHeader.callId, + -, // New CSeq + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_CANCEL_Request_Base) }, + { 0, omit }, + "TP_MW_PCSCF_EMC_CANCEL_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_EMC_CANCEL_01 + /** * @desc Verify that the P-CSCF successfully processes a CANCEL (Terminating Leg). * Initial conditions with { @@ -3443,6 +4200,33 @@ module AtsImsIot_TP_behavior_MW_PS { } } // End of function f_mtc_check_TP_MW_PCSCF_200OK_CANCEL_01 + function f_mtc_check_TP_MW_PCSCF_ECO_200OK_CANCEL_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_ECO_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MW_PCSCF_ECO_200OK_CANCEL_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_200OK_CANCEL_01 + /** * @desc Verify that the P-CSCF successfully processes a 200 (OK) CANCEL (Terminating Leg). * Initial conditions with { @@ -3862,7 +4646,37 @@ module AtsImsIot_TP_behavior_MW_PS { } } // End of function f_mtc_check_TP_MW_PCSCF_487INVITE_01 - function f_mtc_check_TP_MW_PCSCF_ECO_487INVITE_01( + /** + * @desc Verify that the P-CSCF successfully processes a 487 INVITE (Request Terminated) to reject call (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_A entity isRequestedToSend a CANCEL + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a 487_INVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE; + * from the IMS_E_CSCF_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a 487_INVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_EMC_487INVITE_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, inout SipMessage p_sip @@ -3895,7 +4709,7 @@ module AtsImsIot_TP_behavior_MW_PS { // Retrieve messge f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); } - } // End of function f_mtc_check_TP_MW_PCSCF_ECO_487INVITE_01 + } // End of function f_mtc_check_TP_MW_PCSCF_EMC_487INVITE_01 /** * @desc Verify that the P-CSCF successfully processes a 487 INVITE (Request Terminated) to reject call (Terminating Leg). @@ -4036,4 +4850,35 @@ module AtsImsIot_TP_behavior_MW_PS { } // End of group imsRequestTermination + group imsTemporaryUnavailable { + + function f_mtc_check_TP_MW_PCSCF_ECO_480TEMPAV_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_480TemporaryUnavailable(-, p_sip.request.msgHeader.cSeq)) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_MW_PCSCF_ECO_480TEMPAV_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_480TEMPAV_01 + + } // End of group imsTemporaryUnavailable + } // End of module AtsImsIot_TP_behavior_MW_PS diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates.ttcn index 3604831..f7ad97b 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates.ttcn @@ -11,11 +11,20 @@ module AtsImsIot_Templates { import from LibIot_TypesAndValues all; import from AtsImsIot_TypesAndValues all; import from LibSip_SIPTypesAndValues all; + import from LibSip_MessageBodyTypes all; + import from LibSip_XMLTypes all; import from LibSip_Templates all; import from LibSip_Common all; import from LibMsrp_TypesAndValues all; + import from LibIms_Templates all; import from LibIot_PIXITS all; import from AtsImsIot_PIXITS all; + + import from XSD all; + import from NoTargetNamespace language "XSD" all + with { + extension "File:../xsd/Ims3gpp.xsd"; + } group adapterMsgTemplates { template SetFilterReq m_SetFilterReq(ProtocolFilter p_protocol, InterfaceInfoList p_iterfaces) := { @@ -2565,7 +2574,7 @@ module AtsImsIot_Templates { template InfoPackage_List p_infoPackageList := ? ) := { fieldName := RECV_INFO_E, - infoPackageList := l_infoPackageList + infoPackageList := p_infoPackageList } template(present) PPreferredID mw_PPreferredID( @@ -2664,6 +2673,21 @@ module AtsImsIot_Templates { } // End of group AuxiliaryInformationElementTemplates + group messageBody_XML { + + template(present) TIMS3GPP mw_Ims_Eco_3gpp_CW modifies mw_Ims_3gpp_CW := { + choice := { + alternative_service := { + type_ := { + attr := { "emergency" }, + elem_list := ? + } + } + } + } + + } // End of group messageBody_XML + group adapterTemplates { template GeneralConfigurationReq m_generalConfigurationReq_offline := { diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn index 3e91695..cb0acdb 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn @@ -11,6 +11,7 @@ module AtsImsIot_Templates_GM { // libSip import from LibSip_SIPTypesAndValues all; + import from LibSip_MessageBodyTypes all; import from LibSip_Templates all; import from LibSip_Common all; @@ -219,7 +220,7 @@ module AtsImsIot_Templates_GM { msgHeader := { contact := p_contact, path := p_path, - Warning := p_warning + warning := p_warning } } // End of template mw_TP_GM_PCSCF_ECO_REGISTER_01 @@ -295,6 +296,18 @@ module AtsImsIot_Templates_GM { ) modifies mw_TP_GM_PCSCF_REGISTER_01 := { } // End of template mw_TP_GM_PCSCF_REGISTER_04 + template(present) REGISTER_Request mw_TP_GM_PCSCF_ECO_REGISTER_05( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := *, + template (present) Contact p_contact := ?, + template Path p_path := ?, + template Warning p_warning := ? + ) modifies mw_TP_GM_PCSCF_ECO_REGISTER_01 := { + } // End of template mw_TP_GM_PCSCF_ECO_REGISTER_05 + template(present) REGISTER_Request mw_TP_GM_PCSCF_REGISTER_07( template (present) From p_from := ?, template (present) To p_to := ?, @@ -412,7 +425,7 @@ module AtsImsIot_Templates_GM { msgHeader := { contact := p_contact }, - bessageBody := p_messageBody + messageBody := p_messageBody } // End of template mw_TP_GM_PCSCF_ECO_INVITE_01 template (present) INVITE_Request mw_TP_GM_PCSCF_INVITE_02( // TODO To be enforced -- GitLab From 663529a36d4d70e83806cd783ddbb1c58edd1206 Mon Sep 17 00:00:00 2001 From: garciay Date: Mon, 18 Sep 2023 10:53:28 +0200 Subject: [PATCH 07/19] Review of TTCN-3 implementation & templates of all emergency TPs for the SIP part --- .../AtsImsIot_TP_behavior_MW_IS.ttcn | 260 ++++++++++++++++-- ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn | 123 +++++++-- 2 files changed, 337 insertions(+), 46 deletions(-) diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_IS.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_IS.ttcn index e72bdfa..d9ae0d3 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_IS.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_IS.ttcn @@ -193,9 +193,8 @@ module AtsImsIot_TP_behavior_MW_IS { /** * @desc Verify that the I-CSCF successfully processes a first registration (Successful). * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_A entity isNotRegisteredTo the IMS_A and - * the UE_B entity isNotRegisteredTo the IMS_B + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity not isRegisteredTo the IMS_A * } * * Expected behaviour @@ -206,7 +205,7 @@ module AtsImsIot_TP_behavior_MW_IS { * To indicating value PX_UE_A_SIP_URI, * CallId indicating value PX_UE_A_CALLID, * Via indicating value PX_UE_A_VIA, - * ; + * Contact indicating value "sos"; * from the IMS_P_CSCF_A entity * } * then { @@ -236,7 +235,7 @@ module AtsImsIot_TP_behavior_MW_IS { in boolean p_checkMessage := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ - var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); var SipMessage v_sip; // Check the first REGISTER @@ -282,7 +281,7 @@ module AtsImsIot_TP_behavior_MW_IS { )) }, {0, omit}, - "TP_MW_ICSCF_REGISTER_01 - 401 Unauthorized", + "TP_MW_ICSCF_ECO_REGISTER_01 - 401 Unauthorized", false, p_checkMessage ) @@ -400,12 +399,58 @@ module AtsImsIot_TP_behavior_MW_IS { } } // End of function f_mtc_check_TP_MW_ICSCF_REGISTER_02 + /** + * @desc Verify that the I-CSCF successfully processes a full registration (Successful). + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity not isRegisteredTo the IMS_A and + * the UE_A entity hasAchievedFirstREGISTER + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_I_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization containing + * Authentication_Scheme indicating value PX_TO_BE_DEFINED, + * Authentication_URI indicating value PX_TO_BE_DEFINED, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth";, + * Contact indicating value "sos"; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_I_CSCF_A entity sends an 401_Unauthorized containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * AuthenticationInfo, + * PAccessNetworkInfo, + * PAssociatedURI indicating value PX_UE_A_SIP_URI, + * PChargingVector, + * orig_ioi_parameter + * indicating value "Operator Identifier Of ImsA" , + * term_ioi_parameter + * indicating value "Operator Identifier Of ImsB";, + * Path, + * ServiceRoute; + * to the IMS_S_CSCF_A entity + * } + * } + */ function f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_02( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ - var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); var SipMessage v_sip; // Check the first REGISTER @@ -559,9 +604,9 @@ module AtsImsIot_TP_behavior_MW_IS { /** * @desc Verify that the I-CSCF successfully processes a invalid first registration (Unsuccessful). * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isEmergencyAttachedTo the EPC_A and * the UE_A entity isNotRegisteredTo the IMS_A and - * the UE_B entity isNotRegisteredTo the IMS_B + * the UE_A entity hasAchievedFirstREGISTER * } * * Expected behaviour @@ -572,20 +617,11 @@ module AtsImsIot_TP_behavior_MW_IS { * To indicating value PX_UE_A_SIP_URI, * CallId indicating value PX_UE_A_CALLID, * Via indicating value PX_UE_A_VIA, - * Authorization containing - * Authentication_Schema indicating value PX_TO_BE_DEFINED, - * Authentication_URI indicating value PX_TO_BE_DEFINED, - * Username indicating value PX_UE_A_INVALID_USERNAME, - * Realm indicating value PX_UE_A_REALM, - * Algorithm indicating value PX_UE_A_AUTH_ALG, - * Nonce indicating value "not empty", - * qop indicating value "auth", - * not SecurityClient - * ;; + * Authorization indicating value "invalid credentials"; * from the IMS_P_CSCF_A entity * } * then { - * the IMS_I_CSCF_A entity sends an 404_NotFound containing + * the IMS_I_CSCF_A entity sends an 403_Forbiden containing * From indicating value PX_UE_A_SIP_URI, * To indicating value PX_UE_A_SIP_URI, * CallId indicating value PX_UE_A_CALLID @@ -599,7 +635,7 @@ module AtsImsIot_TP_behavior_MW_IS { in boolean p_checkMessage := true ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ - var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); // User removed from HSS + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); // User removed from HSS var SipMessage v_sip; // Check the first REGISTER @@ -610,7 +646,7 @@ module AtsImsIot_TP_behavior_MW_IS { mw_TP_MW_ICSCF_ECO_REGISTER_03( mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), - mw_Authorization_other/*(mw_credentialIntegrityYes)*/ + mw_Authorization_other/*(mw_credentialIntegrityYes)*/ // FIXME indicating value "Invalid credentials" ) ) }, @@ -618,7 +654,7 @@ module AtsImsIot_TP_behavior_MW_IS { mw_SipRequest(mw_REGISTER_Request_Base) }, {0, omit}, - "TP_MW_ICSCF_REGISTER_03 - First request", + "TP_MW_ICSCF_ECO_REGISTER_03 - First request", true, p_checkMessage ) @@ -629,11 +665,11 @@ module AtsImsIot_TP_behavior_MW_IS { if (not(isbound(v_sip))) { return; } - // Check REGISTER 404 Not Found response + // Check REGISTER 403 Forbidden response p_monitorCompRef.start( f_Iot_Sip_receive( { - mw_SipResponse(mw_404NotFound(v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)), + mw_SipResponse(mw_403Forbidden(v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)), mw_SipResponse(mw_480TemporaryUnavailable(-, v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)) }, { @@ -643,7 +679,7 @@ module AtsImsIot_TP_behavior_MW_IS { )) }, {0, omit}, - "TP_MW_ICSCF_REGISTER_03 - 404 Not Found", + "TP_MW_ICSCF_REGISTER_04 - 403 Firbidden", false, p_checkMessage ) @@ -652,6 +688,178 @@ module AtsImsIot_TP_behavior_MW_IS { } } // End of function f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_03 + /** + * @desc Verify that the I-CSCF processes an invalid first registration in visited network and sends 403 response (Unsuccessful). + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_I_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization indicating value "invalid credentials"; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_I_CSCF_A entity sends an 403_Forbiden containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID + * ; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := true + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); // User removed from HSS + var SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_ICSCF_ECO_REGISTER_03( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other/*(mw_credentialIntegrityYes)*/ // FIXME indicating value "Invalid credentials" + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_MW_ICSCF_ECO_REGISTER_04 - First request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 402 Forbidden response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_403Forbidden(v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)), + mw_SipResponse(mw_480TemporaryUnavailable(-, v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)) + }, + { + mw_SipResponse(mw_Response_4xx_Base( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq + )) + }, + {0, omit}, + "TP_MW_ICSCF_REGISTER_04 - 403 Firbidden", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_04 + + /** + * @desc Verify that the I-CSCF processes an invalid first registration without SecurityClient header in visited network(GIBA supported) and sends 420 response (Unsuccessful). + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_I_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization indicating value "invalid credentials"; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_I_CSCF_A entity sends an 420_BadExtension containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID + * ; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_05( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := true + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); // User removed from HSS + var SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_ICSCF_ECO_REGISTER_03( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other/*(mw_credentialIntegrityYes)*/ // FIXME indicating value "Invalid credentials" + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_MW_ICSCF_ECO_REGISTER_05 - First request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 420 Bad Extension response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_420BadExtension(v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)), + mw_SipResponse(mw_480TemporaryUnavailable(-, v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)) + }, + { + mw_SipResponse(mw_Response_4xx_Base( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq + )) + }, + {0, omit}, + "TP_MW_ICSCF_REGISTER_04 - 403 Firbidden", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_05 + function f_mtc_check_TP_MW_ICSCF_REGISTER_04( // FIXME RMI To be reviewed in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := true diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn index 05dd774..ad1de23 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn @@ -11,6 +11,7 @@ module AtsImsIot_Templates_MW { // libSip import from LibSip_SIPTypesAndValues all; + import from LibSip_MessageBodyTypes all; import from LibSip_Templates all; import from LibSip_Common all; @@ -54,12 +55,18 @@ module AtsImsIot_Templates_MW { template (present) Authorization p_authorization := ?, template PChargingVector p_pChargingVector := *, template PVisitedNetworkID p_pVisitedNetworkID := *, - template (present) Contact p_contact := ? + template (present) Contact p_contact := ?, + template (present) Path p_path := ?, + template (present) Warning p_warning := ?, + template (present) PAccessNetworkInfo p_pAccessNetworkInfo := ? ) modifies mw_REGISTER_authorizedRequest_wo_securityheaders_IMS := { msgHeader := { - contact := p_contact + contact := p_contact, + path := p_path, + warning := p_warning, + pAccessNetworkInfo := p_pAccessNetworkInfo } - } // End of template mw_TP_MW_PCSCF_REGISTER_01 + } // End of template mw_TP_MW_PCSCF_ECO_REGISTER_01 template(present) REGISTER_Request mw_TP_MW_PCSCF_REGISTER_02( template (present) From p_from := ?, @@ -70,6 +77,23 @@ module AtsImsIot_Templates_MW { ) modifies mw_TP_MW_PCSCF_REGISTER_01 := { } // End of template mw_TP_MW_PCSCF_REGISTER_02 + template(present) REGISTER_Request mw_TP_MW_PCSCF_ECO_REGISTER_02( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := *, + template (present) Contact p_contact := ?, + template (present) Path p_path := ?, + template (present) Warning p_warning := ?, + template (present) PAccessNetworkInfo p_pAccessNetworkInfo := ?, + template (present) ServiceRoute p_serviceRoute := ? + ) modifies mw_TP_MW_PCSCF_ECO_REGISTER_01 := { + msgHeader := { + serviceRoute := p_serviceRoute + } + } // End of template mw_TP_MW_PCSCF_ECO_REGISTER_02 + template(present) REGISTER_Request mw_TP_MW_PCSCF_REGISTER_04( template (present) From p_from := ?, template (present) To p_to := ?, @@ -228,12 +252,38 @@ module AtsImsIot_Templates_MW { } } // End of template mw_TP_MW_PCSCF_INVITE_01 + template (present) INVITE_Request mw_TP_MW_PCSCF_ECO_INVITE_01( + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ? + ) modifies mw_TP_MW_PCSCF_INVITE_01 := { + msgHeader := { + contact := p_contact + }, + messageBody := p_messageBody + } + template (present) INVITE_Request mw_TP_MW_PCSCF_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_PCSCF_INVITE_01 := { - } // End of template mw_TP_MW_PCSCF_INVITE_03 + } // End of template mw_TP_MW_PCSCF_INVITE_02 + + template (present) INVITE_Request mw_TP_MW_PCSCF_ECO_INVITE_02( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PAssertedID p_pAssertedID := ? + ) modifies mw_TP_MW_PCSCF_ECO_INVITE_01 := { + msgHeader := { + pAssertedID := p_pAssertedID + } + } // End of template mw_TP_MW_PCSCF_ECO_INVITE_02 template (present) INVITE_Request mw_TP_MW_PCSCF_INVITE_03( // TODO To be enforced template (present) SipUrl p_invite_uri := ?, @@ -242,6 +292,16 @@ module AtsImsIot_Templates_MW { ) modifies mw_TP_MW_PCSCF_INVITE_01 := { } // End of template mw_TP_MW_PCSCF_INVITE_03 + template (present) INVITE_Request mw_TP_MW_PCSCF_ECO_INVITE_03( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PAssertedID p_pAssertedID := ? + ) modifies mw_TP_MW_PCSCF_ECO_INVITE_02 := { + } // End of template mw_TP_MW_PCSCF_ECO_INVITE_03 + template (present) INVITE_Request mw_TP_MW_PCSCF_INVITE_04( // TODO To be enforced template (present) SipUrl p_invite_uri := ?, template (present) From p_from := ?, @@ -249,6 +309,29 @@ module AtsImsIot_Templates_MW { ) modifies mw_TP_MW_PCSCF_INVITE_01 := { } // End of template mw_TP_MW_PCSCF_INVITE_04 + template (present) INVITE_Request mw_TP_MW_PCSCF_ECO_INVITE_04( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PAssertedID p_pAssertedID := ? + ) modifies mw_TP_MW_PCSCF_ECO_INVITE_02 := { + } // End of template mw_TP_MW_PCSCF_ECO_INVITE_04 + + template (present) INVITE_Request mw_TP_MW_PCSCF_ECO_INVITE_05( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PPreferredID p_pPreferredID := ? + ) modifies mw_TP_MW_PCSCF_ECO_INVITE_01 := { + msgHeader := { + pPreferredID := p_pPreferredID + } + } // End of template mw_TP_MW_PCSCF_ECO_INVITE_04 + template (present) INVITE_Request mw_TP_MW_PCSCF_RE_INVITE_01( // TODO To be enforced template (present) SipUrl p_invite_uri := ?, template (present) From p_from := ?, @@ -344,10 +427,10 @@ module AtsImsIot_Templates_MW { } // End of template mw_TP_MW_PCSCF_180Ringing_04 template (present) Response mw_TP_MW_PCSCF_183SessionProgress_01( - template (present) CSeq p_cSeq := ?, - template (present) From p_from := ?, - template (present) To p_to := ? - ) modifies mw_183SessionProgress_Base := { + 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, @@ -356,24 +439,24 @@ module AtsImsIot_Templates_MW { } // End of template mw_TP_MW_PCSCF_183SessionProgress_01 template (present) Response mw_TP_MW_PCSCF_183SessionProgress_02( - template (present) CSeq p_cSeq := ?, - template (present) From p_from := ?, - template (present) To p_to := ? - ) modifies mw_TP_MW_PCSCF_183SessionProgress_01 := { + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_183SessionProgress_01 := { } // End of template mw_TP_MW_PCSCF_183SessionProgress_02 template (present) Response mw_TP_MW_PCSCF_183SessionProgress_03( - template (present) CSeq p_cSeq := ?, - template (present) From p_from := ?, - template (present) To p_to := ? - ) modifies mw_TP_MW_PCSCF_183SessionProgress_01 := { + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_183SessionProgress_01 := { } // End of template mw_TP_MW_PCSCF_183SessionProgress_03 template (present) Response mw_TP_MW_PCSCF_183SessionProgress_04( - template (present) CSeq p_cSeq := ?, - template (present) From p_from := ?, - template (present) To p_to := ? - ) modifies mw_TP_MW_PCSCF_183SessionProgress_01 := { + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_183SessionProgress_01 := { } // End of template mw_TP_MW_PCSCF_183SessionProgress_04 template (present) ACK_Request mw_TP_MW_PCSCF_ACK_01( // TODO To be enforced -- GitLab From e1ad536a91ca02777bc415397c9b5963e50e4f59 Mon Sep 17 00:00:00 2001 From: garciay Date: Tue, 19 Sep 2023 09:55:56 +0200 Subject: [PATCH 08/19] Review of TTCN-3 implementation & templates of all emergency TPs for the SIP part --- ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn | 48 +- ttcn/AtsImsIot/AtsImsIot_TP_behavior_MI.ttcn | 655 ++++++++++-------- ttcn/AtsImsIot/AtsImsIot_TP_behavior_ML.ttcn | 38 - ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn | 560 +++++++-------- .../AtsImsIot_TP_behavior_MW_PS.ttcn | 18 +- ttcn/AtsImsIot/AtsImsIot_Templates_MI.ttcn | 56 +- ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn | 74 +- 7 files changed, 772 insertions(+), 677 deletions(-) diff --git a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn index ccaa9b5..0211034 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn @@ -691,7 +691,7 @@ module AtsImsIot_Emergency { 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_02(vc_vxlte_monitor_components.mlE_LRF, -, v_sip); // Event 11 + f_mtc_check_TP_ML_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mlE_LRF, -, v_sip); // Event 11 f_mtc_check_TP_ML_ECSCF_ECO_3xx_01(vc_vxlte_monitor_components.mlE_LRF, -, v_sip); // Event 12 f_mtc_check_TP_MM_ECSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 13 @@ -1086,13 +1086,13 @@ module AtsImsIot_Emergency { 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_BGCF_ECO_INVITE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 11 - f_mtc_check_TP_MI_BGCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwEB, -, 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); f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 12 // 183 Session Progress 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_BGCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 14 + 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 @@ -1103,7 +1103,7 @@ module AtsImsIot_Emergency { f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 19 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_BGCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 23 + 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 @@ -1112,13 +1112,13 @@ module AtsImsIot_Emergency { 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 26 - f_mtc_check_TP_MI_BGCF_ECO_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 27 + 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_BGCF_ECO_ACK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 32 + f_mtc_check_TP_MI_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 32 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 @@ -1402,7 +1402,7 @@ module AtsImsIot_Emergency { // Test body - f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // INVITE Event 1 + f_mtc_check_TP_MM_ECSCF_ECO_INVITE_03(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // INVITE Event 1 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 @@ -1898,7 +1898,7 @@ module AtsImsIot_Emergency { 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_BGCF_ECO_BYE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 7 + 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 @@ -1906,7 +1906,7 @@ module AtsImsIot_Emergency { 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_BGCF_ECO_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 17 + 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 @@ -2456,21 +2456,21 @@ module AtsImsIot_Emergency { 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_BGCF_ECO_CANCEL_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 13 + f_mtc_check_TP_MI_ECSCF_EMC_CANCEL_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 13 f_mtc_check_TP_MM_ECSCF_ECO_CANCEL_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 14 - f_mtc_check_TP_MI_BGCF_ECO_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 16 + f_mtc_check_TP_MI_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 16 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_ECO_487INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 22 - f_mtc_check_TP_MI_BGCF_ECO_487INVITE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 23 + 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 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_BGCF_ECO_ACK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 31 + f_mtc_check_TP_MI_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 31 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 @@ -2566,8 +2566,8 @@ module AtsImsIot_Emergency { 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_480TEMPAV_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 480 Temporary Unavailables Event 14 - f_mtc_check_TP_MW_PCSCF_ECO_480TEMPAV_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 23 + 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 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 @@ -2674,7 +2674,7 @@ module AtsImsIot_Emergency { // 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_480TEMPAV_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 23 + 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 @@ -2774,14 +2774,14 @@ module AtsImsIot_Emergency { 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_BGCF_ECO_INVITE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 19 - f_mtc_check_TP_MI_BGCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwEB, -, 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_480TEMPAV_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 21 - f_mtc_check_TP_MI_BGCF_ECO_480TEMPAV_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 22 - f_mtc_check_TP_MW_PCSCF_ECO_480TEMPAV_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 23 + 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 @@ -2792,7 +2792,7 @@ module AtsImsIot_Emergency { 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_BGCF_ECO_ACK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 34 + 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 diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MI.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MI.ttcn index 44d7029..8669444 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MI.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MI.ttcn @@ -15,6 +15,7 @@ module AtsImsIot_TP_behavior_MI { import from LibIot_PIXITS all; // LibSip import from LibSip_SIPTypesAndValues all; + import from LibSip_MessageBodyTypes all; import from LibSip_Templates all; import from LibSip_Common all; import from LibSip_SDPTypes all; @@ -24,7 +25,6 @@ module AtsImsIot_TP_behavior_MI { import from LibMsrp_Templates all; // AtsImsIot import from AtsImsIot_TestSystem all; - import from AtsImsIot_Templates_MW all; import from AtsImsIot_Templates_MI all; import from AtsImsIot_Templates all; import from AtsImsIot_TypesAndValues all; @@ -32,7 +32,45 @@ module AtsImsIot_TP_behavior_MI { group imsInvite { - function f_mtc_check_TP_MI_BGCF_ECO_INVITE_01( + /** + * @desc "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF and routes the request to the BGCF for a PSAP in the PSTN." + * Reference + * "ETSI TS 124 229 [1], Clauses 5.11.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the BGCF + * } + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_P_CSCF_A_VIA, + * Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + * PAssertedIdentity, + * MessageBody; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_E_CSCF entity sends an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_E_CSCF_VIA, + * Route indicating value PX_LRF_SERVICE_ROUTE, + * PChargingVector containing + * not term_ioi_parameter, + * orig_ioi_parameter + * indicating value "Operator Identifier Of ImsA";, + * MessageBody; + * to the IMS_BGCF_A entity + * } + * } + */ + function f_mtc_check_TP_MI_ECSCF_ECO_INVITE_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, out SipMessage p_sip @@ -44,7 +82,7 @@ module AtsImsIot_TP_behavior_MI { // Check the INVITE p_monitorCompRef.start( f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_MI_BGCF_INVITE_01( + { mw_SipRequest(mw_TP_MI_ECSCF_INVITE_01( -, // FIXME Set expected value mw_From_AddrUnion_TelUrl(-), // v_userInfoA.publicId mw_To_AddrUnion_TelUrl(-) // v_psapInfo.publicId @@ -52,7 +90,7 @@ module AtsImsIot_TP_behavior_MI { }, { mw_SipRequest(mw_INVITE_Request_Base) }, {0, omit}, - "TP_MI_BGCF_INVITE_01 - Request", + "TP_MI_ECSCF_ECO_INVITE_01 - Request", true, p_checkMessage ) @@ -62,9 +100,43 @@ module AtsImsIot_TP_behavior_MI { f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); log("##### p_sip: ", p_sip); } - } // End of function f_mtc_check_TP_MI_BGCF_ECO_INVITE_01 + } // End of function f_mtc_check_TP_MI_ECSCF_ECO_INVITE_01 - function f_mtc_check_TP_MI_BGCF_ECO_INVITE_02( + /** + * @desc "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF and routes the request to the BGCF for a PSAP in the PSTN and includes the LRF provided URI in the Request-URI." + * Reference + * "ETSI TS 124 229 [1], Clauses 5.11.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IMS_LRF and + * the IMS_E_CSCF entity hasSentINVITETo the IMS_LRF and + * the IMS_E_CSCF entity supportsRoutingTo the BGCF + * } + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF entity receives an INVITE containing + * Contact indicating value LRF_provided_SIP_URI; + * from the IMS_LRF entity + * } + * then { + * the IMS_E_CSCF entity sends an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_E_CSCF_VIA, + * Route indicating value PX_LRF_SERVICE_ROUTE, + * PChargingVector containing + * not term_ioi_parameter, + * orig_ioi_parameter + * indicating value "Operator Identifier Of ImsA";, + * MessageBody; + * to the IMS_BGCF_A entity + * } + * } + */ + function f_mtc_check_TP_MI_ECSCF_ECO_INVITE_02( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, out SipMessage p_sip @@ -76,7 +148,7 @@ module AtsImsIot_TP_behavior_MI { // Check the INVITE p_monitorCompRef.start( f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_MI_BGCF_INVITE_01( + { mw_SipRequest(mw_TP_MI_ECSCF_INVITE_02( -, // FIXME Set expected value mw_From_AddrUnion_TelUrl(-), // v_userInfoA.publicId mw_To_AddrUnion_TelUrl(-) // v_psapInfo.publicId @@ -84,7 +156,7 @@ module AtsImsIot_TP_behavior_MI { }, { mw_SipRequest(mw_INVITE_Request_Base) }, {0, omit}, - "TP_MI_BGCF_INVITE_01 - Request", + "TP_MI_ECSCF_ECO_INVITE_02 - Request", true, p_checkMessage ) @@ -94,34 +166,84 @@ module AtsImsIot_TP_behavior_MI { f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); log("##### p_sip: ", p_sip); } - } // End of function f_mtc_check_TP_MI_BGCF_ECO_INVITE_02 - - } // End of group imsInvite + } // End of function f_mtc_check_TP_MI_ECSCF_ECO_INVITE_02 - group ims100Trying { - /** - * @desc Verify that the E-CSCF successfully processes a 100 (Trying) provisional response on initial INVITE (Originating Leg). + * @desc "Verify that the E-CSCF successfully processes a callback INVITE from PSAP in the PSTN over BGCF and routes the request to the P-CSCF." + * Reference + * "ETSI TS 124 229 [1], Clause 4.1 item 12" + * Config Id CF_VxLTE_INT + * PICS Selection NONE * 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 + * the IMS_E_CSCF entity supportsRoutingTo the BGCF * } - * * Expected behaviour - * ensure that { - * when { - * the IMS_E_CSCF_A entity receives a 100_Trying - * from the PSAP entity - * } - * then { - * the IMS_E_CSCF_A entity sends a 100_Trying - * to the IMS_P_CSCF_A entity + * ensure that { + * when { + * the IMS_E_CSCF entity receives an INVITE containing + * From indicating value PX_PSAP_TEL_URI,// see 5.11.2 6) b) + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_PSAP_CALLID, + * Via indicating value PX_BGCF_VIA, + * Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + * PAssertedIdentity, + * MessageBody; + * from the IMS_BGCF_A entity + * } + * then { + * the IMS_E_CSCF entity sends an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_E_CSCF_VIA, + * Route indicating value PX_P_CSCD_SERVICE_ROUTE, + * RecordRoute PX_E_CSCF_SERVICE_ROUTE, + * PChargingVector containing + * not term_ioi_parameter, + * orig_ioi_parameter + * indicating value "Operator Identifier Of ImsA";, + * MessageBody; + * to the IMS_P_CSCF_A entity * } * } */ - function f_mtc_check_TP_MI_BGCF_ECO_100Trying_01( + function f_mtc_check_TP_MI_ECSCF_ECO_INVITE_03( + 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_EMERGENCY); + var ImsUserInfo v_psapInfo := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MI_ECSCF_INVITE_03( + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(-), // v_userInfoA.publicId + mw_To_AddrUnion_TelUrl(-) // v_psapInfo.publicId + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MI_ECSCF_ECO_INVITE_03 - 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_MI_ECSCF_ECO_INVITE_03 + + } // End of group imsInvite + + group ims100Trying { + + function f_mtc_check_TP_MI_ECSCF_ECO_100Trying_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, in SipMessage p_sip @@ -130,7 +252,7 @@ module AtsImsIot_TP_behavior_MI { // Check the 100 TRYING p_monitorCompRef.start( f_Iot_Sip_receive( - { mw_SipResponse(mw_TP_MI_BGCF_100Trying_01( + { mw_SipResponse(mw_TP_MI_ECSCF_100Trying_01( p_sip.request.msgHeader.cSeq, p_sip.request.msgHeader.fromField, p_sip.request.msgHeader.toField @@ -138,53 +260,20 @@ module AtsImsIot_TP_behavior_MI { }, { mw_SipResponse(mw_100Trying_Base) }, { 0, omit }, - "TP_MI_BGCF_100Trying_01", + "TP_MI_ECSCF_ECO_100Trying_01", false, p_checkMessage ) ); p_monitorCompRef.done; } - } // End of function f_mtc_check_TP_MI_BGCF_ECO_100Trying_01 + } // End of function f_mtc_check_TP_MI_ECSCF_ECO_100Trying_01 } // End of group ims100Trying group ims180Ringing { - /** - * @desc Verify that the IMS_E_CSCF_A 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 PSAP 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_MI_BGCF_ECO_180RINGING_01( + function f_mtc_check_TP_MI_ECSCF_ECO_180RINGING_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, in SipMessage p_sip @@ -193,7 +282,7 @@ module AtsImsIot_TP_behavior_MI { // Check the 180 RINGING p_monitorCompRef.start( f_Iot_Sip_receive( - { mw_SipResponse(mw_TP_MI_BGCF_180Ringing_01( + { mw_SipResponse(mw_TP_MI_ECSCF_180Ringing_01( p_sip.request.msgHeader.cSeq, p_sip.request.msgHeader.fromField, mw_To_NameAddr_TelUrl( @@ -203,53 +292,20 @@ module AtsImsIot_TP_behavior_MI { }, { mw_SipResponse(mw_180Ringing_Base) }, { 0, omit }, - "TP_MI_BGCF_180RINGING_01", + "TP_MI_ECSCF_ECO_180RINGING_01", false, p_checkMessage ) ); p_monitorCompRef.done; } - } // End of function f_mtc_check_TP_MI_BGCF_ECO_180RINGING_01 + } // End of function f_mtc_check_TP_MI_ECSCF_ECO_180RINGING_01 } // End of group ims180Ringing group ims183SessionProgress { - /** - * @desc Verify that the IMS_E_CSCF_A 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 PSAP 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_MI_BGCF_ECO_183SESSION_PROGRESS_01( + function f_mtc_check_TP_MI_ECSCF_ECO_183SESSION_PROGRESS_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, in SipMessage p_sip @@ -258,7 +314,7 @@ module AtsImsIot_TP_behavior_MI { // Check the 183 SESSION_PROGRESS p_monitorCompRef.start( f_Iot_Sip_receive( - { mw_SipResponse(mw_TP_MI_BGCF_183SessionProgress_01( + { mw_SipResponse(mw_TP_MI_ECSCF_183SessionProgress_01( p_sip.request.msgHeader.cSeq, p_sip.request.msgHeader.fromField, p_sip.request.msgHeader.toField @@ -266,63 +322,24 @@ module AtsImsIot_TP_behavior_MI { }, { mw_SipResponse(mw_183SessionProgress_Base) }, { 0, omit }, - "TP_MI_BGCF_183SESSION_PROGRESS_01", + "TP_MI_ECSCF_ECO_183SESSION_PROGRESS_01", false, p_checkMessage ) ); p_monitorCompRef.done; } - } // End of function f_mtc_check_TP_MI_BGCF_ECO_183SESSION_PROGRESS_01 + } // End of function f_mtc_check_TP_MI_ECSCF_ECO_183SESSION_PROGRESS_01 } // End of group ims183SessionProgress group ims200Ok { - /** - * @desc Verify that the IMS_E_CSCF_A 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_E_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 PSAP 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_MI_BGCF_ECO_200OK_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { + function f_mtc_check_TP_MI_ECSCF_ECO_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); @@ -342,7 +359,7 @@ module AtsImsIot_TP_behavior_MI { }, { mw_SipResponse(mw_200OK_Base) }, { 0, omit }, - "TP_MI_BGCF_200OK_01", + "TP_MI_ECSCF_ECO_200OK_01", false, p_checkMessage ) @@ -350,121 +367,141 @@ module AtsImsIot_TP_behavior_MI { p_monitorCompRef.done; } - } // End of function f_mtc_check_TP_MI_BGCF_ECO_200OK_01 + } // End of function f_mtc_check_TP_MI_ECSCF_ECO_200OK_01 } // End of group ims200Ok group imsAck { + function f_mtc_check_TP_MI_ECSCF_ECO_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_MI_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_MI_ECSCF_ECO_ACK_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MI_ECSCF_ECO_ACK_01 + + } // End of group imsAck + + group imsBye { + /** - * @desc Verify that the IMS_E_CSCF_A successfully processes a ACK provisional response on initial INVITE (Originating Leg). + * @desc Verify that the E-CSCF successfully processes a BYE from the P-CSCF for an Emergency Call and routes the request to the PSAP in the IM CN subsystem of own network * 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 + * the IMS_E_CSCF entity supportsRoutingTo the IM_CN and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP * } * * Expected behaviour * ensure that { * when { - * the IMS_E_CSCF_A entity receives an ACK containing + * the IMS_E_CSCF_A entity receives a BYE containing * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_PSAP_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, * CallId indicating value PX_UE_A_CALLID, * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE - * ; + * 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 + * the IMS_E_CSCF_A entity sends a BYE containing * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_PSAP_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, * CallId indicating value PX_UE_A_CALLID, * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE - * ; - * from the PSAP entity + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the IM_CN entity * } * } */ - function f_mtc_check_TP_MI_BGCF_ECO_ACK_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { + function f_mtc_check_TP_MI_ECSCF_ECO_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)) { - // Check the ACK + // Check the BYE p_monitorCompRef.start( f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_MI_BGCF_ACK_01( + { mw_SipRequest(mw_TP_MI_ECSCF_BYE_01( p_sip.request.msgHeader.callId, - p_sip.request.msgHeader.cSeq, + -, // New CSeq, -, // FIXME To be set p_sip.request.msgHeader.fromField, p_sip.request.msgHeader.toField )) }, - { mw_SipRequest(mw_ACK_Request_Base) }, + { mw_SipRequest(mw_BYE_Request_Base) }, { 0, omit }, - "TP_MI_BGCF_ACK_01 - Request", - false, + "TP_MI_ECSCF_ECO_BYE_01 - Request", + true, p_checkMessage ) ); p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); } - } // End of function f_mtc_check_TP_MI_BGCF_ECO_ACK_01 - - } // End of group imsAck - - group imsBye { - + } // End of function f_mtc_check_TP_MI_ECSCF_ECO_BYE_01 + /** - * @desc Verify that the E-CSCF successfully processes a BYE (Terminating Leg). + * @desc Verify that the E-CSCF successfully processes a BYE from the PSAP in the IM CN subsystem for an Emergency Call and routes the request to the P-CSCF of home network * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_B entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the UE_B entity isRegisteredTo the IMS_B and - * the UE_A entity previouslyEstablishedCallWith the UE_B + * the IMS_E_CSCF entity supportsRoutingTo the IM_CN and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP * } * * Expected behaviour * ensure that { * when { * the IMS_E_CSCF_A entity receives a BYE containing - * From indicating value PX_UE_B_SIP_URI, + * From indicating value PX_PSAP_SIP_URI, * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_B_CALLID, - * Via indicating value PX_UE_B_VIA, - * Route indicating value PX_UE_B_SERVICE_ROUTE - * ; - * from the IMS_P_CSCF_A entity + * CallId indicating value PX_PSAP_CALLID, + * Via indicating value PX_PSAP_CALLID; + * from the IM_CN entity * } * then { * the IMS_E_CSCF_A entity sends a BYE containing - * From indicating value PX_UE_B_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_B_CALLID, - * Via indicating value PX_UE_B_VIA, - * Route indicating value PX_UE_B_SERVICE_ROUTE - * ; - * from the PSAP entity + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * 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 * } * } */ - function f_mtc_check_TP_MI_BGCF_ECO_BYE_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - inout SipMessage p_sip - ) runs on ImsTestCoordinator { + function f_mtc_check_TP_MI_ECSCF_ECO_BYE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)) { // Check the BYE p_monitorCompRef.start( f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_MI_BGCF_BYE_01( + { mw_SipRequest(mw_TP_MI_ECSCF_BYE_01( p_sip.request.msgHeader.callId, -, // New CSeq, -, // FIXME To be set @@ -482,7 +519,7 @@ module AtsImsIot_TP_behavior_MI { }, { mw_SipRequest(mw_BYE_Request_Base) }, { 0, omit }, - "TP_MI_BGCF_BYE_01 - Request", + "TP_MI_ECSCF_ECO_BYE_02 - Request", true, p_checkMessage ) @@ -491,54 +528,17 @@ module AtsImsIot_TP_behavior_MI { // Retrieve messge f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); } - } // End of function f_mtc_check_TP_MI_BGCF_ECO_BYE_01 + } // End of function f_mtc_check_TP_MI_ECSCF_ECO_BYE_02 } // End of group imsBye group ims200OkBye { - /** - * @desc Verify that the E-CSCF successfully processes a 200 (OK) BYE (Originating Leg). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_B entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the UE_B entity isRegisteredTo the IMS_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the IMS_E_CSCF_A entity sends a 200_Ok containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_B_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE, - * not PChargingVector, - * not PChargingFunctionAddresses, - * not PPreferredIdentity - * to the PSAP entity - * } - * then { - * the IMS_E_CSCF_A entity sends a 200_Ok containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_B_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE, - * not PChargingVector, - * not PChargingFunctionAddresses, - * not PPreferredIdentity - * to the IMS_P_CSCF_A entity - * } - * } - */ - function f_mtc_check_TP_MI_BGCF_ECO_200OK_BYE_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { + function f_mtc_check_TP_MI_ECSCF_ECO_200OK_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)) { // Check the 200 OK BYE p_monitorCompRef.start( @@ -552,20 +552,49 @@ module AtsImsIot_TP_behavior_MI { }, { mw_SipResponse(mw_200OK_Base) }, { 0, omit }, - "TP_MI_BGCF_200OK_BYE_01", + "TP_MI_ECSCF_ECO_200OK_BYE_01", false, p_checkMessage ) ); p_monitorCompRef.done; } - } // End of function f_mtc_check_TP_MI_BGCF_ECO_200OK_BYE_01 + } // End of function f_mtc_check_TP_MI_ECSCF_ECO_200OK_BYE_01 } // End of group ims200OkBye group imsCancel { - function f_mtc_check_TP_MI_BGCF_ECO_CANCEL_01( + /** + * @desc Verify that the E-CSCF successfully processes a CANCEL from the P-CSCF for an Emergency Call under establishment and routes the request to the BGCF for a PSAP in the PSTN + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the BGCF and + * the UE_A entity hasAchievedInitialEmergencyINVITE the PSAP via IMS_BGCF_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a CANCEL containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * 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 a CANCEL containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * 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_BGCF_A entity + * } + * } + */ + function f_mtc_check_TP_MI_ECSCF_EMC_CANCEL_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, inout SipMessage p_sip @@ -574,25 +603,17 @@ module AtsImsIot_TP_behavior_MI { // Check the CANCEL p_monitorCompRef.start( f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_MI_BGCF_CANCEL_01( + { mw_SipRequest(mw_TP_MI_ECSCF_CANCEL_01( p_sip.request.msgHeader.callId, -, // New CSeq, -, // FIXME To be set - { - fieldName := FROM_E, - addressField := p_sip.request.msgHeader.toField.addressField, - fromParams := * - }, //p_sip.request.msgHeader.fromField, - { - fieldName := TO_E, - addressField := p_sip.request.msgHeader.fromField.addressField, - toParams := * - } //p_sip.request.msgHeader.toField + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField )) }, { mw_SipRequest(mw_CANCEL_Request_Base) }, { 0, omit }, - "TP_MI_BGCF_CANCEL_01 - Request", + "TP_MI_ECSCF_ECO_CANCEL_01 - Request", true, p_checkMessage ) @@ -601,13 +622,42 @@ module AtsImsIot_TP_behavior_MI { // Retrieve messge f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); } - } // End of function f_mtc_check_TP_MI_BGCF_ECO_CANCEL_01 + } // End of function f_mtc_check_TP_MI_ECSCF_EMC_CANCEL_01 } // End of group imsCancel - group imsRequestTermination { + group imsTemporaryUnavailable { - function f_mtc_check_TP_MI_BGCF_ECO_487INVITE_01( + /** + * @desc Verify that the E-CSCF successfully processes a 480 response from the PSAP in the IM CN subsystem for an Emergency Call and routes the response to the P-CSCF of home network + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IM_CN and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a 480INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the IM_CN entity + * } + * then { + * the IMS_E_CSCF_A entity sends a 480INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * 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 + * } + * } + */ + function f_mtc_check_TP_MI_ECSCF_ECO_480INVITE_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, inout SipMessage p_sip @@ -617,21 +667,13 @@ module AtsImsIot_TP_behavior_MI { p_monitorCompRef.start( f_Iot_Sip_receive( { - mw_SipResponse( - mw_487RequestTerminated( // TODO Enforce template - p_sip.request.msgHeader.callId, - -, // New CSeq - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField, - omit - ) - ) + mw_SipResponse(mw_480TemporaryUnavailable(-, p_sip.request.msgHeader.cSeq)) }, { mw_SipResponse(mdw_4XX_Base) }, { 0, omit }, - "TP_MI_BGCF_487INVITE_01", + "TP_MI_ECSCF_ECO_480INVITE_01", true, p_checkMessage ) @@ -640,13 +682,42 @@ module AtsImsIot_TP_behavior_MI { // Retrieve messge f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); } - } // End of function f_mtc_check_TP_MI_BGCF_ECO_487INVITE_01 - - } // End of group imsRequestTermination + } // End of function f_mtc_check_TP_MI_ECSCF_ECO_480INVITE_01 - group imsTemporaryUnavailable { + } // End of group imsTemporaryUnavailable + + group imsRequestTermination { - function f_mtc_check_TP_MI_BGCF_ECO_480TEMPAV_01( + /** + * @desc Verify that the E-CSCF successfully processes a 487 response from the BGCF for a PSAP in the PSTN for an Emergency Call and routes the response to the P-CSCF + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the BGCF and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP via IMS_BGCF_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a 487INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * 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_BGCF_A entity + * } + * then { + * the IMS_E_CSCF_A entity sends a 487INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * 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 + * } + * } + */ + function f_mtc_check_TP_MI_ECSCF_EMC_487INVITE_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, inout SipMessage p_sip @@ -656,13 +727,21 @@ module AtsImsIot_TP_behavior_MI { p_monitorCompRef.start( f_Iot_Sip_receive( { - mw_SipResponse(mw_480TemporaryUnavailable(-, p_sip.request.msgHeader.cSeq)) + mw_SipResponse( + mw_487RequestTerminated( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField, + omit + ) + ) }, { mw_SipResponse(mdw_4XX_Base) }, { 0, omit }, - "TP_MI_BGCF_480TEMPAV_01", + "TP_MI_ECSCF_EMC_487INVITE_01", true, p_checkMessage ) @@ -671,8 +750,8 @@ module AtsImsIot_TP_behavior_MI { // Retrieve messge f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); } - } // End of function f_mtc_check_TP_MI_BGCF_ECO_480TEMPAV_01 + } // End of function f_mtc_check_TP_MI_ECSCF_EMC_487INVITE_01 - } // End of group imsTemporaryUnavailable + } // End of group imsRequestTermination } // End of module AtsImsIot_TP_behavior_MI \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_ML.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_ML.ttcn index 911d621..2cc6b3a 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_ML.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_ML.ttcn @@ -108,44 +108,6 @@ module AtsImsIot_TP_behavior_ML { } } // End of function f_mtc_check_TP_ML_ECSCF_ECO_INVITE_01 - function f_mtc_check_TP_ML_ECSCF_ECO_INVITE_02( - 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_EMERGENCY); - var ImsUserInfo v_psapInfo := f_getSipUserId(PX_PSAP); - - // Check the INVITE - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_ML_ECSCF_INVITE_01( - -, // FIXME Set expected value - ( - mw_From_NameAddr_SipUrl({quotedString:=v_psapInfo.publicId}, v_psapInfo.publicId, v_psapInfo.domain), - mw_From_AddrUnion_TelUrl(v_psapInfo.publicId) - ), - ( - mw_To_NameAddr_SipUrl({quotedString:=v_userInfoA.publicId}, v_userInfoA.publicId/*, v_userInfoA.domain*/), - mw_To_AddrUnion_TelUrl(-)//v_userInfoA.publicId - ) - )) - }, - { mw_SipRequest(mw_INVITE_Request_Base) }, - {0, omit}, - "TP_ML_ECSCF_ECO_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_ML_ECSCF_ECO_INVITE_02 - } // End of group imsInvite group ims3xxx { diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn index b029915..34c018c 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn @@ -33,40 +33,40 @@ module AtsImsIot_TP_behavior_MM { /** * @desc "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF and routes the request to the PSAP in the IM CN subsystem of own network." - * Reference - * "ETSI TS 124 229 [1], Clauses 5.11.2" - * Config Id CF_VxLTE_INT - * PICS Selection NONE - * Initial conditions with { - * the IMS_E_CSCF entity supportsRoutingTo the IM_CN - * } - * Expected behaviour - * ensure that { - * when { - * the IMS_E_CSCF entity receives an INVITE containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_P_CSCF_A_VIA, - * Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed - * PAssertedIdentity, - * MessageBody; - * from the IMS_P_CSCF_A entity - * } - * then { - * the IMS_E_CSCF entity sends an INVITE containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_E_CSCF_VIA, - * Route indicating value PX_PSAP_SERVICE_ROUTE_IM_CN, - * RecordRoute PX_E_CSCF_SERVICE_ROUTE, - * PChargingVector, - * MessageBody; - * to the IM_CN entity - * } - * } - */ + * Reference + * "ETSI TS 124 229 [1], Clauses 5.11.2" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IM_CN + * } + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_P_CSCF_A_VIA, + * Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + * PAssertedIdentity, + * MessageBody; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_E_CSCF entity sends an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_E_CSCF_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE_IM_CN, + * RecordRoute PX_E_CSCF_SERVICE_ROUTE, + * PChargingVector, + * MessageBody; + * to the IM_CN entity + * } + * } + */ function f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, @@ -87,7 +87,7 @@ module AtsImsIot_TP_behavior_MM { }, { mw_SipRequest(mw_INVITE_Request_Base) }, {0, omit}, - "TP_MM_ECSCF_INVITE_01 - Request", + "TP_MM_ECSCF_ECO_INVITE_01 - Request", true, p_checkMessage ) @@ -99,6 +99,39 @@ module AtsImsIot_TP_behavior_MM { } } // End of function f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01 + /** + * @desc "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF and routes the request to the PSAP in the IM CN subsystem of own network and includes the LRF provided URI in the Route header." + * Reference + * "ETSI TS 124 229 [1], Clauses 5.11.2" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IMS_LRF and + * the IMS_E_CSCF entity hasSentINVITETo the IMS_LRF and + * the IMS_E_CSCF entity supportsRoutingTo the IM_CN + * } + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF entity receives an r_3xx_Any containing + * Contact indicating value LRF_provided_SIP_URI; + * from the IMS_LRF entity + * } + * then { + * the IMS_E_CSCF entity sends an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_E_CSCF_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE_IM_CN, + * RecordRoute PX_E_CSCF_SERVICE_ROUTE, + * not PChargingFunctionAddresses, + * PChargingVector, + * MessageBody; + * to the IM_CN entity + * } + * } + */ function f_mtc_check_TP_MM_ECSCF_ECO_INVITE_02( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, @@ -111,7 +144,7 @@ module AtsImsIot_TP_behavior_MM { // Check the INVITE p_monitorCompRef.start( f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_MM_ECSCF_INVITE_01( + { mw_SipRequest(mw_TP_MM_ECSCF_INVITE_02( -, // FIXME Set expected value mw_From_AddrUnion_TelUrl(-), // v_userInfoA.publicId mw_To_AddrUnion_TelUrl(-) // v_psapInfo.publicId @@ -119,7 +152,7 @@ module AtsImsIot_TP_behavior_MM { }, { mw_SipRequest(mw_INVITE_Request_Base) }, {0, omit}, - "TP_MM_ECSCF_INVITE_01 - Request", + "TP_MM_ECSCF_ECO_INVITE_02 - Request", true, p_checkMessage ) @@ -131,31 +164,79 @@ module AtsImsIot_TP_behavior_MM { } } // End of function f_mtc_check_TP_MM_ECSCF_ECO_INVITE_02 - } // End of group imsInvite - - group ims100Trying { - /** - * @desc Verify that the E-CSCF successfully processes a 100 (Trying) provisional response on initial INVITE (Originating Leg). + * @desc "Verify that the E-CSCF successfully processes an callback INVITE from PSAP over the IM CN subsystem of own network and routes the request to the P-CSCF." + * Reference + * "ETSI TS 124 229 [1], Clauses 5.11.2" + * Config Id CF_VxLTE_INT + * PICS Selection NONE * 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 + * the IMS_E_CSCF entity supportsRoutingTo the IM_CN * } - * * Expected behaviour - * ensure that { - * when { - * the IMS_E_CSCF_A entity receives a 100_Trying - * from the PSAP entity - * } - * then { - * the IMS_E_CSCF_A entity sends a 100_Trying - * to the IMS_P_CSCF_A entity + * ensure that { + * when { + * the IMS_E_CSCF entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_P_CSCF_A_VIA, + * Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + * PAssertedIdentity, + * MessageBody; + * from the IM_CN entity + * } + * then { + * the IMS_E_CSCF entity sends an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_E_CSCF_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE_IM_CN, + * RecordRoute PX_E_CSCF_SERVICE_ROUTE, + * not PChargingFunctionAddresses, + * PChargingVector, + * MessageBody; + * to the IMS_P_CSCF_A entity * } * } - */ + */ + function f_mtc_check_TP_MM_ECSCF_ECO_INVITE_03( + 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_EMERGENCY); + var ImsUserInfo v_psapInfo := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MM_ECSCF_INVITE_03( + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(-), // v_userInfoA.publicId + mw_To_AddrUnion_TelUrl(-) // v_psapInfo.publicId + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MM_ECSCF_ECO_INVITE_03 - 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_MM_ECSCF_ECO_INVITE_03 + + } // End of group imsInvite + + group ims100Trying { + function f_mtc_check_TP_MM_ECSCF_ECO_100Trying_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, @@ -186,39 +267,6 @@ module AtsImsIot_TP_behavior_MM { group ims180Ringing { - /** - * @desc Verify that the IMS_E_CSCF_A 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 PSAP 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_MM_ECSCF_ECO_180RINGING_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, @@ -251,39 +299,6 @@ module AtsImsIot_TP_behavior_MM { group ims183SessionProgress { - /** - * @desc Verify that the IMS_E_CSCF_A 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 PSAP 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_MM_ECSCF_ECO_183SESSION_PROGRESS_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, @@ -314,45 +329,6 @@ module AtsImsIot_TP_behavior_MM { group ims200Ok { - /** - * @desc Verify that the IMS_E_CSCF_A 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_E_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 PSAP 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_MM_ECSCF_ECO_200OK_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, @@ -391,39 +367,6 @@ module AtsImsIot_TP_behavior_MM { group imsAck { - /** - * @desc Verify that the IMS_E_CSCF_A 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 PSAP entity - * } - * } - */ function f_mtc_check_TP_MM_ECSCF_ECO_ACK_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, @@ -457,36 +400,32 @@ module AtsImsIot_TP_behavior_MM { group imsBye { /** - * @desc Verify that the E-CSCF successfully processes a BYE (Terminating Leg). + * @desc Verify that the E-CSCF successfully processes a BYE from the P-CSCF for an Emergency Call and routes the request to the PSAP in the IM CN subsystem of own network * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_B entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the UE_B entity isRegisteredTo the IMS_B and - * the UE_A entity previouslyEstablishedCallWith the UE_B + * the IMS_E_CSCF entity supportsRoutingTo the IM_CN and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP * } * * Expected behaviour * ensure that { * when { * the IMS_E_CSCF_A entity receives a BYE containing - * From indicating value PX_UE_B_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_B_CALLID, - * Via indicating value PX_UE_B_VIA, - * Route indicating value PX_UE_B_SERVICE_ROUTE + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * 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 a BYE containing - * From indicating value PX_UE_B_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_B_CALLID, - * Via indicating value PX_UE_B_VIA, - * Route indicating value PX_UE_B_SERVICE_ROUTE - * ; - * from the PSAP entity + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * to the IM_CN entity * } * } */ @@ -503,16 +442,8 @@ module AtsImsIot_TP_behavior_MM { p_sip.request.msgHeader.callId, -, // New CSeq, -, // FIXME To be set - { - fieldName := FROM_E, - addressField := p_sip.request.msgHeader.toField.addressField, - fromParams := * - }, //p_sip.request.msgHeader.fromField, - { - fieldName := TO_E, - addressField := p_sip.request.msgHeader.fromField.addressField, - toParams := * - } //p_sip.request.msgHeader.toField + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField )) }, { mw_SipRequest(mw_BYE_Request_Base) }, @@ -528,6 +459,33 @@ module AtsImsIot_TP_behavior_MM { } } // End of function f_mtc_check_TP_MM_ECSCF_ECO_BYE_01 + /** + * @desc Verify that the E-CSCF successfully processes a BYE from the PSAP in the IM CN subsystem for an Emergency Call and routes the request to the P-CSCF of home network + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IM_CN and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a BYE containing + * From indicating value PX_PSAP_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_PSAP_SIP_URI, + * Via indicating value PX_PSAP_VIA; + * from the IM_CN entity + * } + * then { + * the IMS_E_CSCF_A entity sends a BYE containing + * From indicating value PX_PSAP_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_PSAP_SIP_URI, + * Via indicating value PX_PSAP_VIA; + * to the IMS_P_CSCF_A entity + * } + * } + */ function f_mtc_check_TP_MM_ECSCF_ECO_BYE_02( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, @@ -537,7 +495,7 @@ module AtsImsIot_TP_behavior_MM { // Check the BYE p_monitorCompRef.start( f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_MM_ECSCF_BYE_01( + { mw_SipRequest(mw_TP_MM_ECSCF_BYE_02( p_sip.request.msgHeader.callId, -, // New CSeq, -, // FIXME To be set @@ -570,58 +528,21 @@ module AtsImsIot_TP_behavior_MM { group ims200OkBye { - /** - * @desc Verify that the E-CSCF successfully processes a 200 (OK) BYE (Originating Leg). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_B entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the UE_B entity isRegisteredTo the IMS_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the IMS_E_CSCF_A entity sends a 200_Ok containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_B_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE, - * not PChargingVector, - * not PChargingFunctionAddresses, - * not PPreferredIdentity - * to the PSAP entity - * } - * then { - * the IMS_E_CSCF_A entity sends a 200_Ok containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_B_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE, - * not PChargingVector, - * not PChargingFunctionAddresses, - * not PPreferredIdentity - * to the IMS_P_CSCF_A entity - * } - * } - */ function f_mtc_check_TP_MM_ECSCF_ECO_200OK_BYE_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)) { // Check the 200 OK BYE 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, - p_sip.request.msgHeader.toField - )) + { mw_SipResponse(mw_ECO_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) }, { mw_SipResponse(mw_200OK_Base) }, { 0, omit }, @@ -638,6 +559,35 @@ module AtsImsIot_TP_behavior_MM { group imsCancel { + /** + * @desc Verify that the E-CSCF successfully processes a CANCEL from the P-CSCF for an Emergency Call under establishment and routes the request to the PSAP in the IM CN subsystem of own network + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IM_CN and + * the UE_A entity hasAchievedInitialEmergencyINVITE + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a CANCEL containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * 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 a CANCEL containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * to the IM_CN entity + * } + * } + */ function f_mtc_check_TP_MM_ECSCF_ECO_CANCEL_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, @@ -680,7 +630,36 @@ module AtsImsIot_TP_behavior_MM { group imsRequestTermination { - function f_mtc_check_TP_MM_ECSCF_ECO_487INVITE_01( + /** + * @desc Verify that the E-CSCF successfully processes a 487 response from the PSAP in the IM CN subsystem for an Emergency Call and routes the response to the P-CSCF of home network + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IM_CN and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a 487INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the IM_CN entity + * } + * then { + * the IMS_E_CSCF_A entity sends a 480INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MM_ECSCF_EMC_487INVITE_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, inout SipMessage p_sip @@ -704,7 +683,7 @@ module AtsImsIot_TP_behavior_MM { mw_SipResponse(mdw_4XX_Base) }, { 0, omit }, - "TP_MM_ECSCF_487INVITE_01", + "TP_MM_ECSCF_EMC_487INVITE_01", true, p_checkMessage ) @@ -713,13 +692,42 @@ module AtsImsIot_TP_behavior_MM { // Retrieve messge f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); } - } // End of function f_mtc_check_TP_MM_ECSCF_ECO_487INVITE_01 + } // End of function f_mtc_check_TP_MM_ECSCF_EMC_487INVITE_01 } // End of group imsRequestTermination group imsTemporaryUnavailable { - function f_mtc_check_TP_MM_ECSCF_ECO_480TEMPAV_01( + /** + * @desc Verify that the E-CSCF successfully processes a 480 response from the PSAP in the IM CN subsystem for an Emergency Call and routes the response to the P-CSCF of home network + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IM_CN and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a 480INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the IM_CN entity + * } + * then { + * the IMS_E_CSCF_A entity sends a 480INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MM_ECSCF_ECO_480INVITE_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, inout SipMessage p_sip @@ -735,7 +743,7 @@ module AtsImsIot_TP_behavior_MM { mw_SipResponse(mdw_4XX_Base) }, { 0, omit }, - "TP_MM_ECSCF_480TEMPAV_01", + "TP_MM_ECSCF_ECO_480INVITE_01", true, p_checkMessage ) @@ -744,7 +752,7 @@ module AtsImsIot_TP_behavior_MM { // Retrieve messge f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); } - } // End of function f_mtc_check_TP_MM_ECSCF_ECO_480TEMPAV_01 + } // End of function f_mtc_check_TP_MM_ECSCF_ECO_480INVITE_01 } // End of group imsTemporaryUnavailable diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn index 8416a9a..de07262 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn @@ -4825,12 +4825,12 @@ module AtsImsIot_TP_behavior_MW_PS { f_Iot_Sip_receive( { mw_SipResponse( - mw_487RequestTerminated( // TODO Enforce template - p_sip.request.msgHeader.callId, - -, // New CSeq - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - ) + mw_487RequestTerminated( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + ) ) }, { @@ -4852,7 +4852,7 @@ module AtsImsIot_TP_behavior_MW_PS { group imsTemporaryUnavailable { - function f_mtc_check_TP_MW_PCSCF_ECO_480TEMPAV_01( + function f_mtc_check_TP_MW_PCSCF_ECO_480INVITE_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, inout SipMessage p_sip @@ -4868,7 +4868,7 @@ module AtsImsIot_TP_behavior_MW_PS { mw_SipResponse(mdw_4XX_Base) }, { 0, omit }, - "TP_MW_PCSCF_ECO_480TEMPAV_01", + "TP_MW_PCSCF_ECO_480INVITE_01", true, p_checkMessage ) @@ -4877,7 +4877,7 @@ module AtsImsIot_TP_behavior_MW_PS { // Retrieve messge f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); } - } // End of function f_mtc_check_TP_MW_PCSCF_ECO_480TEMPAV_01 + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_480INVITE_01 } // End of group imsTemporaryUnavailable diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_MI.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_MI.ttcn index 448ec57..3a4b5fa 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates_MI.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_MI.ttcn @@ -29,12 +29,12 @@ module AtsImsIot_Templates_MI { import from AtsImsIot_Templates all; /** - * @desc INVITE Request checking TP_MI_BGCF_INVITE_01 - */ - template(present) INVITE_Request mw_TP_MI_BGCF_INVITE_01 (template (present) SipUrl p_IBCF_SIP_URI := ?, - template (present) From p_from := ?, - template (present) To p_to := ?) - modifies mw_INVITE_Request_Base := { + * @desc INVITE Request checking TP_MI_ECSCF_INVITE_01 + */ + template(present) INVITE_Request mw_TP_MI_ECSCF_INVITE_01 (template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?) + modifies mw_INVITE_Request_Base := { msgHeader := { fromField := p_from, toField := p_to, @@ -42,13 +42,13 @@ module AtsImsIot_Templates_MI { fieldName := ROUTE_E, routeBody := { *, - complement(mw_routeBody(p_IBCF_SIP_URI)), + complement(mw_routeBody(p_invite_uri)), * } }, omit), recordRoute := { fieldName := RECORD_ROUTE_E, - routeBody := {mw_routeBody(p_IBCF_SIP_URI), *} + routeBody := {mw_routeBody(p_invite_uri), *} }, pChargingVector := { fieldName := P_CHARGING_VECTOR_E, @@ -68,7 +68,25 @@ module AtsImsIot_Templates_MI { } } - template (present) Response mw_TP_MI_BGCF_100Trying_01( + template(present) INVITE_Request mw_TP_MI_ECSCF_INVITE_02 (template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?) + modifies mw_TP_MI_ECSCF_INVITE_01 := { + } + + template(present) INVITE_Request mw_TP_MI_ECSCF_INVITE_03 (template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?) + modifies mw_TP_MI_ECSCF_INVITE_01 := { + msgHeader := { + recordRoute := { + fieldName := RECORD_ROUTE_E, + routeBody := {mw_routeBody(p_invite_uri), *} + } + } + } + + template (present) Response mw_TP_MI_ECSCF_100Trying_01( template (present) CSeq p_cSeq := ?, template (present) From p_from := ?, template (present) To p_to := ? @@ -78,9 +96,9 @@ module AtsImsIot_Templates_MI { fromField := p_from, toField := p_to } - } // End of template mw_TP_MI_BGCF_100Trying_01 + } // End of template mw_TP_MI_ECSCF_100Trying_01 - template (present) Response mw_TP_MI_BGCF_180Ringing_01( + template (present) Response mw_TP_MI_ECSCF_180Ringing_01( template (present) CSeq p_cSeq := ?, template (present) From p_from := ?, template (present) To p_to := ? @@ -90,9 +108,9 @@ module AtsImsIot_Templates_MI { fromField := p_from, toField := p_to } - } // End of template mw_TP_MI_BGCF_180Ringing_01 + } // End of template mw_TP_MI_ECSCF_180Ringing_01 - template (present) Response mw_TP_MI_BGCF_183SessionProgress_01( + template (present) Response mw_TP_MI_ECSCF_183SessionProgress_01( template (present) CSeq p_cSeq := ?, template (present) From p_from := ?, template (present) To p_to := ? @@ -102,9 +120,9 @@ module AtsImsIot_Templates_MI { fromField := p_from, toField := p_to } - } // End of template mw_TP_MI_BGCF_183SessionProgress_01 + } // End of template mw_TP_MI_ECSCF_183SessionProgress_01 - template (present) ACK_Request mw_TP_MI_BGCF_ACK_01( // TODO To be enforced + template (present) ACK_Request mw_TP_MI_ECSCF_ACK_01( // TODO To be enforced template (present) CallId p_callId := ?, template (present) CSeq p_cSeq := ?, template (present) SipUrl p_ack_uri := ?, @@ -129,9 +147,9 @@ module AtsImsIot_Templates_MI { } } } - } // End of template mw_TP_MI_BGCF_ACK_01 + } // End of template mw_TP_MI_ECSCF_ACK_01 - template (present) BYE_Request mw_TP_MI_BGCF_BYE_01( // TODO To be enforced + template (present) BYE_Request mw_TP_MI_ECSCF_BYE_01( // TODO To be enforced template (present) CallId p_callId := ?, template (present) CSeq p_cSeq := ?, template (present) SipUrl p_bye_uri := ?, @@ -158,7 +176,7 @@ module AtsImsIot_Templates_MI { } } // End of template mw_TP_MW_PCSCF_BYE_01 - template (present) CANCEL_Request mw_TP_MI_BGCF_CANCEL_01( // TODO To be enforced + template (present) CANCEL_Request mw_TP_MI_ECSCF_CANCEL_01( // TODO To be enforced template (present) CallId p_callId := ?, template (present) CSeq p_cSeq := ?, template (present) SipUrl p_bye_uri := ?, @@ -183,6 +201,6 @@ module AtsImsIot_Templates_MI { } } } - } // End of template mw_TP_MI_BGCF_CANCEL_01 + } // End of template mw_TP_MI_ECSCF_CANCEL_01 } // End of module AtsImsIot_Templates_MI diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn index 0a37e1e..bcfd154 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn @@ -11,6 +11,7 @@ module AtsImsIot_Templates_MM { // libSip import from LibSip_SIPTypesAndValues all; + import from LibSip_MessageBodyTypes all; import from LibSip_Templates all; import from LibSip_Common all; @@ -29,11 +30,15 @@ module AtsImsIot_Templates_MM { import from AtsImsIot_Templates all; /** - * @desc INVITE Request checking TP_MM_ECSCF_INVITE_01 - */ - template(present) INVITE_Request mw_TP_MM_ECSCF_INVITE_01 (template (present) SipUrl p_IBCF_SIP_URI := ?, - template (present) From p_from := ?, - template (present) To p_to := ?) + * @desc INVITE Request checking TP_MM_ECSCF_INVITE_01 + */ + template(present) INVITE_Request mw_TP_MM_ECSCF_INVITE_01 (template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PAssertedID p_pAssertedID := ? + ) modifies mw_INVITE_Request_Base := { msgHeader := { fromField := p_from, @@ -42,32 +47,43 @@ module AtsImsIot_Templates_MM { fieldName := ROUTE_E, routeBody := { *, - complement(mw_routeBody(p_IBCF_SIP_URI)), + complement(mw_routeBody(p_invite_uri)), * } }, omit), recordRoute := { fieldName := RECORD_ROUTE_E, - routeBody := {mw_routeBody(p_IBCF_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 := ?}), - * - } + routeBody := {mw_routeBody(p_invite_uri), *} }, - pAccessNetworkInfo := omit + contact := p_contact, + pAssertedID := p_pAssertedID + }, + messageBody := p_messageBody + } + + template(present) INVITE_Request mw_TP_MM_ECSCF_INVITE_02 (template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PAssertedID p_pAssertedID := ? + ) + modifies mw_TP_MM_ECSCF_INVITE_01 := { + msgHeader := { + pChargingFunctionAddresses := omit } } + template(present) INVITE_Request mw_TP_MM_ECSCF_INVITE_03 (template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PAssertedID p_pAssertedID := ? + ) + modifies mw_TP_MM_ECSCF_INVITE_02 := { + } + template (present) Response mw_TP_MM_ECSCF_100Trying_01( template (present) CSeq p_cSeq := ?, template (present) From p_from := ?, @@ -156,7 +172,19 @@ module AtsImsIot_Templates_MM { } } } - } // End of template mw_TP_MW_PCSCF_BYE_01 + } // End of template mw_TP_MM_ECSCF_BYE_01 + + template (present) BYE_Request mw_TP_MM_ECSCF_BYE_02( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MM_ECSCF_BYE_01 := { + msgHeader := { + route := * + } + } // End of template mw_TP_MM_ECSCF_BYE_02 template (present) CANCEL_Request mw_TP_MM_ECSCF_CANCEL_01( // TODO To be enforced template (present) CallId p_callId := ?, -- GitLab From 2d7b570a607ee45c4b2279cbfcd976711adbac84 Mon Sep 17 00:00:00 2001 From: garciay Date: Tue, 19 Sep 2023 11:03:15 +0200 Subject: [PATCH 09/19] Review of TTCN-3 implementation & templates of all emergency TPs for the SIP part --- test_purposes/E_CSCF/TP_E_CSCF.tplan2 | 8 +- ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn | 74 +- ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn | 36 +- .../AtsImsIot_TP_behavior_MW_EC.ttcn | 33 - ..._EB.ttcn => AtsImsIot_TP_behavior_MX.ttcn} | 1036 ++++++++--------- .../AtsImsIot_TP_behavior_Mx_LRF.ttcn | 98 -- ttcn/AtsImsIot/AtsImsIot_Templates_ML.ttcn | 9 - ttcn/AtsImsIot/AtsImsIot_Templates_MX.ttcn | 225 ++++ 8 files changed, 788 insertions(+), 731 deletions(-) delete mode 100644 ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn rename ttcn/AtsImsIot/{AtsImsIot_TP_behavior_MW_EB.ttcn => AtsImsIot_TP_behavior_MX.ttcn} (51%) delete mode 100644 ttcn/AtsImsIot/AtsImsIot_TP_behavior_Mx_LRF.ttcn create mode 100644 ttcn/AtsImsIot/AtsImsIot_Templates_MX.ttcn diff --git a/test_purposes/E_CSCF/TP_E_CSCF.tplan2 b/test_purposes/E_CSCF/TP_E_CSCF.tplan2 index 8f99c15..7e5f51a 100644 --- a/test_purposes/E_CSCF/TP_E_CSCF.tplan2 +++ b/test_purposes/E_CSCF/TP_E_CSCF.tplan2 @@ -662,7 +662,7 @@ Package TP_E_CSCF { Initial conditions with { the IMS_E_CSCF entity supportsRoutingTo the IMS_IBCF_A and - the UE_A entity previouslyEstablishedEmergencyCallWith the PSA via IMS_IBCF_A + the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP via IMS_IBCF_A } Expected behaviour @@ -705,7 +705,7 @@ Package TP_E_CSCF { Initial conditions with { the IMS_E_CSCF entity supportsRoutingTo the IMS_IBCF_A and - the UE_A entity previouslyEstablishedEmergencyCallWith the PSA via IMS_IBCF_A + the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP via IMS_IBCF_A } Expected behaviour @@ -1001,7 +1001,7 @@ Package TP_E_CSCF { Initial conditions with { the IMS_E_CSCF entity supportsRoutingTo the IMS_IBCF_A and - the UE_A entity previouslyEstablishedEmergencyCallWith the PSA via IMS_IBCF_A + the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP via IMS_IBCF_A } Expected behaviour @@ -1129,7 +1129,7 @@ Package TP_E_CSCF { Initial conditions with { the IMS_E_CSCF entity supportsRoutingTo the IMS_IBCF_A and - the UE_A entity previouslyEstablishedEmergencyCallWith the PSA via IMS_IBCF_A + the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP via IMS_IBCF_A } Expected behaviour diff --git a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn index 0211034..02c6b72 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn @@ -28,9 +28,7 @@ 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_Mx_LRF all; // FIXME Rename into MX_ + import from AtsImsIot_TP_behavior_MX all; import from AtsImsIot_TP_behavior_MM all; import from AtsImsIot_TP_behavior_MI all; import from AtsImsIot_TP_behavior_ML all; @@ -816,8 +814,8 @@ module AtsImsIot_Emergency { 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_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mwEB); // Event 11 - f_mtc_check_TP_MW_IBSCF_100Trying_01(vc_vxlte_monitor_components.mwEB, -, 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) @@ -825,7 +823,7 @@ module AtsImsIot_Emergency { // 183 Session Progress f_mtc_check_TP_IC_IBCF_183RESP_01(vc_vxlte_monitor_components.ic, -); // 183 Event 13 - f_mtc_check_TP_MW_IBCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 14 + 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 @@ -836,7 +834,7 @@ module AtsImsIot_Emergency { f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 19 f_mtc_check_TP_IC_IBCF_180RESP_01(vc_vxlte_monitor_components.ic); // 180 Ringing – Event 22 - f_mtc_check_TP_MW_IBCF_180RINGING_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 23 + 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 @@ -848,13 +846,13 @@ module AtsImsIot_Emergency { 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.mwEB, -, v_sip); // Event 27 + 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_MW_IBCF_ACK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 32 + 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 @@ -952,11 +950,11 @@ module AtsImsIot_Emergency { 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_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mlE_LRF); // Event 11 + 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_MW_IBCF_INVITE_02(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 13 - f_mtc_check_TP_MW_IBSCF_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip); + 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 @@ -964,7 +962,7 @@ module AtsImsIot_Emergency { // 183 Session Progress - f_mtc_check_TP_MW_IBCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 16 + 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 @@ -975,7 +973,7 @@ module AtsImsIot_Emergency { f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 21 f_mtc_check_TP_IC_IBCF_180RESP_01(vc_vxlte_monitor_components.ic, true); // 180 Ringing – Event 24 - f_mtc_check_TP_MW_IBCF_180RINGING_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 25 + 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 @@ -987,13 +985,13 @@ module AtsImsIot_Emergency { 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_MW_IBCF_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 29 + 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_MW_IBCF_ACK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 34 + 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 @@ -1217,15 +1215,15 @@ module AtsImsIot_Emergency { 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_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mwEB); // Event 13 - f_mtc_check_TP_MW_IBSCF_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip); + 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_MW_IBCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 16 + 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 @@ -1236,7 +1234,7 @@ module AtsImsIot_Emergency { f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 21 f_mtc_check_TP_IC_IBCF_180RESP_01(vc_vxlte_monitor_components.ic, true); // 180 Ringing – Event 24 - f_mtc_check_TP_MW_IBCF_180RINGING_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 25 + 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 @@ -1248,13 +1246,13 @@ module AtsImsIot_Emergency { 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_MW_IBCF_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 29 + 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_MW_IBCF_ACK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 34 + 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 @@ -1507,8 +1505,8 @@ module AtsImsIot_Emergency { 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_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mwEB); // Event 3 - f_mtc_check_TP_MW_IBSCF_100Trying_01(vc_vxlte_monitor_components.mwEB, -, 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); @@ -1610,8 +1608,8 @@ module AtsImsIot_Emergency { // Test body f_mtc_check_TP_IC_IBCF_INVITE_02(vc_vxlte_monitor_components.ic); // Event 4 - f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mwEB); // Event 5 - f_mtc_check_TP_MW_IBSCF_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip); + 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); @@ -1734,7 +1732,7 @@ module AtsImsIot_Emergency { 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_MW_IBCF_ECO_200OK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 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 @@ -1812,7 +1810,7 @@ module AtsImsIot_Emergency { 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_MW_IBCF_ECO_BYE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 5 + 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 @@ -1821,7 +1819,7 @@ module AtsImsIot_Emergency { 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_MW_IBCF_ECO_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 15 + 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 @@ -2160,7 +2158,7 @@ module AtsImsIot_Emergency { // Test body f_mtc_check_TP_IC_IBCF_BYE_01(vc_vxlte_monitor_components.ic); // Event 4 - f_mtc_check_TP_MW_IBCF_BYE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 5 + 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 @@ -2262,7 +2260,7 @@ module AtsImsIot_Emergency { 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_ECO_CANCEL_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 7 + 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 @@ -2356,22 +2354,22 @@ module AtsImsIot_Emergency { 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_MW_IBCF_ECO_CANCEL_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 9 + f_mtc_check_TP_MX_ECSCF_EMC_CANCEL_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 9 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_MW_IBCF_ECO_200OK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 12 + f_mtc_check_TP_MX_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 12 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_MW_IBCF_ECO_487INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 21 + 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 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_MW_IBCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 29 + f_mtc_check_TP_MX_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 29 f_mtc_check_TP_IC_IBCF_ACK_01(vc_vxlte_monitor_components.ic, true); // Event 30 f_mtc_userCheckCallTerminated(v_ueA); // Event 33 @@ -2457,7 +2455,7 @@ module AtsImsIot_Emergency { 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_ECO_CANCEL_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 14 + f_mtc_check_TP_MM_ECSCF_EMC_CANCEL_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 14 f_mtc_check_TP_MI_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 16 f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 17 @@ -2667,8 +2665,8 @@ module AtsImsIot_Emergency { 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_IBCF_INVITE_01(vc_vxlte_monitor_components.mwEB); // Event 11 - f_mtc_check_TP_MW_IBSCF_100Trying_01(vc_vxlte_monitor_components.mwEB, -, 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); // INVITE Event 12 (NOTE: comment out if ISC simulated by Ic) diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn index 34c018c..c052257 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn @@ -368,10 +368,10 @@ module AtsImsIot_TP_behavior_MM { group imsAck { function f_mtc_check_TP_MM_ECSCF_ECO_ACK_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { + 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( @@ -386,7 +386,7 @@ module AtsImsIot_TP_behavior_MM { }, { mw_SipRequest(mw_ACK_Request_Base) }, { 0, omit }, - "TP_MM_ECSCF_ACK_01 - Request", + "TP_MM_ECSCF_ECO_ACK_01 - Request", false, p_checkMessage ) @@ -588,7 +588,7 @@ module AtsImsIot_TP_behavior_MM { * } * } */ - function f_mtc_check_TP_MM_ECSCF_ECO_CANCEL_01( + function f_mtc_check_TP_MM_ECSCF_EMC_CANCEL_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, inout SipMessage p_sip @@ -598,24 +598,16 @@ module AtsImsIot_TP_behavior_MM { p_monitorCompRef.start( f_Iot_Sip_receive( { mw_SipRequest(mw_TP_MM_ECSCF_CANCEL_01( - p_sip.request.msgHeader.callId, - -, // New CSeq, - -, // FIXME To be set - { - fieldName := FROM_E, - addressField := p_sip.request.msgHeader.toField.addressField, - fromParams := * - }, //p_sip.request.msgHeader.fromField, - { - fieldName := TO_E, - addressField := p_sip.request.msgHeader.fromField.addressField, - toParams := * - } //p_sip.request.msgHeader.toField - )) + p_sip.request.msgHeader.callId, + -, // New CSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) }, { mw_SipRequest(mw_CANCEL_Request_Base) }, { 0, omit }, - "TP_MM_ECSCF_CANCEL_01 - Request", + "TP_MM_ECSCF_EMC_CANCEL_01 - Request", true, p_checkMessage ) @@ -624,7 +616,7 @@ module AtsImsIot_TP_behavior_MM { // Retrieve messge f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); } - } // End of function f_mtc_check_TP_MM_ECSCF_ECO_CANCEL_01 + } // End of function f_mtc_check_TP_MM_ECSCF_EMC_CANCEL_01 } // End of group imsCancel diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn deleted file mode 100644 index 1ccc491..0000000 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn +++ /dev/null @@ -1,33 +0,0 @@ -/** - * @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 { // TODO: To be removed - - // 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; - -} // End of module AtsImsIot_TP_behavior_MW_EC \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EB.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MX.ttcn similarity index 51% rename from ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EB.ttcn rename to ttcn/AtsImsIot/AtsImsIot_TP_behavior_MX.ttcn index eaf605c..1e7fbde 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EB.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MX.ttcn @@ -1,10 +1,10 @@ /** - * @author TTF T010 + * @author STF 574 * @version $Id$ - * @desc This module provides the TP behaviour functions at Mw interface at E-CSCF/IBCF + * @desc This module provides the TP behaviour functions at Mw interface at S-CSCF/IBCF */ -module AtsImsIot_TP_behavior_MW_EB { +module AtsImsIot_TP_behavior_MX { // LibIms import from LibIms_Templates all; @@ -25,146 +25,236 @@ module AtsImsIot_TP_behavior_MW_EB { 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_Templates_MX 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).. + * @desc "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF and routes the request to the IBCF for a PSAP in another network." + * Reference + * "ETSI TS 124 229 [1], Clauses 5.11.2" + * Config Id CF_VxLTE_INT + * PICS Selection NONE * 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 + * the IMS_E_CSCF entity supportsRoutingTo the IMS_IBCF_A * } - * * 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 + * ensure that { + * when { + * the IMS_E_CSCF entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_P_CSCF_A_VIA, + * Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + * PAssertedIdentity, + * MessageBody; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_E_CSCF entity sends an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_E_CSCF_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE_IM_CN, + * RecordRoute PX_E_CSCF_SERVICE_ROUTE, + * PChargingVector containing + * not term_ioi_parameter, + * orig_ioi_parameter + * indicating value "Operator Identifier Of ImsA";, + * MessageBody; + * 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 { + */ + function f_mtc_check_TP_MX_ECSCF_ECO_INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)) { - var charstring v_EUT_A_Addr := f_GetEUTScscfAddress_1();//f_GetEUTScscfAddress(PX_EUT_A); + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psapInfo := f_getSipUserId(PX_PSAP); + + // Check the INVITE 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 - ) - ); + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MX_ECSCF_INVITE_01( + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(-), // v_userInfoA.publicId + mw_To_AddrUnion_TelUrl(-) // v_psapInfo.publicId + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MX_ECSCF_ECO_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_IBCF_INVITE_01 + } // End of function f_mtc_check_TP_MX_ECSCF_ECO_INVITE_01 - function f_mtc_check_TP_MW_IBCF_INVITE_02( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { + /** + * @desc "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF and routes the request to the IBCF for a PSAP in another network and includes the LRF provided URI in the Route header." + * Reference + * "ETSI TS 124 229 [1], Clauses 5.11.2" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IMS_LRF and + * the IMS_E_CSCF entity hasSentINVITETo the IMS_LRF and + * the IMS_E_CSCF entity supportsRoutingTo the IMS_IBCF_A + * } + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF entity receives an r_3xx_Any containing + * Contact indicating value LRF_provided_SIP_URI; + * from the IMS_LRF entity + * } + * then { + * the IMS_E_CSCF entity sends an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_E_CSCF_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE_IM_CN, + * RecordRoute PX_E_CSCF_SERVICE_ROUTE, + * PChargingVector containing + * not term_ioi_parameter, + * orig_ioi_parameter + * indicating value "Operator Identifier Of ImsA";, + * MessageBody; + * to the IMS_IBCF_A entity + * } + * } + */ + function f_mtc_check_TP_MX_ECSCF_ECO_INVITE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)) { - var charstring v_EUT_A_Addr := f_GetEUTScscfAddress_1();//f_GetEUTScscfAddress(PX_EUT_A); + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psapInfo := f_getSipUserId(PX_PSAP); + + // Check the INVITE 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 - ) - ); + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MX_ECSCF_INVITE_02( + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(-), // v_userInfoA.publicId + mw_To_AddrUnion_TelUrl(-) // v_psapInfo.publicId + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MX_ECSCF_ECO_INVITE_02 - 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_IBCF_INVITE_02 - - } // End of group imsInvite + } // End of function f_mtc_check_TP_MX_ECSCF_ECO_INVITE_02 - group ims100Trying { - /** - * @desc Verify that the E-CSCF successfully processes a 100 (Trying) provisional response on initial INVITE (Originating Leg). + * @desc "Verify that the E-CSCF successfully processes a callback INVITE from the PSAP in another network over the IBCF and routes the request to the P-CSCF." + * Reference + * "ETSI TS 124 229 [1], Clauses 5.11.2" + * Config Id CF_VxLTE_INT + * PICS Selection NONE * 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 + * the IMS_E_CSCF entity supportsRoutingTo the IMS_IBCF_A * } - * * 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 + * ensure that { + * when { + * the IMS_E_CSCF entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_P_CSCF_A_VIA, + * Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + * PAssertedIdentity, + * MessageBody; + * from the IMS_IBCF_A entity + * } + * then { + * the IMS_E_CSCF entity sends an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_E_CSCF_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE_IM_CN, + * RecordRoute PX_E_CSCF_SERVICE_ROUTE, + * PChargingVector containing + * not term_ioi_parameter, + * orig_ioi_parameter + * indicating value "Operator Identifier Of ImsA";, + * MessageBody; + * 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 { + */ + function f_mtc_check_TP_MX_ECSCF_ECO_INVITE_03( + 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_EMERGENCY); + var ImsUserInfo v_psapInfo := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MX_ECSCF_INVITE_03( + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(-), // v_userInfoA.publicId + mw_To_AddrUnion_TelUrl(-) // v_psapInfo.publicId + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MX_ECSCF_ECO_INVITE_03 - 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_MX_ECSCF_ECO_INVITE_03 + + } // End of group imsInvite + + group ims100Trying { + + function f_mtc_check_TP_MX_ECSCF_ECO_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( + { mw_SipResponse(mw_TP_MX_ECSCF_100Trying_01( p_sip.request.msgHeader.cSeq, p_sip.request.msgHeader.fromField, p_sip.request.msgHeader.toField @@ -172,62 +262,29 @@ module AtsImsIot_TP_behavior_MW_EB { }, { mw_SipResponse(mw_100Trying_Base) }, { 0, omit }, - "TP_MW_IBCF_100Trying_01", + "TP_MX_ECSCF_100Trying_01", false, p_checkMessage ) ); p_monitorCompRef.done; } - } // End of function f_mtc_check_TP_MW_IBSCF_100Trying_01 + } // End of function f_mtc_check_TP_MX_ECSCF_ECO_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 { + function f_mtc_check_TP_MX_ECSCF_ECO_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( + { mw_SipResponse(mw_TP_MX_ECSCF_180Ringing_01( p_sip.request.msgHeader.cSeq, p_sip.request.msgHeader.fromField, mw_To_NameAddr_TelUrl( @@ -237,62 +294,29 @@ module AtsImsIot_TP_behavior_MW_EB { }, { mw_SipResponse(mw_180Ringing_Base) }, { 0, omit }, - "TP_MW_IBCF_180RINGING_01", + "TP_MX_ECSCF_180RINGING_01", false, p_checkMessage ) ); p_monitorCompRef.done; } - } // End of function f_mtc_check_TP_MW_IBCF_180RINGING_01 + } // End of function f_mtc_check_TP_MX_ECSCF_ECO_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 { + function f_mtc_check_TP_MX_ECSCF_ECO_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( + { mw_SipResponse(mw_TP_MX_ECSCF_183SessionProgress_01( p_sip.request.msgHeader.cSeq, p_sip.request.msgHeader.fromField, p_sip.request.msgHeader.toField @@ -300,64 +324,27 @@ module AtsImsIot_TP_behavior_MW_EB { }, { mw_SipResponse(mw_183SessionProgress_Base) }, { 0, omit }, - "TP_MW_IBCF_183SESSION_PROGRESS_01", + "TP_MX_ECSCF_183SESSION_PROGRESS_01", false, p_checkMessage ) ); p_monitorCompRef.done; } - } // End of function f_mtc_check_TP_MW_IBCF_183SESSION_PROGRESS_01 + } // End of function f_mtc_check_TP_MX_ECSCF_ECO_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_E_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 { + function f_mtc_check_TP_MX_ECSCF_ECO_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( @@ -374,7 +361,7 @@ module AtsImsIot_TP_behavior_MW_EB { }, { mw_SipResponse(mw_200OK_Base) }, { 0, omit }, - "TP_MW_IBCF_200OK_01", + "TP_MX_ECSCF_200OK_01", false, p_checkMessage ) @@ -382,125 +369,57 @@ module AtsImsIot_TP_behavior_MW_EB { p_monitorCompRef.done; } - } // End of function f_mtc_check_TP_MW_IBCF_200OK_01 + } // End of function f_mtc_check_TP_MX_ECSCF_ECO_200OK_01 - function f_mtc_check_TP_MW_IBCF_ECO_200OK_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // 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_PSAP).publicId}), - mw_To_AddrUnion_TelUrl(f_getTelUserId(PX_PSAP).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_ECO_200OK_01 + } // End of group ims200Ok + + group imsAck { - /** - * @desc Verify that the E-CSCF successfully processes a 200 (Ok) provisional response on initial INVITE (Terminating Leg). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_B entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the UE_B entity isRegisteredTo the IMS_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the IMS_E_CSCF_A entity receives a 200_Ok containing - * From indicating value PX_UE_B_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_B_CALLID, - * Via indicating value PX_UE_B_VIA, - * Route indicating value PX_UE_B_SERVICE_ROUTE, - * PChargingVector, - * PChargingFunctionAddresses, - * PPreferredIdentity - * ; - * from the UE_B entity - * } - * then { - * the IMS_E_CSCF_A entity sends a 200_Ok containing - * From indicating value PX_UE_B_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_B_CALLID, - * Via indicating value PX_UE_B_VIA, - * Route indicating value PX_UE_B_SERVICE_ROUTE, - * not PChargingVector, - * not PChargingFunctionAddresses, - * not PPreferredIdentity - * ; - * from the IMS_P_CSCF_B entity - * } - * } - */ - function f_mtc_check_TP_MW_IBCF_200OK_02( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { + function f_mtc_check_TP_MX_ECSCF_ECO_ACK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)) { - // Check the 200 OK + // Check the ACK 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, - p_sip.request.msgHeader.toField - )) + { mw_SipRequest(mw_TP_MX_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_SipResponse(mw_200OK_Base) }, + { mw_SipRequest(mw_ACK_Request_Base) }, { 0, omit }, - "TP_MW_IBCF_200OK_02", + "TP_MX_ECSCF_ECO_ACK_01 - Request", false, p_checkMessage ) ); p_monitorCompRef.done; } - } // End of function f_mtc_check_TP_MW_IBCF_200OK_02 + } // End of function f_mtc_check_TP_MX_ECSCF_ECO_ACK_01 - } // End of group ims200Ok - - group imsAck { + } // End of group imsAck + + group imsBye { /** - * @desc Verify that the E-CSCF successfully processes a ACK provisional response on initial INVITE (Originating Leg). + * @desc Verify that the E-CSCF successfully processes a BYE from the P-CSCF for an Emergency Call and routes the request to the IBCF for a PSAP in another network * 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 + * the IMS_E_CSCF entity supportsRoutingTo the IMS_IBCF_A and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP via IMS_IBCF_A * } * * Expected behaviour * ensure that { * when { - * the IMS_E_CSCF_A entity receives an ACK containing + * the IMS_E_CSCF_A entity receives a BYE containing * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_PSAP_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, * CallId indicating value PX_UE_A_CALLID, * Via indicating value PX_UE_A_VIA, * Route indicating value PX_UE_A_SERVICE_ROUTE @@ -508,121 +427,83 @@ module AtsImsIot_TP_behavior_MW_EB { * from the IMS_P_CSCF_A entity * } * then { - * the IMS_E_CSCF_A entity sends an ACK containing + * the IMS_E_CSCF_A entity sends a BYE containing * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_PSAP_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, * 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 + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * to 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 { + function f_mtc_check_TP_MX_ECSCF_ECO_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout 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 - - function f_mtc_check_TP_MW_IBCF_ECO_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 + // Check the BYE p_monitorCompRef.start( f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_MW_IBCF_ACK_01( + { mw_SipRequest(mw_TP_MX_ECSCF_BYE_01( p_sip.request.msgHeader.callId, - p_sip.request.msgHeader.cSeq, + -, // New CSeq, -, // FIXME To be set p_sip.request.msgHeader.fromField, p_sip.request.msgHeader.toField )) }, - { mw_SipRequest(mw_ACK_Request_Base) }, + { mw_SipRequest(mw_BYE_Request_Base) }, { 0, omit }, - "TP_MW_IBCF_ACK_01 - Request", - false, + "TP_MX_ECSCF_ECO_BYE_01 - Request", + true, p_checkMessage ) ); p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); } - } // End of function f_mtc_check_TP_MW_IBCF_ACK_01 - - } // End of group imsAck - - group imsBye { - + } // End of function f_mtc_check_TP_MX_ECSCF_ECO_BYE_01 + /** - * @desc Verify that the E-CSCF successfully processes a BYE (Terminating Leg). + * @desc Verify that the E-CSCF successfully processes a BYE from the IBCF for a PSAP in another network for an Emergency Call and routes the request to the P-CSCF * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_B entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the UE_B entity isRegisteredTo the IMS_B and - * the UE_A entity previouslyEstablishedCallWith the UE_B + * the IMS_E_CSCF entity supportsRoutingTo the IM_CN and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP * } * * Expected behaviour * ensure that { * when { * the IMS_E_CSCF_A entity receives a BYE containing - * From indicating value PX_UE_B_SIP_URI, + * From indicating value PX_PSAP_SIP_URI, * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_B_CALLID, - * Via indicating value PX_UE_B_VIA, - * Route indicating value PX_UE_B_SERVICE_ROUTE - * ; - * from the IMS_P_CSCF_A entity + * CallId indicating value PX_PSAP_SIP_URI, + * Via indicating value PX_PSAP_VIA; + * from the IMS_IBCF_A entity * } * then { * the IMS_E_CSCF_A entity sends a BYE containing - * From indicating value PX_UE_B_SIP_URI, + * From indicating value PX_PSAP_SIP_URI, * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_B_CALLID, - * Via indicating value PX_UE_B_VIA, - * Route indicating value PX_UE_B_SERVICE_ROUTE - * ; - * from the IMS_IBCF_A entity + * CallId indicating value PX_PSAP_SIP_URI, + * Via indicating value PX_PSAP_VIA; + * to the IMS_P_CSCF_A entity * } * } */ - function f_mtc_check_TP_MW_IBCF_BYE_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - inout SipMessage p_sip - ) runs on ImsTestCoordinator { + function f_mtc_check_TP_MX_ECSCF_ECO_BYE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)) { // Check the BYE p_monitorCompRef.start( f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_MW_IBCF_BYE_01( + { mw_SipRequest(mw_TP_MX_ECSCF_BYE_02( p_sip.request.msgHeader.callId, -, // New CSeq, -, // FIXME To be set @@ -640,7 +521,7 @@ module AtsImsIot_TP_behavior_MW_EB { }, { mw_SipRequest(mw_BYE_Request_Base) }, { 0, omit }, - "TP_MW_IBCF_BYE_01 - Request", + "TP_MX_ECSCF_ECO_BYE_02 - Request", true, p_checkMessage ) @@ -649,146 +530,160 @@ module AtsImsIot_TP_behavior_MW_EB { // Retrieve messge f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); } - } // End of function f_mtc_check_TP_MW_IBCF_BYE_01 + } // End of function f_mtc_check_TP_MX_ECSCF_ECO_BYE_02 - function f_mtc_check_TP_MW_IBCF_ECO_BYE_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - inout SipMessage p_sip - ) runs on ImsTestCoordinator { + } // End of group imsBye + + group ims200OkBye { + + function f_mtc_check_TP_MX_ECSCF_ECO_200OK_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)) { - // Check the BYE + // Check the 200 OK BYE p_monitorCompRef.start( f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_MW_IBCF_BYE_01( - p_sip.request.msgHeader.callId, - -, // New CSeq, - -, // FIXME To be set - { - fieldName := FROM_E, - addressField := p_sip.request.msgHeader.toField.addressField, - fromParams := * - }, //p_sip.request.msgHeader.fromField, - { - fieldName := TO_E, - addressField := p_sip.request.msgHeader.fromField.addressField, - toParams := * - } //p_sip.request.msgHeader.toField - )) + { mw_SipResponse(mw_ECO_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) }, - { mw_SipRequest(mw_BYE_Request_Base) }, + { mw_SipResponse(mw_200OK_Base) }, { 0, omit }, - "TP_MW_IBCF_BYE_01 - Request", - true, + "TP_MX_ECSCF_200OK_BYE_01", + false, p_checkMessage ) ); p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); } - } // End of function f_mtc_check_TP_MW_IBCF_ECO_BYE_01 + } // End of function f_mtc_check_TP_MX_ECSCF_ECO_200OK_BYE_01 - } // End of group imsBye - - group ims200OkBye { + } // End of group ims200OkBye + + group imsCancel { /** - * @desc Verify that the E-CSCF successfully processes a 200 (OK) BYE (Originating Leg). + * @desc Verify that the E-CSCF successfully processes a CANCEL from the P-CSCF for an Emergency Call under establishment and routes the request to the IBCF for a PSAP in another network * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_B entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the UE_B entity isRegisteredTo the IMS_B + * the IMS_E_CSCF entity supportsRoutingTo the IMS_IBCF_A and + * the UE_A entity hasAchievedInitialEmergencyINVITE via the IMS_IBCF_A * } * * Expected behaviour * ensure that { * when { - * the IMS_E_CSCF_A entity sends a 200_Ok containing + * the IMS_E_CSCF_A entity receives a CANCEL containing * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_B_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, * CallId indicating value PX_UE_A_CALLID, * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE, - * not PChargingVector, - * not PChargingFunctionAddresses, - * not PPreferredIdentity - * to the IMS_IBCF_A entity + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the IMS_P_CSCF_A entity * } * then { - * the IMS_E_CSCF_A entity sends a 200_Ok containing + * the IMS_E_CSCF_A entity sends a CANCEL containing * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_B_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, * CallId indicating value PX_UE_A_CALLID, * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE, - * not PChargingVector, - * not PChargingFunctionAddresses, - * not PPreferredIdentity - * to the IMS_P_CSCF_A entity + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * to the IM_CN entity * } * } */ - function f_mtc_check_TP_MW_IBCF_200OK_BYE_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { + function f_mtc_check_TP_MX_ECSCF_EMC_CANCEL_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)) { - // Check the 200 OK BYE + // Check the CANCEL 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, - p_sip.request.msgHeader.toField - )) + { mw_SipRequest(mw_TP_MX_ECSCF_CANCEL_01( + p_sip.request.msgHeader.callId, + -, // New CSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) }, - { mw_SipResponse(mw_200OK_Base) }, + { mw_SipRequest(mw_CANCEL_Request_Base) }, { 0, omit }, - "TP_MW_IBCF_200OK_BYE_01", - false, + "TP_MX_ECSCF_EMC_CANCEL_01 - Request", + true, p_checkMessage ) ); p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); } - } // End of function f_mtc_check_TP_MW_IBCF_200OK_BYE_01 + } // End of function f_mtc_check_TP_MX_ECSCF_EMC_CANCEL_01 - } // End of group ims200OkBye + } // End of group imsCancel - group imsCancel { + group imsRequestTermination { - function f_mtc_check_TP_MW_IBCF_ECO_CANCEL_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - inout SipMessage p_sip - ) runs on ImsTestCoordinator { + /** + * @desc Verify that the E-CSCF successfully processes a 487 response from the IBCF for a PSAP in another network for an Emergency Call and routes the response to the P-CSCF + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IMS_IBCF_A and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP via IMS_IBCF_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a 487INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * 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 + * } + * then { + * the IMS_E_CSCF_A entity sends a 480INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MX_ECSCF_EMC_487INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)) { - // Check the CANCEL + // Check the 487 Request Terminated p_monitorCompRef.start( f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_MW_IBCF_CANCEL_01( - p_sip.request.msgHeader.callId, - -, // New CSeq, - -, // FIXME To be set - { - fieldName := FROM_E, - addressField := p_sip.request.msgHeader.toField.addressField, - fromParams := * - }, //p_sip.request.msgHeader.fromField, - { - fieldName := TO_E, - addressField := p_sip.request.msgHeader.fromField.addressField, - toParams := * - } //p_sip.request.msgHeader.toField - )) + { + mw_SipResponse( + mw_487RequestTerminated( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField, + omit + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) }, - { mw_SipRequest(mw_CANCEL_Request_Base) }, { 0, omit }, - "TP_MW_IBCF_CANCEL_01 - Request", + "TP_MX_ECSCF_EMC_487INVITE_01", true, p_checkMessage ) @@ -797,45 +692,132 @@ module AtsImsIot_TP_behavior_MW_EB { // Retrieve messge f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); } - } // End of function f_mtc_check_TP_MW_IBCF_ECO_CANCEL_01 - - } // End of group imsCancel + } // End of function f_mtc_check_TP_MX_ECSCF_EMC_487INVITE_01 + + } // End of group imsRequestTermination - group ims487Invite { + group imsTemporaryUnavailable { - function f_mtc_check_TP_MW_IBCF_ECO_487INVITE_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - inout SipMessage p_sip - ) runs on ImsTestCoordinator { + /** + * @desc Verify that the E-CSCF successfully processes a 480 response from the IBCF for a PSAP in another network for an Emergency Call and routes the response to the P-CSCF + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IMS_IBCF_A and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP via IMS_IBCF_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a 480INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * 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 + * } + * then { + * the IMS_E_CSCF_A entity sends a 480INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MX_ECSCF_ECO_480INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)) { - var charstring v_EUT_A_Addr := f_GetEUTScscfAddress_1();//f_GetEUTScscfAddress(PX_EUT_A); + // Check the 487 Request Terminated p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipResponse( - mw_487RequestTerminated( // TODO Enforce template - p_sip.request.msgHeader.callId, - -, // New CSeq - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField, - omit - ) - ) + f_Iot_Sip_receive( + { + mw_SipResponse(mw_480TemporaryUnavailable(-, p_sip.request.msgHeader.cSeq)) }, { mw_SipResponse(mdw_4XX_Base) }, { 0, omit }, - "TP_MW_IBCF_487INVITE_01", + "TP_MX_ECSCF_ECO_480INVITE_01", true, p_checkMessage ) ); p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MX_ECSCF_ECO_480INVITE_01 + + } // End of group imsTemporaryUnavailable + + group ims3xxAny { + + /** + * @desc Verify that the LRF successfully processes a 3xx Any response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_LRF_A entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * Contact indicating value V_CONTACT + * ; + * from the IMS_EBCF_A entity + * } + * then { + * the IMS_LRF_A entity sends a 3xx Any containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * Contact indicating value V_CONTACT + * ; + * to the IMS_EBCF_A entity + * } + * } + */ + function f_mtc_check_TP_MX_LRF_3xxAny_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 3xx Any + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_3xxContact( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.accept + )) + }, + { mw_SipResponse(mdw_3XX_Base) }, + { 0, omit }, + "TP_MX_3xxAny_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; } - } // End of function f_mtc_check_TP_MW_IBCF_ECO_487INVITE_01 + } // End of function f_mtc_check_TP_MX_LRF_3xxAny_01 - } // End of group ims487Invite + } // End of group ims3xxAny -} // End of module AtsImsIot_TP_behavior_MW_EB \ No newline at end of file +} // End of module AtsImsIot_TP_behavior_MX diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_Mx_LRF.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_Mx_LRF.ttcn deleted file mode 100644 index f38a038..0000000 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_Mx_LRF.ttcn +++ /dev/null @@ -1,98 +0,0 @@ -/** - * @author STF 574 - * @version $Id$ - * @desc This module provides the TP behaviour functions at Mw interface at S-CSCF/IBCF - */ - -module AtsImsIot_TP_behavior_Mx_LRF { - - // 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 all; - import from AtsImsIot_Templates_MW all; - import from AtsImsIot_Templates_ML all; - import from AtsImsIot_TypesAndValues all; - import from AtsImsIot_Functions all; - - group ims3xxAny { - - /** - * @desc Verify that the LRF successfully processes a 3xx Any response on initial INVITE (Originating Leg). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_B entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the UE_B entity isRegisteredTo the IMS_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the IMS_LRF_A entity receives an INVITE containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_B_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE, - * Contact indicating value V_CONTACT - * ; - * from the IMS_EBCF_A entity - * } - * then { - * the IMS_LRF_A entity sends a 3xx Any containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_B_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE, - * Contact indicating value V_CONTACT - * ; - * to the IMS_EBCF_A entity - * } - * } - */ - function f_mtc_check_TP_MX_LRF_3xxAny_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 3xx Any - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipResponse(mw_3xxContact( - p_sip.request.msgHeader.cSeq, - p_sip.request.msgHeader.accept - )) - }, - { mw_SipResponse(mdw_3XX_Base) }, - { 0, omit }, - "TP_Mx_LRF_3xxAny_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_MX_LRF_3xxAny_01 - - } // End of group ims3xxAny - -} // End of module AtsImsIot_TP_behavior_Mx_LRF diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_ML.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_ML.ttcn index 47259fc..073ab4a 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates_ML.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_ML.ttcn @@ -80,13 +80,4 @@ module AtsImsIot_Templates_ML { } } // End of template mw_TP_ML_ECSCF_3XX_Base_01 - template (present) Response mw_3xxContact( - template (present) CSeq p_cSeq := ?, - Accept p_accept) modifies mdw_3XX_Base := { - msgHeader := { - cSeq := p_cSeq, - accept := p_accept - } - } // End of template mw_3xxContact - } // End of module AtsImsIot_Templates_ML diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_MX.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_MX.ttcn new file mode 100644 index 0000000..f2696c6 --- /dev/null +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_MX.ttcn @@ -0,0 +1,225 @@ +/* + * @author STF 574 + * @version $Id$ + * @desc This module provides TP related templates used at MM interface + */ +module AtsImsIot_Templates_MX { + + // LibCommon + //import from LibCommon_BasicTypesAndValues all; + //import from LibCommon_VerdictControl all; + + // libSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_MessageBodyTypes all; + import from LibSip_Templates all; + import from LibSip_Common all; + + // LibIms + import from LibIms_Templates all; + + //import from LibMsrp_TypesAndValues all; + + // LibIot + //import from LibIot_TypesAndValues all; + import from LibIot_PIXITS all; + + // AtsImsIot + //import from AtsImsIot_TypesAndValues all; + import from AtsImsIot_PIXITS all; + import from AtsImsIot_Templates all; + + /** + * @desc INVITE Request checking TP_MX_ECSCF_INVITE_01 + */ + template(present) INVITE_Request mw_TP_MX_ECSCF_INVITE_01 (template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PAssertedID p_pAssertedID := ? + ) + modifies mw_INVITE_Request_Base := { + msgHeader := { + fromField := p_from, + toField := p_to, + route := ({ + fieldName := ROUTE_E, + routeBody := { + *, + complement(mw_routeBody(p_invite_uri)), + * + } + }, omit), + recordRoute := { + fieldName := RECORD_ROUTE_E, + routeBody := {mw_routeBody(p_invite_uri), *} + }, + contact := p_contact, + pAssertedID := p_pAssertedID + }, + messageBody := p_messageBody + } + + template(present) INVITE_Request mw_TP_MX_ECSCF_INVITE_02 (template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PAssertedID p_pAssertedID := ? + ) + modifies mw_TP_MX_ECSCF_INVITE_01 := { + msgHeader := { + pChargingFunctionAddresses := omit + } + } + + template(present) INVITE_Request mw_TP_MX_ECSCF_INVITE_03 (template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PAssertedID p_pAssertedID := ? + ) + modifies mw_TP_MX_ECSCF_INVITE_02 := { + } + + template (present) Response mw_TP_MX_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_MX_ECSCF_100Trying_01 + + template (present) Response mw_TP_MX_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_MX_ECSCF_180Ringing_01 + + template (present) Response mw_TP_MX_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_MX_ECSCF_183SessionProgress_01 + + template (present) ACK_Request mw_TP_MX_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_MX_ECSCF_ACK_01 + + template (present) BYE_Request mw_TP_MX_ECSCF_BYE_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_BYE_Request_Base := { + requestLine := { + method := BYE_E, + requestUri := p_bye_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_MX_ECSCF_BYE_01 + + template (present) BYE_Request mw_TP_MX_ECSCF_BYE_02( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MX_ECSCF_BYE_01 := { + msgHeader := { + route := * + } + } // End of template mw_TP_MX_ECSCF_BYE_02 + + template (present) CANCEL_Request mw_TP_MX_ECSCF_CANCEL_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_CANCEL_Request_Base := { + requestLine := { + method := CANCEL_E, + requestUri := p_bye_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_MX_ECSCF_CANCEL_01 + + template (present) Response mw_3xxContact( + template (present) CSeq p_cSeq := ?, + Accept p_accept) modifies mdw_3XX_Base := { + msgHeader := { + cSeq := p_cSeq, + accept := p_accept + } + } // End of template mw_3xxContact + +} // End of module AtsImsIot_Templates_MX -- GitLab From 67614c819bf9fbd3bcd9d17881e67ae95991ada7 Mon Sep 17 00:00:00 2001 From: garciay Date: Tue, 19 Sep 2023 15:25:07 +0200 Subject: [PATCH 10/19] Add TC_VoLTE_ECO_INT_DTC_02_xx --- ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn | 617 ++++++++++++++++-------- 1 file changed, 416 insertions(+), 201 deletions(-) diff --git a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn index 02c6b72..25a74fb 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn @@ -43,121 +43,121 @@ module AtsImsIot_Emergency { import from AtsImsIot_PIXITS all; /** - * @see ETSI TS 103 795-2 Clause 5 Test Descriptions (Interoperability at HPLMN) + * @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 + * @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 + /** + * @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 + /** + * @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 + * @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 + * @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 { @@ -215,7 +215,7 @@ module AtsImsIot_Emergency { /** * @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 + * @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 { @@ -274,7 +274,7 @@ module AtsImsIot_Emergency { } // End of group EmergencyRegistration /** - * @see ETSI TS 103 795-2 Clause 5.3 Emergency Session and Emergency Bearer Operations + * @see ETSI TS 103 795-2 Clause 5.3 Emergency Session and Emergency Bearer Operations */ group EmergencySessionEmergencyBearerOperations { @@ -283,7 +283,7 @@ module AtsImsIot_Emergency { /** * @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 + * @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 { @@ -401,7 +401,7 @@ module AtsImsIot_Emergency { /** * @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 + * @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 { @@ -518,7 +518,7 @@ module AtsImsIot_Emergency { /** * @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 + * @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 { @@ -754,7 +754,7 @@ module AtsImsIot_Emergency { /** * @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 + * @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 { @@ -886,7 +886,7 @@ module AtsImsIot_Emergency { /** * @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 + * @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 { @@ -1026,7 +1026,7 @@ module AtsImsIot_Emergency { /** * @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 + * @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 { @@ -1151,7 +1151,7 @@ module AtsImsIot_Emergency { /** * @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 + * @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 { @@ -1287,7 +1287,7 @@ module AtsImsIot_Emergency { /** * @desc - * @see ETSI TS 103 795-2 Clause 5.3.1.10 UE calling PSAP over AS with non-emergency registration + * @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 { @@ -1361,7 +1361,7 @@ module AtsImsIot_Emergency { /** * @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 + * @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 { @@ -1461,7 +1461,7 @@ module AtsImsIot_Emergency { /** * @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 + * @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 { @@ -1566,7 +1566,7 @@ module AtsImsIot_Emergency { /** * @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 + * @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 { @@ -1680,7 +1680,7 @@ module AtsImsIot_Emergency { /** * @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 + * @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 { @@ -1720,8 +1720,6 @@ module AtsImsIot_Emergency { 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_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_MM_ECSCF_ECO_BYE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 4 @@ -1766,7 +1764,7 @@ module AtsImsIot_Emergency { /** * @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 + * @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 { @@ -1852,7 +1850,7 @@ module AtsImsIot_Emergency { /** * @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 + * @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 { @@ -1938,7 +1936,7 @@ module AtsImsIot_Emergency { /** * @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 + * @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 { @@ -2025,7 +2023,7 @@ module AtsImsIot_Emergency { /** * @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 + * @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 { @@ -2116,7 +2114,7 @@ module AtsImsIot_Emergency { /** * @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 + * @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 { @@ -2209,7 +2207,7 @@ module AtsImsIot_Emergency { /** * @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 + * @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 { @@ -2302,7 +2300,7 @@ module AtsImsIot_Emergency { /** * @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 + * @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 { @@ -2402,7 +2400,7 @@ module AtsImsIot_Emergency { /** * @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 + * @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 { @@ -2501,7 +2499,7 @@ module AtsImsIot_Emergency { /** * @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 + * @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 { @@ -2608,7 +2606,7 @@ module AtsImsIot_Emergency { /** * @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 + * @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 { @@ -2715,7 +2713,7 @@ module AtsImsIot_Emergency { /** * @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 + * @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 { @@ -2823,7 +2821,7 @@ module AtsImsIot_Emergency { /** * @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 + * @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 { @@ -2890,7 +2888,7 @@ module AtsImsIot_Emergency { /** * @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 + * @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 { @@ -2960,86 +2958,303 @@ module AtsImsIot_Emergency { } // End of group EmergencySessionEmergencyBearerOperations /** - * @see ETSI TS 103 795-2 Clause 5.5 Emergency Network Detachment + * @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 - */ - testcase TC_VoLTE_ECO_INT_DTC_02 ( ) 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_EMERGENCY ); - - 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 - // TODO - - //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_02 + /** + * @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); // (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_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_01/*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_01/*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_01/*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 @@ -3048,19 +3263,19 @@ module AtsImsIot_Emergency { } // End of group Interoperability /** - * @see ETSI TS 103 795-2 Clause 6 Test Descriptions (Roaming) + * @see ETSI TS 103 795-2 Clause 6 Test Descriptions (Roaming) */ group Roaming { /** - * @see ETSI TS 103 795-2 6.1 Network Attachment + * @see ETSI TS 103 795-2 6.1 Network Attachment */ group NetworkAttachment { } // End of group NetworkAttachment /** - * @see ETSI TS 103 795-2 Clause 6.2 IMS Emergency Registration in a visited network + * @see ETSI TS 103 795-2 Clause 6.2 IMS Emergency Registration in a visited network */ group IMSEmergencyRegistration { -- GitLab From 98b0faa08a6b878078ac92a32302f97623ab96fa Mon Sep 17 00:00:00 2001 From: Schmitting Date: Mon, 23 Oct 2023 14:40:21 +0200 Subject: [PATCH 11/19] Corrected TP_GM_PCSCF_ECO_INVITE_04 for MSD --- test_purposes/Gm/TP_GM.tplan2 | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/test_purposes/Gm/TP_GM.tplan2 b/test_purposes/Gm/TP_GM.tplan2 index 4696be0..963083f 100644 --- a/test_purposes/Gm/TP_GM.tplan2 +++ b/test_purposes/Gm/TP_GM.tplan2 @@ -413,10 +413,13 @@ Package TP_GM { Route indicating value PX_UE_A_SERVICE_ROUTE, Accept indicating value "application/EmergencyCallData.Control+xml", RecvInfo indicating value "EmergencyCallData.eCall.MSD", - PPreferredIdentity, // one or two instances + PPreferredIdentity, // one or two instances, + ContentDisposition containing + handling indicating value "optional";, // TODO Geolocation header maybe added later, check! MessageBody containing - MIME containing MSD;;; // MIME may contain additional parts e.g., sdp, xml + MIME containing MSD;;; // "application/EmergencyCallData.eCall.MSD" MIME body + // MIME may contain additional parts e.g., sdp, xml from the UE_A entity } } -- GitLab From 25990dc5ddf765f2f7d01c87001026632584f544 Mon Sep 17 00:00:00 2001 From: Schmitting Date: Tue, 24 Oct 2023 12:38:43 +0200 Subject: [PATCH 12/19] Added MSD related TPs TP_GM_PCSCF_NGC_INVITE_01 TP_GM_PCSCF_NGC_INFO_01 TP_MW_PCSCF_NGC_INFO_01 --- test_purposes/Gm/TP_GM.tplan2 | 53 +++++++++++++++++++++++++++++--- test_purposes/Mw/TP_MW_PS.tplan2 | 47 ++++++++++++++++++++++++++++ test_purposes/Sip_Common.tplan2 | 1 + 3 files changed, 97 insertions(+), 4 deletions(-) diff --git a/test_purposes/Gm/TP_GM.tplan2 b/test_purposes/Gm/TP_GM.tplan2 index 963083f..8fd93df 100644 --- a/test_purposes/Gm/TP_GM.tplan2 +++ b/test_purposes/Gm/TP_GM.tplan2 @@ -51,9 +51,9 @@ Package TP_GM { Realm indicating value PX_UE_A_REALM, Algorithm indicating value PX_UE_A_AUTH_ALG, Nonce indicating value "", - not term_ioi, + not term_ioi;, not SecurityClient, - Contact indicating value "sos";; + Contact indicating value "sos"; from the UE_A entity } then { @@ -383,7 +383,7 @@ Package TP_GM { Test Purpose { - TP Id TP_GM_PCSCF_ECO_INVITE_04 + TP Id TP_GM_PCSCF_NGC_INVITE_01 Test objective "Verify that the P-CSCF successfully receives an initial eCall type INVITE from an emergency registered UE." @@ -423,7 +423,52 @@ Package TP_GM { from the UE_A entity } } - } // End of TP_GM_PCSCF_ECO_INVITE_04 + } // End of TP_GM_PCSCF_NGC_INVITE_01 + + Test Purpose { + + TP Id TP_GM_PCSCF_NGC_INFO_01 + + Test objective "Verify that the P-CSCF successfully receives an INFO from the UE in an + established eCall type emergency call that has been requested to transfer + an updated MSD." + + Reference + "ETSI TS 124 229 [1], Clauses 5.1.6.11.3" + + Config Id CF_VoLTE_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isEmergencyAttachedTo the EPC_A and + the UE_A entity isEmergencyRegisteredTo the IMS_A and + the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + } + + Expected behaviour + ensure that { + when { + the UE_A entity isRequestedToTransferUpdatedMSD + // UE_A has received an INFO request as described in TP_MW_PCSCF_NGC_INFO_01 + } + then { + the IMS_P_CSCF_A entity receives an INFO containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_ECALL_EMERGENCY_SERVICE_URN, // "urn:service:sos.ecall.manual" or "urn:service:sos.ecall.automatic" + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE, + InfoPackage indicating value "EmergencyCallData.eCall.MSD", + ContentDisposition indicating value "Info-Package", + MessageBody containing + MIME indicating value "application/EmergencyCallData.eCall.MSD", // MIME may contain additional parts e.g., sdp, xml + // MSD not exceeding 140 bytes and encoded in binary ASN.1 + ContentDisposition indicating value "By-Reference";; + from the UE_A entity + } + } + } // End of TP_GM_PCSCF_NGC_INFO_01 Test Purpose { diff --git a/test_purposes/Mw/TP_MW_PS.tplan2 b/test_purposes/Mw/TP_MW_PS.tplan2 index b049914..b6e13a2 100644 --- a/test_purposes/Mw/TP_MW_PS.tplan2 +++ b/test_purposes/Mw/TP_MW_PS.tplan2 @@ -767,5 +767,52 @@ Package TP_MW_PS { } // End of TP_MW_PCSCF_EMC_487INVITE_01 + Test Purpose { + + TP Id TP_MW_PCSCF_NGC_INFO_01 + + Test objective "Verify that the P-CSCF sends an INFO request demanding a transfer of updated MSD." + + Reference + "ETSI TS 124 229 [1], clauses 5.1.6.11.3" + + Config Id CF_VoLTE_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_A and + the UE_A entity isRegisteredTo the IMS_A and + the UE_A entity isEmergencyRegisteredTo the IMS_A and + the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity receives a INFO containing "Request transfer of updated MSD"; + from the IMS_E_CSCF entity + } + then { + the IMS_P_CSCF_A entity sends a INFO 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, + InfoPackage indicating value "EmergencyCallData.eCall.MSD", + ContentDisposition indicating value "Info-Package", + MessageBody containing + MIME indicating value "application/EmergencyCallData.Control+xml", // MIME may contain additional parts e.g., sdp, xml + request containing + action indicating value "send-data", + datatype indicating value "eCall.MSD";, + ContentDisposition indicating value "By-Reference";; + to the UE_A entity + } + } + + } // End of TP_MW_PCSCF_NGC_INFO_01 + } // End of Package TP_MW_PS diff --git a/test_purposes/Sip_Common.tplan2 b/test_purposes/Sip_Common.tplan2 index e14773e..b08fc7b 100644 --- a/test_purposes/Sip_Common.tplan2 +++ b/test_purposes/Sip_Common.tplan2 @@ -96,6 +96,7 @@ Package Sip_Common { - isRequestedToSend - isRequestedToEstablishEmergencyCall - isRequestedToEstablisheCallTypeEmergencyCall + - isRequestedToTransferUpdatedMSD - isRequestedToDeregisterUser - isBusy - isTemporaryUnavailable -- GitLab From 9d0c622ec276714fb9e10437cf7bad1c89727076 Mon Sep 17 00:00:00 2001 From: pintar Date: Tue, 24 Oct 2023 16:10:04 +0200 Subject: [PATCH 13/19] New TP added for roaming scenario --- test_purposes/Gm/TP_GM.tplan2 | 41 +++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/test_purposes/Gm/TP_GM.tplan2 b/test_purposes/Gm/TP_GM.tplan2 index 5abe649..c66ce5e 100644 --- a/test_purposes/Gm/TP_GM.tplan2 +++ b/test_purposes/Gm/TP_GM.tplan2 @@ -422,6 +422,47 @@ Package TP_GM { } } // End of TP_GM_PCSCF_ECO_INVITE_04 + Test Purpose { + + TP Id TP_GM_PCSCF_ECO_INVITE_05 + + Test objective "Verify that the P-CSCF successfully receives an initial emergency INVITE from a registered but not emergency registered UE." + + Reference + "ETSI TS 124 229 [1], Clauses 5.1.6.8.4" + + Config Id CF_VoLTE_RMI_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_B and + the UE_A entity isRegisteredTo the IMS_A and + the UE_A entity not isEmergencyRegisteredTo the IMS_A + /* This implies that the UE is currently attached and registered + to its home operator's network and the IP-CAN does not define emergency bearers + see 5.1.6.1 3rd paragraph */ + } + + Expected behaviour + ensure that { + when { + the UE_A entity isRequestedToEstablishEmergencyCall + } + then { + the IMS_P_CSCF_A entity receives an INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE, + PPreferredIdentity, // one or two instances + MessageBody; + from the UE_A entity + } + } + } // End of TP_GM_PCSCF_ECO_INVITE_05 + Test Purpose { TP Id TP_GM_PCSCF_ECO_BYE_01 -- GitLab From 875fff6bb850f7c0d608971274b1f34e7ec69c38 Mon Sep 17 00:00:00 2001 From: pintar Date: Wed, 25 Oct 2023 10:56:43 +0200 Subject: [PATCH 14/19] ISC TP added --- test_purposes/Isc/TP_ISC.tplan2 | 42 +++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/test_purposes/Isc/TP_ISC.tplan2 b/test_purposes/Isc/TP_ISC.tplan2 index 588bc56..0d23f25 100644 --- a/test_purposes/Isc/TP_ISC.tplan2 +++ b/test_purposes/Isc/TP_ISC.tplan2 @@ -11,6 +11,8 @@ from its use or inability of use.This permission does not apply to any documenta associated with this file for which ETSI keeps all rights reserved. The present copyright notice shall be included in all copies of whole or part of this file and shall not imply any sub-license right. +* +* @author TTF T010 */ /* Isc interface at S-CSCF<->AS */ @@ -18,6 +20,46 @@ Package TP_ISC { import all from Sip_Common; + Test Purpose { + + TP Id TP_ISC_SCSCF_EMC_INVITE_01 + + Test objective "Verify that the AS successfully identify the request for emergency call and forwards it towards S-CSCF." + + Reference + "ETSI TS 124 229 [2], Clauses 4.7.3 and 5.7.1.14" + + Config Id CF_VoLTE_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_A and + the UE_A entity isRegisteredTo the IMS_A and + the UE_A entity not isEmergencyRegisteredTo the IMS_A + + } + + Expected behaviour + ensure that { + when { + the IMS_AS_A entity receives an INVITE + from the UE_A entity + } + then { + the IMS_AS_A entity sends an INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + Request_Uri indicating value PX_SIP_EMERGENCY_SERVICE_URN, + Route indicating value PX_E_CSCF_SERVICE_ROUTE, + PChargingVector, + // TODO Geolocation header maybe added later, check! + MessageBody; + to the IMS_S_CSCF_A entity + } + } + } // End of TP_ISC_SCSCF_EMC_INVITE_01 + } // End of Package TP_ISC -- GitLab From 10b1762bfec858b6cd055cac161a2993bc66c67d Mon Sep 17 00:00:00 2001 From: pintar Date: Wed, 25 Oct 2023 10:57:21 +0200 Subject: [PATCH 15/19] TTF T010 as author mentioned --- test_purposes/Cx/TP_CX.tplan2 | 2 ++ test_purposes/Diameter_Common.tplan2 | 32 +++++++++++++-------------- test_purposes/E_CSCF/TP_E_CSCF.tplan2 | 2 ++ test_purposes/Gm/TP_GM.tplan2 | 2 ++ test_purposes/Gx/TP_GX.tplan2 | 2 ++ test_purposes/Ic/TP_IC.tplan2 | 2 ++ test_purposes/Mw/TP_MW_IS.tplan2 | 2 ++ test_purposes/Mw/TP_MW_PS.tplan2 | 2 ++ test_purposes/Mw/TP_MW_SI.tplan2 | 2 ++ test_purposes/Rtp/TP_Rtp.tplan2 | 2 ++ test_purposes/Rtp_Common.tplan2 | 32 +++++++++++++-------------- test_purposes/Rx/TP_RX.tplan2 | 2 ++ test_purposes/S6a/TP_S6A.tplan2 | 2 ++ test_purposes/S9/TP_S9.tplan2 | 2 ++ test_purposes/Sip_Common.tplan2 | 32 +++++++++++++-------------- 15 files changed, 69 insertions(+), 51 deletions(-) diff --git a/test_purposes/Cx/TP_CX.tplan2 b/test_purposes/Cx/TP_CX.tplan2 index 65d5a37..862819d 100644 --- a/test_purposes/Cx/TP_CX.tplan2 +++ b/test_purposes/Cx/TP_CX.tplan2 @@ -11,6 +11,8 @@ from its use or inability of use.This permission does not apply to any documenta associated with this file for which ETSI keeps all rights reserved. The present copyright notice shall be included in all copies of whole or part of this file and shall not imply any sub-license right. +* +* @author TTF T010 */ diff --git a/test_purposes/Diameter_Common.tplan2 b/test_purposes/Diameter_Common.tplan2 index a87b9f2..d9e7cbc 100644 --- a/test_purposes/Diameter_Common.tplan2 +++ b/test_purposes/Diameter_Common.tplan2 @@ -1,20 +1,18 @@ -/* ETSI Software License -* As long as the here under conditions are respected, non-exclusive permission is hereby granted, -* free of charge, to use, reproduce and modify this software source code, under the following conditions: -* This source code is provided AS IS with no warranties, express or implied, including but not limited to, -* the warranties of merchant ability, fitness for a particular purpose and warranties for non-infringement -* of intellectual property rights. -* ETSI shall not be held liable in any event for any direct or indirect damages whatsoever (including, without -* limitation, damages for loss of profits, business interruption, loss of information, or any other pecuniary -* loss) arising out of or related to the use of or inability to use the source code. -* This permission is granted to facilitate the implementation of the related ETSI standard, provided that -* ETSI is given the right to use, reproduce and amend the modified source code under the same conditions -* as the present permission. -* This permission does not apply to any documentation associated with this source code for which ETSI keeps -* all rights reserved. -* The present ETSI Source Code license shall be included in all copies of whole or part of this source code -* and shall not imply any sub-license right. -* (c) ETSI 2019-2020 +/* +Copyright (c) ETSI 2023. + +This software is subject to copyrights owned by ETSI. Non-exclusive permission +is hereby granted, free of charge, to copy, reproduce and amend this file +under the following conditions: It is provided "as is", without warranty of any +kind, expressed or implied. + +ETSI shall never be liable for any claim, damages, or other liability arising +from its use or inability of use.This permission does not apply to any documentation +associated with this file for which ETSI keeps all rights reserved. The present +copyright notice shall be included in all copies of whole or part of this +file and shall not imply any sub-license right. +* +* @author TTF T010 */ diff --git a/test_purposes/E_CSCF/TP_E_CSCF.tplan2 b/test_purposes/E_CSCF/TP_E_CSCF.tplan2 index 7e5f51a..87b23d6 100644 --- a/test_purposes/E_CSCF/TP_E_CSCF.tplan2 +++ b/test_purposes/E_CSCF/TP_E_CSCF.tplan2 @@ -11,6 +11,8 @@ from its use or inability of use.This permission does not apply to any documenta associated with this file for which ETSI keeps all rights reserved. The present copyright notice shall be included in all copies of whole or part of this file and shall not imply any sub-license right. +* +* @author TTF T010 */ /* E-CSCF interfaces to diff --git a/test_purposes/Gm/TP_GM.tplan2 b/test_purposes/Gm/TP_GM.tplan2 index c31c5e7..c3c4a59 100644 --- a/test_purposes/Gm/TP_GM.tplan2 +++ b/test_purposes/Gm/TP_GM.tplan2 @@ -11,6 +11,8 @@ from its use or inability of use.This permission does not apply to any documenta associated with this file for which ETSI keeps all rights reserved. The present copyright notice shall be included in all copies of whole or part of this file and shall not imply any sub-license right. +* +* @author TTF T010 */ /* Gm interface at UE/P-CSCF */ diff --git a/test_purposes/Gx/TP_GX.tplan2 b/test_purposes/Gx/TP_GX.tplan2 index dc55c7d..1bb2969 100644 --- a/test_purposes/Gx/TP_GX.tplan2 +++ b/test_purposes/Gx/TP_GX.tplan2 @@ -11,6 +11,8 @@ from its use or inability of use.This permission does not apply to any documenta associated with this file for which ETSI keeps all rights reserved. The present copyright notice shall be included in all copies of whole or part of this file and shall not imply any sub-license right. +* +* @author TTF T010 */ diff --git a/test_purposes/Ic/TP_IC.tplan2 b/test_purposes/Ic/TP_IC.tplan2 index dc99d91..751d0a5 100644 --- a/test_purposes/Ic/TP_IC.tplan2 +++ b/test_purposes/Ic/TP_IC.tplan2 @@ -11,6 +11,8 @@ from its use or inability of use.This permission does not apply to any documenta associated with this file for which ETSI keeps all rights reserved. The present copyright notice shall be included in all copies of whole or part of this file and shall not imply any sub-license right. +* +* @author TTF T010 */ diff --git a/test_purposes/Mw/TP_MW_IS.tplan2 b/test_purposes/Mw/TP_MW_IS.tplan2 index aef07b0..5d74dd9 100644 --- a/test_purposes/Mw/TP_MW_IS.tplan2 +++ b/test_purposes/Mw/TP_MW_IS.tplan2 @@ -11,6 +11,8 @@ from its use or inability of use.This permission does not apply to any documenta associated with this file for which ETSI keeps all rights reserved. The present copyright notice shall be included in all copies of whole or part of this file and shall not imply any sub-license right. +* +* @author TTF T010 */ /* Mw interface at I-CSCF/S-CSCF */ diff --git a/test_purposes/Mw/TP_MW_PS.tplan2 b/test_purposes/Mw/TP_MW_PS.tplan2 index b6e13a2..68bcb2a 100644 --- a/test_purposes/Mw/TP_MW_PS.tplan2 +++ b/test_purposes/Mw/TP_MW_PS.tplan2 @@ -11,6 +11,8 @@ from its use or inability of use.This permission does not apply to any documenta associated with this file for which ETSI keeps all rights reserved. The present copyright notice shall be included in all copies of whole or part of this file and shall not imply any sub-license right. +* +* @author TTF T010 */ /* Mw interface at P-CSCF/E-CSCF */ diff --git a/test_purposes/Mw/TP_MW_SI.tplan2 b/test_purposes/Mw/TP_MW_SI.tplan2 index 1f698b3..14b2d84 100644 --- a/test_purposes/Mw/TP_MW_SI.tplan2 +++ b/test_purposes/Mw/TP_MW_SI.tplan2 @@ -11,6 +11,8 @@ from its use or inability of use.This permission does not apply to any documenta associated with this file for which ETSI keeps all rights reserved. The present copyright notice shall be included in all copies of whole or part of this file and shall not imply any sub-license right. +* +* @author TTF T010 */ /* Mw interface at S-CSCF/IBCF */ diff --git a/test_purposes/Rtp/TP_Rtp.tplan2 b/test_purposes/Rtp/TP_Rtp.tplan2 index deadc45..6c5394a 100644 --- a/test_purposes/Rtp/TP_Rtp.tplan2 +++ b/test_purposes/Rtp/TP_Rtp.tplan2 @@ -11,6 +11,8 @@ from its use or inability of use.This permission does not apply to any documenta associated with this file for which ETSI keeps all rights reserved. The present copyright notice shall be included in all copies of whole or part of this file and shall not imply any sub-license right. +* +* @author TTF T010 */ diff --git a/test_purposes/Rtp_Common.tplan2 b/test_purposes/Rtp_Common.tplan2 index 7da1861..6cb40b5 100644 --- a/test_purposes/Rtp_Common.tplan2 +++ b/test_purposes/Rtp_Common.tplan2 @@ -1,20 +1,18 @@ -/* ETSI Software License -* As long as the here under conditions are respected, non-exclusive permission is hereby granted, -* free of charge, to use, reproduce and modify this software source code, under the following conditions: -* This source code is provided AS IS with no warranties, express or implied, including but not limited to, -* the warranties of merchant ability, fitness for a particular purpose and warranties for non-infringement -* of intellectual property rights. -* ETSI shall not be held liable in any event for any direct or indirect damages whatsoever (including, without -* limitation, damages for loss of profits, business interruption, loss of information, or any other pecuniary -* loss) arising out of or related to the use of or inability to use the source code. -* This permission is granted to facilitate the implementation of the related ETSI standard, provided that -* ETSI is given the right to use, reproduce and amend the modified source code under the same conditions -* as the present permission. -* This permission does not apply to any documentation associated with this source code for which ETSI keeps -* all rights reserved. -* The present ETSI Source Code license shall be included in all copies of whole or part of this source code -* and shall not imply any sub-license right. -* (c) ETSI 2019-2020 +/* +Copyright (c) ETSI 2023. + +This software is subject to copyrights owned by ETSI. Non-exclusive permission +is hereby granted, free of charge, to copy, reproduce and amend this file +under the following conditions: It is provided "as is", without warranty of any +kind, expressed or implied. + +ETSI shall never be liable for any claim, damages, or other liability arising +from its use or inability of use.This permission does not apply to any documentation +associated with this file for which ETSI keeps all rights reserved. The present +copyright notice shall be included in all copies of whole or part of this +file and shall not imply any sub-license right. +* +* @author TTF T010 */ diff --git a/test_purposes/Rx/TP_RX.tplan2 b/test_purposes/Rx/TP_RX.tplan2 index 4719db8..0c5daef 100644 --- a/test_purposes/Rx/TP_RX.tplan2 +++ b/test_purposes/Rx/TP_RX.tplan2 @@ -11,6 +11,8 @@ from its use or inability of use.This permission does not apply to any documenta associated with this file for which ETSI keeps all rights reserved. The present copyright notice shall be included in all copies of whole or part of this file and shall not imply any sub-license right. +* +* @author TTF T010 */ diff --git a/test_purposes/S6a/TP_S6A.tplan2 b/test_purposes/S6a/TP_S6A.tplan2 index ff5f4d2..0057f0a 100644 --- a/test_purposes/S6a/TP_S6A.tplan2 +++ b/test_purposes/S6a/TP_S6A.tplan2 @@ -11,6 +11,8 @@ from its use or inability of use.This permission does not apply to any documenta associated with this file for which ETSI keeps all rights reserved. The present copyright notice shall be included in all copies of whole or part of this file and shall not imply any sub-license right. +* +* @author TTF T010 */ diff --git a/test_purposes/S9/TP_S9.tplan2 b/test_purposes/S9/TP_S9.tplan2 index fa3ed8f..ddeab02 100644 --- a/test_purposes/S9/TP_S9.tplan2 +++ b/test_purposes/S9/TP_S9.tplan2 @@ -11,6 +11,8 @@ from its use or inability of use.This permission does not apply to any documenta associated with this file for which ETSI keeps all rights reserved. The present copyright notice shall be included in all copies of whole or part of this file and shall not imply any sub-license right. +* +* @author TTF T010 */ diff --git a/test_purposes/Sip_Common.tplan2 b/test_purposes/Sip_Common.tplan2 index b08fc7b..eeb2bd6 100644 --- a/test_purposes/Sip_Common.tplan2 +++ b/test_purposes/Sip_Common.tplan2 @@ -1,20 +1,18 @@ -/* ETSI Software License -* As long as the here under conditions are respected, non-exclusive permission is hereby granted, -* free of charge, to use, reproduce and modify this software source code, under the following conditions: -* This source code is provided AS IS with no warranties, express or implied, including but not limited to, -* the warranties of merchant ability, fitness for a particular purpose and warranties for non-infringement -* of intellectual property rights. -* ETSI shall not be held liable in any event for any direct or indirect damages whatsoever (including, without -* limitation, damages for loss of profits, business interruption, loss of information, or any other pecuniary -* loss) arising out of or related to the use of or inability to use the source code. -* This permission is granted to facilitate the implementation of the related ETSI standard, provided that -* ETSI is given the right to use, reproduce and amend the modified source code under the same conditions -* as the present permission. -* This permission does not apply to any documentation associated with this source code for which ETSI keeps -* all rights reserved. -* The present ETSI Source Code license shall be included in all copies of whole or part of this source code -* and shall not imply any sub-license right. -* (c) ETSI 2019-2020 +/* +Copyright (c) ETSI 2023. + +This software is subject to copyrights owned by ETSI. Non-exclusive permission +is hereby granted, free of charge, to copy, reproduce and amend this file +under the following conditions: It is provided "as is", without warranty of any +kind, expressed or implied. + +ETSI shall never be liable for any claim, damages, or other liability arising +from its use or inability of use.This permission does not apply to any documentation +associated with this file for which ETSI keeps all rights reserved. The present +copyright notice shall be included in all copies of whole or part of this +file and shall not imply any sub-license right. +* +* @author TTF T010 */ -- GitLab From 48f019f9a3ea19b46ca6b1887143db5ee5eff8f3 Mon Sep 17 00:00:00 2001 From: pintar Date: Wed, 25 Oct 2023 11:07:58 +0200 Subject: [PATCH 16/19] Empty file removed --- test_purposes/New Text Document.txt | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 test_purposes/New Text Document.txt diff --git a/test_purposes/New Text Document.txt b/test_purposes/New Text Document.txt deleted file mode 100644 index e69de29..0000000 -- GitLab From 34b2c659405bb915e0cb1b4082aa50c3be25ff5d Mon Sep 17 00:00:00 2001 From: pintar Date: Wed, 25 Oct 2023 11:21:40 +0200 Subject: [PATCH 17/19] Typo update --- test_purposes/Cx/TP_CX.tplan2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test_purposes/Cx/TP_CX.tplan2 b/test_purposes/Cx/TP_CX.tplan2 index 862819d..f8693a5 100644 --- a/test_purposes/Cx/TP_CX.tplan2 +++ b/test_purposes/Cx/TP_CX.tplan2 @@ -1,5 +1,5 @@ /* -Copyright (c) ETSI 2019. +Copyright (c) ETSI 2023. This software is subject to copyrights owned by ETSI. Non-exclusive permission is hereby granted, free of charge, to copy, reproduce and amend this file -- GitLab From 8d41fe3f42630b8b2764628f8f4855309c4b67fa Mon Sep 17 00:00:00 2001 From: pintar Date: Wed, 25 Oct 2023 11:35:02 +0200 Subject: [PATCH 18/19] Issues resolved due doublechecking with TD document --- test_purposes/Gx/TP_GX.tplan2 | 2 +- test_purposes/Mw/TP_MW_PS.tplan2 | 4 ++-- test_purposes/Rtp/TP_Rtp.tplan2 | 8 ++++---- test_purposes/Sh/TP_Sh.tplan2 | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/test_purposes/Gx/TP_GX.tplan2 b/test_purposes/Gx/TP_GX.tplan2 index 1bb2969..a946a96 100644 --- a/test_purposes/Gx/TP_GX.tplan2 +++ b/test_purposes/Gx/TP_GX.tplan2 @@ -24,7 +24,7 @@ Package TP_GX { Test Purpose { - TP Id TP_GX_PCRF_CCA_01 + TP Id TP_GX_PCRF_ECO_CCA_01 //TP_GX_PCRF_CCA_01 from TS 103 653-1 V2.1.1 without emergency registration Test objective "Verify that IUT when receives CC-Request for PCC Rules containing IMSI for emergency services sends a CC-Answer in case of attachment procedure." diff --git a/test_purposes/Mw/TP_MW_PS.tplan2 b/test_purposes/Mw/TP_MW_PS.tplan2 index 68bcb2a..0512125 100644 --- a/test_purposes/Mw/TP_MW_PS.tplan2 +++ b/test_purposes/Mw/TP_MW_PS.tplan2 @@ -159,7 +159,7 @@ Package TP_MW_PS { Test Purpose { - TP Id TP_MW_PCSCF_REGISTER_03 + TP Id TP_MW_PCSCF_ECO_REGISTER_03 Test objective "Verify that the P-CSCF rejects invalid credentials within registration (Unsuccessful)." @@ -205,7 +205,7 @@ Package TP_MW_PS { to the UE_A entity } } - } // End of TP_MW_PCSCF_REGISTER_03 + } // End of TP_MW_PCSCF_ECO_REGISTER_03 diff --git a/test_purposes/Rtp/TP_Rtp.tplan2 b/test_purposes/Rtp/TP_Rtp.tplan2 index 6c5394a..c49cd88 100644 --- a/test_purposes/Rtp/TP_Rtp.tplan2 +++ b/test_purposes/Rtp/TP_Rtp.tplan2 @@ -25,7 +25,7 @@ Package TP_RTP { Test Purpose { - TP Id TP_RTP_ECO_UE_01 + TP Id TP_RTP_ECO_01 // TP_RTP_UE_01 from VxLTE TTF T006 Test objective "Verify that media between UE_A/IVS and PSAP is not delivered in any direction before call establishment." @@ -53,11 +53,11 @@ Package TP_RTP { } } - } // End of TP_RTP_ECO_UE_01 + } // End of TP_RTP_ECO_01 Test Purpose { - TP Id TP_RTP_ECO_UE_03 + TP Id TP_RTP_ECO_03 // TP_RTP_UE_03 from VxLTE TTF T006 Test objective "Verify that media between UE_A and UE_B is successfully routed." @@ -85,7 +85,7 @@ Package TP_RTP { } } - } // End of TP_RTP_ECO_UE_03 + } // End of TP_RTP_ECO_03 } // End of Package TP_RTP diff --git a/test_purposes/Sh/TP_Sh.tplan2 b/test_purposes/Sh/TP_Sh.tplan2 index ecde968..fd249bb 100644 --- a/test_purposes/Sh/TP_Sh.tplan2 +++ b/test_purposes/Sh/TP_Sh.tplan2 @@ -1,5 +1,5 @@ /* -Copyright (c) ETSI 2019. +Copyright (c) ETSI 2023. This software is subject to copyrights owned by ETSI. Non-exclusive permission is hereby granted, free of charge, to copy, reproduce and amend this file -- GitLab From c257fc67c0cf5555b646d61822e72210406c04c0 Mon Sep 17 00:00:00 2001 From: pintar Date: Wed, 25 Oct 2023 11:54:51 +0200 Subject: [PATCH 19/19] clause/clauses cleanup --- test_purposes/E_CSCF/TP_E_CSCF.tplan2 | 50 +++++++++++++-------------- test_purposes/Gm/TP_GM.tplan2 | 18 +++++----- test_purposes/Gx/TP_GX.tplan2 | 4 +-- test_purposes/Mw/TP_MW_IS.tplan2 | 4 +-- test_purposes/Mw/TP_MW_PS.tplan2 | 10 +++--- 5 files changed, 43 insertions(+), 43 deletions(-) diff --git a/test_purposes/E_CSCF/TP_E_CSCF.tplan2 b/test_purposes/E_CSCF/TP_E_CSCF.tplan2 index 87b23d6..1e650ba 100644 --- a/test_purposes/E_CSCF/TP_E_CSCF.tplan2 +++ b/test_purposes/E_CSCF/TP_E_CSCF.tplan2 @@ -34,7 +34,7 @@ Package TP_E_CSCF { Test objective "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF and routes the request to the EATF." Reference - "ETSI TS 124 229 [1], Clauses 5.11.2 1)" + "ETSI TS 124 229 [1], Clause 5.11.2 1" Config Id CF_VoLTE_INT_ES @@ -87,7 +87,7 @@ Package TP_E_CSCF { Test objective "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF and routes the request to the LRF." Reference - "ETSI TS 124 229 [1], Clauses 5.11.3" + "ETSI TS 124 229 [1], Clause 5.11.3" Config Id CF_VoLTE_INT_ES @@ -136,7 +136,7 @@ Package TP_E_CSCF { Test objective "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF and routes the request to the PSAP in the IM CN subsystem of own network." Reference - "ETSI TS 124 229 [1], Clauses 5.11.2" + "ETSI TS 124 229 [1], Clause 5.11.2" Config Id CF_VoLTE_INT_ES @@ -276,7 +276,7 @@ Package TP_E_CSCF { Test objective "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF and routes the request to the IBCF for a PSAP in another network." Reference - "ETSI TS 124 229 [1], Clauses 5.11.2" + "ETSI TS 124 229 [1], Clause 5.11.2" Config Id CF_VoLTE_INT_ES @@ -327,7 +327,7 @@ Package TP_E_CSCF { Test objective "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF and routes the request to the IBCF for a PSAP in another network and includes the LRF provided URI in the Route header." Reference - "ETSI TS 124 229 [1], Clauses 5.11.2" + "ETSI TS 124 229 [1], Clause 5.11.2" Config Id CF_VoLTE_INT_ES @@ -424,7 +424,7 @@ Package TP_E_CSCF { Test objective "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF and routes the request to the BGCF for a PSAP in the PSTN." Reference - "ETSI TS 124 229 [1], Clauses 5.11.2" + "ETSI TS 124 229 [1], Clause 5.11.2" Config Id CF_VoLTE_INT_ES @@ -475,7 +475,7 @@ Package TP_E_CSCF { Test objective "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF and routes the request to the BGCF for a PSAP in the PSTN and includes the LRF provided URI in the Request-URI." Reference - "ETSI TS 124 229 [1], Clauses 5.11.2" + "ETSI TS 124 229 [1], Clause 5.11.2" Config Id CF_VoLTE_INT_ES @@ -573,7 +573,7 @@ Package TP_E_CSCF { Test objective "Verify that the E-CSCF successfully processes a BYE from the P-CSCF for an Emergency Call and routes the request to the PSAP in the IM CN subsystem of own network." Reference - "ETSI TS 124 229 [1], Clauses 5.11.2" + "ETSI TS 124 229 [1], Clause 5.11.2" Config Id CF_VoLTE_INT_ES @@ -615,9 +615,9 @@ Package TP_E_CSCF { Test objective "Verify that the E-CSCF successfully processes a BYE from the PSAP in the IM CN subsystem for an Emergency Call and routes the request to the P-CSCF of home network." Reference - "ETSI TS 124 229 [1], Clauses 5.11.2" + "ETSI TS 124 229 [1], Clause 5.11.2" - Config Id CF_VxLTE_INT + Config Id CF_VoLTE_INT_ES PICS Selection NONE @@ -656,7 +656,7 @@ Package TP_E_CSCF { Test objective "Verify that the E-CSCF successfully processes a BYE from the P-CSCF for an Emergency Call and routes the request to the IBCF for a PSAP in another network." Reference - "ETSI TS 124 229 [1], Clauses 5.11.2" + "ETSI TS 124 229 [1], Clause 5.11.2" Config Id CF_VoLTE_INT_ES @@ -699,7 +699,7 @@ Package TP_E_CSCF { Test objective "Verify that the E-CSCF successfully processes a BYE from the IBCF for a PSAP in another network for an Emergency Call and routes the request to the P-CSCF." Reference - "ETSI TS 124 229 [1], Clauses 5.11.2" + "ETSI TS 124 229 [1], Clause 5.11.2" Config Id CF_VoLTE_INT_ES @@ -740,7 +740,7 @@ Package TP_E_CSCF { Test objective "Verify that the E-CSCF successfully processes a BYE from the P-CSCF for an Emergency Call and routes the request to the BGCF for a PSAP in the PSTN." Reference - "ETSI TS 124 229 [1], Clauses 5.11.2" + "ETSI TS 124 229 [1], Clause 5.11.2" Config Id CF_VoLTE_INT_ES @@ -783,7 +783,7 @@ Package TP_E_CSCF { Test objective "Verify that the E-CSCF successfully processes a BYE from the BGCF for a PSAP in the PSTN for an Emergency Call and routes the request to the P-CSCF." Reference - "ETSI TS 124 229 [1], Clauses 5.11.2" + "ETSI TS 124 229 [1], Clause 5.11.2" Config Id CF_VoLTE_INT_ES @@ -824,7 +824,7 @@ Package TP_E_CSCF { Test objective "Verify that the E-CSCF successfully processes a CANCEL from the P-CSCF for an Emergency Call under establishment and routes the request to the PSAP in the IM CN subsystem of own network." Reference - "ETSI TS 124 229 [1], Clauses 5.11.2" + "ETSI TS 124 229 [1], Clause 5.11.2" Config Id CF_VoLTE_INT_ES @@ -867,7 +867,7 @@ Package TP_E_CSCF { Test objective "Verify that the E-CSCF successfully processes a CANCEL from the P-CSCF for an Emergency Call under establishment and routes the request to the IBCF for a PSAP in another network." Reference - "ETSI TS 124 229 [1], Clauses 5.11.2" + "ETSI TS 124 229 [1], Clause 5.11.2" Config Id CF_VoLTE_INT_ES @@ -910,7 +910,7 @@ Package TP_E_CSCF { Test objective "Verify that the E-CSCF successfully processes a CANCEL from the P-CSCF for an Emergency Call under establishment and routes the request to the BGCF for a PSAP in the PSTN." Reference - "ETSI TS 124 229 [1], Clauses 5.11.2" + "ETSI TS 124 229 [1], Clause 5.11.2" Config Id CF_VoLTE_INT_ES @@ -952,9 +952,9 @@ Package TP_E_CSCF { Test objective "Verify that the E-CSCF successfully processes a 480 response from the PSAP in the IM CN subsystem for an Emergency Call and routes the response to the P-CSCF of home network." Reference - "ETSI TS 124 229 [1], Clauses 5.11.2" + "ETSI TS 124 229 [1], Clause 5.11.2" - Config Id CF_VxLTE_INT + Config Id CF_VoLTE_INT_ES PICS Selection NONE @@ -995,7 +995,7 @@ Package TP_E_CSCF { Test objective "Verify that the E-CSCF successfully processes a 480 response from the IBCF for a PSAP in another network for an Emergency Call and routes the response to the P-CSCF." Reference - "ETSI TS 124 229 [1], Clauses 5.11.2" + "ETSI TS 124 229 [1], Clause 5.11.2" Config Id CF_VoLTE_INT_ES @@ -1038,7 +1038,7 @@ Package TP_E_CSCF { Test objective "Verify that the E-CSCF successfully processes a 480 response from the BGCF for a PSAP in the PSTN for an Emergency Call and routes the response to the P-CSCF." Reference - "ETSI TS 124 229 [1], Clauses 5.11.2" + "ETSI TS 124 229 [1], Clause 5.11.2" Config Id CF_VoLTE_INT_ES @@ -1080,9 +1080,9 @@ Package TP_E_CSCF { Test objective "Verify that the E-CSCF successfully processes a 487 response from the PSAP in the IM CN subsystem for an Emergency Call and routes the response to the P-CSCF of home network." Reference - "ETSI TS 124 229 [1], Clauses 5.11.2" + "ETSI TS 124 229 [1], Clause 5.11.2" - Config Id CF_VxLTE_INT + Config Id CF_VoLTE_INT_ES PICS Selection NONE @@ -1123,7 +1123,7 @@ Package TP_E_CSCF { Test objective "Verify that the E-CSCF successfully processes a 487 response from the IBCF for a PSAP in another network for an Emergency Call and routes the response to the P-CSCF." Reference - "ETSI TS 124 229 [1], Clauses 5.11.2" + "ETSI TS 124 229 [1], Clause 5.11.2" Config Id CF_VoLTE_INT_ES @@ -1166,7 +1166,7 @@ Package TP_E_CSCF { Test objective "Verify that the E-CSCF successfully processes a 487 response from the BGCF for a PSAP in the PSTN for an Emergency Call and routes the response to the P-CSCF." Reference - "ETSI TS 124 229 [1], Clauses 5.11.2" + "ETSI TS 124 229 [1], Clause 5.11.2" Config Id CF_VoLTE_INT_ES diff --git a/test_purposes/Gm/TP_GM.tplan2 b/test_purposes/Gm/TP_GM.tplan2 index c3c4a59..eceb18d 100644 --- a/test_purposes/Gm/TP_GM.tplan2 +++ b/test_purposes/Gm/TP_GM.tplan2 @@ -187,7 +187,7 @@ Package TP_GM { Reference "ETSI TS 124 229 [1], Clauses 5.1.6.2 and 5.2.10.5" - Config Id CF_VxLTE_RMI + Config Id CF_VoLTE_RMI_ES PICS Selection NONE @@ -231,7 +231,7 @@ Package TP_GM { Reference "ETSI TS 124 229 [1], Clauses 5.1.6.2 and 5.2.10.5" - Config Id CF_VxLTE_RMI + Config Id CF_VoLTE_RMI_ES PICS Selection NONE @@ -274,7 +274,7 @@ Package TP_GM { Test objective "Verify that the P-CSCF successfully receives an initial emergency INVITE from an unregistered UE." Reference - "ETSI TS 124 229 [1], Clauses 5.1.6.8.2" + "ETSI TS 124 229 [1], Clause 5.1.6.8.2" Config Id CF_VoLTE_INT_ES @@ -311,7 +311,7 @@ Package TP_GM { Test objective "Verify that the P-CSCF successfully receives an initial emergency INVITE from an emergency registered UE." Reference - "ETSI TS 124 229 [1], Clauses 5.1.6.8.3" + "ETSI TS 124 229 [1], Clause 5.1.6.8.3" Config Id CF_VoLTE_INT_ES @@ -349,7 +349,7 @@ Package TP_GM { Test objective "Verify that the P-CSCF successfully receives an initial emergency INVITE from a registered but not emergency registered UE." Reference - "ETSI TS 124 229 [1], Clauses 5.1.6.8.4" + "ETSI TS 124 229 [1], Clause 5.1.6.8.4" Config Id CF_VoLTE_INT_ES @@ -390,7 +390,7 @@ Package TP_GM { Test objective "Verify that the P-CSCF successfully receives an initial eCall type INVITE from an emergency registered UE." Reference - "ETSI TS 124 229 [1], Clauses 5.1.6.11" + "ETSI TS 124 229 [1], Clause 5.1.6.11" Config Id CF_VoLTE_INT_ES @@ -436,7 +436,7 @@ Package TP_GM { an updated MSD." Reference - "ETSI TS 124 229 [1], Clauses 5.1.6.11.3" + "ETSI TS 124 229 [1], Clause 5.1.6.11.3" Config Id CF_VoLTE_INT_ES @@ -479,7 +479,7 @@ Package TP_GM { Test objective "Verify that the P-CSCF successfully receives an initial emergency INVITE from a registered but not emergency registered UE." Reference - "ETSI TS 124 229 [1], Clauses 5.1.6.8.4" + "ETSI TS 124 229 [1], Clause 5.1.6.8.4" Config Id CF_VoLTE_RMI_ES @@ -520,7 +520,7 @@ Package TP_GM { Test objective "Verify that the P-CSCF successfully processes a BYE for an emergency call." Reference - "ETSI TS 124 229 [2] Clauses 5.1.6.9" + "ETSI TS 124 229 [2] Clause 5.1.6.9" Config Id CF_VoLTE_INT_ES diff --git a/test_purposes/Gx/TP_GX.tplan2 b/test_purposes/Gx/TP_GX.tplan2 index a946a96..e7488b7 100644 --- a/test_purposes/Gx/TP_GX.tplan2 +++ b/test_purposes/Gx/TP_GX.tplan2 @@ -29,7 +29,7 @@ Package TP_GX { Test objective "Verify that IUT when receives CC-Request for PCC Rules containing IMSI for emergency services sends a CC-Answer in case of attachment procedure." Reference - "TS 129 212 [9], clauses 4.5.15.2.1" + "TS 129 212 [9], clause 4.5.15.2.1" Config Id CF_VoLTE_INT_ES @@ -113,7 +113,7 @@ Package TP_GX { Test objective "Verify that IUT when receives CC-Request for PCC Rules containing IMEI for emergency call sends a CC-Answer in case of attachment procedure." Reference - "TS 129 212 [9], clauses 4.5.15.2.1" + "TS 129 212 [9], clause 4.5.15.2.1" Config Id CF_VoLTE_INT_ES diff --git a/test_purposes/Mw/TP_MW_IS.tplan2 b/test_purposes/Mw/TP_MW_IS.tplan2 index 5d74dd9..566a0d1 100644 --- a/test_purposes/Mw/TP_MW_IS.tplan2 +++ b/test_purposes/Mw/TP_MW_IS.tplan2 @@ -179,7 +179,7 @@ Package TP_MW_IS { Reference "ETSI TS 124 229 [1], Clauses 5.1.6.2 and 5.2.10.5" - Config Id CF_VxLTE_RMI + Config Id CF_VoLTE_RMI_ES PICS Selection NONE @@ -218,7 +218,7 @@ Package TP_MW_IS { Reference "ETSI TS 124 229 [1], Clauses 5.1.6.2 and 5.2.10.5" - Config Id CF_VxLTE_RMI + Config Id CF_VoLTE_RMI_ES PICS Selection NONE diff --git a/test_purposes/Mw/TP_MW_PS.tplan2 b/test_purposes/Mw/TP_MW_PS.tplan2 index 0512125..f2fbad4 100644 --- a/test_purposes/Mw/TP_MW_PS.tplan2 +++ b/test_purposes/Mw/TP_MW_PS.tplan2 @@ -164,9 +164,9 @@ Package TP_MW_PS { Test objective "Verify that the P-CSCF rejects invalid credentials within registration (Unsuccessful)." Reference - "ETSI TS 124 229 [1], Clauses 5.2.2.1" + "ETSI TS 124 229 [1], Clause 5.2.2.1" - Config Id CF_VxLTE_RMI_B + Config Id CF_VoLTE_RMI_ES PICS Selection NONE @@ -355,7 +355,7 @@ Package TP_MW_PS { if the IM CN subsystem of the P-CSCF is not capable to handle emergency sessions." Reference - "ETSI TS 124 229 [1], Clauses 5.2.10.5" + "ETSI TS 124 229 [1], Clause 5.2.10.5" Config Id CF_VoLTE_INT_ES @@ -452,7 +452,7 @@ Package TP_MW_PS { if the E-CSCF informs the P-CSCF that Emergency Services are currently not available." Reference - "ETSI TS 124 229 [1], Clauses 5.2.10.5" + "ETSI TS 124 229 [1], Clause 5.2.10.5" Config Id CF_VoLTE_INT_ES @@ -776,7 +776,7 @@ Package TP_MW_PS { Test objective "Verify that the P-CSCF sends an INFO request demanding a transfer of updated MSD." Reference - "ETSI TS 124 229 [1], clauses 5.1.6.11.3" + "ETSI TS 124 229 [1], clause 5.1.6.11.3" Config Id CF_VoLTE_INT_ES -- GitLab