Skip to content
DiameterGx_Gx_TCFunctions.ttcn 118 KiB
Newer Older
rennoch's avatar
rennoch committed
    
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync

                f_postamble_PCRF();

            } // end function f_TC_PCEF_PCC_11
rennoch's avatar
rennoch committed
            
            
            /*
            *  @desc	This is the test case function TC_PCEF_PCC_12
            *  @param	
            */
            function f_TC_PCEF_PCC_12()
            runs on DiameterComponent {

               f_preamble_PCRF();
                
               f_awaiting_CCR(mw_CCR_Request(vc_sessionId, 
                									vc_originHost, 
                									vc_originRealm, 
                									vc_destinationRealm,
                									mw_cC_Request_Type(INITIAL_REQUEST_E),
                									*, *, *));

                f_send_CCA(m_CCA_basic(vc_sessionId, vc_originHost, vc_originRealm));
                
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync
                
				f_send_RAR(DiameterGx_Templates.m_RAR_CharRuleInst // RAR in Rx-module has different header!
						   (vc_sessionId, vc_originHost, vc_originRealm,
							vc_destinationRealm, vc_destinationHost, 
							m_chrgRuleInstall_Name(m_chargingRuleName(PX_CHARGING_RULE_NAME_DATA_NONEXIST))));
							                   
                f_awaiting_RAA(mw_RAA_RuleReport(vc_sessionId,?,?, mw_chargRuleReport_Name_Code_Status(mw_rule_Failure_Code(UNKNOWN_RULE_NAME_E),mw_pCC_Rule_Status(INACTIVE_E)))); 

                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); //     sync
                
                f_awaiting_CCR(mw_CCR_basic(vc_sessionId, 
                									vc_originHost, 
                									vc_originRealm, 
                									vc_destinationRealm,
                									mw_cC_Request_Type(TERMINATION_REQUEST_E)
                									));

                f_send_CCA(m_CCA_basic(vc_sessionId, vc_originHost, vc_originRealm));
    
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync

                f_postamble_PCRF();

            } // end function f_TC_PCEF_PCC_12
rennoch's avatar
rennoch committed
            /*
            *  @desc	This is the test case function TC_PCEF_PCC_13
            *  @param	
            */
            function f_TC_PCEF_PCC_13()
            runs on DiameterComponent {

               f_preamble_PCRF();
                
               f_awaiting_CCR(mw_CCR_Request(vc_sessionId, 
                									vc_originHost, 
                									vc_originRealm, 
                									vc_destinationRealm,
                									mw_cC_Request_Type(INITIAL_REQUEST_E),
                									*, *, *));

                f_send_CCA(m_CCA_basic(vc_sessionId, vc_originHost, vc_originRealm));
                
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync
                
				f_send_RAR(DiameterGx_Templates.m_RAR_CharRuleInst // RAR in Rx-module has different header!
						   (vc_sessionId, vc_originHost, vc_originRealm,
							vc_destinationRealm, vc_destinationHost, 
							m_chrgRuleInstall_Definition(m_chrgRuleDefinition_RG(PX_CHARGING_RULE_NAME_DATA, m_ratingGroup(PX_UNKNOWN_RATING_GROUP)))));
							                   
                f_awaiting_RAA(mw_RAA_RuleReport(vc_sessionId,?,?, mw_chargRuleReport_Name_Code_Status(mw_rule_Failure_Code(RATING_GROUP_ERROR_E),mw_pCC_Rule_Status(INACTIVE_E)))); 

                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); //     sync
                
                f_awaiting_CCR(mw_CCR_basic(vc_sessionId, 
                									vc_originHost, 
                									vc_originRealm, 
                									vc_destinationRealm,
                									mw_cC_Request_Type(TERMINATION_REQUEST_E)
                									));

                f_send_CCA(m_CCA_basic(vc_sessionId, vc_originHost, vc_originRealm));
    
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync

                f_postamble_PCRF();

            } // end function f_TC_PCEF_PCC_13
