[PATCH] osmo-ttcn3-hacks[master]: msc: Add global g_Tguard timer to make sure BSC_ConnHdlr ter...

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

Harald Welte gerrit-no-reply at lists.osmocom.org
Sat Jan 27 11:46:17 UTC 2018


Review at  https://gerrit.osmocom.org/6127

msc: Add global g_Tguard timer to make sure BSC_ConnHdlr terminates

Change-Id: I10fc0ff04c16eacc12f09ac1759940676ae62213
---
M msc_tests/BSC_ConnectionHandler.ttcn
M msc_tests/MSC_Tests.ttcn
2 files changed, 53 insertions(+), 32 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/27/6127/1

diff --git a/msc_tests/BSC_ConnectionHandler.ttcn b/msc_tests/BSC_ConnectionHandler.ttcn
index bc6eebc..843197e 100644
--- a/msc_tests/BSC_ConnectionHandler.ttcn
+++ b/msc_tests/BSC_ConnectionHandler.ttcn
@@ -30,6 +30,7 @@
 /* this component represents a single subscriber connection */
 type component BSC_ConnHdlr extends BSSAP_ConnHdlr, MNCC_ConnHdlr, GSUP_ConnHdlr, MGCP_ConnHdlr {
 	var BSC_ConnHdlrPars g_pars;
+	timer g_Tguard := 60.0;
 }
 
 type record AuthVector {
@@ -52,6 +53,23 @@
 	AuthVector vec optional
 };
 
+/* altstep for the global guard timer */
+private altstep as_Tguard() runs on BSC_ConnHdlr {
+	[] g_Tguard.timeout {
+		setverdict(inconc, "Tguard timeout");
+		self.stop;
+	}
+}
+
+/* init function, called as first function in new BSC_ConnHdlr */
+function f_init_handler(BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
+	/* make parameters available via component variable */
+	g_pars := pars;
+	/* Start guard timer and activate it as default */
+	g_Tguard.start;
+	activate(as_Tguard());
+}
+
 
 /* Callback function from general BSSMAP_Emulation whenever a connectionless
  * BSSMAP message arrives. Canreturn a PDU_BSSAPthat should be sent in return */
diff --git a/msc_tests/MSC_Tests.ttcn b/msc_tests/MSC_Tests.ttcn
index 8512d3e..f38b989 100644
--- a/msc_tests/MSC_Tests.ttcn
+++ b/msc_tests/MSC_Tests.ttcn
@@ -379,6 +379,8 @@
 	connect(vc_conn:GSUP, vc_GSUP:GSUP_CLIENT);
 	connect(vc_conn:GSUP_PROC, vc_GSUP:GSUP_PROC);
 
