[MERGED] osmo-ttcn3-hacks[master]: bts: Add first five dynamic PDCH tests

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
Thu Apr 5 13:50:01 UTC 2018


Harald Welte has submitted this change and it was merged.

Change subject: bts: Add first five dynamic PDCH tests
......................................................................


bts: Add first five dynamic PDCH tests

NOTE: This needs changes to your osmo-bsc.cfg, as it will now need
an osmocom-style dyn PDCH on TS4, and an IPA-style dny PDCH on TS3.

--- a/ttcn3-bts-test/osmo-bsc.cfg
+++ b/ttcn3-bts-test/osmo-bsc.cfg
@@ -154,10 +154,10 @@ network
     phys_chan_config TCH/F
     hopping enabled 0
    timeslot 3
-    phys_chan_config TCH/F
+    phys_chan_config TCH/F_PDCH
     hopping enabled 0
    timeslot 4
-    phys_chan_config TCH/F
+    phys_chan_config TCH/F_TCH/H_PDCH
     hopping enabled 0
    timeslot 5
     phys_chan_config TCH/H

Corresponding change in docker-playground.git has Change-Id
I229000ce7609845fdf24cafe1f5ec2bfa3f507e8

Change-Id: I2a42531dc5555ab4772d538fda462343605b8feb
---
M bts/BTS_Tests.ttcn
1 file changed, 193 insertions(+), 1 deletion(-)

Approvals:
  Harald Welte: Looks good to me, approved
  Jenkins Builder: Verified



