diff options
Diffstat (limited to 'tests/tbf/TbfTest.cpp')
-rw-r--r-- | tests/tbf/TbfTest.cpp | 258 |
1 files changed, 258 insertions, 0 deletions
diff --git a/tests/tbf/TbfTest.cpp b/tests/tbf/TbfTest.cpp index 675cc8a..4bca8a8 100644 --- a/tests/tbf/TbfTest.cpp +++ b/tests/tbf/TbfTest.cpp @@ -3350,6 +3350,263 @@ static void test_packet_access_rej_prr() printf("=== end %s ===\n", __func__); } +void test_multi_trx_test_same_capacity() +{ + BTS the_bts; + static gprs_rlcmac_dl_tbf *dl_tbf; + uint8_t trx_no = 0xff; + uint8_t ms_class = 1; + uint8_t egprs_ms_class = 1; + + printf("=== start %s ===\n", __func__); + + setup_bts(&the_bts, 4); + the_bts.bts_data()->trx[0].pdch[5].enable(); + the_bts.bts_data()->alloc_algorithm = alloc_algorithm_b; + the_bts.bts_data()->trx[1].pdch[4].enable(); + the_bts.bts_data()->trx[1].pdch[5].enable(); + + dl_tbf = tbf_alloc_dl_tbf(the_bts.bts_data(), NULL, trx_no, + ms_class, egprs_ms_class, 1); + OSMO_ASSERT(dl_tbf->trx->trx_no == 0); + dl_tbf = tbf_alloc_dl_tbf(the_bts.bts_data(), NULL, trx_no, + ms_class, egprs_ms_class, 1); + OSMO_ASSERT(dl_tbf->trx->trx_no == 1); + dl_tbf = tbf_alloc_dl_tbf(the_bts.bts_data(), NULL, trx_no, + ms_class, egprs_ms_class, 1); + OSMO_ASSERT(dl_tbf->trx->trx_no == 0); + dl_tbf = tbf_alloc_dl_tbf(the_bts.bts_data(), NULL, trx_no, + ms_class, egprs_ms_class, 1); + OSMO_ASSERT(dl_tbf->trx->trx_no == 1); + dl_tbf = tbf_alloc_dl_tbf(the_bts.bts_data(), NULL, trx_no, + ms_class, egprs_ms_class, 1); + OSMO_ASSERT(dl_tbf->trx->trx_no == 0); + dl_tbf = tbf_alloc_dl_tbf(the_bts.bts_data(), NULL, trx_no, + ms_class, egprs_ms_class, 1); + OSMO_ASSERT(dl_tbf->trx->trx_no == 1); + dl_tbf = tbf_alloc_dl_tbf(the_bts.bts_data(), NULL, trx_no, + ms_class, egprs_ms_class, 1); + OSMO_ASSERT(dl_tbf->trx->trx_no == 0); + dl_tbf = tbf_alloc_dl_tbf(the_bts.bts_data(), NULL, trx_no, + ms_class, egprs_ms_class, 1); + OSMO_ASSERT(dl_tbf->trx->trx_no == 1); + dl_tbf = tbf_alloc_dl_tbf(the_bts.bts_data(), NULL, trx_no, + ms_class, egprs_ms_class, 1); + OSMO_ASSERT(dl_tbf->trx->trx_no == 0); + dl_tbf = tbf_alloc_dl_tbf(the_bts.bts_data(), NULL, trx_no, + ms_class, egprs_ms_class, 1); + OSMO_ASSERT(dl_tbf->trx->trx_no == 1); + dl_tbf = tbf_alloc_dl_tbf(the_bts.bts_data(), NULL, trx_no, + ms_class, egprs_ms_class, 1); + OSMO_ASSERT(dl_tbf->trx->trx_no == 0); + + printf("=== end %s ===\n", __func__); + +} + +void test_multi_trx_test_1_2_capacity() +{ + BTS the_bts; + static gprs_rlcmac_dl_tbf *dl_tbf; + uint8_t trx_no = 0xff; + uint8_t ms_class = 1; + uint8_t egprs_ms_class = 1; + + printf("=== start %s ===\n", __func__); + + setup_bts(&the_bts, 4); + the_bts.bts_data()->alloc_algorithm = alloc_algorithm_b; + the_bts.bts_data()->trx[0].pdch[5].enable(); + the_bts.bts_data()->trx[1].pdch[4].enable(); + + dl_tbf = tbf_alloc_dl_tbf(the_bts.bts_data(), NULL, trx_no, + ms_class, egprs_ms_class, 1); + OSMO_ASSERT(dl_tbf->trx->trx_no == 0); + dl_tbf = tbf_alloc_dl_tbf(the_bts.bts_data(), NULL, trx_no, + ms_class, egprs_ms_class, 1); + OSMO_ASSERT(dl_tbf->trx->trx_no == 1); + dl_tbf = tbf_alloc_dl_tbf(the_bts.bts_data(), NULL, trx_no, + ms_class, egprs_ms_class, 1); + OSMO_ASSERT(dl_tbf->trx->trx_no == 0); + dl_tbf = tbf_alloc_dl_tbf(the_bts.bts_data(), NULL, trx_no, + ms_class, egprs_ms_class, 1); + OSMO_ASSERT(dl_tbf->trx->trx_no == 0); + dl_tbf = tbf_alloc_dl_tbf(the_bts.bts_data(), NULL, trx_no, + ms_class, egprs_ms_class, 1); + OSMO_ASSERT(dl_tbf->trx->trx_no == 1); + dl_tbf = tbf_alloc_dl_tbf(the_bts.bts_data(), NULL, trx_no, + ms_class, egprs_ms_class, 1); + OSMO_ASSERT(dl_tbf->trx->trx_no == 0); + dl_tbf = tbf_alloc_dl_tbf(the_bts.bts_data(), NULL, trx_no, + ms_class, egprs_ms_class, 1); + OSMO_ASSERT(dl_tbf->trx->trx_no == 0); + dl_tbf = tbf_alloc_dl_tbf(the_bts.bts_data(), NULL, trx_no, + ms_class, egprs_ms_class, 1); + OSMO_ASSERT(dl_tbf->trx->trx_no == 1); + dl_tbf = tbf_alloc_dl_tbf(the_bts.bts_data(), NULL, trx_no, + ms_class, egprs_ms_class, 1); + OSMO_ASSERT(dl_tbf->trx->trx_no == 0); + dl_tbf = tbf_alloc_dl_tbf(the_bts.bts_data(), NULL, trx_no, + ms_class, egprs_ms_class, 1); + OSMO_ASSERT(dl_tbf->trx->trx_no == 0); + dl_tbf = tbf_alloc_dl_tbf(the_bts.bts_data(), NULL, trx_no, + ms_class, egprs_ms_class, 1); + OSMO_ASSERT(dl_tbf->trx->trx_no == 1); + + printf("=== end %s ===\n", __func__); + +} + +void test_multi_trx_test_1_4_capacity() +{ + BTS the_bts; + static gprs_rlcmac_dl_tbf *dl_tbf; + uint8_t trx_no = 0xff; + uint8_t ms_class = 1; + uint8_t egprs_ms_class = 1; + + printf("=== start %s ===\n", __func__); + + setup_bts(&the_bts, 4); + the_bts.bts_data()->alloc_algorithm = alloc_algorithm_b; + + the_bts.bts_data()->trx[0].pdch[5].enable(); + the_bts.bts_data()->trx[0].pdch[6].enable(); + the_bts.bts_data()->trx[0].pdch[7].enable(); + the_bts.bts_data()->trx[1].pdch[0].enable(); + + dl_tbf = tbf_alloc_dl_tbf(the_bts.bts_data(), NULL, trx_no, + ms_class, egprs_ms_class, 1); + OSMO_ASSERT(dl_tbf->trx->trx_no == 0); + dl_tbf = tbf_alloc_dl_tbf(the_bts.bts_data(), NULL, trx_no, + ms_class, egprs_ms_class, 1); + OSMO_ASSERT(dl_tbf->trx->trx_no == 1); + dl_tbf = tbf_alloc_dl_tbf(the_bts.bts_data(), NULL, trx_no, + ms_class, egprs_ms_class, 1); + OSMO_ASSERT(dl_tbf->trx->trx_no == 0); + dl_tbf = tbf_alloc_dl_tbf(the_bts.bts_data(), NULL, trx_no, + ms_class, egprs_ms_class, 1); + OSMO_ASSERT(dl_tbf->trx->trx_no == 0); + dl_tbf = tbf_alloc_dl_tbf(the_bts.bts_data(), NULL, trx_no, + ms_class, egprs_ms_class, 1); + OSMO_ASSERT(dl_tbf->trx->trx_no == 0); + dl_tbf = tbf_alloc_dl_tbf(the_bts.bts_data(), NULL, trx_no, + ms_class, egprs_ms_class, 1); + OSMO_ASSERT(dl_tbf->trx->trx_no == 0); + dl_tbf = tbf_alloc_dl_tbf(the_bts.bts_data(), NULL, trx_no, + ms_class, egprs_ms_class, 1); + OSMO_ASSERT(dl_tbf->trx->trx_no == 1); + dl_tbf = tbf_alloc_dl_tbf(the_bts.bts_data(), NULL, trx_no, + ms_class, egprs_ms_class, 1); + OSMO_ASSERT(dl_tbf->trx->trx_no == 0); + dl_tbf = tbf_alloc_dl_tbf(the_bts.bts_data(), NULL, trx_no, + ms_class, egprs_ms_class, 1); + OSMO_ASSERT(dl_tbf->trx->trx_no == 0); + dl_tbf = tbf_alloc_dl_tbf(the_bts.bts_data(), NULL, trx_no, + ms_class, egprs_ms_class, 1); + OSMO_ASSERT(dl_tbf->trx->trx_no == 0); + dl_tbf = tbf_alloc_dl_tbf(the_bts.bts_data(), NULL, trx_no, + ms_class, egprs_ms_class, 1); + OSMO_ASSERT(dl_tbf->trx->trx_no == 0); + + printf("=== end %s ===\n", __func__); +} + +void test_multi_trx_test_release_alloc() +{ + BTS the_bts; + static gprs_rlcmac_dl_tbf *dl_tbf; + uint8_t trx_no = 0xff; + uint8_t ms_class = 1; + uint8_t egprs_ms_class = 1; + + printf("=== start %s ===\n", __func__); + + setup_bts(&the_bts, 4); + the_bts.bts_data()->alloc_algorithm = alloc_algorithm_b; + + the_bts.bts_data()->trx[0].pdch[5].enable(); + the_bts.bts_data()->trx[1].pdch[0].enable(); + + dl_tbf = tbf_alloc_dl_tbf(the_bts.bts_data(), NULL, trx_no, + ms_class, egprs_ms_class, 1); + OSMO_ASSERT(dl_tbf->trx->trx_no == 0); + tbf_free(dl_tbf); + dl_tbf = tbf_alloc_dl_tbf(the_bts.bts_data(), NULL, trx_no, + ms_class, egprs_ms_class, 1); + OSMO_ASSERT(dl_tbf->trx->trx_no == 0); + dl_tbf = tbf_alloc_dl_tbf(the_bts.bts_data(), NULL, trx_no, + ms_class, egprs_ms_class, 1); + OSMO_ASSERT(dl_tbf->trx->trx_no == 1); + tbf_free(dl_tbf); + dl_tbf = tbf_alloc_dl_tbf(the_bts.bts_data(), NULL, trx_no, + ms_class, egprs_ms_class, 1); + OSMO_ASSERT(dl_tbf->trx->trx_no == 1); + dl_tbf = tbf_alloc_dl_tbf(the_bts.bts_data(), NULL, trx_no, + ms_class, egprs_ms_class, 1); + OSMO_ASSERT(dl_tbf->trx->trx_no == 0); + tbf_free(dl_tbf); + dl_tbf = tbf_alloc_dl_tbf(the_bts.bts_data(), NULL, trx_no, + ms_class, egprs_ms_class, 1); + OSMO_ASSERT(dl_tbf->trx->trx_no == 0); + + printf("=== end %s ===\n", __func__); +} + +void test_multi_trx_test_same_capacity_dl_ul_combined() +{ + BTS the_bts; + static gprs_rlcmac_dl_tbf *dl_tbf; + static gprs_rlcmac_ul_tbf *ul_tbf; + uint8_t trx_no = 0xff; + uint8_t ms_class = 1; + uint8_t egprs_ms_class = 1; + + printf("=== start %s ===\n", __func__); + + setup_bts(&the_bts, 4); + the_bts.bts_data()->alloc_algorithm = alloc_algorithm_b; + the_bts.bts_data()->trx[1].pdch[4].enable(); + + dl_tbf = tbf_alloc_dl_tbf(the_bts.bts_data(), NULL, trx_no, + ms_class, egprs_ms_class, 1); + OSMO_ASSERT(dl_tbf->trx->trx_no == 0); + ul_tbf = tbf_alloc_ul(the_bts.bts_data(), + dl_tbf->trx->trx_no, + dl_tbf->ms_class(), dl_tbf->ms()->egprs_ms_class(), + dl_tbf->tlli(), dl_tbf->ta(), dl_tbf->ms()); + OSMO_ASSERT(ul_tbf->trx->trx_no == 0); + + dl_tbf = tbf_alloc_dl_tbf(the_bts.bts_data(), NULL, trx_no, + ms_class, egprs_ms_class, 1); + OSMO_ASSERT(dl_tbf->trx->trx_no == 1); + dl_tbf = tbf_alloc_dl_tbf(the_bts.bts_data(), NULL, trx_no, + ms_class, egprs_ms_class, 1); + OSMO_ASSERT(dl_tbf->trx->trx_no == 1); + dl_tbf = tbf_alloc_dl_tbf(the_bts.bts_data(), NULL, trx_no, + ms_class, egprs_ms_class, 1); + OSMO_ASSERT(dl_tbf->trx->trx_no == 0); + ul_tbf = tbf_alloc_ul(the_bts.bts_data(), + dl_tbf->trx->trx_no, + dl_tbf->ms_class(), dl_tbf->ms()->egprs_ms_class(), + dl_tbf->tlli(), dl_tbf->ta(), dl_tbf->ms()); + OSMO_ASSERT(ul_tbf->trx->trx_no == 0); + + printf("=== end %s ===\n", __func__); + +} + +void test_multi_trx_test() +{ + printf("=== start %s ===\n", __func__); + test_multi_trx_test_same_capacity(); + test_multi_trx_test_1_2_capacity(); + test_multi_trx_test_1_4_capacity(); + test_multi_trx_test_release_alloc(); + test_multi_trx_test_same_capacity_dl_ul_combined(); + printf("=== end %s ===\n", __func__); + +} void test_packet_access_rej_epdan() { BTS the_bts; @@ -3420,6 +3677,7 @@ int main(int argc, char **argv) test_tbf_egprs_two_phase_puan(); test_packet_access_rej_prr(); test_packet_access_rej_prr_no_other_tbfs(); + test_multi_trx_test(); if (getenv("TALLOC_REPORT_FULL")) talloc_report_full(tall_pcu_ctx, stderr); |