rennoch's avatar
rennoch committed
            
            /*
            *  @desc	This is the test case function TC_PCEF_PCC_14
            *  @param	
            */
            function f_TC_PCEF_PCC_14()
            runs on DiameterComponent {

               f_preamble_PCRF();
                
               f_awaiting_CCR(mw_CCR_Request(vc_sessionId, 
                									vc_originHost, 
                									vc_originRealm, 
                									vc_destinationRealm,
                									mw_cC_Request_Type(INITIAL_REQUEST_E),
                									*, *, *));

                f_send_CCA(m_CCA_basic(vc_sessionId, vc_originHost, vc_originRealm));
                
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync
                
				f_send_RAR(DiameterGx_Templates.m_RAR_CharRuleInst_RevalTime // RAR in Rx-module has different header!
						   (vc_sessionId, vc_originHost, vc_originRealm,
							vc_destinationRealm, vc_destinationHost, 
							m_revalidationTime(PX_REVALIDATION_TIME),
							m_chrgRuleInstall_Definition(m_chrgRuleDefinition(PX_CHARGING_RULE_NAME_DATA))));
							                   
rennoch's avatar
rennoch committed
                f_awaiting_RAA(mw_RAA_basic(vc_sessionId,?,?)); 
                
rennoch's avatar
rennoch committed
				// await timeout of revalidation timer
				tc_wait.start (int2float(PX_REVALIDATION_TIME));
				tc_wait.timeout;

				// Revalidation due to PCRF request in RAR
                f_awaiting_CCR(mw_CCR_basic(vc_sessionId, 
                									vc_originHost, 
                									vc_originRealm, 
                									vc_destinationRealm,
                									mw_cC_Request_Type(UPDATE_REQUEST_E)
                									));

                f_send_CCA(m_CCA_basic(vc_sessionId, vc_originHost, vc_originRealm));


                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); //     sync
                
                f_awaiting_CCR(mw_CCR_basic(vc_sessionId, 
                									vc_originHost, 
                									vc_originRealm, 
                									vc_destinationRealm,
                									mw_cC_Request_Type(TERMINATION_REQUEST_E)
                									));

                f_send_CCA(m_CCA_basic(vc_sessionId, vc_originHost, vc_originRealm));
    
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync

                f_postamble_PCRF();

            } // end function f_TC_PCEF_PCC_14
rennoch's avatar
rennoch committed
            
            /*
            *  @desc	This is the test case function TC_PCEF_PCC_15
            *  @param	
            */
            function f_TC_PCEF_PCC_15()
            runs on DiameterComponent {

               f_preamble_PCRF();
                
               f_awaiting_CCR(mw_CCR_Request(vc_sessionId, 
                									vc_originHost, 
                									vc_originRealm, 
                									vc_destinationRealm,
                									mw_cC_Request_Type(INITIAL_REQUEST_E),
                									*, *, *));

                f_send_CCA(m_CCA_basic(vc_sessionId, vc_originHost, vc_originRealm));
                
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync
                
				f_send_RAR(DiameterGx_Templates.m_RAR_CharRuleInst_RevalTime // RAR in Rx-module has different header!
						   (vc_sessionId, vc_originHost, vc_originRealm,
							vc_destinationRealm, vc_destinationHost, 
							m_revalidationTime(PX_REVALIDATION_TIME),
							m_chrgRuleInstall_Definition(m_chrgRuleDefinition(PX_CHARGING_RULE_NAME_DATA))));
							                   
                f_awaiting_RAA(mw_RAA_basic(vc_sessionId,?,?)); 
                
				// reset revalidation timer

				f_send_RAR(DiameterGx_Templates.m_RAR_CharRuleInst_EvTrigger // RAR in Rx-module has different header!
						   (vc_sessionId, vc_originHost, vc_originRealm,
							vc_destinationRealm, vc_destinationHost, 
							m_event_Trigger(REVALIDATION_TIMEOUT_E),
							m_chrgRuleInstall_Name_RAN(m_chargingRuleName(PX_CHARGING_RULE_NAME_DATA), m_resourceAllocNotif)));
                    
                f_awaiting_RAA(mw_RAA_basic(vc_sessionId,?,?)); 
                
                //TODO: possible check of missing revalidation?

                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); //     sync
                
                f_awaiting_CCR(mw_CCR_basic(vc_sessionId, 
                									vc_originHost, 
                									vc_originRealm, 
                									vc_destinationRealm,
                									mw_cC_Request_Type(TERMINATION_REQUEST_E)
                									));

                f_send_CCA(m_CCA_basic(vc_sessionId, vc_originHost, vc_originRealm));
    
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync

                f_postamble_PCRF();

            } // end function f_TC_PCEF_PCC_15
