BTS_Tests: verify hopping parameters in the INFO.ind message
Change-Id: I9bb164fd2c7c48b91e0d7bd1abaf3cfec155342c
Related: I04782222b499d0488269544910fbd4ed9929c05d
Related: SYS#4868, OS#4546, OS#4547
diff --git a/bts/BTS_Tests.ttcn b/bts/BTS_Tests.ttcn
index 8a9e24a..8a478ba 100644
--- a/bts/BTS_Tests.ttcn
+++ b/bts/BTS_Tests.ttcn
@@ -5442,6 +5442,48 @@
setverdict(pass);
}
+/* Verify hopping parameters in the INFO.ind message (version >= 10) */
+testcase TC_pcu_info_ind_fh_params() runs on test_CT {
+ var PCUIF_info_ind info_ind;
+ var ConnHdlrPars pars;
+
+ f_init();
+
+ info_ind := g_pcu_last_info.u.info_ind;
+
+ for (var integer i := 0; i < mp_transceiver_num; i := i + 1) {
+ for (var integer tn := 0; tn < 8; tn := tn + 1) {
+ if (info_ind.trx.v10[i].pdch_mask[tn] != '1'B) {
+ /* Skip inactive timeslots */
+ continue;
+ }
+
+ pars := valueof(t_Pars(t_RslChanNr_PDCH(tn), ts_RSL_ChanMode_SIGN));
+ if (mp_freq_hop_enabled and mp_transceiver_num > 1)
+ { f_resolve_fh_params(pars); }
+
+ var template PCUIF_InfoTrxTs tr_ts;
+ if (ispresent(pars.maio_hsn)) {
+ tr_ts := tr_PCUIF_InfoTrxTsH1(
+ hsn := pars.maio_hsn.hsn,
+ maio := pars.maio_hsn.maio,
+ ma := f_pad_bit(pars.ma_map.ma, 64, '0'B));
+ } else {
+ tr_ts := tr_PCUIF_InfoTrxTsH0;
+ }
+
+ var PCUIF_InfoTrxTs ts := info_ind.trx.v10[i].ts[tn];
+ log("Checking timeslot #", tn, " of trx#", i, ": ", ts);
+ if (not match(ts, tr_ts)) {
+ setverdict(fail, "Hopping parameters do not match: ",
+ "received ", ts, " vs expected ", tr_ts);
+ } else {
+ setverdict(pass);
+ }
+ }
+ }
+}
+
/***********************************************************************
* Osmocom Style Dynamic Timeslot Support
***********************************************************************/
@@ -6844,6 +6886,9 @@
execute( TC_dyn_ipa_pdch_act_deact() );
execute( TC_dyn_ipa_pdch_act_tchf_act_nack() );
+ if (PCUIF_Types.mp_pcuif_version >= 10) {
+ execute( TC_pcu_info_ind_fh_params() );
+ }
} else {
log("PCU socket path not available, skipping PCU tests");
}