PCU_Tests: test NACC procedure with UTRAN and E-UTRAN cell
When the PacketCellChangeNotification proposes an UTRAN or E-UTRAN cell,
then the PCU will not provide system information. Instead it will directly
conclude the NACC procedure with a PacketCellChangeContinue message.
Related: OS#6044
Change-Id: Idae86a458fd44ac81bab183ed1865b1c1bdbfd66
diff --git a/pcu/PCU_Tests.ttcn b/pcu/PCU_Tests.ttcn
index 440d133..76926ae 100644
--- a/pcu/PCU_Tests.ttcn
+++ b/pcu/PCU_Tests.ttcn
@@ -5332,11 +5332,71 @@
}
}
+private function f_outbound_nacc_success_no_si(inout GprsMS ms, PCUIF_info_ind info_ind,
+ boolean exp_rac_ci_query := true, boolean exp_si_query := true,
+ boolean skip_final_ctrl_ack := false,
+ boolean use_old_ctrl_iface := false,
+ template (value) RlcmacUlCtrlMsg cell_chg_notif)
+runs on RAW_PCU_Test_CT {
+ var template RlcmacDlCtrlMsg cell_chg_cont;
+ var RlcmacDlBlock dl_block;
+ var uint32_t sched_fn;
+
+ /* Start NACC from MS side */
+ f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chg_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));
+
+ /* Obtain a Downlink block and make sure it is a PacketCellChangeContine. We also make sure that this
+ * PacketCellChangeContine message does not contain any ARFCN/BSIC. */
+ f_rx_rlcmac_dl_block(dl_block, sched_fn);
+ cell_chg_cont := tr_RlcMacDlCtrl_PKT_CELL_CHG_CONTINUE
+ cell_chg_cont.u.cell_chg_continue.arfcn_bsic_presence := '0'B
+ if (not match(dl_block, tr_RLCMAC_DL_CTRL(?, cell_chg_cont))) {
+ setverdict(fail, "Rx unexpected DL block: ", dl_block);
+ f_shutdown(__BFILE__, __LINE__);
+ }
+
+ /* PKT CELL CHG CONTINUE ACK/NACK sets poll+rrbp requesting PACKET CONTROL ACK */
+ if (not skip_final_ctrl_ack and dl_block.ctrl.mac_hdr.rrbp_valid) {
+ sched_fn := f_rrbp_ack_fn(sched_fn, dl_block.ctrl.mac_hdr.rrbp);
+ f_ms_tx_ul_block(ms, ts_RLCMAC_CTRL_ACK(ms.tlli), sched_fn);
+ }
+}
+
+/* Start NACC from MS side, propose an UTRAN cell */
+private function f_outbound_nacc_success_utran(inout GprsMS ms, PCUIF_info_ind info_ind,
+ boolean exp_rac_ci_query := true, boolean exp_si_query := true,
+ boolean skip_final_ctrl_ack := false,
+ boolean use_old_ctrl_iface := false)
+runs on RAW_PCU_Test_CT {
+ var template (value) RlcmacUlCtrlMsg cell_chg_notif;
+ var uint14_t req_uarfcn := 1234;
+ var uint10_t req_scrambling_code := 456;
+
+ /* Start NACC from MS side */
+ cell_chg_notif := ts_RlcMacUlCtrl_PKT_CELL_CHG_NOTIF_UTRAN(ms.ul_tbf.tfi, req_uarfcn, req_scrambling_code);
+ f_outbound_nacc_success_no_si(ms, info_ind, exp_rac_ci_query, exp_si_query, skip_final_ctrl_ack, use_old_ctrl_iface, cell_chg_notif);
+}
+
+/* Start NACC from MS side, propose an E-UTRAN cell */
+private function f_outbound_nacc_success_eutran(inout GprsMS ms, PCUIF_info_ind info_ind,
+ boolean exp_rac_ci_query := true, boolean exp_si_query := true,
+ boolean skip_final_ctrl_ack := false,
+ boolean use_old_ctrl_iface := false)
+runs on RAW_PCU_Test_CT {
+ var template (value) RlcmacUlCtrlMsg cell_chg_notif;
+ var uint16_t req_earfcn := 1234;
+ var uint9_t phys_layer_cell_id := 456;
+
+ /* Start NACC from MS side */
+ cell_chg_notif := ts_RlcMacUlCtrl_PKT_CELL_CHG_NOTIF_EUTRAN(ms.ul_tbf.tfi, req_earfcn, phys_layer_cell_id);
+ f_outbound_nacc_success_no_si(ms, info_ind, exp_rac_ci_query, exp_si_query, skip_final_ctrl_ack, use_old_ctrl_iface, cell_chg_notif);
+}
+
/* Start NACC from MS side, propose a GERAN cell */
-private function f_outbound_nacc_success(inout GprsMS ms, PCUIF_info_ind info_ind,
- boolean exp_rac_ci_query := true, boolean exp_si_query := true,
- boolean skip_final_ctrl_ack := false,
- boolean use_old_ctrl_iface := false)
+private function f_outbound_nacc_success_geran(inout GprsMS ms, PCUIF_info_ind info_ind,
+ boolean exp_rac_ci_query := true, boolean exp_si_query := true,
+ boolean skip_final_ctrl_ack := false,
+ boolean use_old_ctrl_iface := false)
runs on RAW_PCU_Test_CT {
var template (value) RlcmacUlCtrlMsg cell_chg_notif;
var template RlcmacDlCtrlMsg cell_chg_cont;
@@ -5381,8 +5441,14 @@
}
}
+type enumerated f_TC_nacc_outbound_success_ran_type {
+ NACC_RAN_GERAN,
+ NACC_RAN_UTRAN,
+ NACC_RAN_EUTRAN
+}
+
/* Verify PCU handles outbound Network Assisted Cell Change Cell Change (NACC, TS 44.060 sec 8.8). */
-testcase TC_nacc_outbound_success() runs on RAW_PCU_Test_CT {
+function f_TC_nacc_outbound_success(f_TC_nacc_outbound_success_ran_type ran_type) runs on RAW_PCU_Test_CT {
var PollFnCtx pollctx;
var GprsMS ms;
var PCUIF_info_ind info_ind := valueof(ts_PCUIF_INFO_default);
@@ -5415,11 +5481,29 @@
f_ms_tx_ul_block(ms, ts_RLCMAC_CTRL_ACK(ms.tlli), pollctx.fn, nr := pollctx.tstrxbts);
/* Start NACC from MS side */
- f_outbound_nacc_success(ms, info_ind, use_old_ctrl_iface := use_old_ctrl_iface);
+ if (ran_type == NACC_RAN_GERAN) {
+ f_outbound_nacc_success_geran(ms, info_ind, use_old_ctrl_iface := use_old_ctrl_iface);
+ } else if (ran_type == NACC_RAN_UTRAN) {
+ f_outbound_nacc_success_utran(ms, info_ind, use_old_ctrl_iface := use_old_ctrl_iface);
+ } else if (ran_type == NACC_RAN_EUTRAN) {
+ f_outbound_nacc_success_eutran(ms, info_ind, use_old_ctrl_iface := use_old_ctrl_iface);
+ }
f_shutdown(__BFILE__, __LINE__, final := true);
}
+testcase TC_nacc_outbound_success() runs on RAW_PCU_Test_CT {
+ f_TC_nacc_outbound_success(NACC_RAN_GERAN);
+}
+
+testcase TC_nacc_outbound_success_utran() runs on RAW_PCU_Test_CT {
+ f_TC_nacc_outbound_success(NACC_RAN_UTRAN);
+}
+
+testcase TC_nacc_outbound_success_eutran() runs on RAW_PCU_Test_CT {
+ f_TC_nacc_outbound_success(NACC_RAN_EUTRAN);
+}
+
/* Verify Pkt Cell Change Continue is retransmitted if not CTRL ACKed */
testcase TC_nacc_outbound_success_no_ctrl_ack() runs on RAW_PCU_Test_CT {
var PollFnCtx pollctx;
@@ -5456,7 +5540,8 @@
f_ms_tx_ul_block(ms, ts_RLCMAC_CTRL_ACK(ms.tlli), pollctx.fn, nr := pollctx.tstrxbts);
/* Start NACC from MS side, avoid sending final CTRL ACK */
- f_outbound_nacc_success(ms, info_ind, skip_final_ctrl_ack := true, use_old_ctrl_iface := use_old_ctrl_iface);
+ f_outbound_nacc_success_geran(ms, info_ind, skip_final_ctrl_ack := true,
+ use_old_ctrl_iface := use_old_ctrl_iface);
/* Wait until we receive something non-dummy */
dl_block := f_skip_dummy(0, sched_fn);
@@ -5510,10 +5595,10 @@
f_ms_tx_ul_block(ms, ts_RLCMAC_CTRL_ACK(ms.tlli), pollctx.fn, nr := pollctx.tstrxbts);
/* Start NACC from MS side */
- f_outbound_nacc_success(ms, info_ind, use_old_ctrl_iface := use_old_ctrl_iface);
+ f_outbound_nacc_success_geran(ms, info_ind, use_old_ctrl_iface := use_old_ctrl_iface);
/* First NACC procedure is done, let's try to start a new one now that previous queries are cached: */
- f_outbound_nacc_success(ms, info_ind, false, false, use_old_ctrl_iface := use_old_ctrl_iface);
+ f_outbound_nacc_success_geran(ms, info_ind, false, false, use_old_ctrl_iface := use_old_ctrl_iface);
f_shutdown(__BFILE__, __LINE__, final := true);
}
@@ -5557,14 +5642,14 @@
f_ms_tx_ul_block(ms, ts_RLCMAC_CTRL_ACK(ms.tlli), pollctx.fn, nr := pollctx.tstrxbts);
/* Start NACC from MS side */
- f_outbound_nacc_success(ms, info_ind, use_old_ctrl_iface := use_old_ctrl_iface);
+ f_outbound_nacc_success_geran(ms, info_ind, use_old_ctrl_iface := use_old_ctrl_iface);
/* CTRL client should have disconnected from us */
f_ipa_ctrl_wait_link_down();
/* wait for cache entries to time out */
f_sleep(2.0);
/* First NACC procedure is done, let's try to start a new one now that previous queries have timed out: */
- f_outbound_nacc_success(ms, info_ind, use_old_ctrl_iface := use_old_ctrl_iface);
+ f_outbound_nacc_success_geran(ms, info_ind, use_old_ctrl_iface := use_old_ctrl_iface);
f_shutdown(__BFILE__, __LINE__, final := true);
}
@@ -7224,6 +7309,8 @@
execute( TC_pcuif_info_ind_subsequent() );
execute( TC_nacc_outbound_success() );
+ execute( TC_nacc_outbound_success_utran() );
+ execute( TC_nacc_outbound_success_eutran() );
execute( TC_nacc_outbound_success_no_ctrl_ack() );
execute( TC_nacc_outbound_success_twice() );
execute( TC_nacc_outbound_success_twice_nocache() );