From e60fc2e52465233a183f4655f1d5ebf827f40c11 Mon Sep 17 00:00:00 2001 From: pintar Date: Tue, 9 May 2017 08:42:18 +0000 Subject: [PATCH] MME_HAS_01 test and related templates added --- ttcn3/LibS1AP/LibS1AP_Steps.ttcn | 30 ++++++ ttcn3/LibS1AP/LibS1AP_Templates.ttcn | 132 ++++++++++++++++++++++++++- ttcn3/S1AP_TCFunctions.ttcn | 48 ++++++++++ 3 files changed, 208 insertions(+), 2 deletions(-) diff --git a/ttcn3/LibS1AP/LibS1AP_Steps.ttcn b/ttcn3/LibS1AP/LibS1AP_Steps.ttcn index c3b55d7..0df496d 100644 --- a/ttcn3/LibS1AP/LibS1AP_Steps.ttcn +++ b/ttcn3/LibS1AP/LibS1AP_Steps.ttcn @@ -191,6 +191,15 @@ module LibS1AP_Steps { f_recv_S1AP_initiatingMessage(mw_HandoverRequired(p_value)) } // End of function f_recv_HandoverRequired + /** + * @desc Receive S1AP Message Handover Command + * @param p_value Receive template for Handover Command IEs + */ + function f_recv_HandoverCommand(in template (present) RecordOf_ProtocolIE p_value :=? + ) runs on S1APComponent { + f_recv_S1AP_successfulOutcome(mw_HandoverCommand(p_value)) + } // End of function f_recv_HandoverRequired + /** * @desc Receive S1AP Message Handover Cancel * @param p_value Receive template for Handover Cancel IEs @@ -1009,6 +1018,15 @@ module LibS1AP_Steps { )) } // End of function f_send_InitialContext_SetupRequest + /** + * @desc Send S1AP Message f_send_HandoverRequired + * @param p_value Send template with IE for HandoverRequest + */ + function f_send_HandoverRequired(in template (value) RecordOf_ProtocolIE p_value + ) runs on S1APComponent { + f_send_S1AP_initiatingMessage(m_HandoverRequired(p_value)) + } // End of function f_send_HandoverRequest + /** * @desc Send S1AP Message f_send_HandoverRequest * @param p_value Send template with IE for HandoverRequest @@ -1541,6 +1559,18 @@ module LibS1AP_Steps { group mmeRole { + /** + * @desc Trigger a Handover preparation procedure + * @return true on success, false otherwise + */ + external function fx_MME_Handover_preparation_procedure() return boolean; + + /** + * @desc Trigger a Handover notification procedure + * @return true on success, false otherwise + */ + external function fx_MME_Handover_notification_procedure() return boolean; + /** * @desc Trigger a PAGING event * @return true on success, false otherwise diff --git a/ttcn3/LibS1AP/LibS1AP_Templates.ttcn b/ttcn3/LibS1AP/LibS1AP_Templates.ttcn index 4abce64..d066d0a 100644 --- a/ttcn3/LibS1AP/LibS1AP_Templates.ttcn +++ b/ttcn3/LibS1AP/LibS1AP_Templates.ttcn @@ -43,7 +43,7 @@ module LibS1AP_Templates { criticality := reject, value_ := p_value } - } // End of template m_initiatingMessage + } // End of template m_HandoverPreparation } // End of group g_S1AP_PDU @@ -57,13 +57,40 @@ module LibS1AP_Templates { group HandoverPreparation { + /** + * @desc Receive template for InitiatingMessage message with Handover Required payload + * @param p_value The procedure code value + */ + template (value) InitiatingMessage m_HandoverRequired( + template (value) RecordOf_ProtocolIE p_value) := { + procedureCode := id_HandoverPreparation, + criticality := reject, + value_ := {RecordOf_ProtocolIE := p_value} + } // End of template m_HandoverRequired + + template (value) RecordOf_ProtocolIE m_HandoverRequiredIEs( + in template (value) MME_UE_S1AP_ID p_MME_value, + in template (value) ENB_UE_S1AP_ID p_eNB_value, + in template (value) HandoverType p_handoverType, + in template (value) Cause p_cause, + in template (value) TargetID p_targetId_value, + in template (value) Source_ToTarget_TransparentContainer p_Source_ToTarget_TransparentContainer_value + ) := { + m_MME_UE_S1AP_ID(p_MME_value), + m_eNB_UE_S1AP_ID(p_eNB_value), + m_handoverType_IE(p_handoverType), + m_cause_IE(p_cause), + m_targetID_IE(p_targetId_value), + m_source_ToTarget_TransparentContainer_IE(p_Source_ToTarget_TransparentContainer_value) + } // End of template mw_HandoverCommandIEs + /** * @desc Receive template for SuccessfulOutcome message with Handover Command payload * @param p_value The procedure code value */ template (value) SuccessfulOutcome m_HandoverCommand( template (value) RecordOf_ProtocolIE p_value) := { - procedureCode := id_HandoverCancel, + procedureCode := id_HandoverPreparation, criticality := reject, value_ := {RecordOf_ProtocolIE := p_value} } // End of template m_HandoverCommand @@ -914,6 +941,29 @@ module LibS1AP_Templates { }// End of group HandoverPreparation group HandoverPreparation{ + + /** + * @desc Receive template for SuccessfulOutcome message with Handover Command payload + * @param p_value The procedure code value + */ + template (present) SuccessfulOutcome mw_HandoverCommand( + template (present) RecordOf_ProtocolIE p_value) := { + procedureCode := id_HandoverPreparation, + criticality := reject, + value_ := {RecordOf_ProtocolIE := p_value} + } // End of template mw_HandoverCommand + + template (present) RecordOf_ProtocolIE mw_HandoverCommandIEs( + template (present) MME_UE_S1AP_ID p_MME_value := ?, + template (present) ENB_UE_S1AP_ID p_eNB_value := ?, + template (present) HandoverType p_HandoverType_value := ?, + template (present) Target_ToSource_TransparentContainer p_Target_ToSource_TransparentContainer_value := ? + ) := { + mw_MME_UE_S1AP_ID(p_MME_value), + mw_eNB_UE_S1AP_ID(p_eNB_value), + mw_handoverType_IE(p_HandoverType_value), + mw_target_ToSource_TransparentContainer_IE(p_Target_ToSource_TransparentContainer_value) + } // End of template mw_HandoverRequiredIEs }// End of group HandoverPreparation @@ -3301,6 +3351,84 @@ module LibS1AP_Templates { criticality := p_criticality, value_ := {Cause := valueof(p_cause)} } // End of template m_cause_IE + + /** + * @desc Send template for TargetID protocol IE + * @param p_cause Expected Cause value + * @see ETSI TS 136 413 V13.4.0 Clause 9.2.1.8 TargetID + */ + template (value) ProtocolIE m_targetID_IE( + in template (value) TargetID p_target, + in template (value) ProtocolIE.criticality p_criticality := reject + ) := { + id := S1AP_Constants.id_TargetID, + criticality := p_criticality, + value_ := {TargetID := valueof(p_target)} + } // End of template m_targetID_IE + + template (value) TargetID m_TargeteNB_ID ( + in template (value) Global_ENB_ID p_global_ENB_ID, + in template (value) TAI p_selected_TAI + ) := { + targeteNB_ID :={ + global_ENB_ID := p_global_ENB_ID, + selected_TAI := p_selected_TAI, + iE_Extensions := omit + } + } + + template (value) Global_ENB_ID m_Global_ENB_ID( + in template (value) PLMNidentity p_PLMNidentity, + in template (value) ENB_ID p_ENB_ID + ) := { + pLMNidentity := p_PLMNidentity, + eNB_ID := p_ENB_ID, + iE_Extensions := omit + } + + template ENB_ID m_ENB_ID_macro:={ + macroENB_ID :='00000000000000000001'B + } + + template ENB_ID m_ENB_ID_home:={ + homeENB_ID :='0000000000000000000000000001'B + } + + template (value) TAI m_TAI ( + in template (value) PLMNidentity p_PLMNidentity, + in template (value) TAC p_TAC + ) :={ + pLMNidentity := p_PLMNidentity, + tAC := p_TAC, + iE_Extensions := omit + } + + template (value) TargetID m_TargetRNC_ID ( + in template (value) LAI p_lAI, + in template (value) RNC_ID p_rNC_ID + ) := { + targetRNC_ID :={ + lAI := p_lAI, + rAC:= omit, + rNC_ID := p_rNC_ID, + extendedRNC_ID := omit, + iE_Extensions := omit + } + } + + template (value) TargetID m_Target_CGI ( + in template (value) PLMNidentity p_pLMNidentity, + in template (value) LAC p_lAC, + in template (value) CI p_cI + ) := { + cGI :={ + pLMNidentity := p_pLMNidentity, + lAC := p_lAC, + cI := p_cI, + rAC := omit, + iE_Extensions := omit + } + } /** * @desc Send template for UE aggregate maxmum bitrate IE diff --git a/ttcn3/S1AP_TCFunctions.ttcn b/ttcn3/S1AP_TCFunctions.ttcn index 000b4e1..6918c57 100644 --- a/ttcn3/S1AP_TCFunctions.ttcn +++ b/ttcn3/S1AP_TCFunctions.ttcn @@ -4591,6 +4591,54 @@ module S1AP_TCFunctions { * @see ETSI DTS/INT-00135-2 Clause 5.2.2.2.4 Handover signalling group */ group Handover_signalling_group { + /** + * @desc Testcase function for TC_S1AP_MME_HAS_01 + */ + function f_TC_S1AP_MME_HAS_01() runs on S1APComponent { + // Local variables + const Source_ToTarget_TransparentContainer c_source_ToTarget_TransparentContainer := '12121212'O; + const Target_ToSource_TransparentContainer c_target_ToSource_TransparentContainer := '12121212'O; + + // Preamble + f_S1AP_mme_init(); + // Preamble action: E-RAB Setup is exchanged. + //f_rABSetup...; + + f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); + log("*** " & __SCOPE__ & ": INFO: Preamble done. ***"); + + // Test body + // sends a HANDOVER_REQUIRED + f_send_HandoverRequired( + m_HandoverRequiredIEs( + vc_MME_UE_ID, + vc_eNB_UE_ID, + intralte, + m_cause_ran(unspecified), + m_TargeteNB_ID(m_Global_ENB_ID('000001'O, + m_ENB_ID_macro), + m_TAI('000001'O, + '0001'O)), + c_source_ToTarget_TransparentContainer + )); + + f_recv_HandoverCommand( + mw_HandoverCommandIEs( + vc_MME_UE_ID, + vc_eNB_UE_ID, + intralte,//handover_Type + c_target_ToSource_TransparentContainer//TargetToSourceTransparentContainer + )); + + f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); + + // Postamble + //f_rABSetupRelease...; + f_postamble_S1AP_eNB(); + f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); + log("*** " & __SCOPE__ & ": INFO: Postamble done. ***"); + + } // End of function f_TC_S1AP_MME_HAS_01 } // End of group Handover_signalling_group