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

bts: Add TC_sacch_info_mod and TC_sacch_filling

Change-Id: I38b3e302eddb699b2dbdae06fc929dd59de7b2dc
---
M bts/BTS_Tests.ttcn
M library/RSL_Types.ttcn
2 files changed, 118 insertions(+), 0 deletions(-)


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

diff --git a/bts/BTS_Tests.ttcn b/bts/BTS_Tests.ttcn
index dcdf32b..5e0b3fb 100644
--- a/bts/BTS_Tests.ttcn
+++ b/bts/BTS_Tests.ttcn
@@ -636,8 +636,111 @@
        f_shutdown();
 }
 
+private function f_sacch_present(template octetstring l3_exp) runs on ConnHdlr 
{
+       var L1ctlDlMessage dl;
+       /* check that the specified SI5 value is actually sent */
+       timer T_sacch := 3.0;
+       L1CTL.clear;
+       T_sacch.start;
+       alt {
+       [] L1CTL.receive(tr_L1CTL_DATA_IND(g_chan_nr, tr_RslLinkID_SACCH(0))) 
-> value dl {
+               var octetstring l3 := substr(dl.payload.data_ind.payload, 4, 
19);
+               if (match(l3, l3_exp)) {
+                       setverdict(pass);
+               } else {
+                       repeat;
+               }
+               }
+       [] L1CTL.receive { repeat; }
+       [] T_sacch.timeout {
+               setverdict(fail, "Timeout waiting for SACCH ", l3_exp);
+               self.stop;
+               }
+       }
+}
+
 /* Test for default SACCH FILL transmitted in DL SACCH (all channel types) */
+private function f_TC_sacch_filling(charstring id) runs on ConnHdlr {
+       /* Set a known default SACCH filling for SI5 */
+       var octetstring si5 := f_rnd_octstring(19);
+       RSL.send(ts_RSL_SACCH_FILL(RSL_SYSTEM_INFO_5, si5));
+
+       f_l1_tune(L1CTL);
+       RSL.clear;
+
+       /* activate the logical channel */
+       f_est_dchan();
+
+       /* check that the specified SI5 value is actually sent */
+       f_sacch_present(si5);
+
+       /* release the channel */
+       RSL.clear;
+       f_rsl_chan_deact();
+       f_L1CTL_DM_REL_REQ(L1CTL, g_chan_nr);
+}
+testcase TC_sacch_filling() runs on test_CT {
+       var ConnHdlr vc_conn;
+       var ConnHdlrPars pars;
+       f_init();
+       for (var integer i := 0; i < sizeof(g_AllChannels); i := i+1) {
+               pars := valueof(t_Pars(g_AllChannels[i], ts_RSL_ChanMode_SIGN));
+               log(testcasename(), ": Starting for ", g_AllChannels[i]);
+               vc_conn := f_start_handler(refers(f_TC_sacch_filling), pars);
+               vc_conn.done;
+       }
+       /* TODO: do the above in parallel, rather than sequentially? */
+       f_shutdown();
+}
+
 /* Test for lchan-specific SACCH INFO MODIFY (TS 48.058 4.12) */
+private function f_TC_sacch_info_mod(charstring id) runs on ConnHdlr {
+       /* Set a known default SACCH filling for SI5 */
+       var octetstring si5 := f_rnd_octstring(19);
+       var octetstring si5_diff := f_rnd_octstring(19);
+       RSL.send(ts_RSL_SACCH_FILL(RSL_SYSTEM_INFO_5, si5));
+
+       f_l1_tune(L1CTL);
+       RSL.clear;
+
+       log("Activating channel, expecting standard SI5");
+       /* activate the logical channel */
+       f_est_dchan();
+       /* check that the specified SI5 value is actually sent */
+       f_sacch_present(si5);
+
+       /* set channel-specific different SI5 */
+       log("Setting channel specific SACCH INFO, expecting it");
+       RSL.send(ts_RSL_SACCH_INF_MOD(g_chan_nr, RSL_SYSTEM_INFO_5, si5_diff))
+       /* check that the specified lchan-specific value is now used */
+       f_sacch_present(si5_diff);
+
+       /* deactivate the channel and re-activate it, this should result in 
default SI5  */
+       log("De-activating and re-activating channel, expecting standard SI5");
+       f_rsl_chan_deact();
+       f_rsl_chan_act(valueof(ts_RSL_ChanMode_SIGN));
+       /* Verify that the TRX-wide default SACCH filling is present again */
+       f_sacch_present(si5);
+
+       /* release the channel */
+       RSL.clear;
+       f_rsl_chan_deact();
+       f_L1CTL_DM_REL_REQ(L1CTL, g_chan_nr);
+}
+testcase TC_sacch_info_mod() runs on test_CT {
+       var ConnHdlr vc_conn;
+       var ConnHdlrPars pars;
+       f_init();
+       for (var integer i := 0; i < sizeof(g_AllChannels); i := i+1) {
+               pars := valueof(t_Pars(g_AllChannels[i], ts_RSL_ChanMode_SIGN));
+               log(testcasename(), ": Starting for ", g_AllChannels[i]);
+               vc_conn := f_start_handler(refers(f_TC_sacch_info_mod), pars);
+               vc_conn.done;
+       }
+       /* TODO: do the above in parallel, rather than sequentially? */
+       f_shutdown();
+}
+
 /* Test for SACCH transmission rules in the context of special CHAN ACT (HO) */
 
 
@@ -2427,6 +2530,8 @@
        execute( TC_chan_deact_not_active() );
        execute( TC_chan_act_wrong_nr() );
        execute( TC_deact_sacch() );
+       execute( TC_sacch_filling() );
+       execute( TC_sacch_info_mod() );
        execute( TC_rach_content() );
        execute( TC_rach_count() );
        execute( TC_rach_max_ta() );
diff --git a/library/RSL_Types.ttcn b/library/RSL_Types.ttcn
index 3c2db73..f8b66c6 100644
--- a/library/RSL_Types.ttcn
+++ b/library/RSL_Types.ttcn
@@ -1140,6 +1140,19 @@
                }
        }
 
+       /* 8.6.20 BTS <- BSC */
+       template RSL_Message ts_RSL_SACCH_INF_MOD(RslChannelNr chan_nr, 
RSL_IE_SysinfoType si_type,
+                                                 octetstring l3_info) := {
+               msg_disc := ts_RSL_MsgDisc(RSL_MDISC_DCHAN, false),
+               msg_type := RSL_MT_SACCH_INFO_MODIFY,
+               ies := {
+                       t_RSL_IE(RSL_IE_CHAN_NR, RSL_IE_Body:{chan_nr := 
chan_nr}),
+                       t_RSL_IE(RSL_IE_SYSINFO_TYPE, RSL_IE_Body:{sysinfo_type 
:= si_type}),
+                       t_RSL_IE(RSL_IE_L3_INFO, RSL_IE_Body:{l3_info := 
ts_RSL_L16V(l3_info)})
+               }
+       }
+
+
        /* COMMON CHANNEL MANAGEMENT MESSAGES */
 
        /* 8.5.1 BTS <- BSC */

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

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

Reply via email to