rennoch's avatar
rennoch committed
            
            /*
            *  @desc	This is the test case function TC_PCEF_PCC_16
            *  @param	
            */
            function f_TC_PCEF_PCC_16()
            runs on DiameterComponent {

               f_preamble_PCRF();
                
               f_awaiting_CCR(mw_CCR_Request(vc_sessionId, 
                									vc_originHost, 
                									vc_originRealm, 
                									vc_destinationRealm,
                									mw_cC_Request_Type(INITIAL_REQUEST_E),
                									*, *, *));

                f_send_CCA(m_CCA_basic(vc_sessionId, vc_originHost, vc_originRealm));
                
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync
                
				f_send_RAR(DiameterGx_Templates.m_RAR_CharRuleInst // RAR in Rx-module has different header!
						   (vc_sessionId, vc_originHost, vc_originRealm,
							vc_destinationRealm, vc_destinationHost, 
							m_chrgRuleInstall_Definition_ActTime(m_chrgRuleDefinition(PX_CHARGING_RULE_NAME_DATA), m_activationTime(PX_ACTIVATION_TIME))));
rennoch's avatar
rennoch committed
                    
                f_awaiting_RAA(mw_RAA_basic(vc_sessionId,?,?)); 

                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); //     sync
                
                f_awaiting_CCR(mw_CCR_basic(vc_sessionId, 
                									vc_originHost, 
                									vc_originRealm, 
                									vc_destinationRealm,
                									mw_cC_Request_Type(TERMINATION_REQUEST_E)
                									));

                f_send_CCA(m_CCA_basic(vc_sessionId, vc_originHost, vc_originRealm));
    
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync

                f_postamble_PCRF();

            } // end function f_TC_PCEF_PCC_16
            
            /*
            *  @desc	This is the test case function TC_PCEF_PCC_17
            *  @param	
            */
            function f_TC_PCEF_PCC_17()
            runs on DiameterComponent {

               f_preamble_PCRF();
                
               f_awaiting_CCR(mw_CCR_Request(vc_sessionId, 
                									vc_originHost, 
                									vc_originRealm, 
                									vc_destinationRealm,
                									mw_cC_Request_Type(INITIAL_REQUEST_E),
                									*, *, *));

                f_send_CCA(m_CCA_basic(vc_sessionId, vc_originHost, vc_originRealm));
                
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync
                
				f_send_RAR(DiameterGx_Templates.m_RAR_CharRuleInst // RAR in Rx-module has different header!
						   (vc_sessionId, vc_originHost, vc_originRealm,
							vc_destinationRealm, vc_destinationHost, 
							m_chrgRuleInstall_Definition_DeActTime(m_chrgRuleDefinition(PX_CHARGING_RULE_NAME_DATA), m_deactivationTime(PX_DEACTIVATION_TIME))));
rennoch's avatar
rennoch committed
                f_awaiting_RAA(mw_RAA_basic(vc_sessionId,?,?)); 

                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); //     sync
                
                f_awaiting_CCR(mw_CCR_basic(vc_sessionId, 
                									vc_originHost, 
                									vc_originRealm, 
                									vc_destinationRealm,
                									mw_cC_Request_Type(TERMINATION_REQUEST_E)
                									));

                f_send_CCA(m_CCA_basic(vc_sessionId, vc_originHost, vc_originRealm));
    
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync

                f_postamble_PCRF();

            } // end function f_TC_PCEF_PCC_17
            

