From 3e9ff04e808f41ed364a7052ec3479b512fd5c15 Mon Sep 17 00:00:00 2001 From: Yann Garcia <yann.garcia@fscom.fr> Date: Thu, 1 Jun 2023 12:05:00 +0200 Subject: [PATCH] Review TD_VoLTE_ECO_INT_REG_01 and TD_VoLTE_ECO_INT_REG_02 --- ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn | 32 +-- ttcn/AtsImsIot/AtsImsIot_TP_behavior_CX.ttcn | 97 ++++++++ ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn | 209 +++++++++++++++++ .../AtsImsIot_TP_behavior_MW_IS.ttcn | 197 ++++++++++++++++ .../AtsImsIot_TP_behavior_MW_PS.ttcn | 222 ++++++++++++++++++ ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn | 22 ++ ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn | 40 +++- 7 files changed, 803 insertions(+), 16 deletions(-) diff --git a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn index 093c65e..f781b36 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn @@ -181,18 +181,18 @@ module AtsImsIot_Emergency { f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile // Test body - f_mtc_check_TP_GM_PCSCF_REGISTER_01(vc_vxlte_monitor_components.gmA); // Events 1, 12 - f_mtc_check_TP_MW_PCSCF_REGISTER_01(vc_vxlte_monitor_components.mwPI); // Event 4, 11 - f_mtc_check_TP_MW_ICSCF_REGISTER_01(vc_vxlte_monitor_components.mwIS, true); // Event 7, 10 + f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_01(vc_vxlte_monitor_components.gmA); // Events 1, 12 + f_mtc_check_TP_MW_PCSCF_ECO_REGISTER_01(vc_vxlte_monitor_components.mwPI); // Event 4, 11 + f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_01(vc_vxlte_monitor_components.mwIS, true); // Event 7, 10 - f_mtc_check_TP_CX_HSS_UAA_01(f_getCxInterface(PX_DIAMETER_CX_SINGLE_INTERFACE));// Event 5, 6 + f_mtc_check_TP_CX_HSS_ECO_UAA_01(f_getCxInterface(PX_DIAMETER_CX_SINGLE_INTERFACE));// Event 5, 6 f_mtc_check_TP_CX_HSS_MAA_01(vc_vxlte_monitor_components.cxSH);// Event 8, 9 - f_mtc_check_TP_GM_PCSCF_REGISTER_02(vc_vxlte_monitor_components.gmA); // Events 13, 22 - f_mtc_check_TP_MW_PCSCF_REGISTER_02(vc_vxlte_monitor_components.mwPI); // Events 14, 21 - f_mtc_check_TP_MW_ICSCF_REGISTER_02(vc_vxlte_monitor_components.mwIS, true); // Event 17, 20 + f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_02(vc_vxlte_monitor_components.gmA); // Events 13, 22 + f_mtc_check_TP_MW_PCSCF_ECO_REGISTER_02(vc_vxlte_monitor_components.mwPI); // Events 14, 21 + f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_02(vc_vxlte_monitor_components.mwIS, true); // Event 17, 20 - f_mtc_check_TP_CX_HSS_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 @@ -239,16 +239,18 @@ module AtsImsIot_Emergency { f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile // Test body - f_mtc_check_TP_GM_PCSCF_REGISTER_01(vc_vxlte_monitor_components.gmA); // Events 1, 12 - f_mtc_check_TP_MW_PCSCF_REGISTER_01(vc_vxlte_monitor_components.mwPI); // Event 4, 11 - f_mtc_check_TP_MW_ICSCF_REGISTER_01(vc_vxlte_monitor_components.mwIS, true); // Event 7, 10 + f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_01(vc_vxlte_monitor_components.gmA); // Events 1, 12 + f_mtc_check_TP_MW_PCSCF_ECO_REGISTER_01(vc_vxlte_monitor_components.mwPI); // Event 4, 11 + f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_01(vc_vxlte_monitor_components.mwIS, true); // Event 7, 10 - f_mtc_check_TP_CX_HSS_UAA_01(f_getCxInterface(PX_DIAMETER_CX_SINGLE_INTERFACE));// Event 5, 6 + f_mtc_check_TP_CX_HSS_ECO_UAA_01(f_getCxInterface(PX_DIAMETER_CX_SINGLE_INTERFACE));// Event 5, 6 f_mtc_check_TP_CX_HSS_MAA_01(vc_vxlte_monitor_components.cxSH);// Event 8, 9 - f_mtc_check_TP_GM_PCSCF_REGISTER_05(vc_vxlte_monitor_components.gmA); // Events 13, 22 - f_mtc_check_TP_MW_PCSCF_REGISTER_05(vc_vxlte_monitor_components.mwPI); // Events 14, 21 - f_mtc_check_TP_MW_ICSCF_REGISTER_05(vc_vxlte_monitor_components.mwIS, true); // Event 17, 20 + f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_03(vc_vxlte_monitor_components.gmA); // Events 13, 22 + f_mtc_check_TP_MW_PCSCF_ECO_REGISTER_03(vc_vxlte_monitor_components.mwPI); // Events 14, 21 + f_mtc_check_TP_MW_ICSCF_REGISTER_03(vc_vxlte_monitor_components.mwIS, true); // Event 17, 20 + + f_mtc_check_TP_CX_HSS_ECO_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 diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_CX.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_CX.ttcn index 55300d3..3d3f7a4 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_CX.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_CX.ttcn @@ -501,6 +501,103 @@ group g_HSS { } } // End of function f_mtc_check_TP_CX_HSS_UAA_01 + /** + * Starts monitor component behavior for f_mtc_check_TP_CX_HSS_ECO_UAA_01 + * @param p_monitorCompRef Reference to monitor component + * <pre> + * Test objective "IUT successfully processes all mandatory AVPs in a UA-Request received due to first UE initial registration and sends UA-Answer." + * + * <pre> + * + * Config Id CF_VxLTE_INT + * + * Initial conditions with { + * the UE_A entity isNotRegisteredTo the IMS_A + * } + * + * ensure that { + * when { + * the IMS_I_CSCF_A entity sends a UAR containing + * Session_ID_AVP + * Vendor_Specific_Application_Id_AVP + * Auth_Session_State_AVP + * indicating value NO_STATE_MAINTAINED, + * Origin_Host_AVP + * Origin_Realm_AVP + * Public_Identity_AVP + * Visited_Network_Identifier_AVP + * User_Authorization_Type_AVP + * indicating value REGISTRATION, + * User_Name_AVP + * Destination_Host_AVP + * Destination_Realm_AVP + * UAR_Flags_AVP + * indicating value IMS_Emergency_Registration_bit_not_set + * ; + * to the IMS_HSS_A entity + * } + * then { + * the IMS_HSS_A entity sends the UAA containing + * Session_ID_AVP + * Vendor_Specific_Application_Id_AVP + * Auth_Session_State_AVP + * Origin_Host_AVP + * Origin_Realm_AVP + * not Result_Code_AVP + * Experimental_Result_AVP containing + * Experimental_Result_Code_AVP + * indicating value DIAMETER_FIRST_REGISTRATION + * ; + * ; + * to the IMS_I_CSCF_A entity + * } + * } + * </pre> + * @see TS 103 653-1 clause 7.4 + */ + function f_mtc_check_TP_CX_HSS_ECO_UAA_01( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var charstring v_publicIdentity := "sip:"&v_userInfoA.publicId&"@"&v_userInfoA.domain; + //"sip:"&v_userInfoA.publicId&@&v_userInfoA.domain + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{uAR_MSG := mw_UAR_Registration(mw_publicIdentity(v_publicIdentity))} + }, + { + DIAMETER_MSG:{uAR_MSG := mw_UAR_basic} + }, + {0, omit}, + "TP_CX_HSS_UAA_01 - UAR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{uAA_MSG := mw_UAA_diamFirstRegistration} + }, + { + DIAMETER_MSG:{uAA_MSG := mw_UAA_basic} + }, + {0, omit}, + "TP_CX_HSS_UAA_01 - UAA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_CX_HSS_ECO_UAA_01 + /** * Starts monitor component behavior for TP_CX_HSS_UAA_02 * @param p_monitorCompRef Reference to monitor component diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn index cec6cb6..e51ee8c 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn @@ -220,6 +220,117 @@ module AtsImsIot_TP_behavior_GM { } } // End of function f_mtc_check_TP_GM_PCSCF_REGISTER_01 + /** + * @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 + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isTriggeredToStart + * } + * then { + * the UE_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_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 term_ioi, + * not SecurityClient + * ;; + * to the IMS_P_CSCF_A entity + * and the UE_A entity receives 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, + * Path, + * Warning, + * PAccessNetworkInfo, + * WwwAuthenticate containing + * Digest, + * 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 + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_01( + 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_01( // FIXME Add CallId... + 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_01 - First request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 401 Unauthorized response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_401Unauthorized(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_01 - 401 Unauthorized", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_01 + /** * @desc Verify that the P-CSCF successfully processes a first registration (Successful) * Initial conditions with { @@ -424,6 +535,104 @@ 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). + * 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 + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isTriggeredToStart + * } + * then { + * 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_INVALID_USERNAME, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "" + * ;; + * from the UE_A entity + * and the IMS_P_CSCF_A entity sends an 404_NotFound 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 UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_03( + 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 SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + 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_contact(mw_ContactAddress) + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_03 - First request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + log("v_sip", v_sip); + // Check REGISTER 404 Not Found response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_404NotFound(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_GM_PCSCF_REGISTER_03 - 404 Not Found", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_03 + function f_mtc_check_TP_GM_PCSCF_REGISTER_04( // FIXME RMI To be reviewed in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_IS.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_IS.ttcn index 21076ef..14428e2 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_IS.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_IS.ttcn @@ -190,6 +190,107 @@ module AtsImsIot_TP_behavior_MW_IS { } } // End of function f_mtc_check_TP_MW_ICSCF_REGISTER_01 + /** + * @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 + * } + * + * 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, + * ; + * 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, + * Path, + * Warning, + * PAccessNetworkInfo, + * WwwAuthenticate containing + * Digest, + * 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" + * ; + * to the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_01( + 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_MW_ICSCF_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_credentialIntegrityYes)*/ + -, -, -, + mw_contact(mw_ContactAddress) + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_MW_ICSCF_REGISTER_01 - First request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 401 Unauthorized response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_401Unauthorized(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_MW_ICSCF_REGISTER_01 - 401 Unauthorized", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_01 + /** * @desc Verify that the I-CSCF successfully processes a full registration (Successful). * Initial conditions with { @@ -395,6 +496,102 @@ module AtsImsIot_TP_behavior_MW_IS { } } // End of function f_mtc_check_TP_MW_ICSCF_REGISTER_03 + /** + * @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 isNotRegisteredTo the IMS_A and + * the UE_B 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 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 + * ;; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_I_CSCF_A entity sends an 404_NotFound 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_03( + 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); // 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)*/ + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_MW_ICSCF_REGISTER_03 - 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_404NotFound(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_03 - 404 Not Found", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_03 + 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_TP_behavior_MW_PS.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn index c6aaded..f46dad4 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn @@ -215,6 +215,119 @@ 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). + * 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 + * } + * + * 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, + * ; + * 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, + * 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 + * 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, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Path, + * Warning, + * PAccessNetworkInfo, + * WwwAuthenticate containing + * Digest, + * 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" + * ; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_ECO_REGISTER_01( + 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 first REGISTER request + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_PCSCF_ECO_REGISTER_01( // FIXME Add CallId... + 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_contact(mw_ContactAddress) + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_MW_PCSCF_REGISTER_01 - First request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 401 Unauthorized response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_401Unauthorized(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_MW_PCSCF_REGISTER_01 - 401 Unauthorized", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_REGISTER_01 + /** * @desc Verify that the P-CSCF successfully processes a full registration (Successful). * Initial conditions with { @@ -447,6 +560,115 @@ 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). + * 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 + * } + * + * 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_INVALID_USERNAME, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "" + * ;; + * 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_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 + * 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 + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_ECO_REGISTER_03( + 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 SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + 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_contact(mw_ContactAddress) + ) + ) + }, + { mw_SipRequest(mw_REGISTER_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_REGISTER_03 - 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_404NotFound(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_PCSCF_REGISTER_03 - 404 Not Found", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_REGISTER_03 + function f_mtc_check_TP_MW_PCSCF_REGISTER_04( // FIXME RMI To be reviewed in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := true diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn index ce18a37..6f8599a 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn @@ -215,6 +215,19 @@ module AtsImsIot_Templates_GM { } } // End of template mw_TP_GM_PCSCF_REGISTER_01 + template(present) REGISTER_Request mw_TP_GM_PCSCF_ECO_REGISTER_01( + 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 := ?, + ) modifies mw_TP_GM_PCSCF_REGISTER_01 := { + msgHeader := { + contact := p_contact + } + } // End of template mw_TP_GM_PCSCF_ECO_REGISTER_01 + template(present) REGISTER_Request mw_TP_GM_PCSCF_REGISTER_02( template (present) From p_from := ?, template (present) To p_to := ?, @@ -233,6 +246,15 @@ module AtsImsIot_Templates_GM { ) modifies mw_TP_GM_PCSCF_REGISTER_01 := { } // End of template mw_TP_GM_PCSCF_REGISTER_03 + template(present) REGISTER_Request mw_TP_GM_PCSCF_ECO_REGISTER_03( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := * + ) modifies mw_TP_GM_PCSCF_ECO_REGISTER_01 := { + } // End of template mw_TP_GM_PCSCF_ECO_REGISTER_03 + template(present) REGISTER_Request mw_TP_GM_PCSCF_REGISTER_04( template (present) From p_from := ?, template (present) To p_to := ?, diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn index c03827e..a7fefb5 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn @@ -223,6 +223,19 @@ module AtsImsIot_Templates_MW { } } // End of template mw_TP_MW_PCSCF_REGISTER_01 + template(present) REGISTER_Request mw_TP_MW_PCSCF_ECO_REGISTER_01( + 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 := ?, + ) modifies mw_REGISTER_authorizedRequest_wo_securityheaders_IMS := { + msgHeader := { + contact := p_contact + } + } // End of template mw_TP_MW_PCSCF_REGISTER_01 + template(present) REGISTER_Request mw_TP_MW_PCSCF_REGISTER_02( template (present) From p_from := ?, template (present) To p_to := ?, @@ -789,6 +802,20 @@ module AtsImsIot_Templates_MW { } } // End of template mw_TP_MW_ICSCF_REGISTER_01 + template(present) REGISTER_Request mw_TP_MW_ICSCF_ECO_REGISTER_01( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template (present) Path p_Path := ?, + template (present) PChargingVector p_pChargingVector := ?, + template (present) PVisitedNetworkID p_pVisitedNetworkID := ?, + template (present) Contact p_contact := ? + ) modifies mw_TP_MW_ICSCF_REGISTER_01 := { + msgHeader := { + contact := p_contact + } + } // End of template mw_TP_MW_ICSCF_ECO_REGISTER_01 + template(present) REGISTER_Request mw_TP_MW_ICSCF_REGISTER_02( template (present) From p_from := ?, template (present) To p_to := ?, @@ -829,7 +856,18 @@ module AtsImsIot_Templates_MW { } } // End of template mw_TP_MW_ICSCF_REGISTER_03 - template(present) REGISTER_Request mw_TP_MW_ICSCF_REGISTER_04( + template(present) REGISTER_Request mw_TP_MW_ICSCF_ECO_REGISTER_03( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template (present) Path p_Path := ?, + template (present) PChargingVector p_pChargingVector := ?, + template (present) PVisitedNetworkID p_pVisitedNetworkID := ?, + template (present) Contact p_contact := ? + ) modifies mw_TP_MW_ICSCF_ECO_REGISTER_01 := { + } // End of template mw_TP_MW_ICSCF_ECO_REGISTER_03 + + template(present) REGISTER_Request mw_TP_MW_ICSCF_REGISTER_04( template (present) From p_from := ?, template (present) To p_to := ?, template (present) Authorization p_authorization := ?, -- GitLab