pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/40750?usp=email )
Change subject: WIP: 5gc: Rework init code ......................................................................
WIP: 5gc: Rework init code
* Move T_Guard to MTC, there's no need to have multiple of them (one per ConnHdlr). * Call f_init_handler() internally so it doesn't need to be called by each ConnHdlr test. * Change function attribute friend to private
Change-Id: I71e5d552a6c0089345982a403285f66a92397413 --- M 5gc/C5G_Tests.ttcn 1 file changed, 24 insertions(+), 19 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/50/40750/1
diff --git a/5gc/C5G_Tests.ttcn b/5gc/C5G_Tests.ttcn index f5b0931..76813ae 100644 --- a/5gc/C5G_Tests.ttcn +++ b/5gc/C5G_Tests.ttcn @@ -114,12 +114,13 @@ port NGAP_PT NGAP_UNIT[NUM_NGRAN]; port NGAPEM_PROC_PT NGAP_PROC[NUM_NGRAN];
+ timer g_Tguard := 30.0; + var UeParams g_ue_pars[NUM_UE]; }
type component ConnHdlr extends NGAP_ConnHdlr { var ConnHdlrPars g_pars; - timer g_Tguard := 30.0; }
type record ConnHdlrPars { @@ -134,13 +135,13 @@ }
/* send incoming unit data messages (like reset) to global NGAP_UNIT port */ -friend function NGapForwardUnitdataCallback(NGAP_PDU msg) +private function NGapForwardUnitdataCallback(NGAP_PDU msg) runs on NGAP_Emulation_CT return template NGAP_PDU { NGAP_UNIT.send(msg); return omit; }
-friend function f_init_one_ngran(integer num := 0) runs on MTC_CT { +private function f_init_one_ngran(integer num := 0) runs on MTC_CT { var charstring id := testcasename() & "-NGAP" & int2str(num); var NGAPOps ops := { create_cb := refers(NGAP_Emulation.ExpectedCreateCallback), @@ -177,12 +178,12 @@ NGAP_UNIT[num].receive(NGAPEM_Event:{up_down:=NGAPEM_EVENT_UP}); }
-friend function f_init_one_ue(inout UeParams uep, integer imsi_suffix) { +private function f_init_one_ue(inout UeParams uep, integer imsi_suffix) {
uep := valueof(ts_UeParams(imsi_suffix)); }
-friend function f_init_ngap(integer imsi_suffix := 0) runs on MTC_CT { +private function f_init_ngap(integer imsi_suffix := 0) runs on MTC_CT { var integer i; for (i := 0; i < NUM_NGRAN; i := i+1) { f_init_one_ngran(i); @@ -192,8 +193,16 @@ } }
+private function f_init(integer imsi_suffix := 0, float t_guard := 30.0) runs on MTC_CT { + /* start guard timer and activate it as default */ + g_Tguard.start(t_guard); + activate(as_Tguard()); + + f_init_ngap(imsi_suffix); +} + /* generate parameters for a connection handler */ -friend function f_init_pars(integer ue_idx := 0) +private function f_init_pars(integer ue_idx := 0) runs on MTC_CT return ConnHdlrPars { var ConnHdlrPars pars := { ngran_pars := g_ngran_pars, @@ -204,10 +213,10 @@ return pars; }
-type function void_fn(ConnHdlrPars pars) runs on ConnHdlr; +type function void_fn() runs on ConnHdlr;
/* start a connection handler with given parameters */ -friend function f_start_handler_with_pars(void_fn fn, ConnHdlrPars pars, integer ngap_idx := 0) +private function f_start_handler_with_pars(void_fn fn, ConnHdlrPars pars, integer ngap_idx := 0) runs on MTC_CT return ConnHdlr { var ConnHdlr vc_conn; var charstring id := testcasename() & int2str(ngap_idx); @@ -219,24 +228,21 @@
/* We cannot use vc_conn.start(f_init_handler(fn, id, pars)); as we cannot have * a stand-alone 'derefers()' call, see https://www.eclipse.org/forums/index.php/t/1091364/ */ - vc_conn.start(derefers(fn)(pars)); + vc_conn.start(f_init_handler(fn, pars)); return vc_conn; }
/* altstep for the global guard timer */ -private altstep as_Tguard()runs on ConnHdlr { +private altstep as_Tguard()runs on MTC_CT { [] g_Tguard.timeout { - setverdict(fail, "Tguard timeout"); - mtc.stop; + Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Tguard timeout"); } }
-friend function f_init_handler(ConnHdlrPars pars, float t_guard := 30.0) runs on ConnHdlr { +private function f_init_handler(void_fn fn, ConnHdlrPars pars) runs on ConnHdlr { /* make parameters available via component variable */ g_pars := pars; - /* start guard timre and activate it as default */ - g_Tguard.start(t_guard); - activate(as_Tguard()); + fn.apply(); }
private template (value) NGAP_IEs.TAI ts_ngran_NGAP_TAI(NGRANParams ngran_pars) := { @@ -277,7 +283,7 @@ return valueof(p_ueLocInf); }
-friend function f_ngap_setup(integer idx := 0, template (omit) NGAP_IEs.Cause cause := omit) runs on MTC_CT { +private function f_ngap_setup(integer idx := 0, template (omit) NGAP_IEs.Cause cause := omit) runs on MTC_CT { var template (present) NGAP_IEs.Cause exp_cause := ?; var boolean exp_fail := false; timer T := 5.0; @@ -581,8 +587,7 @@ f_ngap_setup(0); }
-private function f_TC_register(ConnHdlrPars pars) runs on ConnHdlr { - f_init_handler(pars); +private function f_TC_register() runs on ConnHdlr { f_register(); } testcase TC_ng_register() runs on MTC_CT {