BSC_Tests: Add 12 different PAGING tests
diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn
index 9cc6656..38eda35 100644
--- a/bsc/BSC_Tests.ttcn
+++ b/bsc/BSC_Tests.ttcn
@@ -5,6 +5,7 @@
import from GSM_Types all;
import from IPL4asp_Types all;
+import from BSSAP_Types all;
import from BSSAP_Adapter all;
import from BSSAP_CodecPort all;
import from BSSMAP_Templates all;
@@ -15,6 +16,10 @@
import from Osmocom_CTRL_Functions all;
import from Osmocom_CTRL_Types all;
+import from MobileL3_CommonIE_Types all;
+import from L3_Templates all;
+import from GSM_RR_Types all;
+
import from RSL_Tests all;
const integer NUM_BTS := 1;
@@ -584,6 +589,162 @@
setverdict(pass);
}
+function f_bssap_tx_ud(template PDU_BSSAP bssap) runs on test_CT {
+ BSSAP.send(ts_BSSAP_UNITDATA_req(g_sccp_addr_peer, g_sccp_addr_own, bssap));
+}
+
+
+/***********************************************************************
+ * Paging Testing
+ ***********************************************************************/
+
+type record Cell_Identity {
+ GsmMcc mcc,
+ GsmMnc mnc,
+ GsmLac lac,
+ GsmCellId ci
+};
+private const Cell_Identity cid := { '001'H, '001'H, 1, 0 };
+
+
+/* core paging test helper function; used by most paging test cases */
+private function f_pageing_helper(hexstring imsi,
+ template BSSMAP_FIELD_CellIdentificationList cid_list,
+ template RSL_ChanNeeded rsl_chneed := omit,
+ template OCT4 tmsi := omit) runs on test_CT
+{
+ var template BSSMAP_IE_ChannelNeeded bssmap_chneed;
+ var MobileIdentity mi;
+ var template octetstring id_enc; /* FIXME */
+ var RSL_Message rx_rsl;
+ var integer paging_group := hex2int(imsi[lengthof(imsi)-1]);
+
+ f_init();
+ f_bssap_reset();
+
+ /* Clear the queue, it might still contain stuff like BCCH FILLING */
+ IPA_RSL[0].clear;
+
+ if (isvalue(rsl_chneed)) {
+ /* The values of 08.08 3.2.2.36 and 08.58 9.3.40 are luckily identical */
+ bssmap_chneed := ts_BSSMAP_IE_ChanNeeded(int2bit(enum2int(valueof(rsl_chneed)),2));
+ } else {
+ bssmap_chneed := omit;
+ }
+
+ f_bssap_tx_ud(ts_BSSMAP_Paging(imsi, cid_list, tmsi, bssmap_chneed));
+
+/* FIXME: Disabled due to bugs in both GSM_RR_Types and MobileL3_CommonIE_Types IMSI encoder
+ if (isvalue(tmsi)) {
+ mi := valueof(t_Osmo_MI_TMSI(oct2int(valueof(tmsi))));
+ } else {
+ mi := valueof(ts_Osmo_MI_IMSI(imsi));
+ }
+ id_enc := enc_MobileIdentity(mi);
+*/
+ id_enc := ?;
+ rx_rsl := f_exp_ipa_rx(0, tr_RSL_PAGING_CMD(id_enc));
+ /* check channel type, paging group */
+ if (rx_rsl.ies[1].body.paging_group != paging_group) {
+ setverdict(fail, "Paging for wrong paging group");
+ }
+ if (ispresent(rsl_chneed) and
+ rx_rsl.ies[3].body.chan_needed.chan_needed != valueof(rsl_chneed)) {
+ setverdict(fail, "RSL Channel Needed != BSSMAP Channel Needed");
+ }
+
+ setverdict(pass);
+}
+
+/* PAGING by IMSI + TMSI */
+testcase TC_paging_imsi_nochan() runs on test_CT {
+ var BSSMAP_FIELD_CellIdentificationList cid_list;
+ cid_list := valueof(ts_BSSMAP_CIL_noCell);
+ f_pageing_helper('001010123456789'H, cid_list);
+}
+
+/* PAGING by IMSI + TMSI */
+testcase TC_paging_tmsi_nochan() runs on test_CT {
+ var BSSMAP_FIELD_CellIdentificationList cid_list;
+ cid_list := valueof(ts_BSSMAP_CIL_noCell);
+ f_pageing_helper('001010100000001'H, cid_list, omit, 'A1B2C301'O);
+}
+
+/* Paging with different "channel needed' values */
+testcase TC_paging_tmsi_any() runs on test_CT {
+ var BSSMAP_FIELD_CellIdentificationList cid_list;
+ cid_list := valueof(ts_BSSMAP_CIL_noCell);
+ f_pageing_helper('001010100000002'H, cid_list, RSL_CHANNEED_ANY, 'A1B2C302'O);
+}
+testcase TC_paging_tmsi_sdcch() runs on test_CT {
+ var BSSMAP_FIELD_CellIdentificationList cid_list;
+ cid_list := valueof(ts_BSSMAP_CIL_noCell);
+ f_pageing_helper('001010100000003'H, cid_list, RSL_CHANNEED_SDCCH, 'A1B2C303'O);
+}
+testcase TC_paging_tmsi_tch_f() runs on test_CT {
+ var BSSMAP_FIELD_CellIdentificationList cid_list;
+ cid_list := valueof(ts_BSSMAP_CIL_noCell);
+ f_pageing_helper('001010000000004'H, cid_list, RSL_CHANNEED_TCH_F, 'A1B2C304'O);
+}
+testcase TC_paging_tmsi_tch_hf() runs on test_CT {
+ var BSSMAP_FIELD_CellIdentificationList cid_list;
+ cid_list := valueof(ts_BSSMAP_CIL_noCell);
+ f_pageing_helper('001010000000005'H, cid_list, RSL_CHANNEED_TCH_ForH, 'A1B2C305'O);
+}
+
+/* Paging by CGI */
+testcase TC_paging_imsi_nochan_cgi() runs on test_CT {
+ var template BSSMAP_FIELD_CellIdentificationList cid_list;
+ cid_list := { cIl_CGI := { ts_BSSMAP_CI_CGI(cid.mcc, cid.mnc, cid.lac, cid.ci) } };
+ f_pageing_helper('001010000000006'H, cid_list);
+}
+
+/* Paging by LAC+CI */
+testcase TC_paging_imsi_nochan_lac_ci() runs on test_CT {
+ var template BSSMAP_FIELD_CellIdentificationList cid_list;
+ cid_list := { cIl_LAC_CI := { ts_BSSMAP_CI_LAC_CI(cid.lac, cid.ci) } };
+ f_pageing_helper('001010000000007'H, cid_list);
+}
+
+/* Paging by CI */
+testcase TC_paging_imsi_nochan_ci() runs on test_CT {
+ var template BSSMAP_FIELD_CellIdentificationList cid_list;
+ cid_list := { cIl_CI := { ts_BSSMAP_CI_CI(cid.ci) } };
+ f_pageing_helper('001010000000008'H, cid_list);
+}
+
+/* Paging by LAI */
+testcase TC_paging_imsi_nochan_lai() runs on test_CT {
+ var template BSSMAP_FIELD_CellIdentificationList cid_list;
+ cid_list := { cIl_LAI := { ts_BSSMAP_CI_LAI(cid.mcc, cid.mnc, cid.lac) } };
+ f_pageing_helper('001010000000009'H, cid_list);
+}
+
+/* Paging by LAC */
+testcase TC_paging_imsi_nochan_lac() runs on test_CT {
+ var template BSSMAP_FIELD_CellIdentificationList cid_list;
+ cid_list := { cIl_LAC := { ts_BSSMAP_CI_LAC(cid.lac) } };
+ f_pageing_helper('001010000000010'H, cid_list);
+}
+
+/* Paging by "all in BSS" */
+testcase TC_paging_imsi_nochan_all() runs on test_CT {
+ var template BSSMAP_FIELD_CellIdentificationList cid_list;
+ cid_list := { cIl_allInBSS := ''O };
+ f_pageing_helper('001010000000011'H, cid_list);
+}
+
+/* Paging by PLMN+LAC+RNC */
+/* Paging by RNC */
+/* Paging by LAC+RNC */
+
+/* Paging on multiple cells (multiple in one LAC): Verify all of them page */
+/* Paging on multiple cells (multiple entries in list): Verify all of them page */
+/* Verify paging retransmission interval + count */
+/* Verify paging stops after channel establishment */
+/* Verify PCH load */
+/* Test behavior under paging overload */
+/* Verify paging stops after A-RESET */
control {
@@ -599,6 +760,20 @@
execute( TC_chan_rel_hard_clear() );
execute( TC_chan_rel_hard_rlsd() );
execute( TC_chan_rel_a_reset() );
+
+ execute( TC_paging_imsi_nochan() );
+ execute( TC_paging_tmsi_nochan() );
+ execute( TC_paging_tmsi_any() );
+ execute( TC_paging_tmsi_sdcch() );
+ execute( TC_paging_tmsi_tch_f() );
+ execute( TC_paging_tmsi_tch_hf() );
+ execute( TC_paging_imsi_nochan_cgi() );
+ execute( TC_paging_imsi_nochan_lac_ci() );
+ execute( TC_paging_imsi_nochan_ci() );
+ execute( TC_paging_imsi_nochan_lai() );
+ execute( TC_paging_imsi_nochan_lac() );
+ execute( TC_paging_imsi_nochan_all() );
+
}
}