diff --git a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn index 92c1276082a674272d5ea3b9f89ed7826d11702a..1697f6017540849798c96c84dcf87ba40be2a042 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn @@ -411,7 +411,7 @@ module AtsImsIot_Emergency { f_mtc_check_TP_MW_IBCF_100Trying_01(vc_vxlte_monitor_components.mwBE, -, v_sip); f_mtc_check_TP_MM_PSAP_INVITE_01(vc_vxlte_monitor_components.mwB_PSAP, true); // Event 12 - f_mtc_check_TP_MM_PSAP_100Trying_01(vc_vxlte_monitor_components.mwBE, -, v_sip); + f_mtc_check_TP_MM_PSAP_100Trying_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 183 Session Progress f_mtc_check_TP_MM_PSAP_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // Event 13 @@ -430,8 +430,8 @@ module AtsImsIot_Emergency { f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 18 f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 19 - f_mtc_check_TP_MM_PSAP_1XXRESP_01(vc_vxlte_monitor_components.mwB_PSAP); // 180 Ringing – Event 22 - // FIXME f_mtc_check_TP_MW_IBCF_180RINGING_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 23 + f_mtc_check_TP_MM_PSAP_180RINGING_01(vc_vxlte_monitor_components.mwB_PSAP); // 180 Ringing – Event 22 + f_mtc_check_TP_MW_IBCF_180RINGING_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 23 f_mtc_check_TP_MW_ECSCF_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25 @@ -444,16 +444,14 @@ module AtsImsIot_Emergency { f_mtc_userCheckPeerIsRinging(v_ueA); f_mtc_userAnswerCall(v_psap); - //f_mtc_check_TP_IC_IBCF_2XXRESP_01(vc_vxlte_monitor_components.mwB_PSAP, true); // 200 OK – Event 26 - //f_mtc_check_TP_IC_IBCF_2XXRESP_02(vc_vxlte_monitor_components.mwB_PSAP, true); // 200 OK – Event 25 - f_mtc_check_TP_MM_PSAP_2XXRESP_03(vc_vxlte_monitor_components.mwB_PSAP); // 200 OK – Event 26 - // FIXME f_mtc_check_TP_???_2XXRESP_03(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 27 + f_mtc_check_TP_MM_PSAP_200OK_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 200 OK Event 26 + f_mtc_check_TP_MW_IBCF_200OK(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 27 f_mtc_check_TP_MW_ECSCF_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 28 f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 29 f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 30 f_mtc_check_TP_MW_ECSCF_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 31 - // FIXME f_mtc_check_TP_???_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 32 + f_mtc_check_TP_MW_IBCF_ACK_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 32 f_mtc_check_TP_MM_PSAP_ACK_01(vc_vxlte_monitor_components.mwB_PSAP); // ACK – Event 33 f_mtc_userCheckCallEstablished(v_ueA); // Event 34 diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn index b0586e45f695a48f32c8e466edc7eb184bc5065c..445028ac0255bf910d5720bd1e900503f8b37dbf 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn @@ -32,7 +32,7 @@ module AtsImsIot_TP_behavior_MM { group imsInvite { /** - * @desc Verify that the P-CSCF successfully processes an initial INVITE (Originating Leg).. + * @desc Verify that the IBCF successfully processes an initial INVITE (Originating Leg).. * Initial conditions with { * the UE_A entity isAttachedTo the EPC_A and * the PSAP entity isAttachedTo the EPC_B and @@ -43,7 +43,7 @@ module AtsImsIot_TP_behavior_MM { * Expected behaviour * ensure that { * when { - * the PSAP entity receives an INVITE containing + * the IMS_IBCF_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, @@ -55,11 +55,22 @@ module AtsImsIot_TP_behavior_MM { * Version indicating value "0" * ; * ;; - * from the IMS_EBCF_A entity + * from the IMS_E_CSCF_A entity * } * then { - * the PSAP entity sends an 100_Trying - * to the IMS_IBCF_A entity + * the IMS_IBCF_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 PSAP entity * } * } */ @@ -97,4 +108,325 @@ module AtsImsIot_TP_behavior_MM { } // End of group imsInvite -} // end module AtsImsIot_TP_behavior_MM \ No newline at end of file + group ims100Trying { + + /** + * @desc Verify that the IBCF 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_IBCF_A entity receives a 100_Trying + * from the PSAP entity + * } + * then { + * the IMS_IBCF_A entity sends a 100_Trying + * to the IMS_E_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_IBSCF_100Trying_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 100 TRYING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MW_IBCF_100Trying_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_100Trying_Base) }, + { 0, omit }, + "TP_MW_IBCF_100Trying_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_IBSCF_100Trying_01 + + } // End of group ims100Trying + + group ims180Ringing { + + /** + * @desc Verify that the IBCF 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_IBCF_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_IBCF_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_E_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MM_PSAP_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_MM_PSAP_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_MM_PSAP_180RINGING_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MM_PSAP_180RINGING_01 + + } // End of group ims180Ringing + + group ims183SessionProgress { + + /** + * @desc Verify that the IBCF 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_IBCF_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_IBCF_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_E_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MM_PSAP_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_MM_PSAP_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_MM_PSAP_183SESSION_PROGRESS_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MM_PSAP_183SESSION_PROGRESS_01 + + } // End of group ims183SessionProgress + + group ims200Ok { + + /** + * @desc Verify that the IBCF 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_IBCF_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_IBCF_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_E_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MM_PSAP_200OK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check the 200 OK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + ( + mw_To_NameAddr_TelUrl({quotedString:=f_getSipUserId(PX_EUT_B).publicId}), + mw_To_AddrUnion_TelUrl(f_getTelUserId(PX_EUT_B).publicId), + p_sip.request.msgHeader.toField + ) + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MM_PSAP_200OK_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + } + } // End of function f_mtc_check_TP_MM_PSAP_200OK_01 + + } // End of group ims200Ok + + group imsAck { + + /** + * @desc Verify that the IBCF 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_IBCF_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_E_CSCF_A entity + * } + * then { + * the IMS_IBCF_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_PSAP_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_MM_PSAP_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_MM_PSAP_ACK_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MM_PSAP_ACK_01 + + } // End of group imsAck + +} // End of module AtsImsIot_TP_behavior_MM \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EB.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EB.ttcn index 850ca5a9438aedc5ffad211a04c709485573f6a0..d8148b17eb97a752a2c366e60405b86990566b73 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EB.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EB.ttcn @@ -297,7 +297,7 @@ module AtsImsIot_TP_behavior_MW_EB { * Expected behaviour * ensure that { * when { - * the IMS_EP_CSCF_A entity receives a 200_Ok containing + * 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, diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn index 2fbd11a328a8fbb9d742e83d62d15f062e6a2d24..4a48304be4accee1f19c1b677c6f0d8d5cc1195a 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn @@ -28,4 +28,107 @@ module AtsImsIot_Templates_MM { import from AtsImsIot_PIXITS all; import from AtsImsIot_Templates all; + /** + * @desc INVITE Request checking TP_MM_PSAP_INVITE_01 + */ + template(present) INVITE_Request mdw_TP_MM_PSAP_INVITE_01 (template (present) SipUrl p_IBCF_SIP_URI := ?, + template (present) From p_from := ?, + template (present) To p_to := ?) + modifies mw_INVITE_Request_Base := { + msgHeader := { + fromField := p_from, + toField := p_to, + route := ({ + fieldName := ROUTE_E, + routeBody := { + *, + complement(mw_routeBody(p_IBCF_SIP_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 := ?}), + * + } + }, + pAccessNetworkInfo := omit + } + } + + template (present) Response mw_TP_MM_PSAP_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_MM_PSAP_100Trying_01 + + template (present) Response mw_TP_MM_PSAP_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_MM_PSAP_180Ringing_01 + + template (present) Response mw_TP_MM_PSAP_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_MM_PSAP_183SessionProgress_01 + + template (present) ACK_Request mw_TP_MM_PSAP_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_MM_PSAP_ACK_01 + } // End of module AtsImsIot_Templates_MM diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn index 64b7ee0ec659bd263792908f84eafaeba094414d..96595a8968247b2d21151bb8dc9f16e486e4d297 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn @@ -1133,18 +1133,6 @@ module AtsImsIot_Templates_MW { } } } // End of template mw_TP_MW_IBCF_ACK_01 - - template (present) ACK_Request mw_TP_MW_IBCF_ACK_02( // TODO To be enforced - template (present) CallId p_callId := ?, - template (present) CSeq p_cSeq := ?, - template (present) SipUrl p_ack_uri := ?, - template (present) From p_from := ?, - template (present) To p_to := ? - ) modifies mw_TP_MW_IBCF_ACK_01 := { - msgHeader := { - route := omit - } - } // End of template mw_TP_MW_IBCF_ACK_02 }