fixeria has submitted this change. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/37245?usp=email )
Change subject: s1gw: add TC_e_rab_setup ......................................................................
s1gw: add TC_e_rab_setup
Change-Id: I94eb8cac4b5659c0f6f1bb248a80692b8cf84b6f Related: SYS#6772 --- M s1gw/S1GW_Tests.ttcn M s1gw/expected-results.xml 2 files changed, 148 insertions(+), 5 deletions(-)
Approvals: Jenkins Builder: Verified osmith: Looks good to me, approved pespin: Looks good to me, but someone else must approve
diff --git a/s1gw/S1GW_Tests.ttcn b/s1gw/S1GW_Tests.ttcn index c7c55ef..0fb3075 100644 --- a/s1gw/S1GW_Tests.ttcn +++ b/s1gw/S1GW_Tests.ttcn @@ -155,6 +155,63 @@ S1AP_ENB.receive(PortEvent:{connClosed := ?}); }
+function f_ConnHdlr_tx_s1ap_from_enb(template (value) S1AP_PDU pdu) +runs on ConnHdlr { + S1AP_ENB.send(t_S1AP_Send(g_s1ap_conn_id, pdu)); +} + +function f_ConnHdlr_tx_s1ap_from_mme(template (value) S1AP_PDU pdu) +runs on ConnHdlr { + S1AP_CONN.send(pdu); +} + +function f_ConnHdlr_rx_s1ap_from_enb(out S1AP_PDU pdu, + template (present) S1AP_PDU tr_pdu := ?, + float Tval := 0.5) +runs on ConnHdlr { + timer T := Tval; + + T.start; + alt { + [] S1AP_CONN.receive(tr_pdu) -> value pdu { + setverdict(pass); + T.stop; + } + [] S1AP_CONN.receive(S1AP_PDU:?) -> value pdu { + setverdict(fail, "Rx unexpected S1AP PDU from eNB: ", pdu); + T.stop; + } + [] T.timeout { + setverdict(fail, "Timeout waiting for S1AP PDU from eNB: ", tr_pdu); + } + } +} + +function f_ConnHdlr_rx_s1ap_from_mme(out S1AP_PDU pdu, + template (present) S1AP_PDU tr_pdu := ?, + float Tval := 0.5) +runs on ConnHdlr { + var S1AP_RecvFrom recv; + timer T := Tval; + + T.start; + alt { + [] S1AP_ENB.receive(t_S1AP_RecvFrom(tr_pdu)) -> value recv { + pdu := recv.msg; + setverdict(pass); + T.stop; + } + [] S1AP_ENB.receive(t_S1AP_RecvFrom(?)) -> value recv { + pdu := recv.msg; + setverdict(fail, "Rx unexpected S1AP PDU from MME: ", pdu); + T.stop; + } + [] T.timeout { + setverdict(fail, "Timeout waiting for S1AP PDU from MME: ", tr_pdu); + } + } +} + function f_ConnHdlr_setup(Global_ENB_ID genb_id) runs on ConnHdlr { var S1AP_PDU pdu; timer T; @@ -167,10 +224,9 @@ } };
- S1AP_ENB.send(t_S1AP_Send(g_s1ap_conn_id, - ts_S1AP_SetupReq(genb_id, - supported_tas_dummy, - v32))); + f_ConnHdlr_tx_s1ap_from_enb(ts_S1AP_SetupReq(genb_id, + supported_tas_dummy, + v32)); T.start(1.0); alt { [] S1AP_CONN.receive(S1APSRV_Event:S1APSRV_EVENT_CONN_UP) { repeat; } @@ -274,11 +330,87 @@ vc_conn.done; }
+function f_TC_e_rab_setup(ConnHdlrPars pars) runs on ConnHdlr { + const integer mme_id := 7; + const integer enb_id := 9; + const integer erab_id := 6; + var S1AP_PDU pdu; + + f_ConnHdlr_register(pars.genb_id); + f_ConnHdlr_connect(); + f_ConnHdlr_setup(pars.genb_id); + + log("eNB -> [S1GW] -> MME: E-RAB SETUP REQUEST"); + var template (value) E_RABToBeSetupListBearerSUReq items_req; + var E_RABToBeSetupItemBearerSUReq item_req := { + e_RAB_ID := erab_id, + e_RABlevelQoSParameters := { + qCI := 5, + allocationRetentionPriority := { + priorityLevel := 1, + pre_emptionCapability := shall_not_trigger_pre_emption, + pre_emptionVulnerability := not_pre_emptable, + iE_Extensions := omit + }, + gbrQosInformation := omit, + iE_Extensions := omit + }, + transportLayerAddress := -, + gTP_TEID := f_rnd_octstring(4), + nAS_PDU := ''O, + iE_Extensions := omit + }; + + /* eNB -> S1GW */ + item_req.transportLayerAddress := oct2bit(f_inet_addr("1.2.3.4")); + items_req := ts_S1AP_RABToBeSetupListBearerSUReq(item_req); + f_ConnHdlr_tx_s1ap_from_enb(ts_S1AP_RABSetupReq(mme_id, enb_id, items_req)); + + /* S1GW -> MME */ + item_req.transportLayerAddress := oct2bit(f_inet_addr(mp_s1gw_mme_ip)); + items_req := ts_S1AP_RABToBeSetupListBearerSUReq(item_req); + f_ConnHdlr_rx_s1ap_from_enb(pdu, tr_S1AP_RABSetupReq(mme_id, enb_id, items_req)); + + + log("eNB <- [S1GW] <- MME: E-RAB SETUP RESPONSE"); + var template (value) E_RABSetupListBearerSURes items_res; + var E_RABSetupItemBearerSURes item_res := { + e_RAB_ID := erab_id, + transportLayerAddress := -, + gTP_TEID := f_rnd_octstring(4), + iE_Extensions := omit + }; + + /* MME -> S1GW */ + item_res.transportLayerAddress := oct2bit(f_inet_addr("4.3.2.1")); + items_res := ts_S1AP_RABSetupListBearerSURes(item_res); + f_ConnHdlr_tx_s1ap_from_mme(ts_S1AP_RABSetupRsp(mme_id, enb_id, items_res)); + + /* S1GW -> eNB */ + item_res.transportLayerAddress := oct2bit(f_inet_addr(mp_s1gw_enb_ip)); + items_res := ts_S1AP_RABSetupListBearerSURes(item_res); + f_ConnHdlr_rx_s1ap_from_mme(pdu, tr_S1AP_RABSetupRsp(mme_id, enb_id, items_res)); + + f_ConnHdlr_disconnect(); + f_ConnHdlr_unregister(pars.genb_id); +} +testcase TC_e_rab_setup() runs on test_CT { + var ConnHdlrPars pars := valueof(t_ConnHdlrPars); + var ConnHdlr vc_conn; + + f_init(); + f_init_s1ap_srv(); + + vc_conn := f_ConnHdlr_spawn(refers(f_TC_e_rab_setup), pars); + vc_conn.done; +} + control { execute( TC_setup() ); execute( TC_setup_multi() ); execute( TC_conn_term_by_mme() ); execute( TC_conn_term_mme_unavail() ); + execute( TC_e_rab_setup() ); }
} diff --git a/s1gw/expected-results.xml b/s1gw/expected-results.xml index b10fd4a..ed75300 100644 --- a/s1gw/expected-results.xml +++ b/s1gw/expected-results.xml @@ -1,7 +1,8 @@ <?xml version="1.0"?> -<testsuite name='S1GW_Tests' tests='4' failures='0' errors='0' skipped='0' inconc='0' time='MASKED'> +<testsuite name='S1GW_Tests' tests='5' 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'/> <testcase classname='S1GW_Tests' name='TC_conn_term_mme_unavail' time='MASKED'/> + <testcase classname='S1GW_Tests' name='TC_e_rab_setup' time='MASKED'/> </testsuite>