rennoch's avatar
rennoch committed
                    
        }//end group TP_PCEFRole_PCC
        group TP_PCEFRole_EMS {	//Emergency services
rennoch's avatar
rennoch committed
        
                    /*
            *  @desc	This is the test case function TC_PCEF_EMS_01
            *  @param	
            */
            function f_TC_PCEF_EMS_01()
            runs on DiameterComponent {

                f_preamble_PCRF();

                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync

rennoch's avatar
rennoch committed
                action("Trigger for Emergency service");
                
rennoch's avatar
rennoch committed
                f_awaiting_CCR(mw_CCR_Request_EMS(vc_sessionId, 
                									vc_originHost, 
                									vc_originRealm, 
                									vc_destinationRealm,
                									mw_cC_Request_Type(INITIAL_REQUEST_E),
                									f_framedIpAddress4(),
                									f_framedIpAddress6(),
                									*,
                									mw_CalledStationId(PX_EMERGENCY_APN),
                									mw_UserEquipmentInfo(mw_UserEquipmentInfoType(IMEISV_E),?)));

                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); //     sync

                f_send_CCA(m_CCA_basic(vc_sessionId, vc_originHost, vc_originRealm));
    
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync

                f_postamble_PCRF();

            } // end function f_TC_PCEF_EMS_01
        
        }//end group TP_PCRERole_EMS
        group TP_PCEFRole_UMC {	//Usage monitoring control
rennoch's avatar
rennoch committed
        
                    /*
            *  @desc	This is the test case function TC_PCEF_UMC_01
            *  @param	
            */
            function f_TC_PCEF_UMC_01()
            runs on DiameterComponent {

rennoch's avatar
rennoch committed
               f_preamble_PCRF(); 
rennoch's avatar
rennoch committed
                
               f_awaiting_CCR(mw_CCR_Request(vc_sessionId, 
                									vc_originHost, 
                									vc_originRealm, 
                									vc_destinationRealm,
                									mw_cC_Request_Type(INITIAL_REQUEST_E),
                									*, *, *));

                f_send_CCA(m_CCA_basic(vc_sessionId, vc_originHost, vc_originRealm));
                
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync
                
				f_send_RAR(DiameterGx_Templates.m_RAR_EvTrigger_UMI // RAR in Rx-module has different header!
						   (vc_sessionId, vc_originHost, vc_originRealm,
							vc_destinationRealm, vc_destinationHost, 
							m_event_Trigger(USAGE_REPORT_E),
							m_usageMonitoringInformation(m_monitoringKey(PX_MONITORING_KEY), omit)));
rennoch's avatar
rennoch committed
                    
                f_awaiting_RAA(mw_RAA_basic(vc_sessionId,?,?)); 

                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); //     sync
                
                f_awaiting_CCR(mw_CCR_basic(vc_sessionId, 
                									vc_originHost, 
                									vc_originRealm, 
                									vc_destinationRealm,
                									mw_cC_Request_Type(TERMINATION_REQUEST_E)
                									));

                f_send_CCA(m_CCA_basic(vc_sessionId, vc_originHost, vc_originRealm));
    
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync

                f_postamble_PCRF();

            } // end function f_TC_PCEF_UMC_01
        
        }//end group TP_PCEFRole_UMC
        group TP_PCEFRole_IRS {	//IMS Restoration Support
        }//end group TP_PCEFRole_IRS
        group TP_PCEFRole_MPS {	//Multimedia Priority Support
        }//end group TP_PCEFRole_MPS
        group TP_PCEFRole_SDC {	//Sponsored Data Connectivity
        }//end group TP_PCEFRole_SDC
        group TP_PCEFRole_RAU {	//Reporting Accumulated Usage
rennoch's avatar
rennoch committed
        
            /*
            *  @desc	This is the test case function TC_PCEF_RAU_01
            *  @param	
            */
            function f_TC_PCEF_RAU_01()
            runs on DiameterComponent {

               f_preamble_PCRF();
                
               f_awaiting_CCR(mw_CCR_Request(vc_sessionId, 
                									vc_originHost, 
                									vc_originRealm, 
                									vc_destinationRealm,
                									mw_cC_Request_Type(INITIAL_REQUEST_E),
                									*, *, *));

                f_send_CCA(m_CCA_basic(vc_sessionId, vc_originHost, vc_originRealm));
                
                // requesting montitoring control                                
				f_send_RAR(DiameterGx_Templates.m_RAR_EvTrigger_UMI // RAR in Rx-module has different header!
						   (vc_sessionId, vc_originHost, vc_originRealm,
							vc_destinationRealm, vc_destinationHost, 
							m_event_Trigger(USAGE_REPORT_E),
							m_usageMonitoringInformation(m_monitoringKey(PX_MONITORING_KEY), omit)));                    
                f_awaiting_RAA(mw_RAA_basic(vc_sessionId,?,?)); 
                
                
rennoch's avatar
rennoch committed
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync
                
                action("Trigger for usage threshold reached");               

                f_awaiting_CCR(mw_CCR_Request_EvtTrig_UMI(vc_sessionId, 
                									vc_originHost, 
                									vc_originRealm, 
                									vc_destinationRealm,
                									mw_cC_Request_Type(UPDATE_REQUEST_E),
                									mw_usageMonitoringInfo_Key_UsedServiceUnit(mw_usedServiceUnit(*,*)),
                									mw_eventTrigger(USAGE_REPORT_E)));
                									
   				// check that uplink or downlink volune has been indicated
   				if (not (ispresent(vc_recvDiamMsg.cCR_MSG.usage_Monitoring_Information[0].used_Service_Unit.cC_Input_Octets)
   						 or
   						 ispresent(vc_recvDiamMsg.cCR_MSG.usage_Monitoring_Information[0].used_Service_Unit.cC_Output_Octets)
   						 )
   				   )
   					{setverdict(fail)};
				
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); //     sync

                f_send_CCA(m_CCA_basic(vc_sessionId, vc_originHost, vc_originRealm));
    
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync

                f_postamble_PCRF();

            } // end function f_TC_PCEF_RAU_01
            
            
        
            /*
            *  @desc	This is the test case function TC_PCEF_RAU_02
            *  @param	
            */
            function f_TC_PCEF_RAU_02()
            runs on DiameterComponent {

               f_preamble_PCRF();
                
               f_awaiting_CCR(mw_CCR_Request(vc_sessionId, 
                									vc_originHost, 
                									vc_originRealm, 
                									vc_destinationRealm,
                									mw_cC_Request_Type(INITIAL_REQUEST_E),
                									*, *, *));

                f_send_CCA(m_CCA_basic(vc_sessionId, vc_originHost, vc_originRealm));
                
                // requesting montitoring control                                
				f_send_RAR(DiameterGx_Templates.m_RAR_EvTrigger_UMI // RAR in Rx-module has different header!
						   (vc_sessionId, vc_originHost, vc_originRealm,
							vc_destinationRealm, vc_destinationHost, 
							m_event_Trigger(USAGE_REPORT_E),
							m_usageMonitoringInformation(m_monitoringKey(PX_MONITORING_KEY), omit)));                    
                f_awaiting_RAA(mw_RAA_basic(vc_sessionId,?,?)); 
                                
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync
                
				// trigger for usage report (removal of PCC rule)
				f_send_RAR(DiameterGx_Templates.m_RAR_CharRuleRemove // RAR in Rx-module has different header!
						   (vc_sessionId, vc_originHost, vc_originRealm,
							vc_destinationRealm, vc_destinationHost, 
							m_chrgRuleRemove_BName(m_chrgRuleBaseName(PX_CHARGING_RULE_BASE_NAME_DATA))));
                    
                f_awaiting_RAA(mw_RAA_basic(vc_sessionId,?,?));            

                f_awaiting_CCR(mw_CCR_Request_EvtTrig_UMI(vc_sessionId, 
                									vc_originHost, 
                									vc_originRealm, 
                									vc_destinationRealm,
                									mw_cC_Request_Type(UPDATE_REQUEST_E),
                									mw_usageMonitoringInfo_Key_UsedServiceUnit(mw_usedServiceUnit(*,*)),
                									mw_eventTrigger(USAGE_REPORT_E)));
                									
   				// check that uplink or downlink volune has been indicated
   				if (not (ispresent(vc_recvDiamMsg.cCR_MSG.usage_Monitoring_Information[0].used_Service_Unit.cC_Input_Octets)
   						 or
   						 ispresent(vc_recvDiamMsg.cCR_MSG.usage_Monitoring_Information[0].used_Service_Unit.cC_Output_Octets)
   						 )
   				   )
   					{setverdict(fail)};
				
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); //     sync

                f_send_CCA(m_CCA_basic(vc_sessionId, vc_originHost, vc_originRealm));
    
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync

                f_postamble_PCRF();

            } // end function f_TC_PCEF_RAU_02
