jolly has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/41189?usp=email )
Change subject: MME-Tests: Add tests for emergency bearer setup ......................................................................
MME-Tests: Add tests for emergency bearer setup
When the UE makes an emergency call, it requests emergency bearer to be established. The configured emergency bearer will be established.
The test checks if the emergency bearer is established and the APN name matches the configured APN name.
Related: SYS#7635 Change-Id: I2a81defc96bcebdf1a4ec765278ca502800cbe46 --- M mme/ConnHdlr.ttcn M mme/MME_Tests_emergency.ttcn M mme/expected-results.xml 3 files changed, 82 insertions(+), 3 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/89/41189/1
diff --git a/mme/ConnHdlr.ttcn b/mme/ConnHdlr.ttcn index 4af7095..6aae8dc 100644 --- a/mme/ConnHdlr.ttcn +++ b/mme/ConnHdlr.ttcn @@ -381,6 +381,37 @@ } }
+private altstep as_s1ap_handle_ERABSetupRequest_Attach_Accept() runs on ConnHdlr { + var S1AP_PDU rx_msg; + var PDU_NAS_EPS rx_nas; + [] S1AP.receive(tr_S1AP_RABSetupReq(g_pars.ue_pars.mme_ue_id, + g_pars.ue_pars.enb_ue_id)) -> value rx_msg { + var template (value) E_RABSetupItemCtxtSURes rab_setup_it; + var template (value) E_RABSetupListCtxtSURes rab_setup_items; + var template (value) PDU_NAS_EPS nas; + var PDU_NAS_EPS_ActDefEPSBearerContextRequest act_bearer; + var charstring apn := char(0, 0, 0, 4) & "test" & char(0, 0, 0, 3) & "sos"; + + S1AP.receive(tr_NAS_ActDefEpsBearCtxReq()) -> value rx_nas; + act_bearer := rx_nas.ePS_messages.ePS_SessionManagement.pDU_NAS_EPS_ActDefEPSBearerContextRequest; + if (act_bearer.accessPointName.accessPointNameValue != char2oct(apn)) { + Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, log2str("Unexpected APN: ", + oct2char(act_bearer.accessPointName.accessPointNameValue))); + } + + rab_setup_it := ts_S1AP_RABSetupItemCtxtSURes(rab_id := 6, + tla := oct2bit(f_inet_addr(g_pars.enb_pars[g_pars.mme_idx].gtp1u_local_ip)), + gtp_teid := '00000003'O); + rab_setup_items := ts_S1AP_RABSetupListCtxtSURes(rab_setup_it); + S1AP.send(ts_S1AP_InitialCtxSetupResp(g_pars.ue_pars.mme_ue_id, + g_pars.ue_pars.enb_ue_id, + rab_setup_items)); + } + [] S1AP.receive(PDU_NAS_EPS:?) -> value rx_nas { + Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, log2str("Rx Unexpected NAS PDU msg: ", rx_nas)); + } +} + altstep as_s1ap_handle_IntialCtxSetupReq_TAU_Accept() runs on ConnHdlr { var S1AP_PDU rx_msg; var PDU_NAS_EPS rx_nas; @@ -548,7 +579,8 @@ ts_AVP_3GPP_ApnConfigProfile({ ts_AVP_3GPP_ContextId(1), ts_AVP_3GPP_AllApnConfigsIncl, - ts_AVP_3GPP_ApnConfig(1, IPv4, "*") + ts_AVP_3GPP_ApnConfig(1, IPv4, "*"), + ts_AVP_3GPP_ApnConfig(1, IPv4, "test.sos") }) };
@@ -896,6 +928,37 @@ } }
+function f_emergency_bearer() runs on ConnHdlr { + var template (value) EPS_MobileIdentityV mi := ts_NAS_MobileId_IMSI(g_pars.ue_pars.imsi); + var template (value) PDU_NAS_EPS nas_esm; + timer T := 5.0; + + nas_esm := ts_NAS_PdnConnReq(bearer_id := '0000'B, proc_tid := int2bit(1,8), + pdn_type := NAS_PDN_T_IPv4, req_type := '100'B); + + var template (value) S1AP_PDU tx; + tx := ts_S1AP_UlNasTransport(mme_id := g_pars.ue_pars.mme_ue_id, + enb_id := g_pars.ue_pars.enb_ue_id, + p_nasPdu := enc_PDU_NAS_EPS(valueof(nas_esm)), + p_eUTRAN_CGI := ts_enb_S1AP_CGI(g_pars.enb_pars[g_pars.mme_idx]), + p_tAI := ts_enb_S1AP_TAI(g_pars.enb_pars[g_pars.mme_idx])); + S1AP.send(tx); + + /* We now expect the MME to send a Create Session Request to the SGW-C */ + f_gtp2_register_udmsg('20'O); + T.start; + alt { + [] as_GTP2C_CreateSession_success(); + [] T.timeout { Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, log2str("No message from MME")); } + } + + T.start; + alt { + [] as_s1ap_handle_ERABSetupRequest_Attach_Accept(); + [] T.timeout { Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, log2str("No message from MME")); } + } +} + function f_tau(BIT3 typeOfUpdate := c_EPS_UPD_TYPE_TA_UPD, boolean exp_sgsap_lu := false) runs on ConnHdlr { var template (value) EPS_MobileIdentityV mi := ts_NAS_MobileId_IMSI(g_pars.ue_pars.imsi); var template (value) S1AP_PDU tx; diff --git a/mme/MME_Tests_emergency.ttcn b/mme/MME_Tests_emergency.ttcn index a0cae54..da46a1b 100644 --- a/mme/MME_Tests_emergency.ttcn +++ b/mme/MME_Tests_emergency.ttcn @@ -25,7 +25,7 @@ f_attach(); } testcase TC_emergency_supported() runs on MTC_CT { - f_init(4, init_diameter := true, init_gtpv2c_s11 := true); + f_init(2001, init_diameter := true, init_gtpv2c_s11 := true); f_s1ap_setup(0);
var ConnHdlrPars pars := f_init_pars(ue_idx := 0); @@ -40,7 +40,7 @@ f_attach(); } testcase TC_emergency_number_included() runs on MTC_CT { - f_init(4, init_diameter := true, init_gtpv2c_s11 := true); + f_init(2002, init_diameter := true, init_gtpv2c_s11 := true); f_s1ap_setup(0);
var ConnHdlrPars pars := f_init_pars(ue_idx := 0); @@ -57,9 +57,24 @@ vc_conn.done; }
+private function f_TC_emergency_bearer() runs on ConnHdlr { + f_attach(); + f_emergency_bearer(); +} +testcase TC_emergency_bearer() runs on MTC_CT { + f_init(2003, init_diameter := true, init_gtpv2c_s11 := true); + f_s1ap_setup(0); + + var ConnHdlrPars pars := f_init_pars(ue_idx := 0); + var ConnHdlr vc_conn; + vc_conn := f_start_handler_with_pars(refers(f_TC_emergency_bearer), pars); + vc_conn.done; +} + control { execute( TC_emergency_supported() ); execute( TC_emergency_number_included() ); + execute( TC_emergency_bearer() ); }
} diff --git a/mme/expected-results.xml b/mme/expected-results.xml index c420315..ae2dd4e 100644 --- a/mme/expected-results.xml +++ b/mme/expected-results.xml @@ -20,4 +20,5 @@ <testcase classname='MME_Tests_SGsAP' name='TC_sgsap_alert_rej' time='MASKED'/> <testcase classname='MME_Tests_emergency' name='TC_emergency_supported' time='MASKED'/> <testcase classname='MME_Tests_emergency' name='TC_emergency_number_included' time='MASKED'/> + <testcase classname='MME_Tests_emergency' name='TC_emergency_bearer' time='MASKED'/> </testsuite>