Loading DiameterGx/ttcn/DiameterGx_Gx_TCFunctions.ttcn +34 −0 Original line number Diff line number Diff line Loading @@ -796,6 +796,40 @@ module DiameterGx_Gx_TCFunctions { }//end group TP_PCRFRole_EMS group TP_PCRFRole_UMC { //Usage monitoring control /* * @desc This is the test case function TC_PCRF_UMC_01 * @param */ function f_TC_PCRF_UMC_01() runs on DiameterComponent { var boolean v_cc_xx_octets_present; f_preamble_PCEF(); f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync //establishement of the session with Called-Station-Id: set value emergency APN with PX_CALLED_STATION_ID_DATA f_send_CCR(m_CCR_InitialRequest(vc_sessionId, vc_originHost, vc_originRealm, vc_destinationRealm, f_framedIpAddress4_send(),f_framedIpAddress6_send())); f_awaiting_CCA(mw_CCA_EventTriger_UsageMonitorInfo(vc_sessionId, vc_originHost, vc_originRealm, mw_resultCode(mw_resultCode_diameterSuccess))); v_cc_xx_octets_present := f_check_CCAUsageMonitoringInfo(vc_recvDiamMsg); if (not v_cc_xx_octets_present) { f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); // sync f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync setverdict(fail); f_postamble_PCEF(); } f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); // sync f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync f_postamble_PCEF(); } // end function f_TC_PCRF_UMC_01 }//end group TP_PCRFRole_UMC group TP_PCRFRole_IRS { //IMS Restoration Support }//end group TP_PCRFRole_IRS Loading DiameterGx/ttcn/DiameterGx_Steps.ttcn3 +39 −0 Original line number Diff line number Diff line Loading @@ -136,6 +136,45 @@ }//end group AVPOperations group CheckFunctions { function f_check_CCAUsageMonitoringInfo (DIAMETER_MSG p_msg) return boolean { var integer v_umi:=0, i:=0; var boolean v_present :=false; if (ispresent(p_msg.cCA_MSG.usage_Monitoring_Information)) { v_umi := sizeof(p_msg.cCA_MSG.usage_Monitoring_Information); for (i :=0; i < v_umi; i := i+1) { if (ispresent(p_msg.cCA_MSG.usage_Monitoring_Information[i].granted_Service_Unit)){ if (ispresent(p_msg.cCA_MSG.usage_Monitoring_Information[i].granted_Service_Unit.cC_Total_Octets) or ispresent(p_msg.cCA_MSG.usage_Monitoring_Information[i].granted_Service_Unit.cC_Input_Octets) or ispresent(p_msg.cCA_MSG.usage_Monitoring_Information[i].granted_Service_Unit.cC_Output_Octets)) { v_present :=true; } else { log("FAIL: CC_Total_Octets_AVP or CC_Input_Octets_AVP or CC_Output_Octets_AVP shall be present"); return(false); } } else { log("FAIL: Granted_Service_Unit_AVP shall be present"); return(false); } } } return(v_present); } } //end group CheckFunctions group DefaultAltsteps { Loading DiameterGx/ttcn/DiameterGx_Templates.ttcn +53 −0 Original line number Diff line number Diff line Loading @@ -144,6 +144,31 @@ module DiameterGx_Templates { pre_emption_Vulnerability := * } template Usage_Monitoring_Information_AVP mw_usageMonitoringInfo_dummy := { aVP_Header := mw_aVP_Header_any, monitoring_Key := *, granted_Service_Unit := *, used_Service_Unit := *, usage_Monitoring_Level := *, usage_Monitoring_Report := *, usage_Monitoring_Support := *, aVP_Type := * } template Granted_Service_Unit_AVP mw_grantedServiceUnit_dummy := { aVP_Header := mw_aVP_Header_any, tariff_Time_Change := *, cC_Time := *, cC_Money := *, cC_Total_Octets := *, cC_Input_Octets := *, cC_Output_Octets := *, cC_Service_Specific_Units := *, aVP_Type := * } } //end group DummyAVPHeaders group SpecificAVPHeaders { Loading Loading @@ -672,6 +697,25 @@ module DiameterGx_Templates { aVP_Data := p_aVP_Data } template Usage_Monitoring_Information_AVP mw_usageMonitoringInfo_Key_GrantedServiceUnit modifies mw_usageMonitoringInfo_dummy := { aVP_Header := mw_aVP_Header_any, monitoring_Key := mw_monitoringKey_any, granted_Service_Unit := mw_grantedServiceUnit_dummy } template Monitoring_Key_AVP mw_monitoringKey_any := { aVP_Header := mw_aVP_Header_any, aVP_Data := ? } template Event_Trigger_AVP mw_eventTrigger(template Event_Trigger p_aVP_Data) := { aVP_Header := mw_aVP_Header_any, aVP_Data := p_aVP_Data } }//end group awaitingTemplatesForAVPs } //end group SpecificAVPHeaders } //end group HeaderFieldTemplates Loading Loading @@ -1067,6 +1111,15 @@ module DiameterGx_Templates { offline := mw_offline_any ifpresent } template CCA_MSG mw_CCA_EventTriger_UsageMonitorInfo( template Session_Id_AVP p_sessionId, template Origin_Host_AVP p_originHost, template Origin_Realm_AVP p_originRealm, template Result_Code_AVP p_resultCode) modifies mw_CCA_basic := { event_Trigger := {mw_eventTrigger(USAGE_REPORT_E)}, usage_Monitoring_Information := {mw_usageMonitoringInfo_Key_GrantedServiceUnit} } } // end group Gxmodified_answer_templates_receive } //end group Gxmodified_templates Loading DiameterGx/ttcn/DiameterGx_TestCases.ttcn +21 −0 Original line number Diff line number Diff line Loading @@ -572,6 +572,27 @@ module DiameterGx_TestCases }//end group TP_PCRFRole_EMS group TP_PCRFRole_UMC { //Usage monitoring control /* * @desc TC_PCRF_UMC_01 * @param p_cSeq_s Transaction Id */ testcase TC_PCRF_UMC_01() runs on ServerSyncComp system TestAdapter { //Variables var DiameterComponent v_diameterComponent_pcef; f_cf_1GxEUp(v_diameterComponent_pcef); //Start v_diameterComponent_pcef.start(f_TC_PCRF_UMC_01()); // synchronize PTC on 3 sychronization points f_serverSync1Client({c_prDone, c_tbDone, c_poDone}); f_cf_1GxEDown(v_diameterComponent_pcef); } // end TC_PCRF_UMC_01 }//end group TP_PCRFRole_UMC group TP_PCRFRole_IRS { //IMS Restoration Support Loading Loading
DiameterGx/ttcn/DiameterGx_Gx_TCFunctions.ttcn +34 −0 Original line number Diff line number Diff line Loading @@ -796,6 +796,40 @@ module DiameterGx_Gx_TCFunctions { }//end group TP_PCRFRole_EMS group TP_PCRFRole_UMC { //Usage monitoring control /* * @desc This is the test case function TC_PCRF_UMC_01 * @param */ function f_TC_PCRF_UMC_01() runs on DiameterComponent { var boolean v_cc_xx_octets_present; f_preamble_PCEF(); f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync //establishement of the session with Called-Station-Id: set value emergency APN with PX_CALLED_STATION_ID_DATA f_send_CCR(m_CCR_InitialRequest(vc_sessionId, vc_originHost, vc_originRealm, vc_destinationRealm, f_framedIpAddress4_send(),f_framedIpAddress6_send())); f_awaiting_CCA(mw_CCA_EventTriger_UsageMonitorInfo(vc_sessionId, vc_originHost, vc_originRealm, mw_resultCode(mw_resultCode_diameterSuccess))); v_cc_xx_octets_present := f_check_CCAUsageMonitoringInfo(vc_recvDiamMsg); if (not v_cc_xx_octets_present) { f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); // sync f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync setverdict(fail); f_postamble_PCEF(); } f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); // sync f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync f_postamble_PCEF(); } // end function f_TC_PCRF_UMC_01 }//end group TP_PCRFRole_UMC group TP_PCRFRole_IRS { //IMS Restoration Support }//end group TP_PCRFRole_IRS Loading
DiameterGx/ttcn/DiameterGx_Steps.ttcn3 +39 −0 Original line number Diff line number Diff line Loading @@ -136,6 +136,45 @@ }//end group AVPOperations group CheckFunctions { function f_check_CCAUsageMonitoringInfo (DIAMETER_MSG p_msg) return boolean { var integer v_umi:=0, i:=0; var boolean v_present :=false; if (ispresent(p_msg.cCA_MSG.usage_Monitoring_Information)) { v_umi := sizeof(p_msg.cCA_MSG.usage_Monitoring_Information); for (i :=0; i < v_umi; i := i+1) { if (ispresent(p_msg.cCA_MSG.usage_Monitoring_Information[i].granted_Service_Unit)){ if (ispresent(p_msg.cCA_MSG.usage_Monitoring_Information[i].granted_Service_Unit.cC_Total_Octets) or ispresent(p_msg.cCA_MSG.usage_Monitoring_Information[i].granted_Service_Unit.cC_Input_Octets) or ispresent(p_msg.cCA_MSG.usage_Monitoring_Information[i].granted_Service_Unit.cC_Output_Octets)) { v_present :=true; } else { log("FAIL: CC_Total_Octets_AVP or CC_Input_Octets_AVP or CC_Output_Octets_AVP shall be present"); return(false); } } else { log("FAIL: Granted_Service_Unit_AVP shall be present"); return(false); } } } return(v_present); } } //end group CheckFunctions group DefaultAltsteps { Loading
DiameterGx/ttcn/DiameterGx_Templates.ttcn +53 −0 Original line number Diff line number Diff line Loading @@ -144,6 +144,31 @@ module DiameterGx_Templates { pre_emption_Vulnerability := * } template Usage_Monitoring_Information_AVP mw_usageMonitoringInfo_dummy := { aVP_Header := mw_aVP_Header_any, monitoring_Key := *, granted_Service_Unit := *, used_Service_Unit := *, usage_Monitoring_Level := *, usage_Monitoring_Report := *, usage_Monitoring_Support := *, aVP_Type := * } template Granted_Service_Unit_AVP mw_grantedServiceUnit_dummy := { aVP_Header := mw_aVP_Header_any, tariff_Time_Change := *, cC_Time := *, cC_Money := *, cC_Total_Octets := *, cC_Input_Octets := *, cC_Output_Octets := *, cC_Service_Specific_Units := *, aVP_Type := * } } //end group DummyAVPHeaders group SpecificAVPHeaders { Loading Loading @@ -672,6 +697,25 @@ module DiameterGx_Templates { aVP_Data := p_aVP_Data } template Usage_Monitoring_Information_AVP mw_usageMonitoringInfo_Key_GrantedServiceUnit modifies mw_usageMonitoringInfo_dummy := { aVP_Header := mw_aVP_Header_any, monitoring_Key := mw_monitoringKey_any, granted_Service_Unit := mw_grantedServiceUnit_dummy } template Monitoring_Key_AVP mw_monitoringKey_any := { aVP_Header := mw_aVP_Header_any, aVP_Data := ? } template Event_Trigger_AVP mw_eventTrigger(template Event_Trigger p_aVP_Data) := { aVP_Header := mw_aVP_Header_any, aVP_Data := p_aVP_Data } }//end group awaitingTemplatesForAVPs } //end group SpecificAVPHeaders } //end group HeaderFieldTemplates Loading Loading @@ -1067,6 +1111,15 @@ module DiameterGx_Templates { offline := mw_offline_any ifpresent } template CCA_MSG mw_CCA_EventTriger_UsageMonitorInfo( template Session_Id_AVP p_sessionId, template Origin_Host_AVP p_originHost, template Origin_Realm_AVP p_originRealm, template Result_Code_AVP p_resultCode) modifies mw_CCA_basic := { event_Trigger := {mw_eventTrigger(USAGE_REPORT_E)}, usage_Monitoring_Information := {mw_usageMonitoringInfo_Key_GrantedServiceUnit} } } // end group Gxmodified_answer_templates_receive } //end group Gxmodified_templates Loading
DiameterGx/ttcn/DiameterGx_TestCases.ttcn +21 −0 Original line number Diff line number Diff line Loading @@ -572,6 +572,27 @@ module DiameterGx_TestCases }//end group TP_PCRFRole_EMS group TP_PCRFRole_UMC { //Usage monitoring control /* * @desc TC_PCRF_UMC_01 * @param p_cSeq_s Transaction Id */ testcase TC_PCRF_UMC_01() runs on ServerSyncComp system TestAdapter { //Variables var DiameterComponent v_diameterComponent_pcef; f_cf_1GxEUp(v_diameterComponent_pcef); //Start v_diameterComponent_pcef.start(f_TC_PCRF_UMC_01()); // synchronize PTC on 3 sychronization points f_serverSync1Client({c_prDone, c_tbDone, c_poDone}); f_cf_1GxEDown(v_diameterComponent_pcef); } // end TC_PCRF_UMC_01 }//end group TP_PCRFRole_UMC group TP_PCRFRole_IRS { //IMS Restoration Support Loading