[MERGED] osmo-pcu[master]: Add test cases for Header Type 2 in EGPRS UL

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/.

Holger Freyther gerrit-no-reply at lists.osmocom.org
Wed Jun 15 14:05:28 UTC 2016


Holger Freyther has submitted this change and it was merged.

Change subject: Add test cases for Header Type 2 in EGPRS UL
......................................................................


Add test cases for Header Type 2 in EGPRS UL

Updates the test suite to add test cases for Header type 2 parsing
in EGPRS UL.

Change-Id: I1dd46010065a6d6da21e8e45af71e6d5f649b0b0
Reviewed-on: https://gerrit.osmocom.org/271
Reviewed-by: Harald Welte <laforge at gnumonks.org>
Tested-by: Jenkins Builder
Reviewed-by: Holger Freyther <holger at freyther.de>
---
M tests/edge/EdgeTest.cpp
M tests/edge/EdgeTest.ok
2 files changed, 128 insertions(+), 1 deletion(-)

Approvals:
  Harald Welte: Looks good to me, but someone else must approve
  Jenkins Builder: Verified
  Holger Freyther: Looks good to me, approved



diff --git a/tests/edge/EdgeTest.cpp b/tests/edge/EdgeTest.cpp
index 68a0d0b..f8adbbb 100644
--- a/tests/edge/EdgeTest.cpp
+++ b/tests/edge/EdgeTest.cpp
@@ -26,7 +26,7 @@
 #include "encoding.h"
 #include "rlc.h"
 #include "llc.h"
-
+#include "bts.h"
 extern "C" {
 #include "pcu_vty.h"
 
@@ -1156,6 +1156,130 @@
 	ARRAY_SIZE(default_categories),
 };
 