+	/* 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)(id, pars));
 	return vc_conn;
 }
@@ -395,7 +397,7 @@
 }
 
 private function f_tc_lu_imsi_noauth_tmsi(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 	f_perform_lu(false, true, true);
 }
 testcase TC_lu_imsi_noauth_tmsi() runs on MTC_CT {
@@ -407,7 +409,7 @@
 }
 
 private function f_tc_lu_imsi_noauth_notmsi(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 	f_perform_lu(false, false, true);
 }
 testcase TC_lu_imsi_noauth_notmsi() runs on MTC_CT {
@@ -421,7 +423,7 @@
 
 /* Do LU by IMSI, refuse it on GSUP and expect LU REJ back to MS */
 private function f_tc_lu_imsi_reject(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 	var PDU_ML3_MS_NW l3_lu := f_build_lu_imsi(g_pars.imsi);
 
 	f_create_gsup_expect(hex2str(g_pars.imsi));
@@ -450,7 +452,7 @@
 
 /* Do LU by IMSI, timeout on GSUP */
 private function f_tc_lu_imsi_timeout_gsup(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 	var PDU_ML3_MS_NW l3_lu := f_build_lu_imsi(g_pars.imsi);
 
 	f_create_gsup_expect(hex2str(g_pars.imsi));
@@ -479,7 +481,7 @@
 }
 
 private function f_tc_lu_imsi_auth_tmsi(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 	f_perform_lu(true, true, true);
 }
 testcase TC_lu_imsi_auth_tmsi() runs on MTC_CT {
@@ -495,7 +497,7 @@
 /* Send CM SERVICE REQ for IMSI that has never performed LU before */
 private function f_tc_cmserv_imsi_unknown(charstring id, BSC_ConnHdlrPars pars)
 runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 
 	var MobileIdentityLV mi := valueof(ts_MI_IMSI_LV(g_pars.imsi));
 	var BSSMAP_IE_CellIdentifier cell_id := valueof(ts_CellId_CGI('262'H, '042'H, 23, 42));
@@ -534,7 +536,7 @@
 }
 
 private function f_tc_lu_and_mo_call(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 	var CallParameters cpars := valueof(t_CallParams('12345'H, 0));
 	cpars.bss_rtp_port := 1110;
 	cpars.mgcp_connection_id_bss := '22222'H;
@@ -553,7 +555,7 @@
 
 /* Test LU (with authentication enabled), where HLR times out sending SAI response */
 private function f_tc_lu_auth_sai_timeout(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 
 	var PDU_ML3_MS_NW l3_lu := f_build_lu_imsi(g_pars.imsi)
 	var PDU_DTAP_MT dtap_mt;
@@ -587,7 +589,7 @@
 
 /* Test LU (with authentication enabled), where HLR rejects sending SAI error */
 private function f_tc_lu_auth_sai_err(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 
 	var PDU_ML3_MS_NW l3_lu := f_build_lu_imsi(g_pars.imsi)
 	var PDU_DTAP_MT dtap_mt;
@@ -621,7 +623,7 @@
 
 /* Test LU but BSC will send a clear request in the middle */
 private function f_tc_lu_clear_request(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 
 	var PDU_ML3_MS_NW l3_lu := f_build_lu_imsi(g_pars.imsi)
 	var PDU_DTAP_MT dtap_mt;
@@ -653,7 +655,7 @@
 
 /* Test LU but BSC will send a clear request in the middle */
 private function f_tc_lu_disconnect(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 
 	var PDU_ML3_MS_NW l3_lu := f_build_lu_imsi(g_pars.imsi)
 	var PDU_DTAP_MT dtap_mt;
@@ -683,7 +685,7 @@
 
 /* Test LU but with illegal mobile identity type = IMEI */
 private function f_tc_lu_by_imei(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 
 	var PDU_ML3_MS_NW l3_lu := f_build_lu_imei(g_pars.imei)
 	var PDU_DTAP_MT dtap_mt;
@@ -717,7 +719,7 @@
 
 /* Test LU by TMSI with unknown TMSI, expect (and answer) ID REQ. */
 private function f_tc_lu_tmsi_noauth_unknown(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 
 	var PDU_ML3_MS_NW l3_lu := f_build_lu_tmsi('01020304'O); /* FIXME: Random */
 	var PDU_DTAP_MT dtap_mt;
@@ -767,7 +769,7 @@
 
 /* Test IMSI DETACH (MI=IMSI) */
 private function f_tc_imsi_detach_by_imsi(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 
 	var MobileIdentityLV mi := valueof(ts_MI_IMSI_LV(g_pars.imsi));
 
@@ -793,7 +795,7 @@
 
 /* Test IMSI DETACH (MI=TMSI) */
 private function f_tc_imsi_detach_by_tmsi(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 
 	var MobileIdentityLV mi := valueof(ts_MI_TMSI_LV('01020304'O));
 
@@ -819,7 +821,7 @@
 
 /* Test IMSI DETACH (MI=IMEI), which is illegal */
 private function f_tc_imsi_detach_by_imei(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 
 	var MobileIdentityLV mi := valueof(ts_MI_IMEI_LV(g_pars.imei));
 
@@ -892,7 +894,7 @@
 
 /* establish an emergency call by IMEI, no SIM inserted (and hence no IMSI) */
 private function f_tc_emerg_call_imei_reject(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 
 	var MobileIdentityLV mi := valueof(ts_MI_IMEI_LV(g_pars.imei));
 	var PDU_ML3_MS_NW l3_info := valueof(ts_CM_SERV_REQ(CM_TYPE_EMERG_CALL, mi));
@@ -913,7 +915,7 @@
 
 /* establish an emergency call by IMSI, SIM inserted (and hence IMSI) */
 private function f_tc_emerg_call_imsi(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 	/* First perform location update to ensure subscriber is known */
 	f_perform_lu(false, true, true);
 	/* Then issue emergency call identified by IMSI */
@@ -929,7 +931,7 @@
 
 /* CM Service Request for VGCS -> reject */
 private function f_tc_cm_serv_req_vgcs_reject(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 
 	/* First perform location update to ensure subscriber is known */
 	f_perform_lu(false, true, true);
@@ -953,7 +955,7 @@
 
 /* CM Service Request for VBS -> reject */
 private function f_tc_cm_serv_req_vbs_reject(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 
 	/* First perform location update to ensure subscriber is known */
 	f_perform_lu(false, true, true);
@@ -977,7 +979,7 @@
 
 /* CM Service Request for LCS -> reject */
 private function f_tc_cm_serv_req_lcs_reject(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 
 	/* First perform location update to ensure subscriber is known */
 	f_perform_lu(false, true, true);
@@ -1001,7 +1003,7 @@
 
 /* CM Re-Establishment Request */
 private function f_tc_cm_reest_req_reject(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 
 	/* First perform location update to ensure subscriber is known */
 	f_perform_lu(false, true, true);
@@ -1025,7 +1027,7 @@
 
 /* Test LU (with authentication enabled), with wrong response from MS */
 private function f_tc_lu_auth_2G_fail(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 
 	var PDU_ML3_MS_NW l3_lu := f_build_lu_imsi(g_pars.imsi)
 
@@ -1067,7 +1069,7 @@
 }
 
 private function f_tc_lu_imsi_auth_tmsi_encr_13_13(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 	f_perform_lu(true, true, true, true);
 }
 testcase TC_lu_imsi_auth_tmsi_encr_13_13() runs on MTC_CT {
@@ -1082,7 +1084,7 @@
 
 /* Test Complete L3 without payload */
 private function f_tc_cl3_no_payload(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 
 	/* Send Complete L3 Info with empty L3 frame */
 	BSSAP.send(ts_BSSAP_Conn_Req(g_pars.sccp_addr_peer, g_pars.sccp_addr_own,
@@ -1108,7 +1110,7 @@
 
 /* Test Complete L3 with random payload */
 private function f_tc_cl3_rnd_payload(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 
 	var integer len := float2int(rnd() * 256.0);
 	var octetstring payl := f_rnd_octstring(len);
@@ -1139,7 +1141,7 @@
 
 /* Test Complete L3 with random payload */
 private function f_tc_establish_and_nothing(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 
 	f_perform_lu(false, true, true, false);
 
@@ -1169,7 +1171,8 @@
 
 /* Test MO Call SETUP with no response from MNCC */
 private function f_tc_mo_setup_and_nothing(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
+
 	var CallParameters cpars := valueof(t_CallParams('12345'H, 0));
 
 	f_perform_lu(false, true, true, false);
@@ -1205,7 +1208,7 @@
 
 /* Test MO Call with no response to RAN-side CRCX */
 private function f_tc_mo_crcx_ran_timeout(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 	var CallParameters cpars := valueof(t_CallParams('12345'H, 0));
 	var MNCC_PDU mncc;
 	var MgcpCommand mgcp_cmd;
@@ -1252,7 +1255,7 @@
 
 /* Test MO Call with reject to RAN-side CRCX */
 private function f_tc_mo_crcx_ran_reject(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 	var CallParameters cpars := valueof(t_CallParams('12345'H, 0));
 	var MNCC_PDU mncc;
 	var MgcpCommand mgcp_cmd;
@@ -1344,7 +1347,7 @@
 
 /* Test MT Call */
 private function f_tc_mt_crcx_ran_reject(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 	var CallParameters cpars := valueof(t_CallParams('123456'H, 0));
 	var MNCC_PDU mncc;
 	var MgcpCommand mgcp_cmd;
@@ -1402,7 +1405,7 @@
 
 /* Test MT Call T310 timer */
 private function f_tc_mt_t310(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 	var CallParameters cpars := valueof(t_CallParams('123456'H, 0));
 	var MNCC_PDU mncc;
 	var MgcpCommand mgcp_cmd;

-- 
To view, visit https://gerrit.osmocom.org/6127
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I10fc0ff04c16eacc12f09ac1759940676ae62213
Gerrit-PatchSet: 1
Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Owner: Harald Welte <laforge at gnumonks.org>



More information about the gerrit-log mailing list