fixeria submitted this change.
s1gw: generalize f_TC_e_rab_setup_failure() for N E-RABs
The existing TC only tested PFCP Session Establishment failure with a
single E-RAB. Generalize f_TC_e_rab_setup_failure() to use g_pars.erabs
throughout, so it works for any num_erabs: E-RAB 0 still triggers the
only PFCP Session Establishment Request (S1GW processes sequentially),
while all E-RABs in the request are expected to appear in the failure
response.
Add TC_e_rab_setup3_failure() which re-uses the same body with
num_erabs := 3, verifying that the S1GW lists all three E-RABs as
failed rather than just the first one. Also make f_tr_E_RABList()
non-private so it is accessible from S1GW_Tests.ttcn.
Change-Id: I8a5dc338d28013dc85e1ce4b3bdac92cb3b35304
Related: osmo-s1gw.git I7933fceb0edcdfdc95ace35416297b11c83f0bc9
---
M s1gw/S1GW_ConnHdlr.ttcn
M s1gw/S1GW_Tests.ttcn
M s1gw/expected-results.xml
3 files changed, 26 insertions(+), 20 deletions(-)
diff --git a/s1gw/S1GW_ConnHdlr.ttcn b/s1gw/S1GW_ConnHdlr.ttcn
index fd171d3..63e828b 100644
--- a/s1gw/S1GW_ConnHdlr.ttcn
+++ b/s1gw/S1GW_ConnHdlr.ttcn
@@ -886,8 +886,8 @@
return items;
}
-private function f_tr_E_RABList(in ERabList erabs,
- S1AP_IEs.Cause cause)
+function f_tr_E_RABList(in ERabList erabs,
+ S1AP_IEs.Cause cause)
return template (present) E_RABList {
var template (present) E_RABList items;
diff --git a/s1gw/S1GW_Tests.ttcn b/s1gw/S1GW_Tests.ttcn
index f86546c..61f2a61 100644
--- a/s1gw/S1GW_Tests.ttcn
+++ b/s1gw/S1GW_Tests.ttcn
@@ -493,11 +493,13 @@
f_TC_exec(refers(f_TC_e_rab_release_ind));
}
-/* Test E-RAB SETUP procedure being aborted by the S1GW due to
- * PFCP Session Establishment failure (cause=REQUEST_REJECTED). */
+/* Test E-RAB SETUP failure: all E-RABs in the request fail because the first
+ * PFCP Session Establishment is rejected. The S1GW processes E-RABs sequentially,
+ * so only E-RAB 0 triggers a PFCP Session Establishment Request; the remaining
+ * E-RABs (if any) are abandoned. The S1GW must list all E-RABs as failed. */
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];
+ var ERab erab0 := g_pars.erabs[0];
f_ConnHdlr_s1ap_register(g_pars.genb_id);
f_ConnHdlr_s1ap_connect(mp_enb_bind_ip, mp_s1gw_enb_ip);
@@ -505,46 +507,48 @@
/* see comments in f_ConnHdlr_erab_setup_req() */
f_PFCPEM_subscribe_seid('0000000000000000'O);
- f_PFCPEM_subscribe_seid(erab.pfcp_loc_seid);
+ f_PFCPEM_subscribe_seid(erab0.pfcp_loc_seid);
log("eNB <- [S1GW <- MME]: E-RAB SETUP REQUEST");
- f_ConnHdlr_tx_erab_setup_req({erab}, g_pars.mme_ue_id, g_pars.idx);
- 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;
+ f_ConnHdlr_tx_erab_setup_req(g_pars.erabs, g_pars.mme_ue_id, g_pars.idx);
+ log("UPF <- S1GW: PFCP Session Establishment Request (E-RAB 0)");
+ var PDU_PFCP req := f_ConnHdlr_rx_session_establish_req(erab0);
+ erab0.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),
+ seid := erab0.pfcp_rem_seid,
+ f_seid := ts_PFCP_F_SEID_ipv4(addr, erab0.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);
+ f_PFCPEM_unsubscribe_seid(erab0.pfcp_loc_seid);
- /* expect E-RAB SETUP RESPONSE replied by the S1GW */
+ log("eNB -- [S1GW -> MME]: E-RAB SETUP RESPONSE (all E-RABs failed)");
+ var template (present) E_RABList failed_items;
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});
+ failed_items := f_tr_E_RABList(g_pars.erabs,
+ cause := {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));
+ rab_failed_items := failed_items);
f_ConnHdlr_rx_s1ap_from_enb(s1ap_pdu, setup_rsp);
f_ConnHdlr_s1ap_disconnect();
f_ConnHdlr_s1ap_unregister(g_pars.genb_id);
}
testcase TC_e_rab_setup_failure() runs on test_CT {
- f_TC_exec(refers(f_TC_e_rab_setup_failure));
+ f_TC_exec(refers(f_TC_e_rab_setup_failure), num_erabs := 1);
+}
+testcase TC_e_rab_setup3_failure() runs on test_CT {
+ f_TC_exec(refers(f_TC_e_rab_setup_failure), num_erabs := 3);
}
/* Test E-RAB MODIFY Req/Rsp procedure */
@@ -1374,6 +1378,7 @@
execute( TC_e_rab_setup3_multi() );
execute( TC_e_rab_release_ind() );
execute( TC_e_rab_setup_failure() );
+ execute( TC_e_rab_setup3_failure() );
execute( TC_e_rab_modify_req_rsp() );
execute( TC_e_rab_modify_req_rsp_multi() );
execute( TC_e_rab_modify_ind_cnf() );
diff --git a/s1gw/expected-results.xml b/s1gw/expected-results.xml
index b2b6cdb..5e1e9cb 100644
--- a/s1gw/expected-results.xml
+++ b/s1gw/expected-results.xml
@@ -10,6 +10,7 @@
<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_e_rab_setup3_failure' time='MASKED'/>
<testcase classname='S1GW_Tests' name='TC_e_rab_modify_req_rsp' time='MASKED'/>
<testcase classname='S1GW_Tests' name='TC_e_rab_modify_req_rsp_multi' time='MASKED'/>
<testcase classname='S1GW_Tests' name='TC_e_rab_modify_ind_cnf' time='MASKED'/>
To view, visit change 42496. To unsubscribe, or for help writing mail filters, visit settings.