pcu: Introduce test TC_pdch_energy_saving

Related: SYS#4919
Related: OS#4772
Change-Id: Icf5cc467ecabe3fcbf86e0f4caf497669b76fb42
diff --git a/pcu/PCU_Tests.ttcn b/pcu/PCU_Tests.ttcn
index ada9ae3..6f0df06 100644
--- a/pcu/PCU_Tests.ttcn
+++ b/pcu/PCU_Tests.ttcn
@@ -5945,6 +5945,53 @@
 	f_shutdown(__BFILE__, __LINE__, final := true);
 }
 
+/* Verify TRX!=C0 don't schedule rlcmac blocks if no TBF attached to it. See OS#4772, SYS#4919 */
+testcase TC_pdch_energy_saving() runs on RAW_PCU_Test_CT {
+	var PCUIF_info_ind info_ind;
+	var template (value) TsTrxBtsNum nr;
+	var RlcmacDlBlock dl_block;
+	var BTS_PDTCH_Block data_msg;
+	timer T;
+
+	/* Initialize NS/BSSGP side */
+	f_init_bssgp();
+
+	info_ind := valueof(ts_PCUIF_INFO_default);
+	/* The 2 first TRX are enabled. */
+	f_PCUIF_PDCHMask_set(info_ind, '00000000'B, (2 .. 7));
+	f_PCUIF_PDCHMask_set(info_ind, '00000001'B, 0);
+	f_PCUIF_PDCHMask_set(info_ind, '00000001'B, 1);
+
+	/* Initialize the PCU interface abstraction */
+	f_init_raw(testcasename(), info_ind);
+
+	/* Establish BSSGP connection to the PCU */
+	f_bssgp_establish();
+
+	/* Verify C0 gets always dummy blocks: */
+	nr := ts_TsTrxBtsNum(ts_nr := 7, trx_nr := 0, bts_nr := 0, blk_nr := 0);
+	f_rx_rlcmac_dl_block_exp_dummy(dl_block, nr := nr);
+
+	/* TRX1 doesn't send dummy blocks when not needed, in order to honour energy saving: */
+	nr.trx_nr := 1;
+	BTS.send(ts_PCUIF_RTS_REQ(nr.bts_nr, nr.trx_nr, nr.ts_nr,
+				  sapi := PCU_IF_SAPI_PDTCH, fn := 0,
+				  arfcn := f_trxnr2arfcn(valueof(nr.trx_nr)), block_nr := nr.blk_nr));
+	T.start(0.5);
+	alt {
+	[] as_rx_fail_dummy(nr);
+	[] BTS.receive {
+		setverdict(fail, "Unexpected block from BTS");
+		f_shutdown(__BFILE__, __LINE__);
+	}
+	[] T.timeout {
+		setverdict(pass);
+	}
+	}
+
+	f_shutdown(__BFILE__, __LINE__, final := true);
+}
+
 control {
 	execute( TC_pcuif_suspend() );
 	execute( TC_pcuif_suspend_active_tbf() );
@@ -6049,6 +6096,8 @@
 	execute( TC_rim_ran_info_req_single_rep() );
 	execute( TC_rim_ran_info_req_single_rep_eutran() );
 	execute( TC_rim_ran_info_req_single_rep_no_si() );
+
+	execute (TC_pdch_energy_saving() );
 }
 
 }