rennoch's avatar
rennoch committed

        
            /*
            *  @desc	This is the test case function TC_PCEF_RAU_03
            *  @param	
            */
            function f_TC_PCEF_RAU_03()
            runs on DiameterComponent {

               f_preamble_PCRF();
                
               f_awaiting_CCR(mw_CCR_Request(vc_sessionId, 
                									vc_originHost, 
                									vc_originRealm, 
                									vc_destinationRealm,
                									mw_cC_Request_Type(INITIAL_REQUEST_E),
                									*, *, *));

                f_send_CCA(m_CCA_basic(vc_sessionId, vc_originHost, vc_originRealm));
                
                // requesting montitoring control                                
				f_send_RAR(DiameterGx_Templates.m_RAR_EvTrigger_UMI // RAR in Rx-module has different header!
						   (vc_sessionId, vc_originHost, vc_originRealm,
							vc_destinationRealm, vc_destinationHost, 
							m_event_Trigger(USAGE_REPORT_E),
							m_usageMonitoringInformation(m_monitoringKey(PX_MONITORING_KEY), omit)));                    
rennoch's avatar
rennoch committed
                f_awaiting_RAA(mw_RAA_basic(vc_sessionId,?,?)); 
                                
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync
                
                action("Trigger for CCR not related to predefined monitoring key");                         
                
                f_awaiting_CCR(mw_CCR_Request(vc_sessionId, 
                									vc_originHost, 
                									vc_originRealm, 
                									vc_destinationRealm,
                									mw_cC_Request_Type(INITIAL_REQUEST_E),
                									*, *, *));      

				// trigger for usage report (removal of PCC rule)
                f_send_CCA(m_CCA_RuleRemove(vc_sessionId, vc_originHost, vc_originRealm, 
                           m_chrgRuleRemove_Name(m_chargingRuleName(PX_CHARGING_RULE_NAME_DATA))));         

                // await usage-monitoring-information
                f_awaiting_CCR(mw_CCR_Request_EvtTrig_UMI(vc_sessionId, 
                									vc_originHost, 
                									vc_originRealm, 
                									vc_destinationRealm,
                									mw_cC_Request_Type(UPDATE_REQUEST_E),
                									mw_usageMonitoringInfo_Key_UsedServiceUnit(mw_usedServiceUnit(*,*)),
                									mw_eventTrigger(USAGE_REPORT_E)));
                									
   				// check that uplink or downlink volune has been indicated
   				if (not (ispresent(vc_recvDiamMsg.cCR_MSG.usage_Monitoring_Information[0].used_Service_Unit.cC_Input_Octets)
   						 or
   						 ispresent(vc_recvDiamMsg.cCR_MSG.usage_Monitoring_Information[0].used_Service_Unit.cC_Output_Octets)
   						 )
   				   )
   					{setverdict(fail)};
				
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); //     sync

                f_send_CCA(m_CCA_basic(vc_sessionId, vc_originHost, vc_originRealm));
    
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync

                f_postamble_PCRF();

            } // end function f_TC_PCEF_RAU_03
