diff options
author | Philipp Maier <pmaier@sysmocom.de> | 2018-08-28 18:57:42 +0200 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2018-08-29 07:35:57 +0000 |
commit | 510158256b7ca8d3c3764c0481a6fee652ed2eb2 (patch) | |
tree | 6197d2841003312cc9061423e5202154d1c90a3c /tests | |
parent | 1dcd63d36a0352949f0db9290cada5004aab96de (diff) |
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
Diffstat (limited to 'tests')
-rw-r--r-- | tests/meas/meas_test.c | 177 | ||||
-rw-r--r-- | tests/meas/meas_test.ok | 4 |
2 files changed, 181 insertions, 0 deletions
diff --git a/tests/meas/meas_test.c b/tests/meas/meas_test.c index ec89df98..01667718 100644 --- a/tests/meas/meas_test.c +++ b/tests/meas/meas_test.c @@ -484,6 +484,182 @@ static void test_is_meas_overdue(void) 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 @@ int main(int argc, char **argv) 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 77b652ea..d8f81744 100644 --- a/tests/meas/meas_test.ok +++ b/tests/meas/meas_test.ok @@ -584,6 +584,10 @@ Testing is_meas_overdue() and is_meas_complete() =========================================================== +Testing is_meas_complete() + + +=========================================================== Testing lchan_meas_process_measurement() (leaving out measurement sample for SACCH block) (leaving out measurement sample for SACCH block) |