Commit 1b186b6a authored by rennoch's avatar rennoch
Browse files

CX_CSCF_SA_01-04

parent 50af84ac
Loading
Loading
Loading
Loading
+98 −55
Original line number Diff line number Diff line
@@ -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 {
@@ -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 {
@@ -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());
                }
@@ -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(                                    //
@@ -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());
                }
@@ -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(                                    //
@@ -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());
                }
                
@@ -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(                                    //
@@ -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
                    )));
@@ -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 {
@@ -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());
                }
@@ -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
    
+22 −1
Original line number Diff line number Diff line
@@ -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 {
+28 −0
Original line number Diff line number Diff line
@@ -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
@@ -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,