rennoch's avatar
rennoch committed
            
                        /*
            *  @desc	This is the test case function TC_PCEF_RAU_04
            *  @param	
            */
            function f_TC_PCEF_RAU_04()
            runs on DiameterComponent {

               f_preamble_PCRF();
                
               f_awaiting_CCR(mw_CCR_Request(vc_sessionId, 
                									vc_originHost, 
                									vc_originRealm, 
                									vc_destinationRealm,
                									mw_cC_Request_Type(INITIAL_REQUEST_E),
                									*, *, *));

                f_send_CCA(m_CCA_basic(vc_sessionId, vc_originHost, vc_originRealm));
                
                // requesting montitoring control                                
				f_send_RAR(DiameterGx_Templates.m_RAR_EvTrigger_UMI // RAR in Rx-module has different header!
						   (vc_sessionId, vc_originHost, vc_originRealm,
							vc_destinationRealm, vc_destinationHost, 
							m_event_Trigger(USAGE_REPORT_E),
							m_usageMonitoringInformation(m_monitoringKey(PX_MONITORING_KEY), omit)));                    
rennoch's avatar
rennoch committed
                f_awaiting_RAA(mw_RAA_basic(vc_sessionId,?,?)); 
                
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync
                
                action("Trigger for Session Termination");                									
                									
                // await termination including usage-monitoring-information
                f_awaiting_CCR(mw_CCR_Request_EvtTrig_UMI(vc_sessionId, 
                									vc_originHost, 
                									vc_originRealm, 
                									vc_destinationRealm,
                									mw_cC_Request_Type(TERMINATION_REQUEST_E),
                									mw_usageMonitoringInfo_Key_UsedServiceUnit(mw_usedServiceUnit(*,*)),
                									*));
                									
   				// check that uplink or downlink volune has been indicated
   				if (not (ispresent(vc_recvDiamMsg.cCR_MSG.usage_Monitoring_Information[0].used_Service_Unit.cC_Input_Octets)
   						 or
   						 ispresent(vc_recvDiamMsg.cCR_MSG.usage_Monitoring_Information[0].used_Service_Unit.cC_Output_Octets)
rennoch's avatar
rennoch committed
   						 ) 
rennoch's avatar
rennoch committed
   				   )
   					{setverdict(fail)};
   					
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); //     sync

                f_send_CCA(m_CCA_basic(vc_sessionId, vc_originHost, vc_originRealm));
    
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync

                f_postamble_PCRF();

            } // end function f_TC_PCEF_RAU_04
