DiameterRfRo_Steps.ttcn 19 KB
Newer Older
pintar's avatar
pintar committed
/**
 *  @author     STF 490
pintar's avatar
pintar committed
 *  @version    $Id$
pintar's avatar
pintar committed
 *  @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;
juvancic's avatar
juvancic committed
    import from LibCommon_BasicTypesAndValues {type UInt8;type UInt32;};//LibCommon
pintar's avatar
pintar committed
    import from LibCommon_Sync all ;
    import from LibCommon_VerdictControl all ;

    //LibDiameter
juvancic's avatar
juvancic committed
    import from LibDiameter_Types_RfRo_AVPs all;
pintar's avatar
pintar committed
    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;
    
juvancic's avatar
juvancic committed
    //DiameterRFRo
pintar's avatar
pintar committed
    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 DiameterComponent {

            //Defaults
            vc_default_diameter := activate (a_diameter_default());
pintar's avatar
pintar committed
            //Base LibDiameter init function if there will be any base initialisation
            f_Diameter_Init_Component();
pintar's avatar
pintar committed
            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;
pintar's avatar
pintar committed
            vc_sessionId := m_sessionId(PX_SessionID);
pintar's avatar
pintar committed
            vc_originHost := m_originHost(PX_OriginHost);
            vc_originRealm := m_originRealm(PX_OriginRealm); // realm of the originator (TS)
pintar's avatar
pintar committed
            vc_originHost_IUT := m_originHost(PX_DestinationHost);
            vc_originRealm_IUT := m_originRealm(PX_DestinationRealm); // realm of the originator (TS)
pintar's avatar
pintar committed
            vc_destinationHost := m_destinationHost(PX_DestinationHost);
            vc_destinationRealm := m_destinationRealm(PX_DestinationRealm);
pintar's avatar
pintar committed
            vc_destinationHost_IUT := m_destinationHost(PX_OriginHost);
            vc_destinationRealm_IUT := m_destinationRealm(PX_OriginRealm);
pintar's avatar
pintar committed
            vc_hostIPAddress := valueof(f_IPV4or6_String2Address (PX_DIAMETER_RF_ETS_IPADDR));
            vc_accountingRecordNumber := mw_accounting_Record_Number_AVP(3);
pintar's avatar
pintar committed
            vc_send_hopid:=hex2int('00000100'H);
            vc_send_endid:=hex2int('01000000'H);
        } // End of function f_DiameterRf_init
pintar's avatar
pintar committed

        /*
        *  @desc    This is a test step that init global variables
        *  @param   
        */
        function f_DiameterRf_init2()
        runs on DiameterComponent {

            //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);
            
            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_IPADDR2));
            
            vc_accountingRecordNumber := mw_accounting_Record_Number_AVP(3);
            
            vc_send_hopid:=hex2int('00000100'H);
            vc_send_endid:=hex2int('01000000'H);
            
        } // End of function f_DiameterRf_init2
pintar's avatar
pintar committed
        /*
        *  @desc    This is a test step that init global variables
        *  @param   
        */
        function f_DiameterRo_init()
        runs on DiameterComponent {
pintar's avatar
pintar committed
            //Defaults
            vc_default_diameter := activate (a_diameter_default());
pintar's avatar
pintar committed
            //Base LibDiameter init function if there will be any base initialisation
            f_Diameter_Init_Component();
pintar's avatar
pintar committed
            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;
pintar's avatar
pintar committed
            vc_sessionId := m_sessionId(PX_SessionID);
pintar's avatar
pintar committed
            vc_originHost := m_originHost(PX_OriginHost);
            vc_originRealm := m_originRealm(PX_OriginRealm); // realm of the originator (TS)
pintar's avatar
pintar committed
            vc_originHost_IUT := m_originHost(PX_DestinationHost);
            vc_originRealm_IUT := m_originRealm(PX_DestinationRealm); // realm of the originator (TS)
pintar's avatar
pintar committed
            vc_destinationHost := m_destinationHost(PX_DestinationHost);
            vc_destinationRealm := m_destinationRealm(PX_DestinationRealm);
pintar's avatar
pintar committed
            vc_hostIPAddress := valueof(f_IPV4or6_String2Address (PX_DIAMETER_RO_ETS_IPADDR));
pintar's avatar
pintar committed
            vc_send_hopid:=hex2int('00000100'H);
            vc_send_endid:=hex2int('01000000'H);
        } // End of function f_DiameterRo_init
