bts: Fully implement TC_pcu_data_req_{wrong_{bts,trx,ts},ts_inactive}()

The four existing test in BTS_Tests.ttcn so far didn't have any chance
to verify if the invalid messages actually ended up on the air interface
or not.  By using virtphy instead of trxcon, we can finally add that missing part.

Change-Id: Ie05d6b1530bd4d4cf4eaa574b068870682439ee4
Related: OS#4023
This commit is contained in:
Harald Welte 2019-05-26 12:56:09 +02:00
parent ad033dc6f1
commit 7162a61f16
1 changed files with 57 additions and 25 deletions

View File

@ -3312,63 +3312,95 @@ runs on test_CT
/* Send DATA.req on invalid BTS */
testcase TC_pcu_data_req_wrong_bts() runs on test_CT {
f_init_pcu_test();
var TfiUsfArr tua := f_TfiUsfArrInit();
var octetstring data := '0000'O & f_rnd_octstring(21);
f_virtphy_common();
f_TC_pcu_act_req(0, 0, 7, true);
f_pcu_data_req(23, 0, 7, 0, 0, PCU_IF_SAPI_PDTCH, c_PCU_DATA);
/* FIXME: how to check this wasn't actually sent and didn't crash BTS? */
f_sleep(10.0);
f_TfiUsfArrSet(tua, 7, 0);
f_L1CTL_TBF_CFG(L1CTL, false, tua);
f_sleep(1.0);
f_pcu_to_l1(23, 0, 7, PCU_IF_SAPI_PDTCH, data, false, false);
}
/* Send DATA.req on invalid TRX */
testcase TC_pcu_data_req_wrong_trx() runs on test_CT {
f_init_pcu_test();
var TfiUsfArr tua := f_TfiUsfArrInit();
var octetstring data := '0000'O & f_rnd_octstring(21);
f_virtphy_common();
f_TC_pcu_act_req(0, 0, 7, true);
f_pcu_data_req(0, 100, 7, 0, 0, PCU_IF_SAPI_PDTCH, c_PCU_DATA);
/* FIXME: how to check this wasn't actually sent and didn't crash BTS? */
f_sleep(10.0);
f_TfiUsfArrSet(tua, 7, 0);
f_L1CTL_TBF_CFG(L1CTL, false, tua);
f_sleep(1.0);
f_pcu_to_l1(0, 100, 7, PCU_IF_SAPI_PDTCH, data, false, false);
}
/* Send DATA.req on invalid timeslot */
testcase TC_pcu_data_req_wrong_ts() runs on test_CT {
f_init_pcu_test();
var TfiUsfArr tua := f_TfiUsfArrInit();
var octetstring data := '0000'O & f_rnd_octstring(21);
f_virtphy_common();
f_TC_pcu_act_req(0, 0, 7, true);
f_pcu_data_req(0, 0, 70, 0, 0, PCU_IF_SAPI_PDTCH, c_PCU_DATA);
/* FIXME: how to check this wasn't actually sent and didn't crash BTS? */
f_sleep(10.0);
f_TfiUsfArrSet(tua, 7, 0);
f_L1CTL_TBF_CFG(L1CTL, false, tua);
f_sleep(1.0);
f_pcu_to_l1(0, 0, 70, PCU_IF_SAPI_PDTCH, data, false, false);
}
/* Send DATA.req on timeslot that hasn't been activated */
testcase TC_pcu_data_req_ts_inactive() runs on test_CT {
f_init_pcu_test();
var TfiUsfArr tua := f_TfiUsfArrInit();
var octetstring data := '0000'O & f_rnd_octstring(21);
f_pcu_data_req(0, 0, 7, 0, 0, PCU_IF_SAPI_PDTCH, c_PCU_DATA);
/* FIXME: how to check this wasn't actually sent and didn't crash BTS? */
f_sleep(2.0);
f_virtphy_common();
f_TfiUsfArrSet(tua, 7, 0);
f_L1CTL_TBF_CFG(L1CTL, false, tua);
f_sleep(1.0);
f_pcu_to_l1(0, 0, 7, PCU_IF_SAPI_PDTCH, data, false, false);
}
private function f_pcu_to_l1(uint8_t bts_nr, uint8_t trx_nr, uint8_t ts_nr,
PCUIF_Sapi sapi, octetstring data) runs on test_CT
{
PCUIF_Sapi sapi, octetstring data, boolean expect_data := true,
boolean wait_rts := true)
runs on test_CT {
timer T := 5.0;
var L1ctlDlMessage rx_dl;
PCU.clear;
f_pcu_wait_rts_and_data_req(bts_nr, trx_nr, ts_nr, sapi, data);
if (wait_rts) {
f_pcu_wait_rts_and_data_req(bts_nr, trx_nr, ts_nr, sapi, data);
} else {
f_pcu_data_req(bts_nr, trx_nr, ts_nr, 0, 0, sapi, data);
}
T.start;
alt {
[] L1CTL.receive(tr_L1CTL_DATA_IND(t_RslChanNr_PDCH(ts_nr), ?, data)) {
[expect_data] L1CTL.receive(tr_L1CTL_DATA_IND(t_RslChanNr_PDCH(ts_nr), ?, data)) {
/* FIXME: why is fn of DATA_IND different to fn of RTS / DATA_REQ above? */
setverdict(pass);
}
[not expect_data] L1CTL.receive(tr_L1CTL_DATA_IND(t_RslChanNr_PDCH(ts_nr), ?, data)) -> value rx_dl {
setverdict(fail, "Received unexpected ", rx_dl);
}
[] L1CTL.receive {
repeat;
}
[] T.timeout {
[expect_data] T.timeout {
setverdict(fail, "Timeout waiting for ", data);
}
[not expect_data] T.timeout {
setverdict(pass);
}
}
}
@ -5035,13 +5067,13 @@ control {
execute( TC_pcu_deact_req() );
execute( TC_pcu_deact_req_wrong_ts() );
execute( TC_pcu_ver_si13() );
execute( TC_pcu_data_req_wrong_bts() );
execute( TC_pcu_data_req_wrong_trx() );
execute( TC_pcu_data_req_wrong_ts() );
execute( TC_pcu_data_req_ts_inactive() );
if (mp_l1_supports_gprs) {
execute( TC_pcu_data_req_pdtch() );
execute( TC_pcu_data_req_ptcch() );
execute( TC_pcu_data_req_wrong_bts() );
execute( TC_pcu_data_req_wrong_trx() );
execute( TC_pcu_data_req_wrong_ts() );
execute( TC_pcu_data_req_ts_inactive() );
}
execute( TC_pcu_data_req_agch() );
execute( TC_pcu_data_req_imm_ass_pch() );