Change in osmo-ttcn3-hacks[master]: pcu: Introduce test TC_cs_max_dl and TC_dl_cs1_to_cs4

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

pespin gerrit-no-reply at lists.osmocom.org
Tue Nov 10 13:54:40 UTC 2020


pespin has submitted this change. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/21051 )

Change subject: pcu: Introduce test TC_cs_max_dl and TC_dl_cs1_to_cs4
......................................................................

pcu: Introduce test TC_cs_max_dl and TC_dl_cs1_to_cs4

Change-Id: If847d091f3f4e6a7c77fbadc7280423637c50b35
---
M pcu/GPRS_Components.ttcn
M pcu/PCU_Tests.ttcn
2 files changed, 116 insertions(+), 10 deletions(-)

Approvals:
  laforge: Looks good to me, but someone else must approve
  fixeria: Looks good to me, approved
  Jenkins Builder: Verified



diff --git a/pcu/GPRS_Components.ttcn b/pcu/GPRS_Components.ttcn
index 7093f31..1cbca4c 100644
--- a/pcu/GPRS_Components.ttcn
+++ b/pcu/GPRS_Components.ttcn
@@ -949,19 +949,12 @@
 	}
 }
 
-/* High level (task specific) helper for receiving and matching GPRS/EGPRS data blocks */
-function f_rx_rlcmac_dl_block_exp_data(out RlcmacDlBlock dl_block, out uint32_t dl_fn,
+/* High level (task specific) helper for  matching GPRS/EGPRS data blocks */
+function f_rlcmac_dl_block_exp_data(in RlcmacDlBlock dl_block,
 				       template (present) octetstring data := ?,
 				       template (present) uint7_t exp_bsn := ?,
-				       template (present) CodingScheme exp_cs := ?,
-				       template (value) TsTrxBtsNum nr := ts_TsTrxBtsNum)
+				       template (present) CodingScheme exp_cs := ?)
 runs on MS_BTS_IFACE_CT {
-	/* FIXME: ideally we should use an alt statement with timeout here, rather than
-	 * having +100500 layers of abstraction. This would facilitate developing the
-	 * multi-TBF/-TRX/-BTS tests, where you cannot expect that the first received
-	 * block is exactly what you need. */
-	f_rx_rlcmac_dl_block(dl_block, dl_fn, nr := nr);
-
 	/* Make sure it's either GPRS or EGPRS data block */
 	if (not match(dl_block, tr_RLCMAC_DATA)) {
 		setverdict(fail, "Failed to match DL DATA: ", dl_block, " vs ", tr_RLCMAC_DATA);
@@ -979,6 +972,22 @@
 	}
 }
 
+/* High level (task specific) helper for receiving and matching GPRS/EGPRS data blocks */
+function f_rx_rlcmac_dl_block_exp_data(out RlcmacDlBlock dl_block, out uint32_t dl_fn,
+				       template (present) octetstring data := ?,
+				       template (present) uint7_t exp_bsn := ?,
+				       template (present) CodingScheme exp_cs := ?,
+				       template (value) TsTrxBtsNum nr := ts_TsTrxBtsNum)
+runs on MS_BTS_IFACE_CT {
+	/* FIXME: ideally we should use an alt statement with timeout here, rather than
+	 * having +100500 layers of abstraction. This would facilitate developing the
+	 * multi-TBF/-TRX/-BTS tests, where you cannot expect that the first received
+	 * block is exactly what you need. */
+	f_rx_rlcmac_dl_block(dl_block, dl_fn, nr := nr);
+
+	f_rlcmac_dl_block_exp_data(dl_block, data, exp_bsn, exp_cs);
+}
+
 function f_dl_block_ack_fn(in RlcmacDlBlock dl_block, uint32_t dl_fn)
 runs on MS_BTS_IFACE_CT return uint32_t {
 	var boolean rrbp_valid;
diff --git a/pcu/PCU_Tests.ttcn b/pcu/PCU_Tests.ttcn
index aa4d28d..4df040e 100644
--- a/pcu/PCU_Tests.ttcn
+++ b/pcu/PCU_Tests.ttcn
@@ -867,6 +867,101 @@
 	f_shutdown(__BFILE__, __LINE__, final := true);
 }
 
