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

bts: Add first two tests about IPA style dynamic PDCH

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


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

diff --git a/bts/BTS_Tests.ttcn b/bts/BTS_Tests.ttcn
index 5316696..d91ed92 100644
--- a/bts/BTS_Tests.ttcn
+++ b/bts/BTS_Tests.ttcn
@@ -2635,7 +2635,7 @@
 }
 
 /***********************************************************************
- * Dynamic Timeslot Support
+ * Osmocom Style Dynamic Timeslot Support
  ***********************************************************************/
 
 private function f_dyn_osmo_pdch_act(integer pcu_conn_id, integer bts_nr, 
integer trx_nr)
@@ -2817,6 +2817,115 @@
        vc_conn.done;
 }
 
+/***********************************************************************
+ * IPA Style Dynamic Timeslot Support
+ ***********************************************************************/
+
+private function f_dyn_ipa_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;
+       RSL.send(ts_RSL_IPA_PDCH_ACT(g_chan_nr));
+       /* 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? */
+
+       RSL.receive(tr_RSL_IPA_PDCH_ACT_ACK(g_chan_nr, ?));
+}
+
+private function f_dyn_ipa_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) */
+       RSL.send(ts_RSL_IPA_PDCH_DEACT(g_chan_nr));
+       PCU.clear;
+       /* 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_IPA_PDCH_DEACT_ACK(g_chan_nr)) {
+               setverdict(pass);
+               }
+       [] RSL.receive { repeat; }
+       }
+}
+
+/* Activate and de-activate an IPA-style dynamic TCH/F + PDCH */
+function f_TC_dyn_ipa_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_ipa_pdch_act(pcu_conn_id, bts_nr, trx_nr);
+       f_sleep(3.0);
+       f_dyn_ipa_pdch_deact(pcu_conn_id, bts_nr, trx_nr);
+
+       setverdict(pass);
+
+}
+testcase TC_dyn_ipa_pdch_act_deact() runs on test_CT {
+       var ConnHdlrPars pars;
+       var ConnHdlr vc_conn;
+       f_init();
+
+       pars := valueof(t_Pars(t_RslChanNr_Bm(3), ts_RSL_ChanMode_SIGN));
+       vc_conn := f_start_handler(refers(f_TC_dyn_ipa_pdch_act_deact), pars, 
true);
+       vc_conn.done;
+}
+
+/* try to RSL CHAN ACT a TCH/F on an IPA-style PDCH */
+function f_TC_dyn_ipa_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_ipa_pdch_tchf_act() runs on test_CT {
+       var ConnHdlrPars pars;
+       var ConnHdlr vc_conn;
+       f_init(testcasename());
+
+       pars := valueof(t_Pars(t_RslChanNr_PDCH(3), ts_RSL_ChanMode_SIGN));
+       vc_conn := f_start_handler(refers(f_TC_dyn_ipa_pdch_tchf_act), pars, 
true);
+       vc_conn.done;
+}
+
+
 
 /* TODO Areas:
 
@@ -2915,6 +3024,8 @@
        execute( TC_dyn_osmo_pdch_double_act() );
        execute( TC_dyn_osmo_pdch_tchf_act() );
        execute( TC_dyn_osmo_pdch_tchh_act() );
+       execute( TC_dyn_ipa_pdch_act_deact() );
+       execute( TC_dyn_ipa_pdch_tchf_act() );
 }
 
 

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I56d8b0284e8e4eee4ce6454f7a495ee09c40fe42
Gerrit-PatchSet: 1
Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Owner: Harald Welte <lafo...@gnumonks.org>

Reply via email to