Loading DiameterCxDx/ttcn/DiameterCxDx_Cx_TCFunctions.ttcn3 +98 −55 Original line number Diff line number Diff line Loading @@ -14,6 +14,9 @@ module DiameterCxDx_Cx_TCFunctions { } import from LibCommon_VerdictControl all; import from LibSip_Steps {function f_RemoveRegistration}; import from LibSip_SIPTypesAndValues all; // LibDiameter import from LibDiameter_Types_CxDx_AVPs all; import from LibDiameter_TypesAndValues { Loading Loading @@ -3472,14 +3475,14 @@ module DiameterCxDx_Cx_TCFunctions { } } // group TP_CSCFRole_MS group TP_CSCFRole_UA {//Cx UA function f_TC_CX_CSCF_UA_01_UA() runs on ImsComponent { function f_TC_CX_CSCF_UA_01_UA(in CSeq p_cSeq_s) runs on ImsComponent { // Preamble f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // TODO: Send registration message to I-CSCF //Registration f_preamble_UE_registration(p_cSeq_s); f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); // Postamble f_RemoveRegistration(vc_cSeq); // deregistration in SUT f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); } function f_TC_CX_CSCF_UA_01_HSS() runs on DiameterCx { Loading Loading @@ -3514,23 +3517,30 @@ module DiameterCxDx_Cx_TCFunctions { f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); // Postamble // answer with // answer with registration error f_send_UAA(m_UAA_Msg(vc_sessionId, m_UAA_basic(vc_originHost, vc_originRealm, m_resultCode(DIAMETER_AUTHENTICATION_REJECTED_E)))); f_awaiting_MAR(mw_MAR_Msg(?, mw_MAR_basic)); f_send_MAA(m_MAA_Msg(vc_sessionId, m_MAA_basic(vc_originHost, vc_originRealm, m_resultCode(DIAMETER_SUCCESS_E)))); f_awaiting_UAR(mw_UAR_Msg(?, mw_UAR())); f_send_UAA(m_UAA_Msg(vc_sessionId, m_UAA_basic(vc_originHost, vc_originRealm, m_resultCode(DIAMETER_SUCCESS_E)))); f_awaiting_SAR(mw_SAR_Msg(?, mw_SAR_basic)); f_send_SAA(m_SAA_Msg(vc_sessionId, m_SAA_basic(vc_originHost, vc_originRealm, m_resultCode(DIAMETER_SUCCESS_E)))); f_postamble_HSS(); //de-registration? f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); } function f_TC_CX_CSCF_UA_02_UA() runs on ImsComponent { function f_TC_CX_CSCF_UA_02_UA(in CSeq p_cSeq_s) runs on ImsComponent { // Preamble // TODO: Send registration message to CSCF with registration time limited to 10 sec // Wait 10 sec f_preamble_UE_registration(p_cSeq_s); f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // TODO: Send the second registration message // Send the second registration message f_preamble_UE_registration(p_cSeq_s); f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); f_RemoveRegistration(vc_cSeq); // deregistration in SUT // Postamble f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); } Loading @@ -3542,14 +3552,22 @@ module DiameterCxDx_Cx_TCFunctions { f_preamble_HSS(); //waiting for the first registration message f_awaiting_UAR(mw_UAR_Msg(?, mw_UAR)); f_send_UAA(m_UAA_Msg(vc_sessionId, m_UAA_basic(vc_originHost, vc_originRealm, m_resultCode(DIAMETER_SUCCESS_E)))); f_awaiting_MAR(mw_MAR_Msg(?, mw_MAR_basic)); f_send_MAA(m_MAA_Msg(vc_sessionId, m_MAA_basic(vc_originHost, vc_originRealm, m_resultCode(DIAMETER_SUCCESS_E)))); f_awaiting_UAR(mw_UAR_Msg(?, mw_UAR())); //send a successful respond f_send_UAA(m_UAA_Msg(vc_sessionId, m_UAA_basic(vc_originHost, vc_originRealm, m_resultCode(DIAMETER_SUCCESS_E)))); f_awaiting_SAR(mw_SAR_Msg(?, mw_SAR_basic)); f_send_SAA(m_SAA_Msg(vc_sessionId, m_SAA_basic(vc_originHost, vc_originRealm, m_resultCode(DIAMETER_SUCCESS_E)))); f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // Test Body // the IUT sends a UA-Request // the IUT sends a UA-Request (due to Re-Register) f_awaiting_UAR(mw_UAR_Msg( // IUT sends a UA-Request ?, // containing Session-ID AVP mw_UAR( // Loading @@ -3576,18 +3594,21 @@ module DiameterCxDx_Cx_TCFunctions { // answer with registration error f_send_UAA(m_UAA_Msg(vc_sessionId, m_UAA_basic(vc_originHost, vc_originRealm, m_resultCode(DIAMETER_AUTHENTICATION_REJECTED_E)))); f_postamble_HSS(); f_awaiting_SAR(mw_SAR_Msg(?, mw_SAR_basic)); f_send_SAA(m_SAA_Msg(vc_sessionId, m_SAA_basic(vc_originHost, vc_originRealm, m_resultCode(DIAMETER_SUCCESS_E)))); // de-registration? f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); } function f_TC_CX_CSCF_UA_03_UA() runs on ImsComponent { function f_TC_CX_CSCF_UA_03_UA(in CSeq p_cSeq_s) runs on ImsComponent { // Preamble // TODO: Send registration message to CSCF // Wait 5 sec f_preamble_UE_registration(p_cSeq_s); f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // TODO: Send the deregistration message // Send the deregistration message f_RemoveRegistration(vc_cSeq); // deregistration in SUT f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); // Postamble f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); } Loading @@ -3599,14 +3620,23 @@ module DiameterCxDx_Cx_TCFunctions { f_preamble_HSS(); //waiting for the first registration message f_awaiting_UAR(mw_UAR_Msg(?, mw_UAR)); f_send_UAA(m_UAA_Msg(vc_sessionId, m_UAA_basic(vc_originHost, vc_originRealm, m_resultCode(DIAMETER_SUCCESS_E)))); f_awaiting_MAR(mw_MAR_Msg(?, mw_MAR_basic)); f_send_UAA(m_MAA_Msg(vc_sessionId, m_MAA_basic(vc_originHost, vc_originRealm, m_resultCode(DIAMETER_SUCCESS_E)))); //waiting for the first (authorized) registration message f_awaiting_UAR(mw_UAR_Msg(?, mw_UAR())); //send a successful respond f_send_UAA(m_UAA_Msg(vc_sessionId, m_UAA_basic(vc_originHost, vc_originRealm, m_resultCode(DIAMETER_SUCCESS_E)))); f_awaiting_SAR(mw_SAR_Msg(?, mw_SAR_basic)); f_send_SAA(m_SAA_Msg(vc_sessionId, m_SAA_basic(vc_originHost, vc_originRealm, m_resultCode(DIAMETER_SUCCESS_E)))); f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // Test Body // the IUT sends a UA-Request // the IUT sends a UA-Request (de-registration) f_awaiting_UAR(mw_UAR_Msg( // IUT sends a UA-Request ?, // containing Session-ID AVP mw_UAR( // Loading @@ -3631,18 +3661,22 @@ module DiameterCxDx_Cx_TCFunctions { // Postamble f_send_UAA(m_UAA_Msg(vc_sessionId, m_UAA_basic(vc_originHost, vc_originRealm, m_resultCode(DIAMETER_SUCCESS_E)))); f_awaiting_SAR(mw_SAR_Msg(?, mw_SAR_basic)); f_send_SAA(m_SAA_Msg(vc_sessionId, m_SAA_basic(vc_originHost, vc_originRealm, m_resultCode(DIAMETER_SUCCESS_E)))); f_postamble_HSS(); f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); } function f_TC_CX_CSCF_UA_04_UA() runs on ImsComponent { function f_TC_CX_CSCF_UA_04_UA(in CSeq p_cSeq_s) runs on ImsComponent { // Preamble f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // TODO: Send the IMS emergency registration // Send the IMS emergency registration f_preamble_UE_emergencyRegistration(p_cSeq_s); f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); // Postamble f_RemoveRegistration(vc_cSeq); // deregistration in SUT f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); } Loading @@ -3655,7 +3689,14 @@ module DiameterCxDx_Cx_TCFunctions { f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // Test Body // the IUT sends a UA-Request f_awaiting_UAR(mw_UAR_Msg(?, mw_UAR)); f_send_UAA(m_UAA_Msg(vc_sessionId, m_UAA_basic(vc_originHost, vc_originRealm, m_resultCode(DIAMETER_SUCCESS_E)))); f_awaiting_MAR(mw_MAR_Msg(?, mw_MAR_basic)); f_send_MAA(m_MAA_Msg(vc_sessionId, m_MAA_basic(vc_originHost, vc_originRealm, m_resultCode(DIAMETER_SUCCESS_E)))); // the IUT sends a UA-Request (authorized emergency register) f_awaiting_UAR(mw_UAR_Msg( // IUT sends a UA-Request ?, // containing Session-ID AVP mw_UAR( // Loading @@ -3670,8 +3711,7 @@ module DiameterCxDx_Cx_TCFunctions { mw_visitedNetworkId( // containing a Visited-Network-Identifier AVP PX_VisitedNetworkId), // indicating the domain name of the visited network mw_authSessionState(?), // containing an Auth-Session-State AVP mw_userAuthorizationType( // containing a User-Authorization-Type AVP DE_REGISTRATION), // indicating REGISTRATION -, // User_Authorization_Type_AVP mw_uARFlag( // containing a UAR-Flags AVP 1) // with IMS-Emergency-Registration bit set ))); Loading @@ -3680,20 +3720,30 @@ module DiameterCxDx_Cx_TCFunctions { // Postamble f_send_UAA(m_UAA_Msg(vc_sessionId, m_UAA_basic(vc_originHost, vc_originRealm, m_resultCode(DIAMETER_AUTHENTICATION_REJECTED_E)))); f_awaiting_SAR(mw_SAR_Msg(?, mw_SAR_basic)); f_send_SAA(m_SAA_Msg(vc_sessionId, m_SAA_basic(vc_originHost, vc_originRealm, m_resultCode(DIAMETER_SUCCESS_E)))); // de-registration? f_postamble_HSS(); f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); } } // group TP_CSCFRole_UA group TP_CSCFRole_SA {//Cx SA function f_TC_CX_CSCF_SA_01_UA() runs on ImsComponent { function f_TC_CX_CSCF_SA_01_UA(in CSeq p_cSeq_s) runs on ImsComponent { // Preamble //Registration f_preamble_UE_registration(p_cSeq_s); f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // TODO: Send registration message to I-CSCF // Send registration message to I-CSCF // NOTE: internal behaviour of SUT f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); // Postamble f_RemoveRegistration(vc_cSeq); // deregistration in SUT f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); } function f_TC_CX_CSCF_SA_01_HSS() runs on DiameterCx { Loading @@ -3706,32 +3756,23 @@ module DiameterCxDx_Cx_TCFunctions { // Test Body // the IUT sends a UA-Request f_awaiting_UAR(mw_UAR_Msg(?, mw_UAR( // IUT sends a UA-Request ?, // containing an Origin-Host AVP ?, // containing an Origin-Realm AVP *, // ?, // containing a Destination-Realm AVP mw_userName( // containing a User-Name AVP PX_UserName), // indicating the private user identity mw_publicIdentity( // containing a Public-Identity AVP PX_PublicIdentity), // indicating the public user identity to be registered mw_visitedNetworkId( // containing a Visited-Network-Identifier AVP PX_VisitedNetworkId), // indicating the domain name of the visited network mw_authSessionState( // containing an Auth-Session-State AVP NO_STATE_MAINTAINED_E), // indicating NO_STATE_MAINTAINED mw_userAuthorizationType( // containing a User-Authorization-Type AVP REGISTRATION), // indicating REGISTRATION mw_uARFlag( // containing a UAR-Flags AVP 0) // with IMS-Emergency-Registration bit not set ))); f_awaiting_UAR(mw_UAR_Msg(?, mw_UAR)); f_send_UAA(m_UAA_Msg(vc_sessionId, m_UAA_basic(vc_originHost, vc_originRealm, m_resultCode(DIAMETER_SUCCESS_E)))); f_awaiting_MAR(mw_MAR_Msg(?, mw_MAR_basic)); f_send_MAA(m_MAA_Msg(vc_sessionId, m_MAA_basic(vc_originHost, vc_originRealm, m_resultCode(DIAMETER_SUCCESS_E)))); f_awaiting_UAR(mw_UAR_Msg(?, mw_UAR)); f_send_UAA(m_UAA_Msg(vc_sessionId, m_UAA_basic(vc_originHost, vc_originRealm, m_resultCode(DIAMETER_SUCCESS_E)))); f_awaiting_SAR(mw_SAR_Msg(?, mw_SAR(?,?,?,omit,mw_authSessionState(NO_STATE_MAINTAINED_E),{?},?,?,?))); f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); // Postamble // answer with // answer with registration error f_send_UAA(m_UAA_Msg(vc_sessionId, m_UAA_basic(vc_originHost, vc_originRealm, m_resultCode(DIAMETER_AUTHENTICATION_REJECTED_E)))); f_send_SAA(m_SAA_Msg(vc_sessionId, m_SAA_basic(vc_originHost, vc_originRealm, m_resultCode(DIAMETER_SUCCESS_E)))); // de-registration? f_postamble_HSS(); f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); } Loading @@ -3742,6 +3783,8 @@ module DiameterCxDx_Cx_TCFunctions { } // group TP_CSCFRole_LI group TP_CSCFRole_PP {//Cx PP } // group TP_CSCFRole_PP group TP_CSCFRole_MA {//Cx MA } // group TP_CSCFRole_MA } // group TP_CSCFRole } // group TP_Cx Loading DiameterCxDx/ttcn/DiameterCxDx_Steps.ttcn +22 −1 Original line number Diff line number Diff line Loading @@ -321,6 +321,27 @@ vc_from, vc_to, vc_via)); } /** * * @desc UE registration at Gm */ function f_preamble_UE_emergencyRegistration(in CSeq p_cSeq_s) runs on ImsComponent { var template REGISTER_Request v_register; //UE Registration vc_interfaceprofile.SUTPort := PX_DIAMETER_CX_SUT_ICSCF_PORT; vc_interfaceprofile.SUTIpaddr := PX_DIAMETER_CX_SUT_ICSCF_IPADDR; vc_interfaceprofile.SUTHomeDomain := PX_OriginRealm; v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); // preamble with send REGISTER, await 401, send REGISTER, await // 200 OK and user profile setting f_IMS_preamble_withEmergencyRegistration(p_cSeq_s, v_register); } }// end group Preambles group Postambles { Loading DiameterCxDx/ttcn/DiameterCxDx_Templates.ttcn +28 −0 Original line number Diff line number Diff line Loading @@ -274,6 +274,11 @@ module DiameterCxDx_Templates { reason_Info := *, aVP_Type := * } template Server_Assignment_Type_AVP mw_serverAssignmentType(template (value) Srv_Assgmt_Type_Code p_avpData) := { aVP_Header := mw_aVP_Header_VMbit1(c_server_Assignment_Type_AVP_Code), aVP_Data := p_avpData } }//end group awaitingTemplatesForAVPs } //end group SpecificAVPHeaders } //end group HeaderFieldTemplates Loading Loading @@ -1228,6 +1233,29 @@ module DiameterCxDx_Templates { uAR_Flags := p_uAR_Flags // optional in TS 129 229 } template (present) SAR_Body_AVP mw_SAR( template (present) Origin_Host_AVP p_originHost:=?, template (present) Origin_Realm_AVP p_originRealm:=?, template (present) Destination_Realm_AVP p_destinationRealm:=?, template User_Name_AVP p_userName:=?, template Auth_Session_State_AVP p_auth_Session_State:=?, template SAR_Body_AVP.public_Identity p_public_Identity:=*, template Server_Name_AVP p_server_Name:=?, template Server_Assignment_Type_AVP p_server_Assignment_Type:=?, template User_Data_Already_Available_AVP p_user_Data_Already_Available:=? ) modifies mw_SAR_basic := { auth_Session_State := p_auth_Session_State, // mandatory in TS129 229 origin_Host := p_originHost, // mandatory in TS129 229 origin_Realm := p_originRealm, // mandatory in TS129 229 destination_Realm := p_destinationRealm, // mandatory in TS129 229 user_Name := p_userName, // optional in TS129 229 public_Identity := p_public_Identity, // optional in TS129 229 server_Name := p_server_Name, // mandatory in TS129 229 server_Assignment_Type := p_server_Assignment_Type, // mandatory in TS129 229 user_Data_Already_Available := p_user_Data_Already_Available // mandatory in TS129 229 } template (present) RTR_Body_AVP mw_RTR( template (present) Origin_Host_AVP p_originHost, template (present) Origin_Realm_AVP p_originRealm, Loading Loading
DiameterCxDx/ttcn/DiameterCxDx_Cx_TCFunctions.ttcn3 +98 −55 Original line number Diff line number Diff line Loading @@ -14,6 +14,9 @@ module DiameterCxDx_Cx_TCFunctions { } import from LibCommon_VerdictControl all; import from LibSip_Steps {function f_RemoveRegistration}; import from LibSip_SIPTypesAndValues all; // LibDiameter import from LibDiameter_Types_CxDx_AVPs all; import from LibDiameter_TypesAndValues { Loading Loading @@ -3472,14 +3475,14 @@ module DiameterCxDx_Cx_TCFunctions { } } // group TP_CSCFRole_MS group TP_CSCFRole_UA {//Cx UA function f_TC_CX_CSCF_UA_01_UA() runs on ImsComponent { function f_TC_CX_CSCF_UA_01_UA(in CSeq p_cSeq_s) runs on ImsComponent { // Preamble f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // TODO: Send registration message to I-CSCF //Registration f_preamble_UE_registration(p_cSeq_s); f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); // Postamble f_RemoveRegistration(vc_cSeq); // deregistration in SUT f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); } function f_TC_CX_CSCF_UA_01_HSS() runs on DiameterCx { Loading Loading @@ -3514,23 +3517,30 @@ module DiameterCxDx_Cx_TCFunctions { f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); // Postamble // answer with // answer with registration error f_send_UAA(m_UAA_Msg(vc_sessionId, m_UAA_basic(vc_originHost, vc_originRealm, m_resultCode(DIAMETER_AUTHENTICATION_REJECTED_E)))); f_awaiting_MAR(mw_MAR_Msg(?, mw_MAR_basic)); f_send_MAA(m_MAA_Msg(vc_sessionId, m_MAA_basic(vc_originHost, vc_originRealm, m_resultCode(DIAMETER_SUCCESS_E)))); f_awaiting_UAR(mw_UAR_Msg(?, mw_UAR())); f_send_UAA(m_UAA_Msg(vc_sessionId, m_UAA_basic(vc_originHost, vc_originRealm, m_resultCode(DIAMETER_SUCCESS_E)))); f_awaiting_SAR(mw_SAR_Msg(?, mw_SAR_basic)); f_send_SAA(m_SAA_Msg(vc_sessionId, m_SAA_basic(vc_originHost, vc_originRealm, m_resultCode(DIAMETER_SUCCESS_E)))); f_postamble_HSS(); //de-registration? f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); } function f_TC_CX_CSCF_UA_02_UA() runs on ImsComponent { function f_TC_CX_CSCF_UA_02_UA(in CSeq p_cSeq_s) runs on ImsComponent { // Preamble // TODO: Send registration message to CSCF with registration time limited to 10 sec // Wait 10 sec f_preamble_UE_registration(p_cSeq_s); f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // TODO: Send the second registration message // Send the second registration message f_preamble_UE_registration(p_cSeq_s); f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); f_RemoveRegistration(vc_cSeq); // deregistration in SUT // Postamble f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); } Loading @@ -3542,14 +3552,22 @@ module DiameterCxDx_Cx_TCFunctions { f_preamble_HSS(); //waiting for the first registration message f_awaiting_UAR(mw_UAR_Msg(?, mw_UAR)); f_send_UAA(m_UAA_Msg(vc_sessionId, m_UAA_basic(vc_originHost, vc_originRealm, m_resultCode(DIAMETER_SUCCESS_E)))); f_awaiting_MAR(mw_MAR_Msg(?, mw_MAR_basic)); f_send_MAA(m_MAA_Msg(vc_sessionId, m_MAA_basic(vc_originHost, vc_originRealm, m_resultCode(DIAMETER_SUCCESS_E)))); f_awaiting_UAR(mw_UAR_Msg(?, mw_UAR())); //send a successful respond f_send_UAA(m_UAA_Msg(vc_sessionId, m_UAA_basic(vc_originHost, vc_originRealm, m_resultCode(DIAMETER_SUCCESS_E)))); f_awaiting_SAR(mw_SAR_Msg(?, mw_SAR_basic)); f_send_SAA(m_SAA_Msg(vc_sessionId, m_SAA_basic(vc_originHost, vc_originRealm, m_resultCode(DIAMETER_SUCCESS_E)))); f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // Test Body // the IUT sends a UA-Request // the IUT sends a UA-Request (due to Re-Register) f_awaiting_UAR(mw_UAR_Msg( // IUT sends a UA-Request ?, // containing Session-ID AVP mw_UAR( // Loading @@ -3576,18 +3594,21 @@ module DiameterCxDx_Cx_TCFunctions { // answer with registration error f_send_UAA(m_UAA_Msg(vc_sessionId, m_UAA_basic(vc_originHost, vc_originRealm, m_resultCode(DIAMETER_AUTHENTICATION_REJECTED_E)))); f_postamble_HSS(); f_awaiting_SAR(mw_SAR_Msg(?, mw_SAR_basic)); f_send_SAA(m_SAA_Msg(vc_sessionId, m_SAA_basic(vc_originHost, vc_originRealm, m_resultCode(DIAMETER_SUCCESS_E)))); // de-registration? f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); } function f_TC_CX_CSCF_UA_03_UA() runs on ImsComponent { function f_TC_CX_CSCF_UA_03_UA(in CSeq p_cSeq_s) runs on ImsComponent { // Preamble // TODO: Send registration message to CSCF // Wait 5 sec f_preamble_UE_registration(p_cSeq_s); f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // TODO: Send the deregistration message // Send the deregistration message f_RemoveRegistration(vc_cSeq); // deregistration in SUT f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); // Postamble f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); } Loading @@ -3599,14 +3620,23 @@ module DiameterCxDx_Cx_TCFunctions { f_preamble_HSS(); //waiting for the first registration message f_awaiting_UAR(mw_UAR_Msg(?, mw_UAR)); f_send_UAA(m_UAA_Msg(vc_sessionId, m_UAA_basic(vc_originHost, vc_originRealm, m_resultCode(DIAMETER_SUCCESS_E)))); f_awaiting_MAR(mw_MAR_Msg(?, mw_MAR_basic)); f_send_UAA(m_MAA_Msg(vc_sessionId, m_MAA_basic(vc_originHost, vc_originRealm, m_resultCode(DIAMETER_SUCCESS_E)))); //waiting for the first (authorized) registration message f_awaiting_UAR(mw_UAR_Msg(?, mw_UAR())); //send a successful respond f_send_UAA(m_UAA_Msg(vc_sessionId, m_UAA_basic(vc_originHost, vc_originRealm, m_resultCode(DIAMETER_SUCCESS_E)))); f_awaiting_SAR(mw_SAR_Msg(?, mw_SAR_basic)); f_send_SAA(m_SAA_Msg(vc_sessionId, m_SAA_basic(vc_originHost, vc_originRealm, m_resultCode(DIAMETER_SUCCESS_E)))); f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // Test Body // the IUT sends a UA-Request // the IUT sends a UA-Request (de-registration) f_awaiting_UAR(mw_UAR_Msg( // IUT sends a UA-Request ?, // containing Session-ID AVP mw_UAR( // Loading @@ -3631,18 +3661,22 @@ module DiameterCxDx_Cx_TCFunctions { // Postamble f_send_UAA(m_UAA_Msg(vc_sessionId, m_UAA_basic(vc_originHost, vc_originRealm, m_resultCode(DIAMETER_SUCCESS_E)))); f_awaiting_SAR(mw_SAR_Msg(?, mw_SAR_basic)); f_send_SAA(m_SAA_Msg(vc_sessionId, m_SAA_basic(vc_originHost, vc_originRealm, m_resultCode(DIAMETER_SUCCESS_E)))); f_postamble_HSS(); f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); } function f_TC_CX_CSCF_UA_04_UA() runs on ImsComponent { function f_TC_CX_CSCF_UA_04_UA(in CSeq p_cSeq_s) runs on ImsComponent { // Preamble f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // TODO: Send the IMS emergency registration // Send the IMS emergency registration f_preamble_UE_emergencyRegistration(p_cSeq_s); f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); // Postamble f_RemoveRegistration(vc_cSeq); // deregistration in SUT f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); } Loading @@ -3655,7 +3689,14 @@ module DiameterCxDx_Cx_TCFunctions { f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // Test Body // the IUT sends a UA-Request f_awaiting_UAR(mw_UAR_Msg(?, mw_UAR)); f_send_UAA(m_UAA_Msg(vc_sessionId, m_UAA_basic(vc_originHost, vc_originRealm, m_resultCode(DIAMETER_SUCCESS_E)))); f_awaiting_MAR(mw_MAR_Msg(?, mw_MAR_basic)); f_send_MAA(m_MAA_Msg(vc_sessionId, m_MAA_basic(vc_originHost, vc_originRealm, m_resultCode(DIAMETER_SUCCESS_E)))); // the IUT sends a UA-Request (authorized emergency register) f_awaiting_UAR(mw_UAR_Msg( // IUT sends a UA-Request ?, // containing Session-ID AVP mw_UAR( // Loading @@ -3670,8 +3711,7 @@ module DiameterCxDx_Cx_TCFunctions { mw_visitedNetworkId( // containing a Visited-Network-Identifier AVP PX_VisitedNetworkId), // indicating the domain name of the visited network mw_authSessionState(?), // containing an Auth-Session-State AVP mw_userAuthorizationType( // containing a User-Authorization-Type AVP DE_REGISTRATION), // indicating REGISTRATION -, // User_Authorization_Type_AVP mw_uARFlag( // containing a UAR-Flags AVP 1) // with IMS-Emergency-Registration bit set ))); Loading @@ -3680,20 +3720,30 @@ module DiameterCxDx_Cx_TCFunctions { // Postamble f_send_UAA(m_UAA_Msg(vc_sessionId, m_UAA_basic(vc_originHost, vc_originRealm, m_resultCode(DIAMETER_AUTHENTICATION_REJECTED_E)))); f_awaiting_SAR(mw_SAR_Msg(?, mw_SAR_basic)); f_send_SAA(m_SAA_Msg(vc_sessionId, m_SAA_basic(vc_originHost, vc_originRealm, m_resultCode(DIAMETER_SUCCESS_E)))); // de-registration? f_postamble_HSS(); f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); } } // group TP_CSCFRole_UA group TP_CSCFRole_SA {//Cx SA function f_TC_CX_CSCF_SA_01_UA() runs on ImsComponent { function f_TC_CX_CSCF_SA_01_UA(in CSeq p_cSeq_s) runs on ImsComponent { // Preamble //Registration f_preamble_UE_registration(p_cSeq_s); f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // TODO: Send registration message to I-CSCF // Send registration message to I-CSCF // NOTE: internal behaviour of SUT f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); // Postamble f_RemoveRegistration(vc_cSeq); // deregistration in SUT f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); } function f_TC_CX_CSCF_SA_01_HSS() runs on DiameterCx { Loading @@ -3706,32 +3756,23 @@ module DiameterCxDx_Cx_TCFunctions { // Test Body // the IUT sends a UA-Request f_awaiting_UAR(mw_UAR_Msg(?, mw_UAR( // IUT sends a UA-Request ?, // containing an Origin-Host AVP ?, // containing an Origin-Realm AVP *, // ?, // containing a Destination-Realm AVP mw_userName( // containing a User-Name AVP PX_UserName), // indicating the private user identity mw_publicIdentity( // containing a Public-Identity AVP PX_PublicIdentity), // indicating the public user identity to be registered mw_visitedNetworkId( // containing a Visited-Network-Identifier AVP PX_VisitedNetworkId), // indicating the domain name of the visited network mw_authSessionState( // containing an Auth-Session-State AVP NO_STATE_MAINTAINED_E), // indicating NO_STATE_MAINTAINED mw_userAuthorizationType( // containing a User-Authorization-Type AVP REGISTRATION), // indicating REGISTRATION mw_uARFlag( // containing a UAR-Flags AVP 0) // with IMS-Emergency-Registration bit not set ))); f_awaiting_UAR(mw_UAR_Msg(?, mw_UAR)); f_send_UAA(m_UAA_Msg(vc_sessionId, m_UAA_basic(vc_originHost, vc_originRealm, m_resultCode(DIAMETER_SUCCESS_E)))); f_awaiting_MAR(mw_MAR_Msg(?, mw_MAR_basic)); f_send_MAA(m_MAA_Msg(vc_sessionId, m_MAA_basic(vc_originHost, vc_originRealm, m_resultCode(DIAMETER_SUCCESS_E)))); f_awaiting_UAR(mw_UAR_Msg(?, mw_UAR)); f_send_UAA(m_UAA_Msg(vc_sessionId, m_UAA_basic(vc_originHost, vc_originRealm, m_resultCode(DIAMETER_SUCCESS_E)))); f_awaiting_SAR(mw_SAR_Msg(?, mw_SAR(?,?,?,omit,mw_authSessionState(NO_STATE_MAINTAINED_E),{?},?,?,?))); f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); // Postamble // answer with // answer with registration error f_send_UAA(m_UAA_Msg(vc_sessionId, m_UAA_basic(vc_originHost, vc_originRealm, m_resultCode(DIAMETER_AUTHENTICATION_REJECTED_E)))); f_send_SAA(m_SAA_Msg(vc_sessionId, m_SAA_basic(vc_originHost, vc_originRealm, m_resultCode(DIAMETER_SUCCESS_E)))); // de-registration? f_postamble_HSS(); f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); } Loading @@ -3742,6 +3783,8 @@ module DiameterCxDx_Cx_TCFunctions { } // group TP_CSCFRole_LI group TP_CSCFRole_PP {//Cx PP } // group TP_CSCFRole_PP group TP_CSCFRole_MA {//Cx MA } // group TP_CSCFRole_MA } // group TP_CSCFRole } // group TP_Cx Loading
DiameterCxDx/ttcn/DiameterCxDx_Steps.ttcn +22 −1 Original line number Diff line number Diff line Loading @@ -321,6 +321,27 @@ vc_from, vc_to, vc_via)); } /** * * @desc UE registration at Gm */ function f_preamble_UE_emergencyRegistration(in CSeq p_cSeq_s) runs on ImsComponent { var template REGISTER_Request v_register; //UE Registration vc_interfaceprofile.SUTPort := PX_DIAMETER_CX_SUT_ICSCF_PORT; vc_interfaceprofile.SUTIpaddr := PX_DIAMETER_CX_SUT_ICSCF_IPADDR; vc_interfaceprofile.SUTHomeDomain := PX_OriginRealm; v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization)); // preamble with send REGISTER, await 401, send REGISTER, await // 200 OK and user profile setting f_IMS_preamble_withEmergencyRegistration(p_cSeq_s, v_register); } }// end group Preambles group Postambles { Loading
DiameterCxDx/ttcn/DiameterCxDx_Templates.ttcn +28 −0 Original line number Diff line number Diff line Loading @@ -274,6 +274,11 @@ module DiameterCxDx_Templates { reason_Info := *, aVP_Type := * } template Server_Assignment_Type_AVP mw_serverAssignmentType(template (value) Srv_Assgmt_Type_Code p_avpData) := { aVP_Header := mw_aVP_Header_VMbit1(c_server_Assignment_Type_AVP_Code), aVP_Data := p_avpData } }//end group awaitingTemplatesForAVPs } //end group SpecificAVPHeaders } //end group HeaderFieldTemplates Loading Loading @@ -1228,6 +1233,29 @@ module DiameterCxDx_Templates { uAR_Flags := p_uAR_Flags // optional in TS 129 229 } template (present) SAR_Body_AVP mw_SAR( template (present) Origin_Host_AVP p_originHost:=?, template (present) Origin_Realm_AVP p_originRealm:=?, template (present) Destination_Realm_AVP p_destinationRealm:=?, template User_Name_AVP p_userName:=?, template Auth_Session_State_AVP p_auth_Session_State:=?, template SAR_Body_AVP.public_Identity p_public_Identity:=*, template Server_Name_AVP p_server_Name:=?, template Server_Assignment_Type_AVP p_server_Assignment_Type:=?, template User_Data_Already_Available_AVP p_user_Data_Already_Available:=? ) modifies mw_SAR_basic := { auth_Session_State := p_auth_Session_State, // mandatory in TS129 229 origin_Host := p_originHost, // mandatory in TS129 229 origin_Realm := p_originRealm, // mandatory in TS129 229 destination_Realm := p_destinationRealm, // mandatory in TS129 229 user_Name := p_userName, // optional in TS129 229 public_Identity := p_public_Identity, // optional in TS129 229 server_Name := p_server_Name, // mandatory in TS129 229 server_Assignment_Type := p_server_Assignment_Type, // mandatory in TS129 229 user_Data_Already_Available := p_user_Data_Already_Available // mandatory in TS129 229 } template (present) RTR_Body_AVP mw_RTR( template (present) Origin_Host_AVP p_originHost, template (present) Origin_Realm_AVP p_originRealm, Loading