fixeria has submitted this change. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/38310?usp=email )
Change subject: s1gw: add TC_e_rab_setup_failure ......................................................................
s1gw: add TC_e_rab_setup_failure
Change-Id: I97102292678e732265dcae04d60f7a708a5246dc Related: osmo-s1gw.git I242e84fb09b00f4794b6e1aa770f348a0e60aea4 Related: SYS#6772 --- M s1gw/S1GW_Tests.ttcn M s1gw/expected-results.xml 2 files changed, 63 insertions(+), 1 deletion(-)
Approvals: fixeria: Looks good to me, approved Jenkins Builder: Verified pespin: Looks good to me, but someone else must approve
diff --git a/s1gw/S1GW_Tests.ttcn b/s1gw/S1GW_Tests.ttcn index baede7d..729bc77 100644 --- a/s1gw/S1GW_Tests.ttcn +++ b/s1gw/S1GW_Tests.ttcn @@ -367,6 +367,66 @@ vc_conn.done; }
+/* Test E-RAB SETUP procedure being aborted by the S1GW due to + * PFCP Session Establishment failure (cause=REQUEST_REJECTED). */ +function f_TC_e_rab_setup_failure(charstring id) runs on ConnHdlr { + var OCT4 addr := f_inet_addr(g_pars.pfcp_loc_addr); + var ERab erab := g_pars.erabs[0]; + + f_ConnHdlr_s1ap_register(g_pars.genb_id); + f_ConnHdlr_s1ap_connect(mp_enb_bind_ip, mp_s1gw_enb_ip); + f_ConnHdlr_s1ap_setup(g_pars.genb_id); + + /* see comments in f_ConnHdlr_erab_setup_req() */ + f_PFCPEM_subscribe_seid('0000000000000000'O); + f_PFCPEM_subscribe_seid(erab.pfcp_loc_seid); + + log("eNB <- [S1GW <- MME]: E-RAB SETUP REQUEST"); + f_ConnHdlr_tx_erab_setup_req({erab}); + log("UPF <- S1GW: PFCP Session Establishment Request"); + var PDU_PFCP req := f_ConnHdlr_rx_session_establish_req(erab); + /* store peer's SEID, so that it can be used in outgoing PDUs later */ + erab.pfcp_rem_seid := req.message_body.pfcp_session_establishment_request.CP_F_SEID.seid; + + log("UPF -> S1GW: PFCP Session Establishment Response (failure)"); + var template (value) PDU_PFCP resp; + resp := ts_PFCP_Session_Est_Resp(seq_nr := req.sequence_number, + node_id := ts_PFCP_Node_ID_ipv4(addr), + seid := erab.pfcp_rem_seid, + f_seid := ts_PFCP_F_SEID_ipv4(addr, erab.pfcp_loc_seid), + created_pdr := {}, + cause := ts_PFCP_Cause(REQUEST_REJECTED)); + PFCP.send(resp); + + /* see comments in f_ConnHdlr_erab_setup_req() */ + f_PFCPEM_unsubscribe_seid('0000000000000000'O); + f_PFCPEM_unsubscribe_seid(erab.pfcp_loc_seid); + + /* expect E-RAB SETUP RESPONSE replied by the S1GW */ + var template (present) S1AP_PDU setup_rsp; + var template (present) E_RABItem item; + var S1AP_PDU s1ap_pdu; + + log("eNB -- [S1GW -> MME]: E-RAB SETUP RESPONSE (failure)"); + item := tr_E_RABItem(erab.erab_id, {transport := transport_resource_unavailable}); + setup_rsp := tr_S1AP_RABSetupRsp(g_pars.mme_ue_id, g_pars.idx, + rab_setup_items := omit, + rab_failed_items := tr_E_RABList(item)); + f_ConnHdlr_rx_s1ap_from_enb(s1ap_pdu); + + f_ConnHdlr_s1ap_disconnect(); + f_ConnHdlr_s1ap_unregister(g_pars.genb_id); +} +testcase TC_e_rab_setup_failure() runs on test_CT { + var ConnHdlrPars pars := valueof(t_ConnHdlrPars); + var ConnHdlr vc_conn; + + f_init(); + + vc_conn := f_ConnHdlr_spawn(refers(f_TC_e_rab_setup_failure), pars); + vc_conn.done; +} + /* Test INITIAL CONTEXT SETUP procedure (successful case) */ function f_TC_initial_ctx_setup(charstring id) runs on ConnHdlr { f_ConnHdlr_s1ap_register(g_pars.genb_id); @@ -484,6 +544,7 @@ execute( TC_e_rab_setup_multi() ); execute( TC_e_rab_setup3_multi() ); execute( TC_e_rab_release_ind() ); + execute( TC_e_rab_setup_failure() ); execute( TC_initial_ctx_setup() ); execute( TC_initial_ctx_setup3() ); execute( TC_initial_ctx_setup_multi() ); diff --git a/s1gw/expected-results.xml b/s1gw/expected-results.xml index 3ddbb23..c6995c9 100644 --- a/s1gw/expected-results.xml +++ b/s1gw/expected-results.xml @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<testsuite name='S1GW_Tests' tests='15' failures='0' errors='0' skipped='0' inconc='0' time='MASKED'> +<testsuite name='S1GW_Tests' tests='16' failures='0' errors='0' skipped='0' inconc='0' time='MASKED'> <testcase classname='S1GW_Tests' name='TC_setup' time='MASKED'/> <testcase classname='S1GW_Tests' name='TC_setup_multi' time='MASKED'/> <testcase classname='S1GW_Tests' name='TC_conn_term_by_mme' time='MASKED'/> @@ -9,6 +9,7 @@ <testcase classname='S1GW_Tests' name='TC_e_rab_setup_multi' time='MASKED'/> <testcase classname='S1GW_Tests' name='TC_e_rab_setup3_multi' time='MASKED'/> <testcase classname='S1GW_Tests' name='TC_e_rab_release_ind' time='MASKED'/> + <testcase classname='S1GW_Tests' name='TC_e_rab_setup_failure' time='MASKED'/> <testcase classname='S1GW_Tests' name='TC_initial_ctx_setup' time='MASKED'/> <testcase classname='S1GW_Tests' name='TC_initial_ctx_setup3' time='MASKED'/> <testcase classname='S1GW_Tests' name='TC_initial_ctx_setup_multi' time='MASKED'/>