+static void setup_bts(BTS *the_bts, uint8_t ts_no, uint8_t cs = 1)
+{
+	gprs_rlcmac_bts *bts;
+	gprs_rlcmac_trx *trx;
+
+	bts = the_bts->bts_data();
+	bts->egprs_enabled = true;
+	bts->alloc_algorithm = alloc_algorithm_a;
+	bts->initial_cs_dl = cs;
+	bts->initial_cs_ul = cs;
+	trx = &bts->trx[0];
+	trx->pdch[ts_no].enable();
+}
+static void uplink_header_type_2_parsing_test(BTS *the_bts,
+	uint8_t ts_no, uint32_t tlli, uint32_t *fn, uint16_t qta,
+	uint8_t ms_class)
+{
+	GprsMs *ms;
+	struct pcu_l1_meas meas;
+	int tfi = 0;
+	gprs_rlcmac_bts *bts;
+	RlcMacUplink_t ulreq = {0};
+	uint8_t data[79] = {0};
+	struct gprs_rlc_ul_header_egprs_2 *egprs2  = NULL;
+
+	egprs2 = (struct gprs_rlc_ul_header_egprs_2 *) data;
+	bts = the_bts->bts_data();
+
+	tfi = 1;
+
+	struct gprs_rlc_data_info rlc;
+	GprsCodingScheme cs;
+	int rc, offs;
+
+	/*without padding*/
+	cs = GprsCodingScheme::MCS5;
+	egprs2 = (struct gprs_rlc_ul_header_egprs_2 *) data;
+	egprs2->r = 1;
+	egprs2->si = 1;
+	egprs2->cv = 7;
+	egprs2->tfi_a = tfi & 0x03;
+	egprs2->tfi_b = (tfi & 0x1c) >> 2;
+	egprs2->bsn1_a = 0;
+	egprs2->bsn1_b = 0;
+	egprs2->cps_a = 3;
+	egprs2->cps_b = 0;
+	egprs2->rsb = 0;
+	egprs2->pi = 0;
+	data[4] = 0x20;                /* Setting E field */
+	rc = Decoding::rlc_parse_ul_data_header(&rlc, data, cs);
+	offs = rlc.data_offs_bits[0] / 8;
+	OSMO_ASSERT(offs == 4);
+	OSMO_ASSERT(rlc.tfi == 1);
+	OSMO_ASSERT(rlc.num_data_blocks == 1);
+	OSMO_ASSERT(rlc.block_info[0].e == 1);
+	OSMO_ASSERT(rlc.block_info[0].ti == 0);
+	OSMO_ASSERT(rlc.block_info[0].bsn == 0);
+
+	/* with padding case */
+	cs = GprsCodingScheme::MCS6;
+	egprs2 = (struct gprs_rlc_ul_header_egprs_2 *) data;
+	egprs2->r = 1;
+	egprs2->si = 1;
+	egprs2->cv = 7;
+	egprs2->tfi_a = tfi & 0x03;
+	egprs2->tfi_b = (tfi & 0x1c) >> 2;
+	egprs2->bsn1_a = 0;
+	egprs2->bsn1_b = 0;
+	egprs2->cps_a = 3;
+	egprs2->cps_b = 0;
+	egprs2->rsb = 0;
+	egprs2->pi = 0;
+	data[10] = 0x20;                /* Setting E field */
+	rc = Decoding::rlc_parse_ul_data_header(&rlc, data, cs);
+	offs = rlc.data_offs_bits[0] / 8;
+	OSMO_ASSERT(offs == 10);
+	OSMO_ASSERT(rlc.num_data_blocks == 1);
+	OSMO_ASSERT(rlc.tfi == 1);
+	OSMO_ASSERT(rlc.block_info[0].e == 1);
+	OSMO_ASSERT(rlc.block_info[0].ti == 0);
+	OSMO_ASSERT(rlc.block_info[0].bsn == 0);
+
+	egprs2->r = 1;
+	egprs2->si = 1;
+	egprs2->cv = 7;
+	egprs2->tfi_a = tfi & 0x03;
+	egprs2->tfi_b = (tfi & 0x1c) >> 2;
+	egprs2->bsn1_a = 1;
+	egprs2->bsn1_b = 0;
+	egprs2->cps_a = 2;
+	egprs2->cps_b = 0;
+	egprs2->rsb = 0;
+	egprs2->pi = 0;
+	data[10] = 0x20;		/* Setting E field */
+	rc = Decoding::rlc_parse_ul_data_header(&rlc, data, cs);
+	offs = rlc.data_offs_bits[0] / 8;
+	OSMO_ASSERT(offs == 10);
+	OSMO_ASSERT(rlc.tfi == 1);
+	OSMO_ASSERT(rlc.num_data_blocks == 1);
+	OSMO_ASSERT(rlc.block_info[0].e == 1);
+	OSMO_ASSERT(rlc.block_info[0].ti == 0);
+	OSMO_ASSERT(rlc.block_info[0].bsn == 1);
+}
+
+static void uplink_header_type2_test(void)
+{
+	BTS the_bts;
+	int ts_no = 7;
+	uint32_t fn = 2654218;
+	uint16_t qta = 31;
+	uint32_t tlli = 0xf1223344;
+	const char *imsi = "0011223344";
+	uint8_t ms_class = 1;
+	gprs_rlcmac_ul_tbf *ul_tbf;
+	GprsMs *ms;
+
+	printf("=== start %s ===\n", __func__);
+	setup_bts(&the_bts, ts_no, 10);
+
+	uplink_header_type_2_parsing_test(&the_bts, ts_no,
+			tlli, &fn, qta, ms_class);
+	printf("=== end %s ===\n", __func__);
+}
+
 int main(int argc, char **argv)
 {
 	struct vty_app_info pcu_vty_info = {0};
@@ -1178,6 +1302,7 @@
 	test_rlc_unaligned_copy();
 	test_rlc_unit_encoder();
 
+	uplink_header_type2_test();
 	if (getenv("TALLOC_REPORT_FULL"))
 		talloc_report_full(tall_pcu_ctx, stderr);
 	return EXIT_SUCCESS;
diff --git a/tests/edge/EdgeTest.ok b/tests/edge/EdgeTest.ok
index 9554df3..95ca60b 100644
--- a/tests/edge/EdgeTest.ok
+++ b/tests/edge/EdgeTest.ok
@@ -6,3 +6,5 @@
 === end test_rlc_unit_decoder ===
 === start test_rlc_unit_encoder ===
 === end test_rlc_unit_encoder ===
+=== start uplink_header_type2_test ===
+=== end uplink_header_type2_test ===

-- 
To view, visit https://gerrit.osmocom.org/271
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I1dd46010065a6d6da21e8e45af71e6d5f649b0b0
Gerrit-PatchSet: 2
Gerrit-Project: osmo-pcu
Gerrit-Branch: master
Gerrit-Owner: arvind.sirsikar <arvind.sirsikar at radisys.com>
Gerrit-Reviewer: Harald Welte <laforge at gnumonks.org>
Gerrit-Reviewer: Holger Freyther <holger at freyther.de>
Gerrit-Reviewer: Jenkins Builder



More information about the gerrit-log mailing list