gbproxy: Add test case for PAGING-PS-REJECT
The test fail with current osmo-gbproxy master, as the related
implementation is missing.
Related: OS#4951
Change-Id: I19a36dfef8f33f278a54b938a5daccce08de6fe0
diff --git a/gbproxy/GBProxy_Tests.ttcn b/gbproxy/GBProxy_Tests.ttcn
index 0513c02..0767331 100644
--- a/gbproxy/GBProxy_Tests.ttcn
+++ b/gbproxy/GBProxy_Tests.ttcn
@@ -1468,6 +1468,26 @@
f_cleanup();
}
+/* Rejected PS-PAGING on PTP-BVC for BVCI (one cell) */
+testcase TC_paging_ps_reject_ptp_bvci() runs on test_CT {
+ f_init();
+ f_start_handlers(refers(f_TC_paging_ps_reject_ptp_bvci), testcasename(), 16);
+ f_cleanup();
+}
+
+/* Rejected PS-PAGING on PTP-BVC for BVCI (one cell) using IMSI only (no P-TMSI allocated) */
+private function f_TC_paging_ps_reject_ptp_bvci(charstring id) runs on BSSGP_ConnHdlr
+{
+ /* first send the PS-PAGING from SGSN -> PCU */
+ f_send_paging_ps_exp_one_bss(ts_BssgpP4Bvci(pcu_bvc_cfg[0].bvci), 0, false, 0);
+ /* then simulate the PS-PAGING-REJECT from the PCU */
+ f_send_paging_ps_rej(use_sig:=false);
+}
+testcase TC_paging_ps_reject_ptp_bvci_imsi() runs on test_CT {
+ f_init();
+ f_start_handlers(refers(f_TC_paging_ps_reject_ptp_bvci), testcasename(), 16, have_ptmsi:=false);
+ f_cleanup();
+}
/* PS-PAGING on PTP-BVC for unknown BVCI */
private function f_TC_paging_ps_ptp_bvci_unknown(charstring id) runs on BSSGP_ConnHdlr
@@ -1536,6 +1556,53 @@
setverdict(pass);
}
+/* Send PAGING-PS-REJECT on SIG BVC, expect it to arrive on the "right" SGSN */
+private function f_send_paging_ps_rej(boolean use_sig := true, integer pcu_idx := 0) runs on BSSGP_ConnHdlr
+{
+ var template (value) PDU_BSSGP pdu_tx;
+ var template (present) PDU_BSSGP exp_rx;
+ var PDU_BSSGP pdu_rx;
+ timer T := 5.0;
+ var template (omit) GsmTmsi tmsi_int := omit;
+
+ if (ispresent(g_pars.p_tmsi)) {
+ tmsi_int := oct2int(g_pars.p_tmsi);
+ }
+
+ pdu_tx := ts_BSSGP_PAGING_PS_REJ(g_pars.imsi, 23, 42, tmsi_int);
+ exp_rx := tr_BSSGP_PAGING_PS_REJ(g_pars.imsi, 23, 42, tmsi_int);
+
+ if (use_sig) {
+ PCU_SIG[pcu_idx].send(pdu_tx);
+ } else {
+ PCU_PTP[pcu_idx].send(pdu_tx);
+ }
+ T.start;
+ alt {
+ [use_sig] SGSN_SIG[g_pars.sgsn_idx].receive(exp_rx) -> value pdu_rx {
+ setverdict(pass);
+ }
+ [use_sig] SGSN_SIG[g_pars.sgsn_idx].receive {
+ setverdict(fail, "Unexpected PDU on SGSN");
+ }
+ [use_sig] any from SGSN_SIG.receive(exp_rx) -> value pdu_rx {
+ setverdict(fail, "PAGING-PS-REJECT arrived on wrong SGSN");
+ }
+ [not use_sig] SGSN_PTP[g_pars.sgsn_idx].receive(exp_rx) -> value pdu_rx {
+ setverdict(pass);
+ }
+ [not use_sig] SGSN_PTP[g_pars.sgsn_idx].receive {
+ setverdict(fail, "Unexpected PDU on SGSN");
+ }
+ [not use_sig] any from SGSN_PTP.receive(exp_rx) -> value pdu_rx {
+ setverdict(fail, "PAGING-PS-REJECT arrived on wrong SGSN");
+ }
+ [] T.timeout {
+ setverdict(fail, "Timeout waiting for PAGING-PS-REJECT");
+ }
+ }
+}
+
/* PS-PAGING on SIG-BVC for BSS Area */
private function f_TC_paging_ps_sig_bss(charstring id) runs on BSSGP_ConnHdlr
{
@@ -1635,6 +1702,28 @@
f_cleanup();
}
+/* Rejected PS-PAGING on SIG-BVC for BVCI (one cell) */
+private function f_TC_paging_ps_reject_sig_bvci(charstring id) runs on BSSGP_ConnHdlr
+{
+ /* first send the PS-PAGING from SGSN -> PCU */
+ f_send_paging_ps_exp_multi(ts_BssgpP4Bvci(pcu_bvc_cfg[0].bvci), 0, {0});
+ /* then simulate the PS-PAGING-REJECT from the PCU */
+ f_send_paging_ps_rej(use_sig:=true);
+
+}
+testcase TC_paging_ps_reject_sig_bvci() runs on test_CT {
+ f_init();
+ f_start_handlers(refers(f_TC_paging_ps_reject_sig_bvci), testcasename(), 16);
+ f_cleanup();
+}
+
+/* Rejected PS-PAGING on SIG-BVC for BVCI (one cell) using IMSI only (no P-TMSI allocated) */
+testcase TC_paging_ps_reject_sig_bvci_imsi() runs on test_CT {
+ f_init();
+ f_start_handlers(refers(f_TC_paging_ps_reject_sig_bvci), testcasename(), 16, have_ptmsi:=false);
+ f_cleanup();
+}
+
/* PS-PAGING on SIG-BVC for unknown BVCI */
private function f_TC_paging_ps_sig_bvci_unknown(charstring id) runs on BSSGP_ConnHdlr
{
@@ -2482,6 +2571,8 @@
execute( TC_paging_ps_ptp_bvci() );
execute( TC_paging_ps_ptp_bvci_imsi() );
execute( TC_paging_ps_ptp_bvci_unknown() );
+ execute( TC_paging_ps_reject_ptp_bvci() );
+ execute( TC_paging_ps_reject_ptp_bvci_imsi() );
/* PAGING-PS over SIG BVC */
execute( TC_paging_ps_sig_bss() );
@@ -2492,6 +2583,8 @@
execute( TC_paging_ps_sig_bvci() );
execute( TC_paging_ps_sig_bvci_imsi() );
execute( TC_paging_ps_sig_bvci_unknown() );
+ execute( TC_paging_ps_reject_sig_bvci() );
+ execute( TC_paging_ps_reject_sig_bvci_imsi() );
/* PAGING-CS over PTP BVC */
execute( TC_paging_cs_ptp_bss() );