Change in ...osmo-ttcn3-hacks[master]: bscnat: Refactor BSC_MS side code to allow different actions per test

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/.

pespin gerrit-no-reply at lists.osmocom.org
Thu Jun 13 14:33:24 UTC 2019


pespin has submitted this change and it was merged. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/14411 )

Change subject: bscnat: Refactor BSC_MS side code to allow different actions per test
......................................................................

bscnat: Refactor BSC_MS side code to allow different actions per test

Each test can now plug in different actions to be done by the emulated
BSC_MS, by passing a function to f_init(). Old hardcoded behaviour (main())
is renamed and used in already existing tests.

Change-Id: Ic82ca333267535c5859e6439deacbf3b1d1fe391
---
M bsc-nat/BSCNAT_Tests.ttcn
M bsc-nat/BSC_MS_ConnectionHandler.ttcn
M bsc-nat/BSC_MS_Simulation.ttcn
3 files changed, 54 insertions(+), 28 deletions(-)

Approvals:
  laforge: Looks good to me, approved
  Jenkins Builder: Verified



diff --git a/bsc-nat/BSCNAT_Tests.ttcn b/bsc-nat/BSCNAT_Tests.ttcn
index 6b0c757..fda065a 100644
--- a/bsc-nat/BSCNAT_Tests.ttcn
+++ b/bsc-nat/BSCNAT_Tests.ttcn
@@ -25,6 +25,7 @@
 
 import from MSC_Simulation all;
 import from BSC_MS_Simulation all;
+import from BSC_MS_ConnectionHandler all;
 
 import from Osmocom_VTY_Functions all;
 import from TELNETasp_PortType all;
@@ -135,7 +136,7 @@
 	f_vty_transceive(BSCNATVTY, "enable");
 }
 
-function f_init(boolean use_osmux) runs on test_CT {
+function f_init(void_fn_bsc_ms fn_bsc_ms, boolean use_osmux) runs on test_CT {
 	var integer i;
 	var charstring id;
 
@@ -156,9 +157,12 @@
 		f_init_BscState(bsc[i], mp_bsc_pc +i, mp_msc_pc, mp_bsc_ssn, mp_msc_ssn);
 		id := "BSC" & int2str(i);
 		bsc[i].BSC := BSC_CT.create(id);
+		var BSC_MS_TestHdlrParams pars;
+		pars.sccp_addr_own := bsc[i].sccp_addr_own;
+		pars.sccp_addr_remote := bsc[i].sccp_addr_peer;
+		pars.use_osmux := use_osmux;
 		bsc[i].BSC.start(BSC_MS_Simulation.main(mp_nat_ip, mp_nat_port, mp_bsc_ip, mp_bsc_port+i,
-							bsc[i].sccp_pars, bsc[i].sccp_addr_own,
-							bsc[i].sccp_addr_peer, use_osmux, id));
+							bsc[i].sccp_pars, pars, fn_bsc_ms, id));
 	}
 
 }
@@ -182,7 +186,7 @@
 function f_TC_recv_dump(boolean use_osmux := false) runs on test_CT {
 	timer T := 30.0;
 
-	f_init(use_osmux);
+	f_init(refers(bsc_ms_establish_fully), use_osmux);
 
 	f_wait_finish(T);
 }
diff --git a/bsc-nat/BSC_MS_ConnectionHandler.ttcn b/bsc-nat/BSC_MS_ConnectionHandler.ttcn
index 7f2ebcd..f7126fd 100644
--- a/bsc-nat/BSC_MS_ConnectionHandler.ttcn
+++ b/bsc-nat/BSC_MS_ConnectionHandler.ttcn
@@ -25,6 +25,8 @@
 import from MGCP_Templates all;
 import from SDP_Types all;
 
