fixeria has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/39885?usp=email )
Change subject: s1gw: add UEMux TCs for INITIAL CTX SETUP and UE CTX RELEASE ......................................................................
s1gw: add UEMux TCs for INITIAL CTX SETUP and UE CTX RELEASE
Change-Id: I811904e50dd6f0a05b0bb6babebe5b4690e2d3ec Related: SYS#7288 --- M s1gw/S1GW_Tests.ttcn M s1gw/S1GW_UEMux.ttcn M s1gw/expected-results.xml M start-testsuite.sh M ttcn3-tcpdump-start.sh M ttcn3-tcpdump-stop.sh 6 files changed, 134 insertions(+), 4 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/85/39885/1
diff --git a/s1gw/S1GW_Tests.ttcn b/s1gw/S1GW_Tests.ttcn index be3a052..fef8279 100644 --- a/s1gw/S1GW_Tests.ttcn +++ b/s1gw/S1GW_Tests.ttcn @@ -1,6 +1,6 @@ /* OsmoS1GW (S1AP Gateway) test suite in TTCN-3 * - * (C) 2024 by sysmocom - s.f.m.c. GmbH info@sysmocom.de + * (C) 2024-2025 by sysmocom - s.f.m.c. GmbH info@sysmocom.de * Author: Vadim Yanitskiy vyanitskiy@sysmocom.de * * All rights reserved. @@ -793,6 +793,82 @@ f_UEMuxUEList_all_done(vc_ues); }
+function f_TC_uemux_initial_ctx_setup_release(in ERabList erabs, + boolean release_req := false, + boolean release_cmd := false) +runs on UEMuxUE { + f_UEMuxUE_subscribe_for_mme_ue_id(g_mme_ue_id); + f_UEMuxUE_subscribe_for_enb_ue_id(g_enb_ue_id); + + f_rnd_sleep(0.5); + f_UEMux_initial_ctx_setup(erabs); + + if (release_req) { + f_rnd_sleep(0.5); + f_UEMux_ue_ctx_release_req(erabs); + } + if (release_cmd) { + f_rnd_sleep(0.5); + f_UEMux_ue_ctx_release_cmd(erabs); + } + + f_UEMuxUE_unsubscribe(); +} +testcase TC_uemux_initial_ctx_setup() runs on test_CT { + var ConnHdlrPars pars := valueof(t_ConnHdlrPars(num_erabs := mp_multi_ue_num)); + var UEMuxUEList vc_ues; + var UEMux_CT vc_uemux; + + f_init(); + + vc_uemux := f_UEMux_spawn(refers(f_TC_UEMux_main), pars); + + for (var integer i := 0; i < mp_multi_ue_num; i := i + 1) { + var ERabList erabs := { pars.erabs[i] }; + + vc_ues[i] := f_UEMuxUE_create(vc_uemux, pars, i, i); + vc_ues[i].start(f_TC_uemux_initial_ctx_setup_release(erabs)); + } + + f_UEMuxUEList_all_done(vc_ues); +} +testcase TC_uemux_ue_ctx_release_req() runs on test_CT { + var ConnHdlrPars pars := valueof(t_ConnHdlrPars(num_erabs := mp_multi_ue_num)); + var UEMuxUEList vc_ues; + var UEMux_CT vc_uemux; + + f_init(); + + vc_uemux := f_UEMux_spawn(refers(f_TC_UEMux_main), pars); + + for (var integer i := 0; i < mp_multi_ue_num; i := i + 1) { + var ERabList erabs := { pars.erabs[i] }; + + vc_ues[i] := f_UEMuxUE_create(vc_uemux, pars, i, i); + vc_ues[i].start(f_TC_uemux_initial_ctx_setup_release(erabs, release_req := true)); + } + + f_UEMuxUEList_all_done(vc_ues); +} +testcase TC_uemux_ue_ctx_release_cmd() runs on test_CT { + var ConnHdlrPars pars := valueof(t_ConnHdlrPars(num_erabs := mp_multi_ue_num)); + var UEMuxUEList vc_ues; + var UEMux_CT vc_uemux; + + f_init(); + + vc_uemux := f_UEMux_spawn(refers(f_TC_UEMux_main), pars); + + for (var integer i := 0; i < mp_multi_ue_num; i := i + 1) { + var ERabList erabs := { pars.erabs[i] }; + + vc_ues[i] := f_UEMuxUE_create(vc_uemux, pars, i, i); + vc_ues[i].start(f_TC_uemux_initial_ctx_setup_release(erabs, release_cmd := true)); + } + + f_UEMuxUEList_all_done(vc_ues); +} + function f_TC_pfcp_heartbeat(charstring id) runs on ConnHdlr { var integer rts := f_PFCPEM_get_recovery_timestamp(); var PDU_PFCP pfcp_pdu; @@ -838,6 +914,9 @@ execute( TC_uemux_e_rab_setup() ); execute( TC_uemux_e_rab_release_cmd() ); execute( TC_uemux_e_rab_release_ind() ); + execute( TC_uemux_initial_ctx_setup() ); + execute( TC_uemux_ue_ctx_release_req() ); + execute( TC_uemux_ue_ctx_release_cmd() ); execute( TC_pfcp_heartbeat() ); }
diff --git a/s1gw/S1GW_UEMux.ttcn b/s1gw/S1GW_UEMux.ttcn index 68be645..baecaff 100644 --- a/s1gw/S1GW_UEMux.ttcn +++ b/s1gw/S1GW_UEMux.ttcn @@ -256,6 +256,9 @@ signature UEMux_erab_setup(inout ERabList erabs); signature UEMux_erab_release_cmd(inout ERabList erabs); signature UEMux_erab_release_ind(inout ERabList erabs); +signature UEMux_initial_ctx_setup(inout ERabList erabs); +signature UEMux_ue_ctx_release_req(inout ERabList erabs); +signature UEMux_ue_ctx_release_cmd(inout ERabList erabs);
type port UEMUX_PROC_PT procedure { inout UEMux_subscribe_for_mme_ue_id; @@ -265,6 +268,9 @@ inout UEMux_erab_setup; inout UEMux_erab_release_cmd; inout UEMux_erab_release_ind; + inout UEMux_initial_ctx_setup; + inout UEMux_ue_ctx_release_req; + inout UEMux_ue_ctx_release_cmd; } with { extension "internal" };
/*********************************************************************************** @@ -313,6 +319,27 @@ } }
+function f_UEMux_initial_ctx_setup(inout ERabList erabs) +runs on UEMuxUE { + UEMUX_PROC.call(UEMux_initial_ctx_setup:{erabs}) { + [] UEMUX_PROC.getreply(UEMux_initial_ctx_setup:{?}) -> param(erabs); + } +} + +function f_UEMux_ue_ctx_release_req(inout ERabList erabs) +runs on UEMuxUE { + UEMUX_PROC.call(UEMux_ue_ctx_release_req:{erabs}) { + [] UEMUX_PROC.getreply(UEMux_ue_ctx_release_req:{?}) -> param(erabs); + } +} + +function f_UEMux_ue_ctx_release_cmd(inout ERabList erabs) +runs on UEMuxUE { + UEMUX_PROC.call(UEMux_ue_ctx_release_cmd:{erabs}) { + [] UEMUX_PROC.getreply(UEMux_ue_ctx_release_cmd:{?}) -> param(erabs); + } +} + function f_UEMuxUE_tx_s1ap_from_mme(template (value) S1AP_PDU pdu) runs on UEMuxUE { var S1AP_dPDU dpdu := { S1AP_PDU_DIR_FROM_MME, valueof(pdu) }; @@ -422,6 +449,23 @@ f_ConnHdlr_erab_release_ind(erabs, g_uemux_list[idx].mme_ue_id, g_uemux_list[idx].enb_ue_id); UEMUX_PROC.reply(UEMux_erab_release_ind:{erabs}) to vc_conn; } + [] UEMUX_PROC.getcall(UEMux_initial_ctx_setup:{?}) -> param(erabs) sender vc_conn { + var integer idx := f_UEMux_find_ue_by_vc_conn(vc_conn); + f_ConnHdlr_initial_ctx_setup_req(erabs, g_uemux_list[idx].mme_ue_id, g_uemux_list[idx].enb_ue_id); + f_ConnHdlr_initial_ctx_setup_rsp(erabs, g_uemux_list[idx].mme_ue_id, g_uemux_list[idx].enb_ue_id); + UEMUX_PROC.reply(UEMux_initial_ctx_setup:{erabs}) to vc_conn; + } + [] UEMUX_PROC.getcall(UEMux_ue_ctx_release_req:{?}) -> param(erabs) sender vc_conn { + var integer idx := f_UEMux_find_ue_by_vc_conn(vc_conn); + f_ConnHdlr_ue_ctx_release_req(erabs, g_uemux_list[idx].mme_ue_id, g_uemux_list[idx].enb_ue_id); + UEMUX_PROC.reply(UEMux_ue_ctx_release_req:{erabs}) to vc_conn; + } + [] UEMUX_PROC.getcall(UEMux_ue_ctx_release_cmd:{?}) -> param(erabs) sender vc_conn { + var integer idx := f_UEMux_find_ue_by_vc_conn(vc_conn); + f_ConnHdlr_ue_ctx_release_cmd(erabs, g_uemux_list[idx].mme_ue_id, g_uemux_list[idx].enb_ue_id); + f_ConnHdlr_ue_ctx_release_compl(g_uemux_list[idx].mme_ue_id, g_uemux_list[idx].enb_ue_id); + UEMUX_PROC.reply(UEMux_ue_ctx_release_cmd:{erabs}) to vc_conn; + } } } } diff --git a/s1gw/expected-results.xml b/s1gw/expected-results.xml index 27698e9..a44108e 100644 --- a/s1gw/expected-results.xml +++ b/s1gw/expected-results.xml @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<testsuite name='S1GW_Tests' tests='28' failures='0' errors='0' skipped='0' inconc='0' time='MASKED'> +<testsuite name='S1GW_Tests' tests='31' 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'/> @@ -27,5 +27,8 @@ <testcase classname='S1GW_Tests' name='TC_uemux_e_rab_setup' time='MASKED'/> <testcase classname='S1GW_Tests' name='TC_uemux_e_rab_release_cmd' time='MASKED'/> <testcase classname='S1GW_Tests' name='TC_uemux_e_rab_release_ind' time='MASKED'/> + <testcase classname='S1GW_Tests' name='TC_uemux_initial_ctx_setup' time='MASKED'/> + <testcase classname='S1GW_Tests' name='TC_uemux_ue_ctx_release_req' time='MASKED'/> + <testcase classname='S1GW_Tests' name='TC_uemux_ue_ctx_release_cmd' time='MASKED'/> <testcase classname='S1GW_Tests' name='TC_pfcp_heartbeat' time='MASKED'/> </testsuite> diff --git a/start-testsuite.sh b/start-testsuite.sh index 4b88501..6ffacd2 100755 --- a/start-testsuite.sh +++ b/start-testsuite.sh @@ -50,8 +50,8 @@ ulimit -n 100000
# below is for the debian packages -TTCN3_BIN_DIR="${TTCN3_BIN_DIR:-/usr/bin}" -TITAN_LIBRARY_PATH="${TITAN_LIBRARY_PATH:-/usr/lib/titan:/usr/ttcn3/lib}" +TTCN3_BIN_DIR="${TTCN3_DIR}/bin" +TITAN_LIBRARY_PATH="${TTCN3_DIR}/lib" LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$SUITE_DIR:$TITAN_LIBRARY_PATH" "$TTCN3_BIN_DIR/ttcn3_start" $SUITE $CFG $TEST
expected="$SUITE_DIR/expected-results.xml" diff --git a/ttcn3-tcpdump-start.sh b/ttcn3-tcpdump-start.sh index 9575a68..bb253b9 100755 --- a/ttcn3-tcpdump-start.sh +++ b/ttcn3-tcpdump-start.sh @@ -36,6 +36,8 @@ TTCN3_PCAP_PATH=/tmp fi
+exit + kill_rm_pidfile $PIDFILE_NETCAT kill_rm_pidfile $PIDFILE_PCAP
diff --git a/ttcn3-tcpdump-stop.sh b/ttcn3-tcpdump-stop.sh index def10d8..ac04f53 100755 --- a/ttcn3-tcpdump-stop.sh +++ b/ttcn3-tcpdump-stop.sh @@ -54,6 +54,8 @@ fi fi
+exit + # Wait for up to 2 seconds if we keep receiving traffinc from packet dumper, # otherwise we might lose last packets from test. i=0