Change in osmo-bts[master]: measurement: add unit tests for is_meas_complete()

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

dexter gerrit-no-reply at lists.osmocom.org
Tue Aug 28 17:02:13 UTC 2018


dexter has uploaded this change for review. ( https://gerrit.osmocom.org/10663


Change subject: measurement: add unit tests for is_meas_complete()
......................................................................

measurement: add unit tests for is_meas_complete()

We do not test is_meas_complete() individually yet, but it is an
integral part of the measurement processings since this function decides
where a measurement interval ends.

- Add unit tests that test TCH/F, TCH/H, SDCCH/4 and STDCH/8

Change-Id: I8f89d9e7092cd65ba4d5c5649140692dcc20bdd6
Related: OS#2987
---
M include/osmo-bts/measurement.h
M src/common/measurement.c
M tests/meas/meas_test.c
M tests/meas/meas_test.ok
4 files changed, 184 insertions(+), 1 deletion(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-bts refs/changes/63/10663/1

diff --git a/include/osmo-bts/measurement.h b/include/osmo-bts/measurement.h
index 57eeef5..5c3def0 100644
--- a/include/osmo-bts/measurement.h
+++ b/include/osmo-bts/measurement.h
@@ -12,6 +12,8 @@
 
 void lchan_meas_reset(struct gsm_lchan *lchan);
 
+int is_meas_complete(struct gsm_lchan *lchan, uint32_t fn);
+
 bool is_meas_overdue(struct gsm_lchan *lchan, uint32_t *fn_missed_end, uint32_t fn);
 
 #endif
diff --git a/src/common/measurement.c b/src/common/measurement.c
index cb45e6e..2dc60d5 100644
--- a/src/common/measurement.c
+++ b/src/common/measurement.c
@@ -245,7 +245,7 @@
 }
 
 /* determine if a measurement period ends at the given frame number */
-static int is_meas_complete(struct gsm_lchan *lchan, uint32_t fn)
+int is_meas_complete(struct gsm_lchan *lchan, uint32_t fn)
 {
 	unsigned int fn_mod = -1;
 	const uint8_t *tbl;
diff --git a/tests/meas/meas_test.c b/tests/meas/meas_test.c
index ec89df9..0166771 100644
--- a/tests/meas/meas_test.c
+++ b/tests/meas/meas_test.c
@@ -484,6 +484,182 @@
 	OSMO_ASSERT(fn_missed_end == LCHAN_FN_DUMMY);
 }
 
+static void test_is_meas_complete_single(struct gsm_lchan *lchan,
+					 uint32_t fn_end, uint8_t intv_len)
+{
+	unsigned int i;
+	unsigned int k;
+	int rc;
+	uint32_t offset;
+
+	/* Walk through multiple measurement intervals and make sure that the
+	 * interval end is detected only in the expected location */
+	for (k = 0; k < 100; k++) {
+		offset = intv_len * k;
+		for (i = 0; i < intv_len; i++) {
+			rc = is_meas_complete(lchan, i + offset);
+			if (rc)
+				OSMO_ASSERT(i + offset == fn_end + offset);
+		}
+	}
+}
+
+static void test_is_meas_complete(void)
+{
+	struct gsm_lchan *lchan;
+	printf("\n\n");
+	printf("===========================================================\n");
+	printf("Testing is_meas_complete()\n");
+
+	/* Test interval end detection on TCH/F TS0-TS7 */
+	lchan = &trx->ts[0].lchan[0];
+	lchan->ts->pchan = GSM_PCHAN_TCH_F;
+	test_is_meas_complete_single(lchan, 12, 104);
+
+	lchan = &trx->ts[1].lchan[0];
+	lchan->ts->pchan = GSM_PCHAN_TCH_F;
+	test_is_meas_complete_single(lchan, 25, 104);
+
+	lchan = &trx->ts[2].lchan[0];
+	lchan->ts->pchan = GSM_PCHAN_TCH_F;
+	test_is_meas_complete_single(lchan, 38, 104);
+
+	lchan = &trx->ts[3].lchan[0];
+	lchan->ts->pchan = GSM_PCHAN_TCH_F;
+	test_is_meas_complete_single(lchan, 51, 104);
+
+	lchan = &trx->ts[4].lchan[0];
+	lchan->ts->pchan = GSM_PCHAN_TCH_F;
+	test_is_meas_complete_single(lchan, 64, 104);
+
+	lchan = &trx->ts[5].lchan[0];
+	lchan->ts->pchan = GSM_PCHAN_TCH_F;
+	test_is_meas_complete_single(lchan, 77, 104);
+
+	lchan = &trx->ts[6].lchan[0];
+	lchan->ts->pchan = GSM_PCHAN_TCH_F;
+	test_is_meas_complete_single(lchan, 90, 104);
+
+	lchan = &trx->ts[7].lchan[0];
+	lchan->ts->pchan = GSM_PCHAN_TCH_F;
+	test_is_meas_complete_single(lchan, 103, 104);
+
+	/* Test interval end detection on TCH/H TS0-TS7 */
+	lchan = &trx->ts[0].lchan[0];
+	lchan->ts->pchan = GSM_PCHAN_TCH_H;
+	test_is_meas_complete_single(lchan, 12, 104);
+
+	lchan = &trx->ts[1].lchan[0];
+	lchan->ts->pchan = GSM_PCHAN_TCH_H;
+	test_is_meas_complete_single(lchan, 12, 104);
+
+	lchan = &trx->ts[0].lchan[1];
+	lchan->ts->pchan = GSM_PCHAN_TCH_H;
+	test_is_meas_complete_single(lchan, 25, 104);
+
+	lchan = &trx->ts[1].lchan[1];
+	lchan->ts->pchan = GSM_PCHAN_TCH_H;
+	test_is_meas_complete_single(lchan, 25, 104);
+
+	lchan = &trx->ts[2].lchan[0];
+	lchan->ts->pchan = GSM_PCHAN_TCH_H;
+	test_is_meas_complete_single(lchan, 38, 104);
+
+	lchan = &trx->ts[3].lchan[0];
+	lchan->ts->pchan = GSM_PCHAN_TCH_H;
+	test_is_meas_complete_single(lchan, 38, 104);
+
+	lchan = &trx->ts[2].lchan[1];
+	lchan->ts->pchan = GSM_PCHAN_TCH_H;
+	test_is_meas_complete_single(lchan, 51, 104);
+
+	lchan = &trx->ts[3].lchan[1];
+	lchan->ts->pchan = GSM_PCHAN_TCH_H;
+	test_is_meas_complete_single(lchan, 51, 104);
+
+	lchan = &trx->ts[4].lchan[0];
+	lchan->ts->pchan = GSM_PCHAN_TCH_H;
+	test_is_meas_complete_single(lchan, 64, 104);
+
+	lchan = &trx->ts[5].lchan[0];
+	lchan->ts->pchan = GSM_PCHAN_TCH_H;
+	test_is_meas_complete_single(lchan, 64, 104);
+
+	lchan = &trx->ts[4].lchan[1];
+	lchan->ts->pchan = GSM_PCHAN_TCH_H;
+	test_is_meas_complete_single(lchan, 77, 104);
+
+	lchan = &trx->ts[5].lchan[1];
+	lchan->ts->pchan = GSM_PCHAN_TCH_H;
+	test_is_meas_complete_single(lchan, 77, 104);
+
+	lchan = &trx->ts[6].lchan[0];
+	lchan->ts->pchan = GSM_PCHAN_TCH_H;
+	test_is_meas_complete_single(lchan, 90, 104);
+
+	lchan = &trx->ts[7].lchan[0];
+	lchan->ts->pchan = GSM_PCHAN_TCH_H;
+	test_is_meas_complete_single(lchan, 90, 104);
+
+	lchan = &trx->ts[6].lchan[1];
+	lchan->ts->pchan = GSM_PCHAN_TCH_H;
+	test_is_meas_complete_single(lchan, 103, 104);
+
+	lchan = &trx->ts[7].lchan[1];
+	lchan->ts->pchan = GSM_PCHAN_TCH_H;
+	test_is_meas_complete_single(lchan, 103, 104);
+
+	/* Test interval end detection on SDCCH/8 SS0-SS7 */
+	lchan = &trx->ts[0].lchan[0];
+	lchan->ts->pchan = GSM_PCHAN_SDCCH8_SACCH8C;
+	test_is_meas_complete_single(lchan, 66, 102);
+
+	lchan = &trx->ts[0].lchan[1];
+	lchan->ts->pchan = GSM_PCHAN_SDCCH8_SACCH8C;
+	test_is_meas_complete_single(lchan, 70, 102);
+
+	lchan = &trx->ts[0].lchan[2];
+	lchan->ts->pchan = GSM_PCHAN_SDCCH8_SACCH8C;
+	test_is_meas_complete_single(lchan, 74, 102);
+
+	lchan = &trx->ts[0].lchan[3];
+	lchan->ts->pchan = GSM_PCHAN_SDCCH8_SACCH8C;
+	test_is_meas_complete_single(lchan, 78, 102);
+
+	lchan = &trx->ts[0].lchan[4];
+	lchan->ts->pchan = GSM_PCHAN_SDCCH8_SACCH8C;
+	test_is_meas_complete_single(lchan, 98, 102);
+
+	lchan = &trx->ts[0].lchan[5];
+	lchan->ts->pchan = GSM_PCHAN_SDCCH8_SACCH8C;
+	test_is_meas_complete_single(lchan, 0, 102);
+
+	lchan = &trx->ts[0].lchan[6];
+	lchan->ts->pchan = GSM_PCHAN_SDCCH8_SACCH8C;
+	test_is_meas_complete_single(lchan, 4, 102);
+
+	lchan = &trx->ts[0].lchan[7];
+	lchan->ts->pchan = GSM_PCHAN_SDCCH8_SACCH8C;
+	test_is_meas_complete_single(lchan, 8, 102);
+
+	/* Test interval end detection on SDCCH/4 SS0-SS3 */
+	lchan = &trx->ts[0].lchan[0];
+	lchan->ts->pchan = GSM_PCHAN_CCCH_SDCCH4;
+	test_is_meas_complete_single(lchan, 88, 102);
+
+	lchan = &trx->ts[0].lchan[1];
+	lchan->ts->pchan = GSM_PCHAN_CCCH_SDCCH4;
+	test_is_meas_complete_single(lchan, 92, 102);
+
+	lchan = &trx->ts[0].lchan[2];
+	lchan->ts->pchan = GSM_PCHAN_CCCH_SDCCH4;
+	test_is_meas_complete_single(lchan, 6, 102);
+
+	lchan = &trx->ts[0].lchan[3];
+	lchan->ts->pchan = GSM_PCHAN_CCCH_SDCCH4;
+	test_is_meas_complete_single(lchan, 10, 102);
+}
+
 /* This tests the robustness of lchan_meas_process_measurement(). This is the
  * function that is called from l1_sap.c each time a measurement indication is
  * received. The process must still go on when measurement indications (blocks)
@@ -604,6 +780,7 @@
 	printf("***************************************************\n");
 
 	test_is_meas_overdue();
+	test_is_meas_complete();
 	test_lchan_meas_process_measurement(false, false);
 	test_lchan_meas_process_measurement(true, false);
 	test_lchan_meas_process_measurement(false, true);
diff --git a/tests/meas/meas_test.ok b/tests/meas/meas_test.ok
index 77b652e..d8f8174 100644
--- a/tests/meas/meas_test.ok
+++ b/tests/meas/meas_test.ok
@@ -584,6 +584,10 @@
 
 
 ===========================================================
+Testing is_meas_complete()
+
+
+===========================================================
 Testing lchan_meas_process_measurement()
 (leaving out measurement sample for SACCH block)
 (leaving out measurement sample for SACCH block)

-- 
To view, visit https://gerrit.osmocom.org/10663
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-bts
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: I8f89d9e7092cd65ba4d5c5649140692dcc20bdd6
Gerrit-Change-Number: 10663
Gerrit-PatchSet: 1
Gerrit-Owner: dexter <pmaier at sysmocom.de>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20180828/5d13da75/attachment.htm>


More information about the gerrit-log mailing list