pintar's avatar
pintar committed
        
        //TODO check for 2nd Ro or Rf configuration!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

juvancic's avatar
juvancic committed
        group RF{
juvancic's avatar
juvancic committed
            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
juvancic's avatar
juvancic committed
                 *        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 DiameterComponent
juvancic's avatar
juvancic committed
                {
                    f_send_ACR(
                       md_aCR(
                           vc_sessionId, 
juvancic's avatar
juvancic committed
                           md_acrBodyAvps_TypeOfCharging(
juvancic's avatar
juvancic committed
                               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 
juvancic's avatar
juvancic committed
                               ),
                               m_event_timestamp(p_ts),
juvancic's avatar
juvancic committed
                               m_Service_Information_RF_CDF_TC 
juvancic's avatar
juvancic committed
                           )
                       )
                   );

                   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,                  // containing an Origin-Host AVP
                               vc_originRealm,                 // containing an Origin-Realm AVP
                               mw_accounting_Record_Type_AVP(  // containing an Accounting-Record-Type AVP
juvancic's avatar
juvancic committed
                                   p_art
                               ),
                               mw_accounting_Record_Number_AVP(// containing an Acct-Application-Id AVP
                                  p_cC_Request_Number                 //     indicating the value
juvancic's avatar
juvancic committed
                               )
                       ))
                   );
                }

            } // End of group TypeOfCharging
juvancic's avatar
juvancic committed

        } // End of group RF
juvancic's avatar
juvancic committed

        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