diff --git a/bts/BTS_Tests.ttcn b/bts/BTS_Tests.ttcn
index 8b30bd9..5316696 100644
--- a/bts/BTS_Tests.ttcn
+++ b/bts/BTS_Tests.ttcn
@@ -36,7 +36,10 @@
 
 /* The tests assume a BTS with the following timeslot configuration:
  * TS0 : Combined CCCH + SDCCH/4
- * TS1 .. TS 4: TCH/F
+ * TS1 : TCH/F
+ * TS2 : TCH/F
+ * TS3 : TCH/F_PDCH (IPA Style)
+ * TS4 : TCH/F_TCH/H_PDCH (Osmocom Style)
  * TS5 : TCH/H
  * TS6 : SDCCH/8
  * TS7 : PDCH
@@ -2631,6 +2634,189 @@
 	setverdict(pass);
 }
 
+/***********************************************************************
+ * Dynamic Timeslot Support
+ ***********************************************************************/
+
+private function f_dyn_osmo_pdch_act(integer pcu_conn_id, integer bts_nr, integer trx_nr)
+runs on ConnHdlr {
+	var PCUIF_send_data sd;
+	/* Expect BTS to immediately acknowledge activation as PDCH */
+	PCU.clear;
+	f_rsl_chan_act(g_pars.chan_mode);
+	/* expect INFO_IND on PCU interface listing TS as PDCH */
+	alt {
+	[] PCU.receive(t_SD_PCUIF(pcu_conn_id, tr_PCUIF_INFO_IND(bts_nr, ?))) -> value sd {
+		if (substr(sd.data.u.info_ind.trx[trx_nr].pdch_mask, g_chan_nr.tn, 1) != '1'B) {
+			setverdict(fail, "PCUIF_INFO_IND PDCH_MASK not '1' after PDCH ACT");
+			self.stop;
+		}
+		}
+	[] PCU.receive { repeat; }
+	}
+	/* try to activate this PDCH from the PCU point of view */
+	PCU.send(t_SD_PCUIF(pcu_conn_id, ts_PCUIF_ACT_REQ(bts_nr, trx_nr, g_chan_nr.tn)));
+	/* FIXME: is there a response? */
+}
+
+private function f_dyn_osmo_pdch_deact(integer pcu_conn_id, integer bts_nr, integer trx_nr)
+runs on ConnHdlr {
+	var PCUIF_send_data sd;
+	/* Send RSL CHAN REL (deactivate) */
+	PCU.clear;
+	RSL.send(ts_RSL_RF_CHAN_REL(g_chan_nr));
+	/* expect BTS to ask PCU to deactivate the channel */
+	alt {
+	[] PCU.receive(t_SD_PCUIF(pcu_conn_id, tr_PCUIF_INFO_IND(bts_nr, ?))) -> value sd {
+		if (substr(sd.data.u.info_ind.trx[trx_nr].pdch_mask, g_chan_nr.tn, 1) != '0'B) {
+			setverdict(fail, "PCUIF_INFO_IND PDCH_MASK not '0' after PDCH DEACT");
+			self.stop;
+		}
+		}
+	[] PCU.receive { repeat; }
+	}
+	/* Emulate PCU asking BTS to deactivate PDCH */
+	PCU.send(t_SD_PCUIF(pcu_conn_id, ts_PCUIF_DEACT_REQ(bts_nr, trx_nr, g_chan_nr.tn)));
+	alt {
+	[] RSL.receive(tr_RSL_RF_CHAN_REL_ACK(g_chan_nr)) {
+		setverdict(pass);
+		}
+	[] RSL.receive { repeat; }
+	}
+}
+
+/* Activate Osmocom-style dynamic PDCH from BSC side */
+function f_TC_dyn_osmo_pdch_act_deact(charstring id) runs on ConnHdlr {
+	var PCUIF_Message first_info;
+	var integer ts_nr := g_chan_nr.tn;
+	var integer trx_nr := 0;
+	var integer bts_nr := 0;
+	var integer pcu_conn_id := -1;
+
+	f_init_pcu(PCU, id, pcu_conn_id, first_info);
+
+	f_dyn_osmo_pdch_act(pcu_conn_id, bts_nr, trx_nr);
+	f_sleep(3.0);
+	f_dyn_osmo_pdch_deact(pcu_conn_id, bts_nr, trx_nr);
+	setverdict(pass);
+}
+testcase TC_dyn_osmo_pdch_act_deact() runs on test_CT {
+	var ConnHdlrPars pars;
+	var ConnHdlr vc_conn;
+	f_init(testcasename());
+
+	pars := valueof(t_Pars(t_RslChanNr_PDCH(4), ts_RSL_ChanMode_SIGN));
+	vc_conn := f_start_handler(refers(f_TC_dyn_osmo_pdch_act_deact), pars, true);
+	vc_conn.done;
+}
+
+/* send a RF CHAN REL for PDCH on an osmocom dynamci PDCH that's already inactive */
+function f_TC_dyn_osmo_pdch_unsol_deact(charstring id) runs on ConnHdlr {
+	var PCUIF_Message first_info;
+	var integer ts_nr := g_chan_nr.tn;
+	var integer trx_nr := 0;
+	var integer bts_nr := 0;
+	var integer pcu_conn_id := -1;
+
+	f_init_pcu(PCU, id, pcu_conn_id, first_info);
+
+	f_dyn_osmo_pdch_deact(pcu_conn_id, bts_nr, trx_nr);
+	setverdict(pass);
+}
+testcase TC_dyn_osmo_pdch_unsol_deact() runs on test_CT {
+	var ConnHdlrPars pars;
+	var ConnHdlr vc_conn;
+	f_init(testcasename());
+
+	pars := valueof(t_Pars(t_RslChanNr_PDCH(4), ts_RSL_ChanMode_SIGN));
+	vc_conn := f_start_handler(refers(f_TC_dyn_osmo_pdch_unsol_deact), pars, true);
+	vc_conn.done;
+}
+
+/* try to RSL CHAN ACT a PDCH on an osmocom-style PDCH that's already active */
+function f_TC_dyn_osmo_pdch_double_act(charstring id) runs on ConnHdlr {
+	var PCUIF_Message first_info;
+	var integer ts_nr := g_chan_nr.tn;
+	var integer trx_nr := 0;
+	var integer bts_nr := 0;
+	var integer pcu_conn_id := -1;
+
+	f_init_pcu(PCU, id, pcu_conn_id, first_info);
+
+	f_dyn_osmo_pdch_act(pcu_conn_id, bts_nr, trx_nr);
+	f_dyn_osmo_pdch_act(pcu_conn_id, bts_nr, trx_nr);
+	setverdict(pass);
+}
+testcase TC_dyn_osmo_pdch_double_act() runs on test_CT {
+	var ConnHdlrPars pars;
+	var ConnHdlr vc_conn;
+	f_init(testcasename());
+
+	pars := valueof(t_Pars(t_RslChanNr_PDCH(4), ts_RSL_ChanMode_SIGN));
+	vc_conn := f_start_handler(refers(f_TC_dyn_osmo_pdch_double_act), pars, true);
+	vc_conn.done;
+}
+
+/* try to RSL CHAN ACT a TCH/F on an osmocom-style PDCH */
+function f_TC_dyn_osmo_pdch_tchf_act(charstring id) runs on ConnHdlr {
+	var PCUIF_Message first_info;
+	var integer ts_nr := g_chan_nr.tn;
+	var integer trx_nr := 0;
+	var integer bts_nr := 0;
+	var integer pcu_conn_id := -1;
+	var RslChannelNr chan_nr := valueof(t_RslChanNr_Bm(g_chan_nr.tn));
+
+	/* register for the TCH/F channel number */
+	f_rslem_register(0, chan_nr);
+
+	f_init_pcu(PCU, id, pcu_conn_id, first_info);
+
+	f_rsl_transceive(ts_RSL_CHAN_ACT(chan_nr, g_pars.chan_mode), tr_RSL_CHAN_ACT_ACK(chan_nr),
+			 "RSL CHAN ACT");
+	setverdict(pass);
+}
+testcase TC_dyn_osmo_pdch_tchf_act() runs on test_CT {
+	var ConnHdlrPars pars;
+	var ConnHdlr vc_conn;
+	f_init(testcasename());
+
+	pars := valueof(t_Pars(t_RslChanNr_PDCH(4), ts_RSL_ChanMode_SIGN));
+	vc_conn := f_start_handler(refers(f_TC_dyn_osmo_pdch_tchf_act), pars, true);
+	vc_conn.done;
+}
+
+/* try to RSL CHAN ACT the TCH/H on an osmocom-style PDCH */
+function f_TC_dyn_osmo_pdch_tchh_act(charstring id) runs on ConnHdlr {
+	var PCUIF_Message first_info;
+	var integer ts_nr := g_chan_nr.tn;
+	var integer trx_nr := 0;
+	var integer bts_nr := 0;
+	var integer pcu_conn_id := -1;
+	var RslChannelNr chan_nr[2] := { valueof(t_RslChanNr_Lm(g_chan_nr.tn, 0)),
+					 valueof(t_RslChanNr_Lm(g_chan_nr.tn, 1)) };
+
+	/* register for the TCH/H channel numbers */
+	f_rslem_register(0, chan_nr[0]);
+	f_rslem_register(0, chan_nr[1]);
+
+	f_init_pcu(PCU, id, pcu_conn_id, first_info);
+
+	f_rsl_transceive(ts_RSL_CHAN_ACT(chan_nr[1], g_pars.chan_mode),
+			 tr_RSL_CHAN_ACT_ACK(chan_nr[1]), "RSL CHAN ACT [1]");
+	f_rsl_transceive(ts_RSL_CHAN_ACT(chan_nr[0], g_pars.chan_mode),
+			 tr_RSL_CHAN_ACT_ACK(chan_nr[0]), "RSL CHAN ACT [0]");
+	setverdict(pass);
+}
+testcase TC_dyn_osmo_pdch_tchh_act() runs on test_CT {
+	var ConnHdlrPars pars;
+	var ConnHdlr vc_conn;
+	f_init(testcasename());
+
+	pars := valueof(t_Pars(t_RslChanNr_PDCH(4), ts_RSL_ChanMode_SIGN));
+	vc_conn := f_start_handler(refers(f_TC_dyn_osmo_pdch_tchh_act), pars, true);
+	vc_conn.done;
+}
+
 
 /* TODO Areas:
 
@@ -2723,6 +2909,12 @@
 	execute( TC_pcu_data_req_imm_ass_pch() );
 	execute( TC_pcu_rach_content() );
 	execute( TC_pcu_paging_from_rsl() );
+
+	execute( TC_dyn_osmo_pdch_act_deact() );
+	execute( TC_dyn_osmo_pdch_unsol_deact() );
+	execute( TC_dyn_osmo_pdch_double_act() );
+	execute( TC_dyn_osmo_pdch_tchf_act() );
+	execute( TC_dyn_osmo_pdch_tchh_act() );
 }
 
 

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I2a42531dc5555ab4772d538fda462343605b8feb
Gerrit-PatchSet: 1
Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Owner: Harald Welte <laforge at gnumonks.org>
Gerrit-Reviewer: Harald Welte <laforge at gnumonks.org>
Gerrit-Reviewer: Jenkins Builder



More information about the gerrit-log mailing list