+type function void_fn_bsc_ms(charstring id) runs on BSC_MS_ConnHdlr;
+
 /* this component represents a single subscriber connection at the MSC.
  * There is a 1:1 mapping between SCCP connections and RAN_ConnHdlr components.
  * We inherit all component variables, ports, functions, ... from RAN_ConnHdlr */
@@ -34,8 +36,15 @@
 	var MgcpConnectionId g_mgcp_conn_id;
 	var SDP_Message g_sdp;
 	var BSC_State g_state;
+	var BSC_MS_TestHdlrParams g_pars;
 }
 
+type record BSC_MS_TestHdlrParams {
+	SCCP_PAR_Address sccp_addr_own,
+	SCCP_PAR_Address sccp_addr_remote,
+	boolean use_osmux
+};
+
 /* Callback function from general RAN_Emulation whenever a new incoming
  * SCCP connection arrivces. Must create + start a new component */
 private function CreateCallback(BSSAP_N_CONNECT_ind conn_ind, charstring id)
@@ -90,7 +99,7 @@
 }
 
 /* main function processing various incoming events */
-function main(SCCP_PAR_Address sccp_addr_own, SCCP_PAR_Address sccp_addr_remote, boolean use_osmux)
+function bsc_ms_establish_fully(charstring id)
 runs on BSC_MS_ConnHdlr {
 	var PDU_BSSAP bssap;
 	var MgcpCommand mgcp_cmd;
@@ -104,8 +113,8 @@
 	/* generate and send the Complete Layer3 Info */
 	bssap := f_gen_cl3('901770123456789'H);
 	var BSSAP_Conn_Req creq := {
-		addr_peer := sccp_addr_remote,
-		addr_own := sccp_addr_own,
+		addr_peer := g_pars.sccp_addr_remote,
+		addr_own := g_pars.sccp_addr_own,
 		bssap := bssap
 	}
 	g_state := BSC_STATE_WAIT_ASS_REQ;
@@ -130,12 +139,12 @@
 			/* respond with CRCX_ACK */
 			g_state := BSC_STATE_WAIT_MDCX;
 
-			if (use_osmux != f_MgcpCmd_contains_par(mgcp_cmd, "X-OSMUX")) {
-				setverdict(fail, log2str("Received Osmux CID presence doesn't match presence expectancy (", use_osmux, ")"));
+			if (g_pars.use_osmux != f_MgcpCmd_contains_par(mgcp_cmd, "X-OSMUX")) {
+				setverdict(fail, log2str("Received Osmux CID presence doesn't match presence expectancy (", g_pars.use_osmux, ")"));
 				self.stop;
 			}
 
-			if (use_osmux) {
+			if (g_pars.use_osmux) {
 				osmux_cid := f_MgcpCmd_extract_osmux_cid(mgcp_cmd);
 				mgcp_resp := ts_CRCX_ACK_osmux(mgcp_cmd.line.trans_id, g_mgcp_conn_id, osmux_cid, g_sdp);
 			} else {
diff --git a/bsc-nat/BSC_MS_Simulation.ttcn b/bsc-nat/BSC_MS_Simulation.ttcn
index d4e37a4..5feaf0e 100644
--- a/bsc-nat/BSC_MS_Simulation.ttcn
+++ b/bsc-nat/BSC_MS_Simulation.ttcn
@@ -31,9 +31,7 @@
 	/* test port to SCCP emulation */
 	port SCCPasp_PT SCCP;
 
-	var SCCP_PAR_Address g_sccp_addr_own;
-	var SCCP_PAR_Address g_sccp_addr_remote;
-	var boolean g_use_osmux;
+	var BSC_MS_TestHdlrParams g_pars;
 
 	var charstring g_bsc_num_str;
 }
@@ -42,21 +40,41 @@
 	integer mp_num_iterations := 10;
 }
 
+/* helper function to create and connect a BSC_MS_ConnHdlr component */
+private function f_connect_handler(inout BSC_MS_ConnHdlr vc_conn) runs on BSC_CT {
+	/* connect client BSSAP port to BSSAP dispatcher */
+	connect(vc_conn:BSSAP, vc_BSSMAP:CLIENT);
+}
+
+private function f_start_handler(void_fn_bsc_ms fn, charstring id, template (omit) BSC_MS_TestHdlrParams pars := omit)
+runs on BSC_CT return BSC_MS_ConnHdlr {
+	var BSC_MS_ConnHdlr vc_conn;
+	vc_conn := BSC_MS_ConnHdlr.create(id);
+	f_connect_handler(vc_conn);
+	vc_conn.start(f_handler_init(fn, id, pars));
+	return vc_conn;
+}
+
+/* first function inside ConnHdlr component; sets g_pars + starts function */
+private function f_handler_init(void_fn_bsc_ms fn, charstring id, template (omit) BSC_MS_TestHdlrParams pars := omit)
+runs on BSC_MS_ConnHdlr {
+	if (isvalue(pars)) {
+		g_pars := valueof(pars);
+	}
+	fn.apply(id);
+}
+
 function main(charstring remote_ip, PortNumber remote_port,
 		charstring local_ip, PortNumber local_port,
 		MSC_SCCP_MTP3_parameters sccp_pars,
-		SCCP_PAR_Address sccp_addr_own,
-		SCCP_PAR_Address sccp_addr_remote,
-		boolean use_osmux, charstring id) runs on BSC_CT
+		BSC_MS_TestHdlrParams pars,
+		void_fn_bsc_ms fn, charstring id) runs on BSC_CT
 {
 	var integer i := 0;
 	timer T := 1.0;
 	var IPA_CCM_Parameters ccm_pars := IPA_Emulation.c_IPA_default_ccm_pars;
 	ccm_pars.name := id;
-
-	g_sccp_addr_own := sccp_addr_own;
-	g_sccp_addr_remote := sccp_addr_remote;
-	g_use_osmux := use_osmux;
+	g_pars := pars;
 
 	/* create components for IPA/SCCP/BSS[M]AP stack */
 	vc_IPA := IPA_Emulation_CT.create(id & "-IPA");
@@ -84,7 +102,7 @@
 	T.timeout;
 
 	for (i := 0; i < mp_num_iterations; i := i+1) {
-		f_start_BSC_MS(id & "-MS-" & int2str(i));
+		f_start_BSC_MS(fn, id & "-MS-" & int2str(i));
 	}
 
 	/* explicitly stop all components that we started above */
@@ -93,15 +111,10 @@
 	vc_SCCP.stop;
 }
 
-function f_start_BSC_MS(charstring id) runs on BSC_CT {
+function f_start_BSC_MS(void_fn_bsc_ms fn, charstring id) runs on BSC_CT {
 	var BSC_MS_ConnHdlr vc_conn;
-
-	/* start new component */
-	vc_conn := BSC_MS_ConnHdlr.create(id);
-	/* connect client BSSAP port to BSSAP dispatcher */
-	connect(vc_conn:BSSAP, vc_BSSMAP:CLIENT);
 	/* start component */
-	vc_conn.start(BSC_MS_ConnectionHandler.main(g_sccp_addr_own, g_sccp_addr_remote, g_use_osmux));
+	vc_conn := f_start_handler(fn, id, g_pars);
 	/* blocking wait until component terminates.  If you want to start MSs in parallel,
 	 * you have to remove this statement here */
 	vc_conn.done;

-- 
To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/14411
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: Ic82ca333267535c5859e6439deacbf3b1d1fe391
Gerrit-Change-Number: 14411
Gerrit-PatchSet: 4
Gerrit-Owner: pespin <pespin at sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: laforge <laforge at gnumonks.org>
Gerrit-Reviewer: pespin <pespin at sysmocom.de>
Gerrit-MessageType: merged
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20190613/dd3c6fd3/attachment.htm>


More information about the gerrit-log mailing list