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() );