bsc: properly test various bts.N.chreq:* counters
Related: SYS#4878
Depends: I1fde77d5d5920093ab037184eb3518876804353d (osmo-bsc)
Change-Id: I17a7702b151ac03fd9f7ecd6927ef42133aad953
diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn
index 5f742b2..0c03bde 100644
--- a/bsc/BSC_Tests.ttcn
+++ b/bsc/BSC_Tests.ttcn
@@ -1279,7 +1279,57 @@
f_shutdown_helper();
}
-/* verify if the "chreq:total" counter increments as expected */
+const CounterNameVals counternames_bts_chreq := {
+ { "chreq:total", 0 },
+ { "chreq:attempted_emerg", 0 },
+ { "chreq:attempted_call", 0 },
+ { "chreq:attempted_location_upd", 0 },
+ { "chreq:attempted_pag", 0 },
+ { "chreq:attempted_pdch", 0 },
+ { "chreq:attempted_other", 0 },
+ { "chreq:attempted_unknown", 0 },
+ { "chreq:successful", 0 },
+ { "chreq:successful_emerg", 0 },
+ { "chreq:successful_call", 0 },
+ { "chreq:successful_location_upd", 0 },
+ { "chreq:successful_pag", 0 },
+ { "chreq:successful_pdch", 0 },
+ { "chreq:successful_other", 0 },
+ { "chreq:successful_unknown", 0 },
+ { "chreq:no_channel", 0 },
+ { "chreq:max_delay_exceeded", 0 }
+};
+
+/* verify the "chreq:*" counters */
+private function f_chan_act_counter(OCT1 ra, charstring chreq_ctr_suffix) runs on test_CT
+{
+ var GsmFrameNumber fn := 23;
+
+ f_logp(BSCVTY, "f_chan_act_counter(" & chreq_ctr_suffix & ")");
+
+ var RSL_Message rx_rsl;
+ f_ipa_tx(0, ts_RSL_CHAN_RQD(ra, fn));
+ rx_rsl := f_exp_ipa_rx(0, tr_RSL_MsgTypeD(RSL_MT_CHAN_ACTIV));
+ var RslChannelNr chan_nr := rx_rsl.ies[0].body.chan_nr;
+
+ f_ctrs_bts_add(0, "chreq:total");
+ f_ctrs_bts_add(0, "chreq:attempted_" & chreq_ctr_suffix);
+ f_ctrs_bts_verify();
+
+ f_ipa_tx(0, ts_RSL_CHAN_ACT_ACK(chan_nr, fn+10));
+ rx_rsl := f_exp_ipa_rx(0, tr_RSL_IMM_ASSIGN(0));
+
+ f_ctrs_bts_add(0, "chreq:successful");
+ f_ctrs_bts_add(0, "chreq:successful_" & chreq_ctr_suffix);
+ f_ctrs_bts_verify();
+
+ /* test is done, release RSL Conn Fail Ind to clean up */
+ f_ipa_tx(0, ts_RSL_CONN_FAIL_IND(chan_nr, RSL_ERR_RADIO_LINK_FAIL));
+ rx_rsl := f_exp_ipa_rx(0, tr_RSL_MsgTypeD(RSL_MT_RF_CHAN_REL), 10.0);
+ f_ipa_tx(0, ts_RSL_RF_CHAN_REL_ACK(chan_nr));
+ f_sleep(1.0);
+}
+
testcase TC_chan_act_counter() runs on test_CT {
var BSSAP_N_UNITDATA_ind ud_ind;
var integer chreq_total;
@@ -1287,10 +1337,30 @@
f_init(1);
- chreq_total := f_ctrl_get_ratectr_abs(IPA_CTRL, "bts", 0, "chreq:total");
- IPA_RSL[0].send(ts_ASP_RSL_UD(ts_RSL_CHAN_RQD('23'O, 23)));
- rsl_unused := f_exp_ipa_rx(0, tr_RSL_MsgTypeD(RSL_MT_CHAN_ACTIV));
- f_ctrl_get_exp_ratectr_abs(IPA_CTRL, "bts", 0, "chreq:total", chreq_total+1);
+ f_vty_allow_emerg_bts(true, 0);
+
+ f_ctrs_bts_init(1, counternames_bts_chreq);
+
+ /* emergency call: RA & 0xe0 == 0xa0 --> CHREQ_T_EMERG_CALL */
+ f_chan_act_counter('a3'O, "emerg");
+
+ /* voice TCH/H: RA & 0xf0 == 0x40 --> CHREQ_T_VOICE_CALL_TCH_H */
+ f_chan_act_counter('43'O, "call");
+
+ /* LU: RA & 0xf0 == 0x00 --> CHREQ_T_LOCATION_UPD */
+ f_chan_act_counter('03'O, "location_upd");
+
+ /* Paging: RA & 0xf0 == 0x20 --> CHREQ_T_PAG_R_TCH_F */
+ f_chan_act_counter('23'O, "pag");
+ /* Paging: RA & 0xf0 == 0x30 --> CHREQ_T_PAG_R_TCH_FH */
+ f_chan_act_counter('33'O, "pag");
+
+ /* LU: RA & 0xfc == 0x78 --> CHREQ_T_PDCH_TWO_PHASE */
+ /* no PCU, so PDCH not allowed. Skip this test for now. */
+ /* f_chan_act_counter('7b'O, "pdch"); */
+
+ /* LU: RA & 0xf0 == 0x10 --> CHREQ_T_SDCCH */
+ f_chan_act_counter('13'O, "other");
f_shutdown_helper();
}