fixeria has submitted this change. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/33106 )
Change subject: BTS_Tests: cosmetic: add as_pcuif_msg() for convenience ......................................................................
BTS_Tests: cosmetic: add as_pcuif_msg() for convenience
This altstep eliminates the need to wrap the actual PCUIF message template into another (port specific) template t_SD_PCUIF.
Change-Id: Iabefddd54a4a2e2183feea04fdb8526e74efc7ac --- M bts/BTS_Tests.ttcn 1 file changed, 80 insertions(+), 59 deletions(-)
Approvals: laforge: Looks good to me, but someone else must approve fixeria: Looks good to me, approved pespin: Looks good to me, but someone else must approve Jenkins Builder: Verified
diff --git a/bts/BTS_Tests.ttcn b/bts/BTS_Tests.ttcn index 8d02c40..b1af138 100644 --- a/bts/BTS_Tests.ttcn +++ b/bts/BTS_Tests.ttcn @@ -5315,6 +5315,17 @@ * PCU Socket related tests ***********************************************************************/
+/* Catch a PCUIF message (without having to use t_SD_PCUIF) */ +private altstep as_pcuif_msg(out PCUIF_Message msg, + template (present) PCUIF_Message tr_msg := ?) +runs on test_CT { + var PCUIF_send_data sd; + + [] PCU.receive(t_SD_PCUIF(g_pcu_conn_id, tr_msg)) -> value sd { + msg := sd.data; + } +} + /* Tune the L1 to PDCH on the given timeslot number */ private function f_TC_pcu_l1ctl_est_pdch(uint3_t tn) runs on test_CT { var ConnHdlrPars pars := valueof(t_Pars(ts_RslChanNr_PDCH(tn), ts_RSL_ChanMode_SIGN)); @@ -5326,12 +5337,13 @@ /* Verify no RTS before ACT_REQ; verify RTS after ACT_REQ */ friend function f_TC_pcu_act_req(uint8_t bts_nr, uint8_t trx_nr, uint8_t ts_nr, boolean exp_success) runs on test_CT { + var PCUIF_Message msg; timer T := 3.0;
/* we don't expect any RTS.req before PDCH are active */ T.start; alt { - [] PCU.receive(t_SD_PCUIF(g_pcu_conn_id, tr_PCUIF_RTS_REQ(bts_nr))) { + [] as_pcuif_msg(msg, tr_PCUIF_RTS_REQ(bts_nr)) { Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "PCU RTS.req before PDCH active?"); } [] PCU.receive { repeat; } @@ -5344,14 +5356,13 @@ /* we now expect RTS.req for this timeslot (only) */ T.start; alt { - [exp_success] PCU.receive(t_SD_PCUIF(g_pcu_conn_id, tr_PCUIF_RTS_REQ(bts_nr, trx_nr, ts_nr))) { + [exp_success] as_pcuif_msg(msg, tr_PCUIF_RTS_REQ(bts_nr, trx_nr, ts_nr)) { setverdict(pass); } - [not exp_success] PCU.receive(t_SD_PCUIF(g_pcu_conn_id, - tr_PCUIF_RTS_REQ(bts_nr, trx_nr, ts_nr))) { + [not exp_success] as_pcuif_msg(msg, tr_PCUIF_RTS_REQ(bts_nr, trx_nr, ts_nr)) { Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Unexpected RTS.req for supposedly failing activation"); } - [] PCU.receive(t_SD_PCUIF(g_pcu_conn_id, tr_PCUIF_RTS_REQ)) { + [] as_pcuif_msg(msg, tr_PCUIF_RTS_REQ) { Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "RTS.req for wrong TRX/TS"); } [] PCU.receive { repeat; } @@ -5367,6 +5378,7 @@ /* verify no more RTS after DEACT_REQ */ friend function f_TC_pcu_deact_req(uint8_t bts_nr, uint8_t trx_nr, uint8_t ts_nr) runs on test_CT { + var PCUIF_Message msg; timer T := 3.0;
/* Send PDCH activate request for known PDCH timeslot */ @@ -5378,7 +5390,7 @@ /* we now expect no RTS.req for this timeslot */ T.start; alt { - [] PCU.receive(t_SD_PCUIF(g_pcu_conn_id, tr_PCUIF_RTS_REQ(bts_nr, trx_nr, ts_nr))) { + [] as_pcuif_msg(msg, tr_PCUIF_RTS_REQ(bts_nr, trx_nr, ts_nr)) { Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Received unexpected PCU RTS.req"); } [] PCU.receive { repeat; } @@ -5443,8 +5455,9 @@
/* Test the PCU->BTS Version and BTS->PCU SI13 handshake */ function f_TC_pcu_ver_siXX(octetstring si, RSL_IE_SysinfoType rsl_si_type) runs on test_CT { - var PCUIF_send_data sd; - timer T:= 3.0; + var PCUIF_Message msg; + timer T := 3.0; + f_init_with_pcuif();
/* Set SI13 via RSL */ @@ -5452,8 +5465,8 @@
T.start; alt { - [] PCU.receive(t_SD_PCUIF(g_pcu_conn_id, tr_PCUIF_DATA_IND(0, 0, 0, ?, PCU_IF_SAPI_BCCH))) -> value sd { - if (substr(sd.data.u.data_ind.data, 0, lengthof(si)) == si) { + [] as_pcuif_msg(msg, tr_PCUIF_DATA_IND(0, 0, 0, sapi := PCU_IF_SAPI_BCCH)) { + if (substr(msg.u.data_ind.data, 0, lengthof(si)) == si) { setverdict(pass); } else { repeat; @@ -5500,15 +5513,14 @@ PCUIF_Sapi sapi, octetstring data) runs on test_CT { - var PCUIF_send_data sd; - + var PCUIF_Message msg; timer T := 3.0; + T.start; alt { - [] PCU.receive(t_SD_PCUIF(g_pcu_conn_id, - tr_PCUIF_RTS_REQ(bts_nr, trx_nr, ts_nr, sapi))) -> value sd { - f_pcu_data_req(bts_nr, trx_nr, ts_nr, sd.data.u.rts_req.block_nr, - sd.data.u.rts_req.fn, sapi, data); + [] as_pcuif_msg(msg, tr_PCUIF_RTS_REQ(bts_nr, trx_nr, ts_nr, sapi)) { + f_pcu_data_req(bts_nr, trx_nr, ts_nr, msg.u.rts_req.block_nr, + msg.u.rts_req.fn, sapi, data); } [] PCU.receive { repeat; } [] T.timeout { @@ -5638,7 +5650,7 @@ private function f_TC_pcu_ptcch_ul(uint16_t ra) runs on test_CT { var template PCUIF_Message pcu_rach_ind; - var PCUIF_send_data sd; + var PCUIF_Message msg; var GsmFrameNumber fn; timer T;
@@ -5653,8 +5665,8 @@ /* Expect a RACH.ind on the PCU interface (timeout is one multi-frame) */ T.start(52.0 * 4.615 / 1000.0); alt { - [] PCU.receive(t_SD_PCUIF(g_pcu_conn_id, pcu_rach_ind)) -> value sd { - log("Rx an Access Burst on the PCU interface: ", sd.data); + [] as_pcuif_msg(msg, pcu_rach_ind) { + log("Rx an Access Burst on the PCU interface: ", msg); setverdict(pass); T.stop; } @@ -5787,6 +5799,7 @@
var GsmFrameNumber fn_last := 0; for (var integer i := 0; i < 1000; i := i+1) { + var PCUIF_Message msg; var OCT1 ra := f_rnd_ra_ps(); var GsmFrameNumber fn := f_L1CTL_RACH(L1CTL, oct2int(ra)); if (fn == fn_last) { @@ -5797,10 +5810,10 @@ timer T := 2.0; T.start; alt { - [] PCU.receive(t_SD_PCUIF(g_pcu_conn_id, tr_PCUIF_RACH_IND(0, 0, 0, oct2int(ra), 0, ?, fn))) { + [] as_pcuif_msg(msg, tr_PCUIF_RACH_IND(0, 0, 0, oct2int(ra), 0, ?, fn)) { T.stop; } - [] PCU.receive(t_SD_PCUIF(g_pcu_conn_id, tr_PCUIF_RACH_IND)) { + [] as_pcuif_msg(msg, tr_PCUIF_RACH_IND) { Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Unexpected RACH IND"); } [] PCU.receive { repeat; } @@ -5819,7 +5832,7 @@ var GsmFrameNumber fn_last := 0; var L1ctlRachSynchSeq synch_seq; var PCUIF_BurstType pcu_bt; - var GsmFrameNumber fn; + var GsmFrameNumber fn var BIT11 ra11;
f_init_with_pcuif(); @@ -5852,13 +5865,14 @@ burst_type := pcu_bt, fn := fn);
+ var PCUIF_Message msg; timer T := 2.0; T.start; alt { - [] PCU.receive(t_SD_PCUIF(g_pcu_conn_id, pcu_rach_ind)) { + [] as_pcuif_msg(msg, pcu_rach_ind) { T.stop; } - [] PCU.receive(t_SD_PCUIF(g_pcu_conn_id, tr_PCUIF_RACH_IND)) { + [] as_pcuif_msg(msg, tr_PCUIF_RACH_IND) { Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Unexpected RACH IND"); } [] PCU.receive { repeat; } @@ -5872,14 +5886,10 @@
private function f_TC_pcu_data_ind_lqual_cb(int16_t lqual_cb_exp, int16_t thresh) runs on test_CT { - var template PCUIF_send_data sdt; - var PCUIF_send_data sd; + var PCUIF_Message msg; var int16_t lqual_cb; timer T := 1.0;
- /* PCUIF_DATA.ind is encapsulated into a supplementary record */ - sdt := t_SD_PCUIF_MSGT(g_pcu_conn_id, PCU_IF_MSG_DATA_IND); - /* Send a random PDTCH frame over Um * FIXME: we need to wait for a DL block and user Fn from there. */ L1CTL.send(ts_L1CTL_GPRS_UL_BLOCK_REQ(0, 7, '0000'O & f_rnd_octstring(21))); @@ -5887,8 +5897,8 @@ T.start; alt { /* If expected link quality is above the threshold */ - [lqual_cb_exp >= thresh] PCU.receive(sdt) -> value sd { - lqual_cb := sd.data.u.data_ind.lqual_cb; + [lqual_cb_exp >= thresh] as_pcuif_msg(msg, tr_PCUIF_DATA_IND) { + lqual_cb := msg.u.data_ind.lqual_cb; log("Rx PCUIF_DATA.ind (lqual_cb=", lqual_cb, ")");
/* Make sure the actual link quality matches the expected value */ @@ -5900,9 +5910,9 @@ } } /* If expected link quality is below the threshold */ - [lqual_cb_exp < thresh] PCU.receive(sdt) -> value sd { + [lqual_cb_exp < thresh] as_pcuif_msg(msg, tr_PCUIF_DATA_IND) { Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, - log2str("Rx unexpected PCUIF_DATA.ind: ", sd.data)); + log2str("Rx unexpected PCUIF_DATA.ind: ", msg)); } /* Ignore PCUIF_RTS.req and PCUIF_TIME.ind */ [] PCU.receive { repeat; } @@ -5951,6 +5961,7 @@ var MobileIdentityLV mi_lv; var octetstring mi_lv_enc; var MobileIdentityV mi; + var PCUIF_Message msg; timer T := 3.0;
if (i < 50) { @@ -5968,9 +5979,9 @@ RSL_CCHAN.send(ts_ASP_RSL_UD(ts_RSL_PAGING_CMD(mi, i mod 4))); T.start; alt { - [] PCU.receive(t_SD_PCUIF(g_pcu_conn_id, tr_PCUIF_PAG_REQ(0, mi_lv_enc))) { + [] as_pcuif_msg(msg, tr_PCUIF_PAG_REQ(0, mi_lv_enc)) { } - [] PCU.receive(t_SD_PCUIF(g_pcu_conn_id, tr_PCUIF_PAG_REQ)) { + [] as_pcuif_msg(msg, tr_PCUIF_PAG_REQ) { Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Unexpected PAGING REQ"); } [] PCU.receive { repeat; } @@ -5984,10 +5995,10 @@
/* test for periodic TIME_IND; check number of FN expired and number of TIME_IND within frames */ testcase TC_pcu_time_ind() runs on test_CT { - var PCUIF_send_data pcu_sd; var integer num_time_ind := 0; var integer first_fn, last_fn; var float test_duration := 5.0; + var PCUIF_Message msg; timer T;
f_init_with_pcuif(); @@ -5996,16 +6007,16 @@ PCU.clear; T.start(test_duration); alt { - [] PCU.receive(t_SD_PCUIF(g_pcu_conn_id, tr_PCUIF_TIME_IND(0, ?))) -> value pcu_sd { + [] as_pcuif_msg(msg, tr_PCUIF_TIME_IND(0, ?)) { num_time_ind := num_time_ind + 1; if (not isbound(first_fn)) { - first_fn := pcu_sd.data.u.time_ind.fn; + first_fn := msg.u.time_ind.fn; } - last_fn := pcu_sd.data.u.time_ind.fn; + last_fn := msg.u.time_ind.fn; repeat; } - [] PCU.receive(t_SD_PCUIF(g_pcu_conn_id, tr_PCUIF_TIME_IND(?, ?))) -> value pcu_sd { - setverdict(fail, "Received unexpected PCUIF_TIME_IND: ", pcu_sd.data); + [] as_pcuif_msg(msg, tr_PCUIF_TIME_IND(?, ?)) { + setverdict(fail, "Received unexpected PCUIF_TIME_IND: ", msg); repeat; } [] PCU.receive { @@ -6037,11 +6048,11 @@
/* test for periodic RTS_REQ; check number of FN expired and number of RTS_IND per SAPI */ testcase TC_pcu_rts_req() runs on test_CT { - var PCUIF_send_data pcu_sd; var integer first_fn, last_fn; var integer num_rts_pdtch := 0; var integer num_rts_ptcch := 0; var float test_duration := 5.0; + var PCUIF_Message msg; timer T;
f_init_with_pcuif(); @@ -6050,26 +6061,24 @@ PCU.clear; T.start(test_duration); alt { - [] PCU.receive(t_SD_PCUIF(g_pcu_conn_id, tr_PCUIF_RTS_REQ(0, 0, 7, PCU_IF_SAPI_PDTCH, ?, ?))) - -> value pcu_sd { + [] as_pcuif_msg(msg, tr_PCUIF_RTS_REQ(0, 0, 7, PCU_IF_SAPI_PDTCH, ?, ?)) { num_rts_pdtch := num_rts_pdtch + 1; if (not isbound(first_fn)) { - first_fn := pcu_sd.data.u.rts_req.fn; + first_fn := msg.u.rts_req.fn; } - last_fn := pcu_sd.data.u.rts_req.fn; + last_fn := msg.u.rts_req.fn; repeat; } - [] PCU.receive(t_SD_PCUIF(g_pcu_conn_id, tr_PCUIF_RTS_REQ(0, 0, 7, PCU_IF_SAPI_PTCCH, ?, ?))) - -> value pcu_sd { + [] as_pcuif_msg(msg, tr_PCUIF_RTS_REQ(0, 0, 7, PCU_IF_SAPI_PTCCH, ?, ?)) { num_rts_ptcch := num_rts_ptcch + 1; if (not isbound(first_fn)) { - first_fn := pcu_sd.data.u.rts_req.fn; + first_fn := msg.u.rts_req.fn; } - last_fn := pcu_sd.data.u.rts_req.fn; + last_fn := msg.u.rts_req.fn; repeat; } - [] PCU.receive(t_SD_PCUIF(g_pcu_conn_id, tr_PCUIF_RTS_REQ)) -> value pcu_sd { - setverdict(fail, "Received unexpected PCUIF_RTS_REQ: ", pcu_sd.data); + [] as_pcuif_msg(msg, tr_PCUIF_RTS_REQ) { + setverdict(fail, "Received unexpected PCUIF_RTS_REQ: ", msg); repeat; } [] PCU.receive { @@ -6540,7 +6549,7 @@ var template PCUIF_Message tr_interf_ind; var integer interf_ind_num := 0; var boolean first := true; - var PCUIF_send_data sd; + var PCUIF_Message msg; timer T;
/* Set the averaging/reporting period to 480ms */ @@ -6566,25 +6575,25 @@ T.start(0.480 * 1.5); alt { /* The first interference report may contain unreliable values, so we ignore it */ - [first] PCU.receive(t_SD_PCUIF(g_pcu_conn_id, tr_PCUIF_INTERF_IND(0, 0))) { + [first] as_pcuif_msg(msg, tr_PCUIF_INTERF_IND(0, 0)) { /* 4 SACCH periods => 4 reports (plus some guard time) */ T.start(0.480 * 4.0 + 0.480 / 2.0); first := false; repeat; } /* Subsequent interference reports shall match our expectations */ - [not first] PCU.receive(t_SD_PCUIF(g_pcu_conn_id, tr_interf_ind)) -> value sd { + [not first] as_pcuif_msg(msg, tr_interf_ind) { /* Check TDMA frame number period */ - if (sd.data.u.interf_ind.fn mod 104 != 0) { + if (msg.u.interf_ind.fn mod 104 != 0) { setverdict(fail, "Odd TDMA frame number := ", - sd.data.u.interf_ind.fn); + msg.u.interf_ind.fn); } interf_ind_num := interf_ind_num + 1; if (interf_ind_num < 4) { repeat; } } - [not first] PCU.receive(t_SD_PCUIF(g_pcu_conn_id, tr_PCUIF_INTERF_IND(0, 0))) -> value sd { - setverdict(fail, "Received unexpected interference report: ", sd.data); + [not first] as_pcuif_msg(msg, tr_PCUIF_INTERF_IND(0, 0)) { + setverdict(fail, "Received unexpected interference report: ", msg); } [] PCU.receive { repeat; } [] T.timeout {