summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVadim Yanitskiy <vyanitskiy@sysmocom.de>2020-10-21 03:46:18 +0700
committerlaforge <laforge@osmocom.org>2020-10-21 11:51:18 +0000
commit5fa8561b99f3f39a48f5e07535b5671fa2538769 (patch)
treebd2bf36028701f05ec22d2f29276d1cc1fda604f
parent7b1e44f7919b0cc93fdfacd9457de1a31d78b997 (diff)
BTS_Tests: introduce TC_speech_no_rtp_{tchf,tchh}
The purpose of these new test cases is to demonstrate a problem described in OS#4823: the IUT sends *dummy bursts* in absence of MT RTP frames, so on the MS side it looks like RF failures. It's not yet clear what needs to be sent by the BTS in this kind of situation, but at least we can verify that whatever is sent can be decoded on the MS side without CRC errors. Change-Id: I620ea84ae92c976a62c1f8334ec14a2a7685aa21 Related: OS#4823
-rw-r--r--bts/BTS_Tests.ttcn64
1 files changed, 64 insertions, 0 deletions
diff --git a/bts/BTS_Tests.ttcn b/bts/BTS_Tests.ttcn
index cc38433..09a7a15 100644
--- a/bts/BTS_Tests.ttcn
+++ b/bts/BTS_Tests.ttcn
@@ -7072,6 +7072,67 @@ testcase TC_ms_pwr_ctrl_pf_ewma() runs on test_CT {
Misc_Helpers.f_shutdown(__BFILE__, __LINE__);
}
+private function f_TC_speech_no_rtp(charstring id) runs on ConnHdlr {
+ var template L1ctlDlMessage tr_bad_frame;
+ var L1ctlDlMessage l1_dl;
+ timer T := 8.0;
+
+ f_l1_tune(L1CTL);
+ RSL.clear;
+
+ f_est_dchan();
+
+ /* There may be a few errors right after the channel activation */
+ f_sleep(2.0); /* ... so let's give the L1 some time to stabilize */
+ L1CTL.clear;
+
+ /* A universal template for bad Downlink frame: {DATA,TRAFFIC}.ind */
+ tr_bad_frame := tr_L1CTL_TRAFFIC_IND(g_chan_nr, tr_RslLinkID_DCCH(0));
+ tr_bad_frame.header.msg_type := (L1CTL_DATA_IND, L1CTL_TRAFFIC_IND);
+ tr_bad_frame.dl_info.fire_crc := (1..255); /* != 0 */
+ tr_bad_frame.payload := ?;
+
+ T.start;
+ alt {
+ /* OS#4823: DATA.ind or TRAFFIC.ind with bad CRC most likely means that
+ * the IUT is sending *dummy bursts*, so the L1 fails to decode them. */
+ [] L1CTL.receive(tr_bad_frame) -> value l1_dl {
+ setverdict(fail, "Received {DATA,TRAFFIC}.ind with bad CRC: ", l1_dl);
+ }
+ [] as_l1_sacch();
+ [] L1CTL.receive { repeat; }
+ [] T.timeout {
+ /* We're done, break the loop */
+ setverdict(pass);
+ }
+ }
+
+ f_rsl_chan_deact();
+ f_L1CTL_DM_REL_REQ(L1CTL, g_chan_nr);
+}
+testcase TC_speech_no_rtp_tchf() runs on test_CT {
+ var ConnHdlr vc_conn;
+ var ConnHdlrPars pars;
+
+ f_init();
+
+ /* TS1, TCH/F, V1 (FR codec) */
+ pars := valueof(t_Pars(ts_RslChanNr_Bm(1), ts_RSL_ChanMode(RSL_CHRT_TCH_F, RSL_CMOD_SP_GSM1)));
+ vc_conn := f_start_handler(refers(f_TC_speech_no_rtp), pars);
+ vc_conn.done;
+}
+testcase TC_speech_no_rtp_tchh() runs on test_CT {
+ var ConnHdlr vc_conn;
+ var ConnHdlrPars pars;
+
+ f_init();
+
+ /* TS5, TCH/H, V1 (HR codec) */
+ pars := valueof(t_Pars(ts_RslChanNr_Lm(5, 0), ts_RSL_ChanMode(RSL_CHRT_TCH_H, RSL_CMOD_SP_GSM1)));
+ vc_conn := f_start_handler(refers(f_TC_speech_no_rtp), pars);
+ vc_conn.done;
+}
+
/* test generation of RLL ERR IND based on Um errors (TS 48.058 3.9) */
/* protocol error as per 44.006 */
/* link layer failure (repetition of I-frame N200 times without ACK */
@@ -7259,6 +7320,9 @@ control {
execute( TC_ms_pwr_ctrl_constant() );
execute( TC_ms_pwr_ctrl_pf_ewma() );
+
+ execute( TC_speech_no_rtp_tchf() );
+ execute( TC_speech_no_rtp_tchh() );
}