garciay's avatar
garciay committed
                 * @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_(
garciay's avatar
garciay committed
                                             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) Multiple_Services_Credit_Control_AVP    p_multiple_Services_Credit_Control := omit
                ) runs on DiameterComponent {
                    f_send_CCR(
                        md_cCR(
                            vc_sessionId, 
                            md_ccrBodyAvps_TypeOfCharging(
                                vc_originHost,
                                vc_originRealm,
                                vc_destinationRealm,
                                md_cC_Request_Type_AVP(
                                    p_cC_Request_Ty_Type
                                ),
                                md_cC_Request_Number_AVP(
                                    p_cC_Request_Number
                                ),
garciay's avatar
garciay committed
                                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,
                               vc_originRealm,
                               mw_auth_Application_Id_AVP(4),
                               mw_cC_Request_Type_AVP(
                                   p_cC_Request_Ty_Type
                               ),
                               mw_cC_Request_Number_AVP(
                /**
                 * @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 (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 DiameterComponent {
                    
                    f_awaiting_CCR(
                        mdw_cCR(
                            ?, 
                            mdw_ccrBodyAvps(
                                vc_originHost,                          // containing an Origin-Host AVP
                                vc_originRealm,                         // containing an Origin-Realm AVP
                                vc_destinationRealm,                    // containing a Destination-Realm AVP
                                mw_cC_Request_Type_AVP(p_cC_Request_Ty_Type),// containing a CC-Request-Type AVP
                                mw_cC_Request_Number_AVP(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
            
        } // End of group RO
        
    } // Endgroup GlobalSteps
pintar's avatar
pintar committed

    group Preambles{
pintar's avatar
pintar committed
        function f_preamble_Rf_CDF() runs on DiameterComponent
        {
            if(PX_DIAM_LLP_ENABLED)
            {
                f_preambleClient();
            }
            
            f_DiameterRf_init();
pintar's avatar
pintar committed
            f_preambleDiameterBaseClient(c_applIdRfRo);
pintar's avatar
pintar committed
        }
pintar's avatar
pintar committed
        function f_preamble_Rf_CDF2() runs on DiameterComponent
        {
            if(PX_DIAM_LLP_ENABLED)
            {
                f_preambleClient();
            }
            
            f_DiameterRf_init2();
            f_preambleDiameterBaseClient(c_applIdRfRo);
        }
        
pintar's avatar
pintar committed
        function f_preamble_Rf_CTF() runs on DiameterComponent
        {
            if(PX_DIAM_LLP_ENABLED)
            {
                f_preambleServer();
            }
            
            f_DiameterRf_init();
pintar's avatar
pintar committed
            f_preambleDiameterBaseServer(c_applIdRfRo);
pintar's avatar
pintar committed
        }
pintar's avatar
pintar committed
        function f_preamble_Ro_OCF() runs on DiameterComponent
        {
            if(PX_DIAM_LLP_ENABLED)
            {
                f_preambleClient();
            }
            
            f_DiameterRo_init();
pintar's avatar
pintar committed
            f_preambleDiameterBaseClient(c_applIdRfRo);
pintar's avatar
pintar committed
        }
pintar's avatar
pintar committed
        function f_preamble_Ro_CTF() runs on DiameterComponent
        {
            if(PX_DIAM_LLP_ENABLED)
            {
                f_preambleServer();
            }
            
pintar's avatar
pintar committed
            f_DiameterRo_init();
            f_preambleDiameterBaseServer(c_applIdRfRo);
pintar's avatar
pintar committed
        }
        
    } // End of group Preambles
pintar's avatar
pintar committed

    group Postambles {
pintar's avatar
pintar committed
        function f_postamble_Rf_CDF() runs on DiameterComponent
        {
            f_postambleDiameterBase();
            
            if(PX_DIAM_LLP_ENABLED)
            {
                f_postambleDisconnect();
            }
            
            // Deactivate defaults
            deactivate;
        }
        
pintar's avatar
pintar committed
        function f_postamble_Rf_CDF2() runs on DiameterComponent
        {
            f_postamble_Rf_CDF();
        }
        
pintar's avatar
pintar committed
        function f_postamble_Rf_CTF() runs on DiameterComponent
pintar's avatar
pintar committed
        {
pintar's avatar
pintar committed
            f_postambleDiameterBase();
pintar's avatar
pintar committed
            if(PX_DIAM_LLP_ENABLED)
            {
                f_postambleDisconnect();
            }
pintar's avatar
pintar committed
            // Deactivate defaults
            deactivate;
        }
pintar's avatar
pintar committed
        function f_postamble_Ro_OCF() runs on DiameterComponent
pintar's avatar
pintar committed
        {
            f_postambleDiameterBase();
pintar's avatar
pintar committed
            if(PX_DIAM_LLP_ENABLED)
            {
                f_postambleDisconnect();
            }
pintar's avatar
pintar committed
            // Deactivate defaults
            deactivate;
        }
pintar's avatar
pintar committed
        function f_postamble_Ro_CTF() runs on DiameterComponent
pintar's avatar
pintar committed
        {
pintar's avatar
pintar committed
            
pintar's avatar
pintar committed
            f_postambleDiameterBase();
pintar's avatar
pintar committed
            if(PX_DIAM_LLP_ENABLED)
            {
                f_postambleDisconnect();
            }
pintar's avatar
pintar committed
            // Deactivate defaults
            deactivate;
        }
        
    } // End of group Postambles
pintar's avatar
pintar committed

    group AVPOperations {
        
    } // End of group AVPOperations
pintar's avatar
pintar committed

    group CheckFunctions {
        
    } // End of group CheckFunctions
    group SendMessage {
        
        /**
         * @desc Function used to trigger a AC-Request message
         * @param p_acrMSG AC-Request message to send
         * @verdict Unchanged
         */
        function f_triggerAcRequest(in template (value) ACR_MSG p_acrMSG) 
        runs on DiameterComponent {
            DIAMP.send(
                DIAMETER_MSG : { aCR_MSG := p_acrMSG } 
            );
        } // End of function f_triggerAcRequest
        
    } // End of group SendMessage 
    
} // End of module DiameterGx_Steps