diff --git a/bts/BTS_Tests_SMSCB.ttcn b/bts/BTS_Tests_SMSCB.ttcn index 1e1770332..11855bfd2 100644 --- a/bts/BTS_Tests_SMSCB.ttcn +++ b/bts/BTS_Tests_SMSCB.ttcn @@ -54,8 +54,8 @@ t_CbchPC(template (value) CbchTestMsgs msgs, template (omit) CbchTestMsg def := /* CBCH test parameters for most of our tests */ type record CbchTestPars { - /* should we execute on SDCCH4 (true) or SDCCH8 (false) ? */ - boolean use_sdcch4, + /* Should we execute on SDCCH4 or SDCCH8? */ + RslChannelNr chan_nr, /* Parameters for BASIC CBCH */ CbchTestParsChan basic, /* Parameters for EXTENDED CBCH */ @@ -195,29 +195,51 @@ runs on test_CT { } } -private function f_vty_cbch_setup(boolean use_sdcch4 := true) runs on test_CT { +private function f_vty_cbch_setup(in RslChannelNr chan_nr) runs on test_CT { - if (use_sdcch4 == true) { - f_vty_config2(BSCVTY, {"network", "bts 0", "trx 0", "timeslot 0"}, + if (match(chan_nr, t_RslChanNr_CBCH4(0))) { + f_vty_config2(BSCVTY, { "network", "bts 0", "trx 0", "timeslot 0"}, "phys_chan_config CCCH+SDCCH4+CBCH"); - f_vty_config2(BSCVTY, {"network", "bts 0", "trx 0", "timeslot 6"}, - "phys_chan_config SDCCH8"); - } else { - f_vty_config2(BSCVTY, {"network", "bts 0", "trx 0", "timeslot 0"}, + /* (Re)configure timeslots 1..3 as TCH/F */ + for (var integer tn := 1; tn <= 3; tn := tn + 1) { + f_vty_config2(BSCVTY, { "network", "bts 0", "trx 0", + "timeslot " & int2str(tn) }, + "phys_chan_config TCH/F"); + } + } else if (match(chan_nr, t_RslChanNr_CBCH8(?))) { + f_vty_config2(BSCVTY, { "network", "bts 0", "trx 0", "timeslot 0"}, "phys_chan_config CCCH+SDCCH4"); - f_vty_config2(BSCVTY, {"network", "bts 0", "trx 0", "timeslot 6"}, + f_vty_config2(BSCVTY, { "network", "bts 0", "trx 0", + "timeslot " & int2str(chan_nr.tn) }, "phys_chan_config SDCCH8+CBCH"); + + /* (Re)configure timeslots 1..3 (excluding the given one) as TCH/F */ + for (var integer tn := 1; tn <= 3; tn := tn + 1) { + if (tn == chan_nr.tn) + { continue; } + f_vty_config2(BSCVTY, { "network", "bts 0", "trx 0", + "timeslot " & int2str(tn) }, + "phys_chan_config TCH/F"); + } } f_vty_transceive(BSCVTY, "drop bts connection 0 oml"); f_sleep(2.0); } private function f_smscb_setup(inout CbchTestPars pars) runs on test_CT { + /* Make sure we've got either SDCCH4+CBCH or SDCCH8+CBCH. + * SDCCH4+CBCH can only be allocated on TS0, SDCCH8+CBCH on TS0..3. + * On C0 the first timeslot shall always transmit BCCH, thus TS1..3.*/ + if (not match(pars.chan_nr, (t_RslChanNr_CBCH4(0), t_RslChanNr_CBCH8(1), + t_RslChanNr_CBCH8(2), t_RslChanNr_CBCH8(3)))) { + setverdict(inconc, "Unhandled channel number: ", pars.chan_nr); + mtc.stop; + } f_cbch_compute_exp_blocks(pars); f_init_vty_bsc(); /* ensure that a CBCH is present in channel combination */ - f_vty_cbch_setup(pars.use_sdcch4); + f_vty_cbch_setup(pars.chan_nr); f_init(); f_init_l1ctl(); @@ -231,14 +253,6 @@ private function f_smscb_setup(inout CbchTestPars pars) runs on test_CT { } } -private function f_smscb_cleanup() runs on test_CT { - /* reset timeslot 0 channel combination to default */ - f_vty_config2(BSCVTY, {"network", "bts 0", "trx 0", "timeslot 0"}, - "phys_chan_config CCCH+SDCCH4"); - f_vty_config2(BSCVTY, {"network", "bts 0", "trx 0", "timeslot 6"}, - "phys_chan_config SDCCH8"); -} - /* construct a receive/match template for given block_nr in given msg */ private function f_get_block_template(CbchTestMsg msg, integer block_nr) return template CBCH_Block { var template CBCH_Block tr; @@ -326,17 +340,8 @@ private function f_cbch_report(CbchTestParsChan pars_chan, charstring id) } } -private function t_cbch_chan_nr(CbchTestPars pars, template uint8_t tn) return template RslChannelNr { - if (pars.use_sdcch4) { - return t_RslChanNr_CBCH4(tn); - } else { - return t_RslChanNr_CBCH8(tn); - } -} - /* shared function doing the heavy lifting for most CBCH tests */ private function f_TC_smscb(CbchTestPars pars) runs on test_CT { - var template RslChannelNr t_chan_nr := t_cbch_chan_nr(pars, 0); /* FIXME: TS number */ var L1ctlDlMessage dl; var integer msg_count; timer T; @@ -358,7 +363,7 @@ private function f_TC_smscb(CbchTestPars pars) runs on test_CT { T.start(5.0 + 3.0 * int2float(msg_count)); /* Expect this to show up exactly once on the basic CBCH (four blocks) */ alt { - [] L1CTL.receive(tr_L1CTL_DATA_IND(t_chan_nr)) -> value dl { + [] L1CTL.receive(tr_L1CTL_DATA_IND(pars.chan_nr)) -> value dl { var integer tb := f_cbch_fn2tb(dl.dl_info.frame_nr); var CBCH_Block cb := dec_CBCH_Block(dl.payload.data_ind.payload); log("Tb=", tb, ", CBCH: ", dl, ", block: ", cb); @@ -386,12 +391,10 @@ private function f_TC_smscb(CbchTestPars pars) runs on test_CT { } } - f_smscb_cleanup(); Misc_Helpers.f_shutdown(__BFILE__, __LINE__, pass); } private function f_TC_smscb_default_only(CbchTestPars pars) runs on test_CT { - var template RslChannelNr t_chan_nr := t_cbch_chan_nr(pars, 0); /* FIXME: TS number */ var L1ctlDlMessage dl; timer T := 5.0; @@ -403,7 +406,7 @@ private function f_TC_smscb_default_only(CbchTestPars pars) runs on test_CT { T.start; alt { - [] L1CTL.receive(tr_L1CTL_DATA_IND(t_chan_nr)) -> value dl { + [] L1CTL.receive(tr_L1CTL_DATA_IND(pars.chan_nr)) -> value dl { var integer tb := f_cbch_fn2tb(dl.dl_info.frame_nr); log("CBCH: ", dl); var CBCH_Block cb := dec_CBCH_Block(dl.payload.data_ind.payload); @@ -436,7 +439,6 @@ private function f_TC_smscb_default_only(CbchTestPars pars) runs on test_CT { [] T.timeout {} } - f_smscb_cleanup(); /* don't shut down; some tests still want to continue */ } @@ -505,7 +507,7 @@ private const CbchTestMsg msg_default := { /* transmit single-block SMSCB COMMAND */ testcase TC_sms_cb_cmd_sdcch4_1block() runs on test_CT { var CbchTestPars pars := { - use_sdcch4 := true, + chan_nr := valueof(ts_RslChanNr_CBCH4(0)), basic := valueof(t_CbchPC(msgs_1m_1b_norm)), extended := omit }; @@ -513,7 +515,7 @@ testcase TC_sms_cb_cmd_sdcch4_1block() runs on test_CT { } testcase TC_sms_cb_cmd_sdcch8_1block() runs on test_CT { var CbchTestPars pars := { - use_sdcch4 := false, + chan_nr := valueof(ts_RslChanNr_CBCH8(2)), basic := valueof(t_CbchPC(msgs_1m_1b_norm)), extended := omit }; @@ -523,7 +525,7 @@ testcase TC_sms_cb_cmd_sdcch8_1block() runs on test_CT { /* transmit dual-block SMSCB COMMAND */ testcase TC_sms_cb_cmd_sdcch4_2block() runs on test_CT { var CbchTestPars pars := { - use_sdcch4 := true, + chan_nr := valueof(ts_RslChanNr_CBCH4(0)), basic := valueof(t_CbchPC(msgs_1m_2b_norm)), extended := omit }; @@ -531,7 +533,7 @@ testcase TC_sms_cb_cmd_sdcch4_2block() runs on test_CT { } testcase TC_sms_cb_cmd_sdcch8_2block() runs on test_CT { var CbchTestPars pars := { - use_sdcch4 := false, + chan_nr := valueof(ts_RslChanNr_CBCH8(2)), basic := valueof(t_CbchPC(msgs_1m_2b_norm)), extended := omit }; @@ -541,7 +543,7 @@ testcase TC_sms_cb_cmd_sdcch8_2block() runs on test_CT { /* transmit triple-block SMSCB COMMAND */ testcase TC_sms_cb_cmd_sdcch4_3block() runs on test_CT { var CbchTestPars pars := { - use_sdcch4 := true, + chan_nr := valueof(ts_RslChanNr_CBCH4(0)), basic := valueof(t_CbchPC(msgs_1m_3b_norm)), extended := omit }; @@ -549,7 +551,7 @@ testcase TC_sms_cb_cmd_sdcch4_3block() runs on test_CT { } testcase TC_sms_cb_cmd_sdcch8_3block() runs on test_CT { var CbchTestPars pars := { - use_sdcch4 := false, + chan_nr := valueof(ts_RslChanNr_CBCH8(2)), basic := valueof(t_CbchPC(msgs_1m_3b_norm)), extended := omit }; @@ -559,7 +561,7 @@ testcase TC_sms_cb_cmd_sdcch8_3block() runs on test_CT { /* transmit quad-block SMSCB COMMAND */ testcase TC_sms_cb_cmd_sdcch4_4block() runs on test_CT { var CbchTestPars pars := { - use_sdcch4 := true, + chan_nr := valueof(ts_RslChanNr_CBCH4(0)), basic := valueof(t_CbchPC(msgs_1m_4b_norm)), extended := omit }; @@ -567,7 +569,7 @@ testcase TC_sms_cb_cmd_sdcch4_4block() runs on test_CT { } testcase TC_sms_cb_cmd_sdcch8_4block() runs on test_CT { var CbchTestPars pars := { - use_sdcch4 := false, + chan_nr := valueof(ts_RslChanNr_CBCH8(2)), basic := valueof(t_CbchPC(msgs_1m_4b_norm)), extended := omit }; @@ -577,7 +579,7 @@ testcase TC_sms_cb_cmd_sdcch8_4block() runs on test_CT { /* transmit multiple commands of each 4 blocks */ testcase TC_sms_cb_cmd_sdcch4_multi() runs on test_CT { var CbchTestPars pars := { - use_sdcch4 := true, + chan_nr := valueof(ts_RslChanNr_CBCH4(0)), basic := valueof(t_CbchPC(msgs_3m_4b_norm)), extended := omit }; @@ -585,7 +587,7 @@ testcase TC_sms_cb_cmd_sdcch4_multi() runs on test_CT { } testcase TC_sms_cb_cmd_sdcch8_multi() runs on test_CT { var CbchTestPars pars := { - use_sdcch4 := false, + chan_nr := valueof(ts_RslChanNr_CBCH8(2)), basic := valueof(t_CbchPC(msgs_3m_4b_norm)), extended := omit }; @@ -595,7 +597,7 @@ testcase TC_sms_cb_cmd_sdcch8_multi() runs on test_CT { /* transmit multiple commands of each 4 blocks on CBCH EXTD */ testcase TC_sms_cb_cmd_sdcch4_extd_multi() runs on test_CT { var CbchTestPars pars := { - use_sdcch4 := true, + chan_nr := valueof(ts_RslChanNr_CBCH4(0)), basic := valueof(t_CbchPC({})), extended := valueof(t_CbchPC(msgs_3m_4b_norm)) }; @@ -603,7 +605,7 @@ testcase TC_sms_cb_cmd_sdcch4_extd_multi() runs on test_CT { } testcase TC_sms_cb_cmd_sdcch8_extd_multi() runs on test_CT { var CbchTestPars pars := { - use_sdcch4 := false, + chan_nr := valueof(ts_RslChanNr_CBCH8(2)), basic := valueof(t_CbchPC({})), extended := valueof(t_CbchPC(msgs_3m_4b_norm)) }; @@ -613,7 +615,7 @@ testcase TC_sms_cb_cmd_sdcch8_extd_multi() runs on test_CT { /* transmit SMSCB COMMAND with SCHEDULE payload */ testcase TC_sms_cb_cmd_sdcch4_schedule() runs on test_CT { var CbchTestPars pars := { - use_sdcch4 := true, + chan_nr := valueof(ts_RslChanNr_CBCH4(0)), basic := valueof(t_CbchPC(msgs_1m_4b_sched)), extended := omit }; @@ -621,7 +623,7 @@ testcase TC_sms_cb_cmd_sdcch4_schedule() runs on test_CT { } testcase TC_sms_cb_cmd_sdcch8_schedule() runs on test_CT { var CbchTestPars pars := { - use_sdcch4 := false, + chan_nr := valueof(ts_RslChanNr_CBCH8(2)), basic := valueof(t_CbchPC(msgs_1m_4b_sched)), extended := omit }; @@ -631,7 +633,7 @@ testcase TC_sms_cb_cmd_sdcch8_schedule() runs on test_CT { /* set a DEFAULT message; verify it gets transmitted all the time */ testcase TC_sms_cb_cmd_sdcch4_default_only() runs on test_CT { var CbchTestPars pars := { - use_sdcch4 := true, + chan_nr := valueof(ts_RslChanNr_CBCH4(0)), basic := valueof(t_CbchPC(msgs_1m_3b_default)), extended := omit }; @@ -640,7 +642,7 @@ testcase TC_sms_cb_cmd_sdcch4_default_only() runs on test_CT { } testcase TC_sms_cb_cmd_sdcch8_default_only() runs on test_CT { var CbchTestPars pars := { - use_sdcch4 := true, + chan_nr := valueof(ts_RslChanNr_CBCH4(0)), basic := valueof(t_CbchPC(msgs_1m_3b_default)), extended := omit }; @@ -650,7 +652,7 @@ testcase TC_sms_cb_cmd_sdcch8_default_only() runs on test_CT { testcase TC_sms_cb_cmd_sdcch4_default_and_normal() runs on test_CT { var CbchTestPars pars := { - use_sdcch4 := true, + chan_nr := valueof(ts_RslChanNr_CBCH4(0)), basic := valueof(t_CbchPC(msgs_1m_3b_norm, msg_default)), extended := omit }; @@ -658,7 +660,7 @@ testcase TC_sms_cb_cmd_sdcch4_default_and_normal() runs on test_CT { } testcase TC_sms_cb_cmd_sdcch8_default_and_normal() runs on test_CT { var CbchTestPars pars := { - use_sdcch4 := true, + chan_nr := valueof(ts_RslChanNr_CBCH8(2)), basic := valueof(t_CbchPC(msgs_1m_3b_norm, msg_default)), extended := omit }; @@ -668,7 +670,7 @@ testcase TC_sms_cb_cmd_sdcch8_default_and_normal() runs on test_CT { /* first set a DEFAULT message, then disable it again */ testcase TC_sms_cb_cmd_sdcch4_default_then_null() runs on test_CT { var CbchTestPars pars := { - use_sdcch4 := true, + chan_nr := valueof(ts_RslChanNr_CBCH4(0)), basic := valueof(t_CbchPC(msgs_1m_3b_default)), extended := omit }; @@ -772,17 +774,17 @@ function f_TC_cbc_load_idle() runs on test_CT { } } } - f_smscb_cleanup(); + Misc_Helpers.f_shutdown(__BFILE__, __LINE__); } testcase TC_cbc_sdcch4_load_idle() runs on test_CT { f_init_vty_bsc(); - f_vty_cbch_setup(use_sdcch4 := true); + f_vty_cbch_setup(valueof(ts_RslChanNr_CBCH4(0))); f_TC_cbc_load_idle(); } testcase TC_cbc_sdcch8_load_idle() runs on test_CT { f_init_vty_bsc(); - f_vty_cbch_setup(use_sdcch4 := false); + f_vty_cbch_setup(valueof(ts_RslChanNr_CBCH8(2))); f_TC_cbc_load_idle(); } @@ -853,29 +855,29 @@ function f_TC_cbc_load_overload(CbchTestPars pars) runs on test_CT { } } } - f_smscb_cleanup(); + Misc_Helpers.f_shutdown(__BFILE__, __LINE__); } testcase TC_cbc_sdcch4_load_overload() runs on test_CT { var CbchTestPars pars := { - use_sdcch4 := true, + chan_nr := valueof(ts_RslChanNr_CBCH4(0)), basic := valueof(t_CbchPC(msgs_1m_3b_norm)), extended := omit }; f_init_vty_bsc(); - f_vty_cbch_setup(use_sdcch4 := true); + f_vty_cbch_setup(pars.chan_nr); f_TC_cbc_load_overload(pars); } testcase TC_cbc_sdcch8_load_overload() runs on test_CT { var CbchTestPars pars := { - use_sdcch4 := true, + chan_nr := valueof(ts_RslChanNr_CBCH4(2)), basic := valueof(t_CbchPC(msgs_1m_3b_norm)), extended := omit }; f_init_vty_bsc(); - f_vty_cbch_setup(use_sdcch4 := true); + f_vty_cbch_setup(pars.chan_nr); f_TC_cbc_load_overload(pars); }