rennoch's avatar
rennoch committed

            /*
            *  @desc	This is the test case function TC_PCEF_RAU_05
            *  @param	
            */
            function f_TC_PCEF_RAU_05()
            runs on DiameterComponent {

               f_preamble_PCRF();
                
               f_awaiting_CCR(mw_CCR_Request(vc_sessionId, 
                									vc_originHost, 
                									vc_originRealm, 
                									vc_destinationRealm,
                									mw_cC_Request_Type(INITIAL_REQUEST_E),
                									*, *, *));

                f_send_CCA(m_CCA_basic(vc_sessionId, vc_originHost, vc_originRealm));
                
                // requesting montitoring control for two keys                               
rennoch's avatar
rennoch committed
				f_send_RAR(DiameterGx_Templates.m_RAR_EvTrigger_UMI // RAR in Rx-module has different header!
						   (vc_sessionId, vc_originHost, vc_originRealm,
							vc_destinationRealm, vc_destinationHost, 
							m_event_Trigger(USAGE_REPORT_E),
							m_usageMonitoringInformation(m_monitoringKey(PX_MONITORING_KEY), omit)));                    
                f_awaiting_RAA(mw_RAA_basic(vc_sessionId,?,?)); 
                f_send_RAR(DiameterGx_Templates.m_RAR_EvTrigger_UMI // RAR in Rx-module has different header!
						   (vc_sessionId, vc_originHost, vc_originRealm,
							vc_destinationRealm, vc_destinationHost, 
							m_event_Trigger(USAGE_REPORT_E),
							m_usageMonitoringInformation(m_monitoringKey(PX_MONITORING_KEY2), omit)));                    
rennoch's avatar
rennoch committed
                f_awaiting_RAA(mw_RAA_basic(vc_sessionId,?,?)); 
                                
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync
                
				// trigger for usage report (explicit request)
				f_send_RAR(DiameterGx_Templates.m_RAR_UMI // RAR in Rx-module has different header!
						   (vc_sessionId, vc_originHost, vc_originRealm,
							vc_destinationRealm, vc_destinationHost, 
							m_usageMonitoringInformationRequestReport(m_usageMonitoringReport(USAGE_MONITORING_REPORT_REQUIRED_E))));
                    
                f_awaiting_RAA(mw_RAA_basic(vc_sessionId,?,?));            

                f_awaiting_CCR(mw_CCR_Request_EvtTrig_UMI(vc_sessionId, 
                									vc_originHost, 
                									vc_originRealm, 
                									vc_destinationRealm,
                									mw_cC_Request_Type(UPDATE_REQUEST_E),
                									{mw_usageMonitoringInfo_Key_UsedServiceUnit(mw_usedServiceUnit(*,*)),
                									 mw_usageMonitoringInfo_Key2_UsedServiceUnit(mw_usedServiceUnit(*,*))},
rennoch's avatar
rennoch committed
                									mw_eventTrigger(USAGE_REPORT_E)));
                									
   				// check that uplink or downlink volune has been indicated for predefined key
rennoch's avatar
rennoch committed
   				if (not (ispresent(vc_recvDiamMsg.cCR_MSG.usage_Monitoring_Information[0].used_Service_Unit.cC_Input_Octets)
   						 or
   						 ispresent(vc_recvDiamMsg.cCR_MSG.usage_Monitoring_Information[0].used_Service_Unit.cC_Output_Octets)
   						 )
   				   )
   					{setverdict(fail)};
                									
   				// check that uplink or downlink volune has been indicated for 2nd predefined key
   				if (not (ispresent(vc_recvDiamMsg.cCR_MSG.usage_Monitoring_Information[1].used_Service_Unit.cC_Input_Octets)
   						 or
   						 ispresent(vc_recvDiamMsg.cCR_MSG.usage_Monitoring_Information[1].used_Service_Unit.cC_Output_Octets)
   						 )
   				   )
   					{setverdict(fail)};
rennoch's avatar
rennoch committed
				
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); //     sync

                f_send_CCA(m_CCA_basic(vc_sessionId, vc_originHost, vc_originRealm));
    
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync

                f_postamble_PCRF();

            } // end function f_TC_PCEF_RAU_05
            /*
            *  @desc	This is the test case function TC_PCEF_RAU_06
            *  @param	
            */
            function f_TC_PCEF_RAU_06()
            runs on DiameterComponent {

               f_preamble_PCRF();
                
               f_awaiting_CCR(mw_CCR_Request(vc_sessionId, 
                									vc_originHost, 
                									vc_originRealm, 
                									vc_destinationRealm,
                									mw_cC_Request_Type(INITIAL_REQUEST_E),
                									*, *, *));

                f_send_CCA(m_CCA_basic(vc_sessionId, vc_originHost, vc_originRealm));
                
                // requesting montitoring control for one key                             
                f_send_RAR(DiameterGx_Templates.m_RAR_EvTrigger_UMI // RAR in Rx-module has different header!
						   (vc_sessionId, vc_originHost, vc_originRealm,
							vc_destinationRealm, vc_destinationHost, 
							m_event_Trigger(USAGE_REPORT_E),
							m_usageMonitoringInformation(m_monitoringKey(PX_MONITORING_KEY2), omit)));                    
                f_awaiting_RAA(mw_RAA_basic(vc_sessionId,?,?)); 
                                
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync
                
				// trigger for usage report (explicit request)
				f_send_RAR(DiameterGx_Templates.m_RAR_UMI // RAR in Rx-module has different header!
						   (vc_sessionId, vc_originHost, vc_originRealm,
							vc_destinationRealm, vc_destinationHost, 
							m_usageMonitoringInformationRequestReport(m_usageMonitoringReport(USAGE_MONITORING_REPORT_REQUIRED_E))));
                    
                f_awaiting_RAA(mw_RAA_basic(vc_sessionId,?,?));            

                f_awaiting_CCR(mw_CCR_Request_EvtTrig_UMI(vc_sessionId, 
                									vc_originHost, 
                									vc_originRealm, 
                									vc_destinationRealm,
                									mw_cC_Request_Type(UPDATE_REQUEST_E),
                									{mw_usageMonitoringInfo_Key_UsedServiceUnit(mw_usedServiceUnit(*,*))},
                									mw_eventTrigger(USAGE_REPORT_E)));
                									
   				// check that uplink or downlink volune has been indicated
   				if (not (ispresent(vc_recvDiamMsg.cCR_MSG.usage_Monitoring_Information[0].used_Service_Unit.cC_Input_Octets)
   						 or
   						 ispresent(vc_recvDiamMsg.cCR_MSG.usage_Monitoring_Information[0].used_Service_Unit.cC_Output_Octets)
   						 )
   				   )
   					{setverdict(fail)};
				
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); //     sync

                f_send_CCA(m_CCA_basic(vc_sessionId, vc_originHost, vc_originRealm));
    
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync

                f_postamble_PCRF();

            } // end function f_TC_PCEF_RAU_06
                    
        }//end group TP_PCEFRole_RAU
    } //end group TP_PCEFRole
