PCU: Timing Advance: introduce TC_ta_idle_dl_tbf_ass
This test case initiates the packet Downlink assignment procedure
by sending a DL-UNITDATA PDU containing a random TLLI and checks
Timing Advance value indicated in the Immediate Assignment.
Currently fails due to a bug in the IUT (TA=220).
Change-Id: I410abedcc549495f30b5355d399a85648408a946
diff --git a/pcu/PCU_Tests_RAW.ttcn b/pcu/PCU_Tests_RAW.ttcn
index 0e3597b..1d13b8e 100644
--- a/pcu/PCU_Tests_RAW.ttcn
+++ b/pcu/PCU_Tests_RAW.ttcn
@@ -603,6 +603,38 @@
}
}
+/* Verify Timing Advance value(s) indicated during the packet Downlink assignment
+ * procedure as per 3GPP TS 44.018, section 3.5.3. There seems to be a bug in the
+ * IUT that causes it to send an unreasonable Timing Advance value > 0 despite
+ * no active TBF exists at the moment of establishment (idle mode). */
+testcase TC_ta_idle_dl_tbf_ass() runs on RAW_PCU_Test_CT {
+ var OCT4 tlli := f_rnd_octstring(4);
+ var GsmRrMessage rr_imm_ass;
+
+ /* Initialize NS/BSSGP side */
+ f_init_bssgp();
+
+ /* Initialize the PCU interface abstraction */
+ f_init_raw(testcasename());
+
+ /* Establish BSSGP connection to the PCU */
+ f_bssgp_establish();
+ f_bssgp_client_llgmm_assign('FFFFFFFF'O, tlli);
+
+ /* SGSN sends some DL data, PCU will initiate Packet Downlink
+ * Assignment on CCCH (PCH). We don't care about the payload. */
+ BSSGP[0].send(ts_BSSGP_DL_UD(tlli, f_rnd_octstring(10)));
+ f_pcuif_rx_pch_imm_tbf_ass(rr_imm_ass); // TODO: match by TLLI!
+
+ /* Make sure that Timing Advance is 0 (the actual value is not known yet).
+ * As per 3GPP S 44.018, section 3.5.3.1.2, the network *shall* initiate
+ * the procedures defined in 3GPP TS 44.060 or use the polling mechanism. */
+ if (not match(rr_imm_ass, tr_IMM_TBF_ASS(ta := 0))) {
+ setverdict(fail, "Timing Advance value doesn't match");
+ mtc.stop;
+ }
+}
+
/* Verify that the PCU generates valid PTCCH/D messages
* while neither Uplink nor Downlink TBF is established. */
testcase TC_ta_ptcch_idle() runs on RAW_PCU_Test_CT {
@@ -1684,6 +1716,7 @@
execute( TC_pcuif_suspend() );
execute( TC_ta_ptcch_idle() );
execute( TC_ta_rach_imm_ass() );
+ execute( TC_ta_idle_dl_tbf_ass() );
execute( TC_ta_ptcch_ul_multi_tbf() );
execute( TC_cs_lqual_ul_tbf() );
execute( TC_cs_initial_ul() );