/** * @author STF 490 * @version $Id$ * @desc This module provides ATS specific steps used by the test cases * for IMS-DIAMETER RfRo tests. */ module DiameterRfRo_Steps { //LibCommon import from LibCommon_DataStrings {type Bit1, Bit4, Bit5, Bit8;}//all; import from LibCommon_BasicTypesAndValues {type UInt8;type UInt32;};//LibCommon import from LibCommon_Sync all ; import from LibCommon_VerdictControl all ; //LibDiameter import from LibDiameter_Types_RfRo_AVPs all; import from LibDiameter_Types_Base_AVPs all; import from LibDiameter_TypesAndValues all; import from LibDiameter_Templates all; import from LibDiameter_Steps all; import from LibDiameter_PIXITS all; import from LibDiameter_Interface all; //DiameterRFRo import from DiameterRfRo_PIXITS all; import from DiameterRfRo_Templates all; import from DiameterRfRo_SIP_Templates all; import from DiameterRfRo_TestConfiguration all; import from DiameterRfRo_TestSystem all; group GlobalSteps { /* * @desc This is a test step that init global variables * @param */ function f_DiameterRf_init() runs on DiameterRfRo { //Defaults vc_default_diameter := activate (a_diameter_default()); //Base LibDiameter init function if there will be any base initialisation f_Diameter_Init_Component(); vc_ETS_address := PX_DIAMETER_RF_ETS_IPADDR; vc_ETS_port := PX_DIAMETER_RF_ETS_PORT; vc_SUT_address := PX_DIAMETER_RF_SUT_IPADDR; vc_SUT_port := PX_DIAMETER_RF_SUT_PORT; vc_sessionId := m_sessionId(PX_SessionID); vc_originHost := m_originHost(PX_OriginHost); vc_originRealm := m_originRealm(PX_OriginRealm); // realm of the originator (TS) vc_originHost_IUT := m_originHost(PX_DestinationHost); vc_originRealm_IUT := m_originRealm(PX_DestinationRealm); // realm of the originator (TS) vc_destinationHost := m_destinationHost(PX_DestinationHost); vc_destinationRealm := m_destinationRealm(PX_DestinationRealm); vc_destinationHost_IUT := m_destinationHost(PX_OriginHost); vc_destinationRealm_IUT := m_destinationRealm(PX_OriginRealm); vc_hostIPAddress := valueof(f_IPV4or6_String2Address (PX_DIAMETER_RF_ETS_IPADDR)); vc_accountingRecordNumber := mw_accounting_Record_Number(3); vc_send_hopid:=hex2int('00000100'H); vc_send_endid:=hex2int('01000000'H); } // End of function f_DiameterRf_init /* * @desc This is a test step that init global variables * @param */ function f_DiameterRf_init2() runs on DiameterRfRo { //Defaults vc_default_diameter := activate (a_diameter_default()); //Base LibDiameter init function if there will be any base initialisation f_Diameter_Init_Component(); vc_ETS_address := PX_DIAMETER_RF_ETS_IPADDR2; vc_ETS_port := PX_DIAMETER_RF_ETS_PORT2; vc_SUT_address := PX_DIAMETER_RF_SUT_IPADDR; vc_SUT_port := PX_DIAMETER_RF_SUT_PORT; vc_sessionId := m_sessionId(PX_SessionID&"1"); vc_originHost := m_originHost(PX_OriginHost_2nd); vc_originRealm := m_originRealm(PX_OriginRealm); // realm of the originator (TS) vc_originHost_IUT := m_originHost(PX_DestinationHost); vc_originRealm_IUT := m_originRealm(PX_DestinationRealm); // realm of the originator (TS) vc_destinationHost := m_destinationHost(PX_DestinationHost); vc_destinationRealm := m_destinationRealm(PX_DestinationRealm); vc_destinationHost_IUT := m_destinationHost(PX_OriginHost_2nd); vc_destinationRealm_IUT := m_destinationRealm(PX_OriginRealm); vc_hostIPAddress := valueof(f_IPV4or6_String2Address (PX_DIAMETER_RF_ETS_IPADDR2)); vc_accountingRecordNumber := mw_accounting_Record_Number(3); vc_send_hopid:=hex2int('00000100'H); vc_send_endid:=hex2int('01000000'H); } // End of function f_DiameterRf_init2 /* * @desc This is a test step that init global variables * @param */ function f_DiameterRo_init() runs on DiameterRfRo { //Defaults vc_default_diameter := activate (a_diameter_default()); //Base LibDiameter init function if there will be any base initialisation f_Diameter_Init_Component(); vc_ETS_address := PX_DIAMETER_RO_ETS_IPADDR; vc_ETS_port := PX_DIAMETER_RO_ETS_PORT; vc_SUT_address := PX_DIAMETER_RO_SUT_IPADDR; vc_SUT_port := PX_DIAMETER_RO_SUT_PORT; vc_sessionId := m_sessionId(PX_SessionID); vc_originHost := m_originHost(PX_OriginHost); vc_originRealm := m_originRealm(PX_OriginRealm); // realm of the originator (TS) vc_originHost_IUT := m_originHost(PX_DestinationHost); vc_originRealm_IUT := m_originRealm(PX_DestinationRealm); // realm of the originator (TS) vc_destinationHost := m_destinationHost(PX_DestinationHost); vc_destinationRealm := m_destinationRealm(PX_DestinationRealm); vc_destinationHost_IUT := m_destinationHost(PX_OriginHost); vc_destinationRealm_IUT := m_destinationRealm(PX_OriginRealm); vc_hostIPAddress := valueof(f_IPV4or6_String2Address (PX_DIAMETER_RO_ETS_IPADDR)); vc_send_hopid:=hex2int('00000100'H); vc_send_endid:=hex2int('01000000'H); } // End of function f_DiameterRo_init /* * @desc This is a test step that init global variables * @param */ function f_DiameterRo_init2() runs on DiameterRfRo { //Defaults vc_default_diameter := activate (a_diameter_default()); //Base LibDiameter init function if there will be any base initialisation f_Diameter_Init_Component(); vc_ETS_address := PX_DIAMETER_RO_ETS_IPADDR2; vc_ETS_port := PX_DIAMETER_RO_ETS_PORT2; vc_SUT_address := PX_DIAMETER_RO_SUT_IPADDR; vc_SUT_port := PX_DIAMETER_RO_SUT_PORT; vc_sessionId := m_sessionId(PX_SessionID); vc_originHost := m_originHost(PX_OriginHost_2nd); vc_originRealm := m_originRealm(PX_OriginRealm); // realm of the originator (TS) vc_originHost_IUT := m_originHost(PX_DestinationHost); vc_originRealm_IUT := m_originRealm(PX_DestinationRealm); // realm of the originator (TS) vc_destinationHost := m_destinationHost(PX_DestinationHost); vc_destinationRealm := m_destinationRealm(PX_DestinationRealm); vc_destinationHost_IUT := m_destinationHost(PX_OriginHost_2nd); vc_destinationRealm_IUT := m_destinationRealm(PX_OriginRealm); vc_hostIPAddress := valueof(f_IPV4or6_String2Address (PX_DIAMETER_RO_ETS_IPADDR)); vc_send_hopid:=hex2int('00000100'H); vc_send_endid:=hex2int('01000000'H); } // End of function f_DiameterRo_init } // Endgroup GlobalSteps group Preambles{ function f_preamble_Rf_CDF() runs on DiameterRfRo { var default v_def_diameter_catchEvent; if(PX_DIAM_LLP_ENABLED) { f_preambleServer(); } f_DiameterRf_init(); f_preambleDiameterBaseServer(c_applIdRf); //catch ACR(Event) before test body starts(on 200 OK REGISTER, 200 OK, SUBSCRIBE, 200 OK NOTIFY) v_def_diameter_catchEvent := activate (a_diameter_event()); //delay before preamble is done - SIP starts with MESSAGE, INVITE request later f_wait(0.5); } function f_preamble_Rf_CDF2() runs on DiameterRfRo { var default v_def_diameter_catchEvent; if(PX_DIAM_LLP_ENABLED) { f_preambleServer(); } f_DiameterRf_init2(); f_preambleDiameterBaseServer(c_applIdRf); //catch ACR(Event) before test body starts(on 200 OK REGISTER, 200 OK, SUBSCRIBE, 200 OK NOTIFY) v_def_diameter_catchEvent := activate (a_diameter_event()); //delay before preamble is done - SIP starts with MESSAGE, INVITE request later f_wait(0.5); } function f_preamble_Rf_CTF() runs on DiameterRfRo { if(PX_DIAM_LLP_ENABLED) { f_preambleClient(); } f_DiameterRf_init(); f_preambleDiameterBaseClient_acct_Application_Id_AVP(c_applIdRf); } function f_preamble_Ro_OCF() runs on DiameterRfRo { if(PX_DIAM_LLP_ENABLED) { f_preambleServer(); } f_DiameterRo_init(); f_preambleDiameterBaseServer(c_applIdRo); } function f_preamble_Ro_OCF2() runs on DiameterRfRo { if(PX_DIAM_LLP_ENABLED) { f_preambleServer(); } f_DiameterRo_init2(); f_preambleDiameterBaseServer(c_applIdRo); } function f_preamble_Ro_CTF() runs on DiameterRfRo { if(PX_DIAM_LLP_ENABLED) { f_preambleClient(); } f_DiameterRo_init(); f_preambleDiameterBaseClient(c_applIdRo); } } // End of group Preambles group Postambles { function f_postamble_Rf_CDF() runs on DiameterRfRo { f_postambleDiameterBase(); if(PX_DIAM_LLP_ENABLED) { f_postambleDisconnect(); } // Deactivate defaults deactivate; } function f_postamble_Rf_CDF2() runs on DiameterRfRo { f_postamble_Rf_CDF(); } function f_postamble_Rf_CTF() runs on DiameterRfRo { f_postambleDiameterBase(); if(PX_DIAM_LLP_ENABLED) { f_postambleDisconnect(); } // Deactivate defaults deactivate; } function f_postamble_Ro_OCF() runs on DiameterRfRo { f_postambleDiameterBase(); if(PX_DIAM_LLP_ENABLED) { f_postambleDisconnect(); } // Deactivate defaults deactivate; } function f_postamble_Ro_OCF2() runs on DiameterRfRo { f_postambleDiameterBase(); if(PX_DIAM_LLP_ENABLED) { f_postambleDisconnect(); } // Deactivate defaults deactivate; } function f_postamble_Ro_CTF() runs on DiameterRfRo { f_postambleDiameterBase(); if(PX_DIAM_LLP_ENABLED) { f_postambleDisconnect(); } // Deactivate defaults deactivate; } } // End of group Postambles group AVPOperations { } // End of group AVPOperations group CheckFunctions { } // End of group CheckFunctions group SendMessage { //SEND/AWAIT messages defined in LibDiameter_Steps module - where endid and hopid parameters are automaticali handled group RF{ group TypeOfCharging{ /** * @desc Function used to send AC-Request and receive AC-Answer * @param p_art accounting record type - EVENT_E,START_E,INTERIM_E,STOP_E * p_cC_Request_Number acc record number * p_ts timestamp of event * @verdict depend on receive message and its matching with template */ function f_sendACR_awaitACA_(in Acc_Record_Type p_art, in UInt32 p_cC_Request_Number, in UInt32 p_ts) runs on DiameterRfRo { f_send_ACR( md_aCR( vc_sessionId, md_acrBodyAvps_TypeOfCharging( vc_originHost, // containing an Origin-Host AVP vc_originRealm, // containing an Origin-Realm AVP m_accounting_Record_Type( // containing an Accounting-Record-Type AVP p_art ), m_accounting_Record_Number( // containing an Accounting-Record-Number AVP p_cC_Request_Number // indicating the value ), m_event_timestamp(p_ts), m_Service_Information_RF_CDF_TC ) ) ); f_awaiting_ACA( mdw_aCA( vc_sessionId, // containing a Session-ID AVP mdw_acaBodyAvps( mw_resultCode( // containing a Result-Code AVP DIAMETER_SUCCESS_E // indicating DIAMETER_SUCCESS ), vc_originHost_IUT, // containing an Origin-Host AVP vc_originRealm_IUT, // containing an Origin-Realm AVP mw_accounting_Record_Type( // containing an Accounting-Record-Type AVP p_art ), mw_accounting_Record_Number(// containing an Acct-Application-Id AVP p_cC_Request_Number // indicating the value ) )) ); } //end function f_sendACR_awaitACA_ /** * @desc Function used to receive AC-Request and send AC-Answer * @param p_art accounting record type - EVENT_E,START_E,INTERIM_E,STOP_E * @verdict depend on receive message and its matching with template */ function f_awaitACR_sendACA_(in Acc_Record_Type p_art) runs on DiameterRfRo { f_awaiting_ACR( mdw_aCR( ?, mdw_acrBody_ServiceInfo_EventTimestamp( vc_originHost_IUT, // containing an Origin-Host AVP vc_originRealm_IUT, // containing an Origin-Realm AVP vc_destinationRealm_IUT, // containing a Destination-Realm AVP mw_accounting_Record_Type( // containing an Accounting-Record-Type AVP p_art ), mw_accounting_Record_Number( // containing an Accounting-Record-Number AVP ? // indicating the value ? ), *, // containing a Service-Information AVP * // containing an Event-Timestamp AVP ) ) ); f_send_ACA( md_aCA( vc_sessionId, // containing a Session-ID AVP md_acaBodyAvps( m_resultCode( // containing a Result-Code AVP DIAMETER_SUCCESS_E // indicating DIAMETER_SUCCESS ), vc_originHost, // containing an Origin-Host AVP vc_originRealm, // containing an Origin-Realm AVP m_accounting_Record_Type( // containing an Accounting-Record-Type AVP p_art ), vc_accountingRecordNumber )) ); }//end function f_awaitACR_sendACA_ } // End of group TypeOfCharging } // End of group RF group RO { group TypeOfCharging { /** * @desc Function used to send CC-Request and receive CC-Answer * @param p_cC_Request_Ty_Type Request type - eg.: EVENT_REQUEST * @param p_cC_Request_Number acc Request number * @param p_service_Context_Id Service context ID * @verdict depend on receive message and its matching with template */ function f_sendCCR_awaitCCA_( in CC_Request_Ty_Type p_cC_Request_Ty_Type, in UInt32 p_cC_Request_Number, in template (omit) Service_Context_Id_AVP p_service_Context_Id := omit, in template (omit) Requested_Action_AVP p_requested_Action := omit, in template (omit) CCR_Body_AVP.multiple_Services_Credit_Control p_multiple_Services_Credit_Control := omit ) runs on DiameterRfRo { f_send_CCR( md_cCR( vc_sessionId, md_ccrBodyAvps_TypeOfCharging( vc_originHost, vc_originRealm, vc_destinationRealm, md_cC_Request_Type( p_cC_Request_Ty_Type ), md_cC_Request_Number( p_cC_Request_Number ), p_service_Context_Id, p_requested_Action, p_multiple_Services_Credit_Control ) ) ); f_awaiting_CCA( mdw_cCA( vc_sessionId, mdw_ccaBodyAvps( mw_resultCode( DIAMETER_SUCCESS_E ), vc_originHost_IUT, vc_originRealm_IUT, mw_auth_Application_Id(4), mw_cC_Request_Type( p_cC_Request_Ty_Type ), mw_cC_Request_Number( p_cC_Request_Number ) ) ) ); } /** * @desc Function used to await CC-Request and send CC-Answer * @param p_cC_Request_Ty_Type Request type - eg.: EVENT_REQUEST * @param p_cC_Request_Number acc Request number * @param p_service_Context_Id Service context ID * @verdict depend on receive message and its matching with template */ function f_awaitCCR_sendCCA_( in CC_Request_Ty_Type p_cC_Request_Ty_Type, in UInt32 p_cC_Request_Number, in template Requested_Action_AVP p_requested_Action := *, in template CCR_Body_AVP.multiple_Services_Credit_Control p_multiple_Services_Credit_Control := * ) runs on DiameterRfRo { f_awaiting_CCR( mdw_cCR( ?, mdw_ccrBodyAvps( vc_originHost_IUT, // containing an Origin-Host AVP vc_originRealm_IUT, // containing an Origin-Realm AVP vc_destinationRealm_IUT, // containing a Destination-Realm AVP mw_cC_Request_Type(p_cC_Request_Ty_Type),// containing a CC-Request-Type AVP mw_cC_Request_Number(p_cC_Request_Number),// containing a CC-Request-Number AVP ?, // containing a Service-Context-Id AVP p_requested_Action, // not containing a Requested Action AVP due to Request-Type is not EVENT-REQUEST p_multiple_Services_Credit_Control // containing a Multiple-Services-Credit-Control AVP ) ) ); f_send_CCA( md_cCA( vc_sessionId, // containing a Session-ID AVP md_ccaBodyAvps_ReqNumber( m_resultCode( // containing a Result-Code AVP DIAMETER_SUCCESS_E // indicating DIAMETER_SUCCESS ), vc_originHost, // containing an Origin-Host AVP vc_originRealm, // containing an Origin-Realm AVP m_cC_Request_Type(p_cC_Request_Ty_Type), m_cC_Request_Number(p_cC_Request_Number)// containing a CC-Request-Number AVP )) ); } } // End of group TypeOfCharging group ReAuthorization { /** * @desc Function used to await RA-Request and send RA-Answer * @param p_ex * @verdict depend on receive message and its matching with template */ function f_awaitRAR_sendRAA_( ) runs on DiameterRfRo { f_awaiting_RAR( mdw_rAR( ?, mdw_rarBodyAvps( vc_originHost_IUT, // containing an Origin-Host AVP vc_originRealm_IUT, // containing an Origin-Realm AVP vc_destinationRealm_IUT, // containing a Destination-Realm AVP vc_destinationHost_IUT, // containing a CC-Request-Type AVP mw_auth_Application_Id( // containing an Auth-Application-Id AVP 4 // indicating the value 4 ), mw_re_Auth_Request( // containing a Re-Auth-Request-Type AVP AUTHORIZE_ONLY_E // indicating AUTHORIZE_ONLY ) ) ) ); f_send_RAA( md_rAA( vc_sessionId, // containing a Session-ID AVP md_raaBodyAvps( m_resultCode( // containing a Result-Code AVP DIAMETER_SUCCESS_E // indicating DIAMETER_SUCCESS ), vc_originHost, // containing an Origin-Host AVP vc_originRealm // containing an Origin-Realm AVP )) ); }//end function f_awaitRAR_sendRAA_( }//end group ReAuthorization } // End of group RO } // End of group SendMessage group DefaultTestStep{ altstep a_diameter_interim() runs on DiameterRfRo { [] DIAMP.receive (DIAMETER_MSG:{aCR_MSG := mdw_aCR(?,mdw_acrBody_ServiceInfo_EventTimestamp(?,?,?,mw_accounting_Record_Type(INTERIM_RECORD_E),?,*,*)) }) -> value vc_recvDiamMsgDefault { vc_recv_hopid:= vc_recvDiamMsgDefault.aCR_MSG.header.hopid; vc_recv_endid:= vc_recvDiamMsgDefault.aCR_MSG.header.endid; vc_accountingRecordNumber := vc_recvDiamMsgDefault.aCR_MSG.aCR_Body.accounting_Record_Number; f_send_ACA( md_aCA( vc_sessionId, // containing a Session-ID AVP md_acaBodyAvps( m_resultCode( // containing a Result-Code AVP DIAMETER_SUCCESS_E // indicating DIAMETER_SUCCESS ), vc_originHost, // containing an Origin-Host AVP vc_originRealm, // containing an Origin-Realm AVP m_accounting_Record_Type( // containing an Accounting-Record-Type AVP INTERIM_RECORD_E ), vc_accountingRecordNumber )) ); repeat; } } //end altstep a_diameter_interim() altstep a_diameter_event() runs on DiameterRfRo { [] DIAMP.receive (DIAMETER_MSG:{aCR_MSG := mdw_aCR(?,mdw_acrBody_ServiceInfo_EventTimestamp(?,?,?,mw_accounting_Record_Type(EVENT_RECORD_E),?,*,*)) }) -> value vc_recvDiamMsgDefault { vc_recv_hopid:= vc_recvDiamMsgDefault.aCR_MSG.header.hopid; vc_recv_endid:= vc_recvDiamMsgDefault.aCR_MSG.header.endid; vc_accountingRecordNumber := vc_recvDiamMsgDefault.aCR_MSG.aCR_Body.accounting_Record_Number; f_send_ACA( md_aCA( vc_sessionId, // containing a Session-ID AVP md_acaBodyAvps( m_resultCode( // containing a Result-Code AVP DIAMETER_SUCCESS_E // indicating DIAMETER_SUCCESS ), vc_originHost, // containing an Origin-Host AVP vc_originRealm, // containing an Origin-Realm AVP m_accounting_Record_Type( // containing an Accounting-Record-Type AVP EVENT_RECORD_E ), vc_accountingRecordNumber )) ); repeat; } }//end altstep a_diameter_event() }//end group DefaultTestStep } // End of module DiameterGx_Steps