rennoch's avatar
rennoch committed
    
    group GTP_Role {

            /*
            *  @desc	This is the test case function for GTP component 1 to trigger the PCEF
            *  @param	
            */
            function f_TC_GTP_01()
            runs on GtpComponent {
                
                activate(a_echoResponse());

                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync
                
                GTP.send (m_gtp_v1_dummy);
                
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); //     sync
    
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync

            } // end function f_TC_GTP_01
            
        /*
        *  @desc	This is the test case function for GTP component 2 to serve the triggered PCEF
        *  @param	
        */
        function f_TC_GTP_02()
        runs on GtpComponent {
                            
            activate(a_echoResponse());

            f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync

            GTP.receive (m_gtp_v1_dummy);

            f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); //     sync
    
            f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync

        } // end function f_TC_GTP_02
rennoch's avatar
rennoch committed
        
        /*
        *  @desc	This is the test case function for GTP component 2 to determine that PCEF blocks traffic for rejected session
        *  			
        *  @param	
        */
        function f_TC_GTP_02_neg()
        runs on GtpComponent {
                            
            activate(a_echoResponse());

            f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync

            f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); //     sync

            tc_wait.start;
            alt{
            	[] GTP.receive (m_gtp_v1_dummy) {setverdict(fail);}
            	[] tc_wait.timeout {setverdict(pass);}
            };
    
            f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync

        } // end function f_TC_GTP_02_neg
	
} // end module DiameterGx_Gx_TCFunctions