PCU_Tests: add 'f_multi_ms_' API for multi-MS test cases

Change-Id: Ie2cc717f9f50db16748fe4e4a0ad80d549981e61
Related: OS#4838
diff --git a/pcu/PCU_Tests.ttcn b/pcu/PCU_Tests.ttcn
index 5e61d85..44314f3 100644
--- a/pcu/PCU_Tests.ttcn
+++ b/pcu/PCU_Tests.ttcn
@@ -238,6 +238,35 @@
 	BTS.receive(tr_RAW_PCU_EV(BTS_EV_SI13_NEGO));
 }
 
+/* Register TLLI of each allocated GprsMS instance */
+private function f_multi_ms_bssgp_register()
+runs on RAW_PCU_Test_CT {
+	for (var integer i := 0; i < lengthof(g_ms); i := i + 1) {
+		f_bssgp_client_llgmm_assign(TLLI_UNUSED, g_ms[i].tlli);
+	}
+}
+
+/* Allocate [and activate] an Uplink TBF for each allocated GprsMS instance */
+private function f_multi_ms_establish_tbf(boolean do_activate := false)
+runs on RAW_PCU_Test_CT {
+	for (var integer i := 0; i < lengthof(g_ms); i := i + 1) {
+		/* Establish an Uplink TBF */
+		f_ms_establish_ul_tbf(g_ms[i]);
+
+		/* Send a random block, so this TBF becomes "active" */
+		if (do_activate) {
+			/* FIXME: use the new APU by Pau to get correct TRX/TS here */
+			var template TsTrxBtsNum nr := ts_TsTrxBtsNum(7, i mod 8);
+			var octetstring dummy := f_rnd_octstring(12);
+			var RlcmacDlBlock dl_block;
+			var uint32_t poll_fn;
+
+			f_ms_tx_ul_data_block(g_ms[i], dummy, with_tlli := true, nr := nr);
+			f_rx_rlcmac_dl_block_exp_ack_nack(dl_block, poll_fn, nr := nr);
+		}
+	}
+}
+
 testcase TC_pcuif_suspend() runs on RAW_PCU_Test_CT {
 	var octetstring ra_id := enc_RoutingAreaIdentification(mp_gb_cfg.bvc[0].cell_id.ra_id);
 	var GprsTlli tlli := 'FFFFFFFF'O;
@@ -2489,14 +2518,13 @@
 
 	/* Establish BSSGP connection to the PCU */
 	f_bssgp_establish();
-	for (i := 0; i < num_ms; i := i + 1) {
-		f_bssgp_client_llgmm_assign(TLLI_UNUSED, g_ms[i].tlli);
-	}
+	f_multi_ms_bssgp_register();
 
-	/* Establish an Uplink TBF for each MS. They should be allocated on
-	  different TRX in an uniform way. */
+	/* Establish an Uplink TBF for each GprsMS instance */
+	f_multi_ms_establish_tbf(do_activate := false);
+
+	/* Check if all TBFs are allocated on different TRX in an uniform way */
 	for (i := 0; i < num_ms; i := i + 1) {
-		f_ms_establish_ul_tbf(g_ms[i]);
 		if (g_ms[i].ul_tbf.arfcn != info_ind.trx.v10[i mod 3].arfcn) {
 			setverdict(fail, "Got assigned ARFCN ", g_ms[i].ul_tbf.arfcn,
 				   " vs exp ", info_ind.trx.v10[i mod 3].arfcn);