diff options
author | Vadim Yanitskiy <vyanitskiy@sysmocom.de> | 2023-05-26 18:45:29 +0700 |
---|---|---|
committer | fixeria <vyanitskiy@sysmocom.de> | 2023-09-04 20:27:44 +0000 |
commit | 981bc2cccb14094bc88adc37bfbda4484d7b34bd (patch) | |
tree | 9e0b226c98bba95dc53acd85826e1b47992537d3 | |
parent | fde1b81183e5ed573f1d0afc2fd6c8643700f822 (diff) |
BTS_Tests: add TC_data_rtp_tch* for CSD
Change-Id: I9a0dc0fcf722f862d8dcf04660d4448662210f44
Related: osmo-bts.git I08ffbf8e79ce76a586d61f5463890c6e72a6d9b9
Related: osmocom-bb.git I0d7389a9a5f7019b9316ab1c0115797ff54a0e41
Related: OS#1572, OS#4396
-rw-r--r-- | bts/BTS_Tests.ttcn | 211 | ||||
-rw-r--r-- | bts/expected-results.xml | 6 |
2 files changed, 217 insertions, 0 deletions
diff --git a/bts/BTS_Tests.ttcn b/bts/BTS_Tests.ttcn index 888abf54..3fe6120a 100644 --- a/bts/BTS_Tests.ttcn +++ b/bts/BTS_Tests.ttcn @@ -8572,6 +8572,210 @@ testcase TC_speech_osmux_tchh() runs on test_CT { Misc_Helpers.f_shutdown(__BFILE__, __LINE__); } +/* CSD channel tests */ +private function f_TC_data_rtp_loopback(charstring id) runs on ConnHdlr { + var octetstring udata := ''O; + var integer payload_len; + var L1ctlMessage l1_dl; + timer Td; + + log("Testing channel mode ", g_pars.chan_mode); + + select (g_pars.chan_mode) { + case (tr_RSL_ChanMode_DATA(RSL_CHRT_TCH_F, (RSL_CMOD_CSD_T_14k4, RSL_CMOD_CSD_NT_14k5))) + { payload_len := 290; } + case (tr_RSL_ChanMode_DATA(RSL_CHRT_TCH_F, (RSL_CMOD_CSD_T_9k6, RSL_CMOD_CSD_NT_12k0))) + { payload_len := 4 * 60; } + case (tr_RSL_ChanMode_DATA(RSL_CHRT_TCH_F, (RSL_CMOD_CSD_T_4k8, RSL_CMOD_CSD_NT_6k0))) + { payload_len := 2 * 60; } + case (tr_RSL_ChanMode_DATA(RSL_CHRT_TCH_H, (RSL_CMOD_CSD_T_4k8, RSL_CMOD_CSD_NT_6k0))) + { payload_len := 4 * 60; } + case (tr_RSL_ChanMode_DATA(RSL_CHRT_TCH_F, (RSL_CMOD_CSD_T_2k4, RSL_CMOD_CSD_T_1k2, + RSL_CMOD_CSD_T_600, RSL_CMOD_CSD_T_1200_75))) + { payload_len := 2 * 36; } + case (tr_RSL_ChanMode_DATA(RSL_CHRT_TCH_H, (RSL_CMOD_CSD_T_2k4, RSL_CMOD_CSD_T_1k2, + RSL_CMOD_CSD_T_600, RSL_CMOD_CSD_T_1200_75))) + { payload_len := 4 * 36; } + case else { + setverdict(fail, "Unhandled RSL channel mode := ", g_pars.chan_mode); + Misc_Helpers.f_shutdown(__BFILE__, __LINE__); + } + } + + /* Generate a pseudo-random payload */ + for (var integer i := 0; i < payload_len; i := i + 1) { + udata := udata & int2oct(i mod 2, 1); + } + + /* Activate the RTP emulation */ + f_rtpem_activate(mode := RTPEM_MODE_LOOPBACK, rtp_pt := 120); + + /* Tune to the dedicated channel */ + f_l1_tune(L1CTL); + f_est_dchan(); + + /* Send a pseudo-random data frame on the Uplink */ + log("Sending Uplink TCH (len=", lengthof(udata), "): ", udata); + L1CTL.send(ts_L1CTL_TRAFFIC_REQ(g_chan_nr, ts_RslLinkID_DCCH(0), udata)); + + /* Expect this frame to show up on the Downlink */ + Td.start(4.0); + alt { + [] L1CTL.receive(tr_L1CTL_TRAFFIC_IND(g_chan_nr, frame := udata)) { + log("TCH received (len=", lengthof(udata), "): ", udata); + setverdict(pass); + Td.stop; + } + [] L1CTL.receive(tr_L1CTL_TRAFFIC_IND(g_chan_nr)) -> value l1_dl { + var octetstring ddata := l1_dl.payload.traffic_ind.data; + log("TCH received (len=", lengthof(ddata), "): ", ddata); + repeat; + } + [] L1CTL.receive(tr_L1CTL_DATA_IND(g_chan_nr)) -> value l1_dl { + var octetstring ddata := l1_dl.payload.data_ind.payload; + log("FACCH received: ", ddata); + repeat; + } + [] as_l1_sacch(); + [] L1CTL.receive { repeat; } + [] Td.timeout { + setverdict(fail, "Timeout waiting for matching Downlink data frame"); + Misc_Helpers.f_shutdown(__BFILE__, __LINE__); + } + } + + /* TODO: send and expect FACCH */ + + f_rtpem_mode(RTPEM_CTRL, RTPEM_MODE_NONE); + f_L1CTL_DM_REL_REQ(L1CTL, g_chan_nr); + f_rsl_chan_deact(); + f_rslem_unregister(0, g_chan_nr); +} +testcase TC_data_rtp_tchf144() runs on test_CT { + var ConnHdlr vc_conn; + var ConnHdlrPars pars; + + f_init(); + + /* TS1, TCH/F14.4 (14k5 radio interface rate), transparent service */ + pars := valueof(t_Pars(ts_RslChanNr_Bm(1), + ts_RSL_ChanMode_DATA(RSL_CHRT_TCH_F, RSL_CMOD_CSD_T_14k4))); + vc_conn := f_start_handler(refers(f_TC_data_rtp_loopback), pars); + vc_conn.done; + + /* TS1, TCH/F14.4 (14k5 radio interface rate), non-transparent service */ + pars := valueof(t_Pars(ts_RslChanNr_Bm(1), + ts_RSL_ChanMode_DATA(RSL_CHRT_TCH_F, RSL_CMOD_CSD_NT_14k5))); + vc_conn := f_start_handler(refers(f_TC_data_rtp_loopback), pars); + vc_conn.done; + + Misc_Helpers.f_shutdown(__BFILE__, __LINE__); +} + +testcase TC_data_rtp_tchf96() runs on test_CT { + var ConnHdlr vc_conn; + var ConnHdlrPars pars; + + f_init(); + + /* TS1, TCH/F9.6 (12k radio interface rate), transparent service */ + pars := valueof(t_Pars(ts_RslChanNr_Bm(1), + ts_RSL_ChanMode_DATA(RSL_CHRT_TCH_F, RSL_CMOD_CSD_T_9k6))); + vc_conn := f_start_handler(refers(f_TC_data_rtp_loopback), pars); + vc_conn.done; + + /* TS1, TCH/F9.6 (12k radio interface rate), non-transparent service */ + pars := valueof(t_Pars(ts_RslChanNr_Bm(1), + ts_RSL_ChanMode_DATA(RSL_CHRT_TCH_F, RSL_CMOD_CSD_NT_12k0))); + vc_conn := f_start_handler(refers(f_TC_data_rtp_loopback), pars); + vc_conn.done; + + Misc_Helpers.f_shutdown(__BFILE__, __LINE__); +} + +testcase TC_data_rtp_tchf48() runs on test_CT { + var ConnHdlr vc_conn; + var ConnHdlrPars pars; + + f_init(); + + /* TS1, TCH/F4.8 (6k radio interface rate), transparent service */ + pars := valueof(t_Pars(ts_RslChanNr_Bm(1), + ts_RSL_ChanMode_DATA(RSL_CHRT_TCH_F, RSL_CMOD_CSD_T_4k8))); + vc_conn := f_start_handler(refers(f_TC_data_rtp_loopback), pars); + vc_conn.done; + + /* TS1, TCH/F4.8 (6k radio interface rate), non-transparent service */ + pars := valueof(t_Pars(ts_RslChanNr_Bm(1), + ts_RSL_ChanMode_DATA(RSL_CHRT_TCH_F, RSL_CMOD_CSD_NT_6k0))); + vc_conn := f_start_handler(refers(f_TC_data_rtp_loopback), pars); + vc_conn.done; + + Misc_Helpers.f_shutdown(__BFILE__, __LINE__); +} + +testcase TC_data_rtp_tchh48() runs on test_CT { + var ConnHdlr vc_conn; + var ConnHdlrPars pars; + + f_init(); + + /* TS1, TCH/H4.8 (6k radio interface rate), transparent service */ + pars := valueof(t_Pars(ts_RslChanNr_Lm(5, 0), + ts_RSL_ChanMode_DATA(RSL_CHRT_TCH_H, RSL_CMOD_CSD_T_4k8))); + vc_conn := f_start_handler(refers(f_TC_data_rtp_loopback), pars); + vc_conn.done; + + /* TS1, TCH/H4.8 (6k radio interface rate), non-transparent service */ + pars := valueof(t_Pars(ts_RslChanNr_Lm(5, 0), + ts_RSL_ChanMode_DATA(RSL_CHRT_TCH_H, RSL_CMOD_CSD_NT_6k0))); + vc_conn := f_start_handler(refers(f_TC_data_rtp_loopback), pars); + vc_conn.done; + + Misc_Helpers.f_shutdown(__BFILE__, __LINE__); +} + +testcase TC_data_rtp_tchf24() runs on test_CT { + var ConnHdlr vc_conn; + var ConnHdlrPars pars; + + f_init(); + + /* TS1, TCH/F2.4 (3k6 radio interface rate), transparent services only */ + pars := valueof(t_Pars(ts_RslChanNr_Bm(1), + ts_RSL_ChanMode_DATA(RSL_CHRT_TCH_F, RSL_CMOD_CSD_T_2k4))); + vc_conn := f_start_handler(refers(f_TC_data_rtp_loopback), pars); + vc_conn.done; + + pars := valueof(t_Pars(ts_RslChanNr_Bm(1), + ts_RSL_ChanMode_DATA(RSL_CHRT_TCH_F, RSL_CMOD_CSD_T_1k2))); + vc_conn := f_start_handler(refers(f_TC_data_rtp_loopback), pars); + vc_conn.done; + + Misc_Helpers.f_shutdown(__BFILE__, __LINE__); +} + +testcase TC_data_rtp_tchh24() runs on test_CT { + var ConnHdlr vc_conn; + var ConnHdlrPars pars; + + f_init(); + + /* TS1, TCH/H2.4 (3k6 radio interface rate), transparent services only */ + pars := valueof(t_Pars(ts_RslChanNr_Lm(5, 0), + ts_RSL_ChanMode_DATA(RSL_CHRT_TCH_H, RSL_CMOD_CSD_T_2k4))); + vc_conn := f_start_handler(refers(f_TC_data_rtp_loopback), pars); + vc_conn.done; + + pars := valueof(t_Pars(ts_RslChanNr_Lm(5, 0), + ts_RSL_ChanMode_DATA(RSL_CHRT_TCH_H, RSL_CMOD_CSD_T_1k2))); + vc_conn := f_start_handler(refers(f_TC_data_rtp_loopback), pars); + vc_conn.done; + + Misc_Helpers.f_shutdown(__BFILE__, __LINE__); +} + + private function f_TC_early_immediate_assignment(charstring id) runs on ConnHdlr { var GsmFrameNumber fn; var ChannelDescription ch_desc; @@ -9178,6 +9382,13 @@ control { execute( TC_speech_osmux_tchf() ); execute( TC_speech_osmux_tchh() ); + execute( TC_data_rtp_tchf144() ); + execute( TC_data_rtp_tchf96() ); + execute( TC_data_rtp_tchf48() ); + execute( TC_data_rtp_tchh48() ); + execute( TC_data_rtp_tchf24() ); + execute( TC_data_rtp_tchh24() ); + execute( TC_early_immediate_assignment() ); execute( TC_acch_overpower_rxqual_thresh() ); diff --git a/bts/expected-results.xml b/bts/expected-results.xml index a78755ca..61c0b605 100644 --- a/bts/expected-results.xml +++ b/bts/expected-results.xml @@ -180,6 +180,12 @@ <testcase classname='BTS_Tests' name='TC_speech_rtp_tchh' time='MASKED'/> <testcase classname='BTS_Tests' name='TC_speech_osmux_tchf' time='MASKED'/> <testcase classname='BTS_Tests' name='TC_speech_osmux_tchh' time='MASKED'/> + <testcase classname='BTS_Tests' name='TC_data_rtp_tchf144' time='MASKED'/> + <testcase classname='BTS_Tests' name='TC_data_rtp_tchf96' time='MASKED'/> + <testcase classname='BTS_Tests' name='TC_data_rtp_tchf48' time='MASKED'/> + <testcase classname='BTS_Tests' name='TC_data_rtp_tchh48' time='MASKED'/> + <testcase classname='BTS_Tests' name='TC_data_rtp_tchf24' time='MASKED'/> + <testcase classname='BTS_Tests' name='TC_data_rtp_tchh24' time='MASKED'/> <testcase classname='BTS_Tests' name='TC_early_immediate_assignment' time='MASKED'/> <testcase classname='BTS_Tests' name='TC_acch_overpower_rxqual_thresh' time='MASKED'/> <testcase classname='BTS_Tests' name='TC_acch_overpower_rxqual_thresh_dtx' time='MASKED'/> |