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(a)sysmocom.de>
+ * (C) 2024-2025 by sysmocom - s.f.m.c. GmbH <info(a)sysmocom.de>
* Author: Vadim Yanitskiy <vyanitskiy(a)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
--
To view, visit
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/39885?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: newchange
Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: I811904e50dd6f0a05b0bb6babebe5b4690e2d3ec
Gerrit-Change-Number: 39885
Gerrit-PatchSet: 1
Gerrit-Owner: fixeria <vyanitskiy(a)sysmocom.de>