From 44c8e835916e1b3f20ba530482fa3fff057e623e Mon Sep 17 00:00:00 2001 From: Vadim Yanitskiy Date: Thu, 3 Mar 2022 03:40:08 +0700 Subject: tests/gsm0408: add testing coverage for generate_cell_chan_list() This commit demonstrates what happens when a cell has channels in both P-GSM and E-GSM bands (case 'c'). As can be seen from: Case a) only the BCCH carrier: 10 Case b) more carriers from P-GSM band: 1 3 10 64 99 124 Case c) more carriers from E-GSM band: 1 3 10 64 99 124 in both cases 'b' and 'c' we have the same set of ARFCNs. Carriers from the E-GSM band are not present at all. This is wrong and will be fixed in the follow up change(s). Change-Id: Ied0519c70501f105673a9b36657101063d275058 Related: SYS#5854 --- tests/gsm0408/gsm0408_test.c | 68 +++++++++++++++++++++++++++++++++++++++++++ tests/gsm0408/gsm0408_test.ok | 6 ++++ 2 files changed, 74 insertions(+) diff --git a/tests/gsm0408/gsm0408_test.c b/tests/gsm0408/gsm0408_test.c index 90b294e83..a7270a4fa 100644 --- a/tests/gsm0408/gsm0408_test.c +++ b/tests/gsm0408/gsm0408_test.c @@ -29,6 +29,7 @@ #include #include #include +#include #include #include @@ -555,6 +556,71 @@ static void test_gsm48_multirate_config() msgb_free(msg); } +/* Similar to list_arfcn() from system_information.c, but uses printf(). + * Another difference is that the text is printed even if n is 0. */ +static void print_cell_chan_desc(uint8_t *cd, const char *text) +{ + struct gsm_sysinfo_freq freq[1024]; + unsigned int n = 0, i; + + memset(freq, 0, sizeof(freq)); + gsm48_decode_freq_list(freq, cd, 16, 0xce, 1); + + printf("%s:", text); + for (i = 0; i < 1024; i++) { + if (!freq[i].mask) + continue; + printf(" %u", i); + n++; + } + if (!n) + printf(" (empty set)"); + printf("\n"); +} + +static void test_cell_chan_desc(struct gsm_network *net) +{ + struct gsm_bts *bts = bts_init(net); + uint8_t cell_chan_desc[16]; + + printf("Testing generation of the Cell Channel Description IE:\n"); + + bts_model_unknown_init(); + bts->type = GSM_BTS_TYPE_UNKNOWN; + bts->model = bts_model_find(bts->type); + OSMO_ASSERT(bts->model != NULL); + + bts->band = GSM_BAND_900; + bts->c0->arfcn = 10; /* BCCH carrier */ + + /* Case a) only the BCCH carrier */ + bitvec_set_bit_pos(&bts->si_common.cell_alloc, bts->c0->arfcn, ONE); + + OSMO_ASSERT(generate_cell_chan_list(&cell_chan_desc[0], bts) == 0); + print_cell_chan_desc(&cell_chan_desc[0], "Case a) only the BCCH carrier"); + + /* Case b) more carriers from P-GSM band */ + bitvec_set_bit_pos(&bts->si_common.cell_alloc, 1, ONE); + bitvec_set_bit_pos(&bts->si_common.cell_alloc, 3, ONE); + bitvec_set_bit_pos(&bts->si_common.cell_alloc, 64, ONE); + bitvec_set_bit_pos(&bts->si_common.cell_alloc, 99, ONE); + bitvec_set_bit_pos(&bts->si_common.cell_alloc, 124, ONE); + + OSMO_ASSERT(generate_cell_chan_list(&cell_chan_desc[0], bts) == 0); + print_cell_chan_desc(&cell_chan_desc[0], "Case b) more carriers from P-GSM band"); + + /* Case c) more carriers from E-GSM band */ + bitvec_set_bit_pos(&bts->si_common.cell_alloc, 0, ONE); + bitvec_set_bit_pos(&bts->si_common.cell_alloc, 975, ONE); + bitvec_set_bit_pos(&bts->si_common.cell_alloc, 1001, ONE); + bitvec_set_bit_pos(&bts->si_common.cell_alloc, 1023, ONE); + + OSMO_ASSERT(generate_cell_chan_list(&cell_chan_desc[0], bts) == 0); + print_cell_chan_desc(&cell_chan_desc[0], "Case c) more carriers from E-GSM band"); + + bts_del(bts); +} + static const struct log_info_cat log_categories[] = { }; @@ -591,6 +657,8 @@ int main(int argc, char **argv) test_gsm48_multirate_config(); + test_cell_chan_desc(net); + printf("Done.\n"); return EXIT_SUCCESS; diff --git a/tests/gsm0408/gsm0408_test.ok b/tests/gsm0408/gsm0408_test.ok index 0bb7ee037..26ec931e6 100644 --- a/tests/gsm0408/gsm0408_test.ok +++ b/tests/gsm0408/gsm0408_test.ok @@ -187,4 +187,10 @@ gsm48_multirate_config(): rc=0, lv=0620b40bf330d8 gsm48_multirate_config(): rc=0, lv=0520340bf330 gsm48_multirate_config(): rc=0, lv=0420140bf0 gsm48_multirate_config(): rc=0, lv=022004 +BTS allocation OK in test_cell_chan_desc() +Testing generation of the Cell Channel Description IE: +Case a) only the BCCH carrier: 10 +Case b) more carriers from P-GSM band: 1 3 10 64 99 124 +Case c) more carriers from E-GSM band: 1 3 10 64 99 124 +BTS deallocated OK in test_cell_chan_desc() Done. -- cgit v1.2.3