aboutsummaryrefslogtreecommitdiffstats
path: root/tests/tbf/TbfTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/tbf/TbfTest.cpp')
-rw-r--r--tests/tbf/TbfTest.cpp258
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);