fixeria has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/39462?usp=email )
Change subject: s1gw: add TCs for UE CONTEXT RELEASE procedures ......................................................................
s1gw: add TCs for UE CONTEXT RELEASE procedures
Change-Id: I065692f311e9d03630ab3ca2f6a03465418f0e71 Related: SYS#7310 --- M s1gw/S1GW_ConnHdlr.ttcn M s1gw/S1GW_Tests.ttcn M s1gw/expected-results.xml 3 files changed, 94 insertions(+), 1 deletion(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/62/39462/1
diff --git a/s1gw/S1GW_ConnHdlr.ttcn b/s1gw/S1GW_ConnHdlr.ttcn index b2b207d..e84c3ab 100644 --- a/s1gw/S1GW_ConnHdlr.ttcn +++ b/s1gw/S1GW_ConnHdlr.ttcn @@ -859,4 +859,47 @@ f_ConnHdlr_rx_initial_ctx_setup_rsp(erabs); }
+function f_ConnHdlr_ue_ctx_release_req(S1AP_IEs.Cause cause := c_REL_CMD_CAUSE) +runs on ConnHdlr { + var MME_UE_S1AP_ID mme_ue_id := g_pars.mme_ue_id; + var ENB_UE_S1AP_ID enb_ue_id := g_pars.idx; + var S1AP_PDU pdu; + + log("[eNB -> S1GW] -> MME: UE CONTEXT RELEASE REQUEST"); + f_ConnHdlr_tx_s1ap_from_enb(ts_S1AP_UeContextReleaseReq(mme_ue_id, enb_ue_id, cause)); + f_ConnHdlr_session_delete(g_pars.erabs); + log("eNB -> [S1GW -> MME]: UE CONTEXT RELEASE REQUEST"); + f_ConnHdlr_rx_s1ap_from_enb(pdu, tr_S1AP_UeContextReleaseReq(mme_ue_id, enb_ue_id, cause)); +} + +function f_ConnHdlr_ue_ctx_release_cmd(S1AP_IEs.Cause cause := c_REL_CMD_CAUSE) +runs on ConnHdlr { + var template (value) UE_S1AP_IDs ue_ids := { + uE_S1AP_ID_pair := { + mME_UE_S1AP_ID := g_pars.mme_ue_id, + eNB_UE_S1AP_ID := g_pars.idx, + iE_Extensions := omit + } + }; + var S1AP_PDU pdu; + + log("eNB <- [S1GW <- MME]: UE CONTEXT RELEASE COMMAND"); + f_ConnHdlr_tx_s1ap_from_mme(ts_S1AP_UeContextReleaseCmd(ue_ids, cause)); + f_ConnHdlr_session_delete(g_pars.erabs); + log("[eNB <- S1GW] <- MME: UE CONTEXT RELEASE COMMAND"); + f_ConnHdlr_rx_s1ap_from_mme(pdu, tr_S1AP_UeContextReleaseCmd(ue_ids, cause)); +} + +function f_ConnHdlr_ue_ctx_release_compl() +runs on ConnHdlr { + var MME_UE_S1AP_ID mme_ue_id := g_pars.mme_ue_id; + var ENB_UE_S1AP_ID enb_ue_id := g_pars.idx; + var S1AP_PDU pdu; + + log("[eNB -> S1GW] -> MME: UE CONTEXT RELEASE COMPLETE"); + f_ConnHdlr_tx_s1ap_from_enb(ts_S1AP_UeContextReleaseCompl(mme_ue_id, enb_ue_id)); + log("eNB -> [S1GW -> MME]: UE CONTEXT RELEASE COMPLETE"); + f_ConnHdlr_rx_s1ap_from_enb(pdu, tr_S1AP_UeContextReleaseCompl(mme_ue_id, enb_ue_id)); +} + } diff --git a/s1gw/S1GW_Tests.ttcn b/s1gw/S1GW_Tests.ttcn index 089bd0d..8bb2f09 100644 --- a/s1gw/S1GW_Tests.ttcn +++ b/s1gw/S1GW_Tests.ttcn @@ -468,6 +468,48 @@ f_TC_exec(refers(f_TC_initial_ctx_setup_failure)); }
+/* Test UE CONTEXT RELEASE REQUEST procedure (eNB initiated) */ +function f_TC_ue_ctx_release_req(charstring id) runs on ConnHdlr { + 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); + + f_ConnHdlr_initial_ctx_setup_req(g_pars.erabs); + f_ConnHdlr_initial_ctx_setup_rsp(g_pars.erabs); + f_ConnHdlr_ue_ctx_release_req(); + + f_ConnHdlr_s1ap_disconnect(); + f_ConnHdlr_s1ap_unregister(g_pars.genb_id); +} +testcase TC_ue_ctx_release_req() runs on test_CT { + f_TC_exec(refers(f_TC_ue_ctx_release_req), num_erabs := 1); +} +testcase TC_ue_ctx_release_req3() runs on test_CT { + f_TC_exec(refers(f_TC_ue_ctx_release_req), num_erabs := 3); +} + +/* Test UE CONTEXT RELEASE COMMAND/COMPLETE procedure (MME initiated) */ +function f_TC_ue_ctx_release_cmd_compl(charstring id) runs on ConnHdlr { + 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); + + f_ConnHdlr_initial_ctx_setup_req(g_pars.erabs); + f_ConnHdlr_initial_ctx_setup_rsp(g_pars.erabs); + + f_ConnHdlr_ue_ctx_release_cmd(); + f_ConnHdlr_ue_ctx_release_compl(); + + f_ConnHdlr_s1ap_disconnect(); + f_ConnHdlr_s1ap_unregister(g_pars.genb_id); +} +testcase TC_ue_ctx_release_cmd_compl() runs on test_CT { + f_TC_exec(refers(f_TC_ue_ctx_release_cmd_compl), num_erabs := 1); +} +testcase TC_ue_ctx_release_cmd_compl3() runs on test_CT { + f_TC_exec(refers(f_TC_ue_ctx_release_cmd_compl), num_erabs := 3); +} + function f_TC_pfcp_heartbeat(charstring id) runs on ConnHdlr { var integer rts := f_PFCPEM_get_recovery_timestamp(); var PDU_PFCP pfcp_pdu; @@ -501,6 +543,10 @@ execute( TC_initial_ctx_setup_multi() ); execute( TC_initial_ctx_setup3_multi() ); execute( TC_initial_ctx_setup_failure() ); + execute( TC_ue_ctx_release_req() ); + execute( TC_ue_ctx_release_req3() ); + execute( TC_ue_ctx_release_cmd_compl() ); + execute( TC_ue_ctx_release_cmd_compl3() ); execute( TC_pfcp_heartbeat() ); }
diff --git a/s1gw/expected-results.xml b/s1gw/expected-results.xml index c6995c9..c5cb28f 100644 --- a/s1gw/expected-results.xml +++ b/s1gw/expected-results.xml @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<testsuite name='S1GW_Tests' tests='16' failures='0' errors='0' skipped='0' inconc='0' time='MASKED'> +<testsuite name='S1GW_Tests' tests='20' 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'/> @@ -15,5 +15,9 @@ <testcase classname='S1GW_Tests' name='TC_initial_ctx_setup_multi' time='MASKED'/> <testcase classname='S1GW_Tests' name='TC_initial_ctx_setup3_multi' time='MASKED'/> <testcase classname='S1GW_Tests' name='TC_initial_ctx_setup_failure' time='MASKED'/> + <testcase classname='S1GW_Tests' name='TC_ue_ctx_release_req' time='MASKED'/> + <testcase classname='S1GW_Tests' name='TC_ue_ctx_release_req3' time='MASKED'/> + <testcase classname='S1GW_Tests' name='TC_ue_ctx_release_cmd_compl' time='MASKED'/> + <testcase classname='S1GW_Tests' name='TC_ue_ctx_release_cmd_compl3' time='MASKED'/> <testcase classname='S1GW_Tests' name='TC_pfcp_heartbeat' time='MASKED'/> </testsuite>