+/* Verify scheduling of multiple Downlink data blocks, enough to reach CS4 */
+function f_dl_data_exp_cs(template CodingScheme exp_cs := ?) runs on RAW_PCU_Test_CT {
+	var octetstring data := f_rnd_octstring(1000);
+	var RlcmacDlBlock prev_dl_block, dl_block;
+	var uint32_t ack_fn;
+	var uint32_t fn;
+	var GprsMS ms;
+	var integer tx_data_remain := 5;
+	var integer bsn := 0;
+
+	/* Establish BSSGP connection to the PCU */
+	f_bssgp_establish();
+
+	ms := g_ms[0]; /* We only use first MS in this test */
+	f_bssgp_client_llgmm_assign(TLLI_UNUSED, ms.tlli);
+
+	/* SGSN sends some DL data, PCU will page on CCCH (PCH) */
+	BSSGP[0].send(ts_BSSGP_DL_UD(ms.tlli, data));
+	f_ms_exp_dl_tbf_ass_ccch(ms, PCU_IF_SAPI_PCH);
+
+	/* Wait timer X2002 and DL block is available after CCCH IMM ASS */
+	f_sleep(X2002);
+
+	for (var integer i := 0; i < 250; i := i + 1) {
+		bsn := i mod 128;
+		f_rx_rlcmac_dl_block(dl_block, fn);
+
+		if (match(dl_block, tr_RLCMAC_DUMMY_CTRL)) {
+			/* No more data to receive, done */
+			break;
+		}
+
+		f_rlcmac_dl_block_exp_data(dl_block, ?, bsn, cs_gprs_any);
+
+		/* Keep Ack/Nack description updated */
+		f_acknackdesc_ack_block(ms.dl_tbf.acknack_desc, dl_block);
+
+		/* TDMA frame number on which we are supposed to send the ACK */
+		if (dl_block.data.mac_hdr.mac_hdr.rrbp_valid) {
+			ack_fn := f_dl_block_ack_fn(dl_block, fn);
+			f_ms_tx_ul_block(ms, ts_RLCMAC_DL_ACK_NACK(ms.dl_tbf.tfi, ms.dl_tbf.acknack_desc), ack_fn);
+			if (tx_data_remain != 0) {
+				/* Submit more data from time to time to keep the TBF ongoing */
+				BSSGP[0].send(ts_BSSGP_DL_UD(ms.tlli, data));
+				tx_data_remain := tx_data_remain - 1;
+			}
+		}
+		prev_dl_block := dl_block;
+	}
+
+	bsn := (bsn + 127) mod 128; /* previous bsn: bsn -1 */
+	f_rlcmac_dl_block_exp_data(prev_dl_block, ?, bsn, exp_cs);
+
+
+	f_shutdown(__BFILE__, __LINE__, final := true);
+}
+
+/* Verify DL CS above "cs max" set by VTY is never used */
+testcase TC_cs_max_dl() runs on RAW_PCU_Test_CT {
+	/* Initialize NS/BSSGP side */
+	f_init_bssgp();
+	/* Initialize GPRS MS side */
+	f_init_gprs_ms();
+
+	/* Initialize the PCU interface abstraction */
+	f_init_raw(testcasename(), ts_PCUIF_INFO_default(c_PCUIF_Flags_noMCS));
+
+	/* Set maximum allowed DL CS to 3 */
+	g_cs_initial_dl := 1;
+	g_cs_max_dl := 3;
+	f_pcuvty_set_allowed_cs_mcs();
+	f_pcuvty_set_link_quality_ranges();
+
+	f_dl_data_exp_cs(f_rlcmac_block_int2cs_mcs(g_cs_max_dl, false));
+}
+
+/* Check DL CS4 is used in good link conditions if allowed by config */
+testcase TC_dl_cs1_to_cs4() runs on RAW_PCU_Test_CT {
+	/* Initialize NS/BSSGP side */
+	f_init_bssgp();
+	/* Initialize GPRS MS side */
+	f_init_gprs_ms();
+
+	/* Initialize the PCU interface abstraction */
+	f_init_raw(testcasename(), ts_PCUIF_INFO_default(c_PCUIF_Flags_noMCS));
+
+	/* Set initial DL CS to 1 & maximum allowed DL CS to 4 */
+	g_cs_initial_dl := 1;
+	g_cs_max_dl := 4;
+	f_pcuvty_set_allowed_cs_mcs();
+	f_pcuvty_set_link_quality_ranges();
+
+	f_dl_data_exp_cs(f_rlcmac_block_int2cs_mcs(g_cs_max_dl, false));
+}
+
 /* Verify PCU drops TBF after some time of inactivity. */
 testcase TC_t3169() runs on RAW_PCU_Test_CT {
 	var PCUIF_info_ind info_ind;
@@ -2915,6 +3010,8 @@
 	execute( TC_cs_initial_ul() );
 	execute( TC_cs_max_ul() );
 	execute( TC_cs_initial_dl() );
+	execute( TC_cs_max_dl() );
+	execute( TC_dl_cs1_to_cs4() );
 	execute( TC_t3169() );
 	execute( TC_t3193() );
 	execute( TC_countdown_procedure() );

-- 
To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/21051
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: If847d091f3f4e6a7c77fbadc7280423637c50b35
Gerrit-Change-Number: 21051
Gerrit-PatchSet: 4
Gerrit-Owner: pespin <pespin at sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <vyanitskiy at sysmocom.de>
Gerrit-Reviewer: laforge <laforge at osmocom.org>
Gerrit-Reviewer: pespin <pespin at sysmocom.de>
Gerrit-MessageType: merged
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20201110/9b293c13/attachment.htm>


More information about the gerrit-log mailing list