diff options
Diffstat (limited to 'tests/ms')
-rw-r--r-- | tests/ms/MsTest.cpp | 615 | ||||
-rw-r--r-- | tests/ms/MsTest.err | 112 | ||||
-rw-r--r-- | tests/ms/MsTest.ok | 25 |
3 files changed, 352 insertions, 400 deletions
diff --git a/tests/ms/MsTest.cpp b/tests/ms/MsTest.cpp index c74b3a65..5bfbc28f 100644 --- a/tests/ms/MsTest.cpp +++ b/tests/ms/MsTest.cpp @@ -21,9 +21,9 @@ */ #include "tbf.h" +#include "tbf_ul.h" #include "gprs_debug.h" #include "gprs_ms.h" -#include "gprs_ms_storage.h" #include "bts.h" extern "C" { @@ -39,122 +39,87 @@ extern "C" { #include <errno.h> #include <unistd.h> +#include <new> + void *tall_pcu_ctx; int16_t spoof_mnc = 0, spoof_mcc = 0; bool spoof_mnc_3_digits = false; -static void test_ms_state() +static int ul_tbf_dtor(struct gprs_rlcmac_ul_tbf *tbf) { - uint32_t tlli = 0xffeeddbb; - gprs_rlcmac_dl_tbf *dl_tbf; - gprs_rlcmac_ul_tbf *ul_tbf; - GprsMs *ms; - - printf("=== start %s ===\n", __func__); + tbf->~gprs_rlcmac_ul_tbf(); + return 0; +} - ms = new GprsMs(NULL, tlli); - OSMO_ASSERT(ms->is_idle()); +static int dl_tbf_dtor(struct gprs_rlcmac_dl_tbf *tbf) +{ + tbf->~gprs_rlcmac_dl_tbf(); + return 0; +} - dl_tbf = talloc_zero(tall_pcu_ctx, struct gprs_rlcmac_dl_tbf); - new (dl_tbf) gprs_rlcmac_dl_tbf(NULL); +static gprs_rlcmac_ul_tbf *alloc_ul_tbf(struct gprs_rlcmac_bts *bts, GprsMs *ms) +{ + gprs_rlcmac_ul_tbf *ul_tbf; ul_tbf = talloc_zero(tall_pcu_ctx, struct gprs_rlcmac_ul_tbf); - new (ul_tbf) gprs_rlcmac_ul_tbf(NULL); - - ms->attach_tbf(ul_tbf); - OSMO_ASSERT(!ms->is_idle()); - OSMO_ASSERT(ms->ul_tbf() == ul_tbf); - OSMO_ASSERT(ms->dl_tbf() == NULL); - - ms->attach_tbf(dl_tbf); - OSMO_ASSERT(!ms->is_idle()); - OSMO_ASSERT(ms->ul_tbf() == ul_tbf); - OSMO_ASSERT(ms->dl_tbf() == dl_tbf); - - OSMO_ASSERT(ms->tbf(GPRS_RLCMAC_UL_TBF) == ul_tbf); - OSMO_ASSERT(ms->tbf(GPRS_RLCMAC_DL_TBF) == dl_tbf); - - ms->detach_tbf(ul_tbf); - OSMO_ASSERT(!ms->is_idle()); - OSMO_ASSERT(ms->ul_tbf() == NULL); - OSMO_ASSERT(ms->dl_tbf() == dl_tbf); - - ms->detach_tbf(dl_tbf); - /* The ms object is freed now */ - ms = NULL; - - talloc_free(dl_tbf); - talloc_free(ul_tbf); + talloc_set_destructor(ul_tbf, ul_tbf_dtor); + new (ul_tbf) gprs_rlcmac_ul_tbf(bts, ms); + return ul_tbf; +} - printf("=== end %s ===\n", __func__); +static gprs_rlcmac_dl_tbf *alloc_dl_tbf(struct gprs_rlcmac_bts *bts, GprsMs *ms) +{ + gprs_rlcmac_dl_tbf *dl_tbf; + dl_tbf = talloc_zero(tall_pcu_ctx, struct gprs_rlcmac_dl_tbf); + talloc_set_destructor(dl_tbf, dl_tbf_dtor); + new (dl_tbf) gprs_rlcmac_dl_tbf(bts, ms); + return dl_tbf; } -static void test_ms_callback() +static void test_ms_state() { uint32_t tlli = 0xffeeddbb; gprs_rlcmac_dl_tbf *dl_tbf; gprs_rlcmac_ul_tbf *ul_tbf; + struct gprs_rlcmac_bts *bts = bts_alloc(the_pcu, 0); GprsMs *ms; - static enum {UNKNOWN, IS_IDLE, IS_ACTIVE} last_cb = UNKNOWN; - - struct MyCallback: public GprsMs::Callback { - virtual void ms_idle(class GprsMs *ms) { - OSMO_ASSERT(ms->is_idle()); - printf(" ms_idle() was called\n"); - last_cb = IS_IDLE; - } - virtual void ms_active(class GprsMs *ms) { - OSMO_ASSERT(!ms->is_idle()); - printf(" ms_active() was called\n"); - last_cb = IS_ACTIVE; - } - } cb; printf("=== start %s ===\n", __func__); - ms = new GprsMs(NULL, tlli); - ms->set_callback(&cb); + ms = ms_alloc(bts, __func__); + ms_set_tlli(ms, tlli); + OSMO_ASSERT(ms_is_idle(ms)); - OSMO_ASSERT(ms->is_idle()); + dl_tbf = alloc_dl_tbf(bts, ms); + ul_tbf = alloc_ul_tbf(bts, ms); - dl_tbf = talloc_zero(tall_pcu_ctx, struct gprs_rlcmac_dl_tbf); - new (dl_tbf) gprs_rlcmac_dl_tbf(NULL); - ul_tbf = talloc_zero(tall_pcu_ctx, struct gprs_rlcmac_ul_tbf); - new (ul_tbf) gprs_rlcmac_ul_tbf(NULL); - - OSMO_ASSERT(last_cb == UNKNOWN); - - ms->attach_tbf(ul_tbf); - OSMO_ASSERT(!ms->is_idle()); - OSMO_ASSERT(ms->ul_tbf() == ul_tbf); - OSMO_ASSERT(ms->dl_tbf() == NULL); - OSMO_ASSERT(last_cb == IS_ACTIVE); + ms_attach_tbf(ms, ul_tbf); + OSMO_ASSERT(!ms_is_idle(ms)); + OSMO_ASSERT(ms_ul_tbf(ms) == ul_tbf); + OSMO_ASSERT(ms_dl_tbf(ms) == NULL); - last_cb = UNKNOWN; + ms_attach_tbf(ms, dl_tbf); + OSMO_ASSERT(!ms_is_idle(ms)); + OSMO_ASSERT(ms_ul_tbf(ms) == ul_tbf); + OSMO_ASSERT(ms_dl_tbf(ms) == dl_tbf); - ms->attach_tbf(dl_tbf); - OSMO_ASSERT(!ms->is_idle()); - OSMO_ASSERT(ms->ul_tbf() == ul_tbf); - OSMO_ASSERT(ms->dl_tbf() == dl_tbf); - OSMO_ASSERT(last_cb == UNKNOWN); + OSMO_ASSERT(ms_tbf(ms, GPRS_RLCMAC_UL_TBF) == ul_tbf); + OSMO_ASSERT(ms_tbf(ms, GPRS_RLCMAC_DL_TBF) == dl_tbf); - ms->detach_tbf(ul_tbf); - OSMO_ASSERT(!ms->is_idle()); - OSMO_ASSERT(ms->ul_tbf() == NULL); - OSMO_ASSERT(ms->dl_tbf() == dl_tbf); - OSMO_ASSERT(last_cb == UNKNOWN); + /* The MS is kept alive references by the TBFs: */ + ms_unref(ms, __func__); - ms->detach_tbf(dl_tbf); - OSMO_ASSERT(ms->is_idle()); - OSMO_ASSERT(ms->ul_tbf() == NULL); - OSMO_ASSERT(ms->dl_tbf() == NULL); - OSMO_ASSERT(last_cb == IS_IDLE); + ms_detach_tbf(ms, ul_tbf); + OSMO_ASSERT(!ms_is_idle(ms)); + OSMO_ASSERT(ms_ul_tbf(ms) == NULL); + OSMO_ASSERT(ms_dl_tbf(ms) == dl_tbf); - last_cb = UNKNOWN; - delete ms; + ms_detach_tbf(ms, dl_tbf); + /* The ms object is freed now */ + ms = NULL; talloc_free(dl_tbf); talloc_free(ul_tbf); - + talloc_free(bts); printf("=== end %s ===\n", __func__); } @@ -163,84 +128,60 @@ static void test_ms_replace_tbf() uint32_t tlli = 0xffeeddbb; gprs_rlcmac_dl_tbf *dl_tbf[2]; gprs_rlcmac_ul_tbf *ul_tbf; + struct gprs_rlcmac_bts *bts = bts_alloc(the_pcu, 0); GprsMs *ms; - static bool was_idle; - - struct MyCallback: public GprsMs::Callback { - virtual void ms_idle(class GprsMs *ms) { - OSMO_ASSERT(ms->is_idle()); - printf(" ms_idle() was called\n"); - was_idle = true; - } - virtual void ms_active(class GprsMs *ms) { - OSMO_ASSERT(!ms->is_idle()); - printf(" ms_active() was called\n"); - } - } cb; printf("=== start %s ===\n", __func__); - ms = new GprsMs(NULL, tlli); - ms->set_callback(&cb); + ms = ms_alloc(bts, __func__); + ms_confirm_tlli(ms, tlli); - OSMO_ASSERT(ms->is_idle()); - was_idle = false; + OSMO_ASSERT(ms_is_idle(ms)); - dl_tbf[0] = talloc_zero(tall_pcu_ctx, struct gprs_rlcmac_dl_tbf); - new (dl_tbf[0]) gprs_rlcmac_dl_tbf(NULL); - dl_tbf[1] = talloc_zero(tall_pcu_ctx, struct gprs_rlcmac_dl_tbf); - new (dl_tbf[1]) gprs_rlcmac_dl_tbf(NULL); - ul_tbf = talloc_zero(tall_pcu_ctx, struct gprs_rlcmac_ul_tbf); - new (ul_tbf) gprs_rlcmac_ul_tbf(NULL); - - ms->attach_tbf(dl_tbf[0]); - OSMO_ASSERT(!ms->is_idle()); - OSMO_ASSERT(ms->ul_tbf() == NULL); - OSMO_ASSERT(ms->dl_tbf() == dl_tbf[0]); - OSMO_ASSERT(llist_empty(&ms->old_tbfs())); - OSMO_ASSERT(!was_idle); - - ms->attach_tbf(dl_tbf[1]); - OSMO_ASSERT(!ms->is_idle()); - OSMO_ASSERT(ms->ul_tbf() == NULL); - OSMO_ASSERT(ms->dl_tbf() == dl_tbf[1]); - OSMO_ASSERT(!llist_empty(&ms->old_tbfs())); - OSMO_ASSERT(!was_idle); - - ms->attach_tbf(ul_tbf); - OSMO_ASSERT(!ms->is_idle()); - OSMO_ASSERT(ms->ul_tbf() == ul_tbf); - OSMO_ASSERT(ms->dl_tbf() == dl_tbf[1]); - OSMO_ASSERT(!llist_empty(&ms->old_tbfs())); - OSMO_ASSERT(!was_idle); - - ms->detach_tbf(ul_tbf); - OSMO_ASSERT(!ms->is_idle()); - OSMO_ASSERT(ms->ul_tbf() == NULL); - OSMO_ASSERT(ms->dl_tbf() == dl_tbf[1]); - OSMO_ASSERT(!llist_empty(&ms->old_tbfs())); - OSMO_ASSERT(!was_idle); - - ms->detach_tbf(dl_tbf[0]); - OSMO_ASSERT(!ms->is_idle()); - OSMO_ASSERT(ms->ul_tbf() == NULL); - OSMO_ASSERT(ms->dl_tbf() == dl_tbf[1]); - OSMO_ASSERT(llist_empty(&ms->old_tbfs())); - OSMO_ASSERT(!was_idle); - - ms->detach_tbf(dl_tbf[1]); - OSMO_ASSERT(ms->is_idle()); - OSMO_ASSERT(ms->ul_tbf() == NULL); - OSMO_ASSERT(ms->dl_tbf() == NULL); - OSMO_ASSERT(llist_empty(&ms->old_tbfs())); - OSMO_ASSERT(was_idle); - - delete ms; + dl_tbf[0] = alloc_dl_tbf(bts, ms); + dl_tbf[1] = alloc_dl_tbf(bts, ms); + ul_tbf = alloc_ul_tbf(bts, ms); + + ms_attach_tbf(ms, dl_tbf[0]); + OSMO_ASSERT(!ms_is_idle(ms)); + OSMO_ASSERT(ms_ul_tbf(ms) == NULL); + OSMO_ASSERT(ms_dl_tbf(ms) == dl_tbf[0]); + OSMO_ASSERT(llist_empty(&ms->old_tbfs)); + + ms_attach_tbf(ms, dl_tbf[1]); + OSMO_ASSERT(!ms_is_idle(ms)); + OSMO_ASSERT(ms_ul_tbf(ms) == NULL); + OSMO_ASSERT(ms_dl_tbf(ms) == dl_tbf[1]); + OSMO_ASSERT(!llist_empty(&ms->old_tbfs)); + + ms_attach_tbf(ms, ul_tbf); + OSMO_ASSERT(!ms_is_idle(ms)); + OSMO_ASSERT(ms_ul_tbf(ms) == ul_tbf); + OSMO_ASSERT(ms_dl_tbf(ms) == dl_tbf[1]); + OSMO_ASSERT(!llist_empty(&ms->old_tbfs)); + + ms_unref(ms, __func__); + + ms_detach_tbf(ms, ul_tbf); + OSMO_ASSERT(!ms_is_idle(ms)); + OSMO_ASSERT(ms_ul_tbf(ms) == NULL); + OSMO_ASSERT(ms_dl_tbf(ms) == dl_tbf[1]); + OSMO_ASSERT(!llist_empty(&ms->old_tbfs)); + + ms_detach_tbf(ms, dl_tbf[0]); + OSMO_ASSERT(!ms_is_idle(ms)); + OSMO_ASSERT(ms_ul_tbf(ms) == NULL); + OSMO_ASSERT(ms_dl_tbf(ms) == dl_tbf[1]); + OSMO_ASSERT(llist_empty(&ms->old_tbfs)); + + ms_detach_tbf(ms, dl_tbf[1]); + /* MS is gone now: */ + OSMO_ASSERT(bts_get_ms_by_tlli(bts, tlli, GSM_RESERVED_TMSI) == NULL); talloc_free(dl_tbf[0]); talloc_free(dl_tbf[1]); talloc_free(ul_tbf); - + talloc_free(bts); printf("=== end %s ===\n", __func__); } @@ -249,106 +190,107 @@ static void test_ms_change_tlli() uint32_t start_tlli = 0xaa000000; uint32_t new_ms_tlli = 0xff001111; uint32_t other_sgsn_tlli = 0xff00eeee; + struct gprs_rlcmac_bts *bts = bts_alloc(the_pcu, 0); GprsMs *ms; printf("=== start %s ===\n", __func__); - ms = new GprsMs(NULL, start_tlli); + ms = ms_alloc(bts, __func__); - OSMO_ASSERT(ms->is_idle()); + OSMO_ASSERT(ms_is_idle(ms)); /* MS announces TLLI, SGSN uses it immediately */ - ms->set_tlli(new_ms_tlli); - OSMO_ASSERT(ms->tlli() == new_ms_tlli); - OSMO_ASSERT(ms->check_tlli(new_ms_tlli)); - OSMO_ASSERT(ms->check_tlli(start_tlli)); + ms_set_tlli(ms, new_ms_tlli); + OSMO_ASSERT(ms_tlli(ms) == new_ms_tlli); + OSMO_ASSERT(ms_check_tlli(ms, new_ms_tlli)); - ms->confirm_tlli(new_ms_tlli); - OSMO_ASSERT(ms->tlli() == new_ms_tlli); - OSMO_ASSERT(ms->check_tlli(new_ms_tlli)); - OSMO_ASSERT(!ms->check_tlli(start_tlli)); + ms_confirm_tlli(ms, new_ms_tlli); + OSMO_ASSERT(ms_tlli(ms) == new_ms_tlli); + OSMO_ASSERT(ms_check_tlli(ms, new_ms_tlli)); /* MS announces TLLI, SGSN uses it later */ - ms->set_tlli(start_tlli); - ms->confirm_tlli(start_tlli); + ms_set_tlli(ms, start_tlli); + ms_confirm_tlli(ms, start_tlli); - ms->set_tlli(new_ms_tlli); - OSMO_ASSERT(ms->tlli() == new_ms_tlli); - OSMO_ASSERT(ms->check_tlli(new_ms_tlli)); - OSMO_ASSERT(ms->check_tlli(start_tlli)); + ms_set_tlli(ms, new_ms_tlli); + OSMO_ASSERT(ms_tlli(ms) == new_ms_tlli); + OSMO_ASSERT(ms_check_tlli(ms, new_ms_tlli)); + OSMO_ASSERT(ms_check_tlli(ms, start_tlli)); - ms->confirm_tlli(start_tlli); - OSMO_ASSERT(ms->tlli() == new_ms_tlli); - OSMO_ASSERT(ms->check_tlli(new_ms_tlli)); - OSMO_ASSERT(ms->check_tlli(start_tlli)); + ms_confirm_tlli(ms, start_tlli); + OSMO_ASSERT(ms_tlli(ms) == new_ms_tlli); + OSMO_ASSERT(ms_check_tlli(ms, new_ms_tlli)); + OSMO_ASSERT(ms_check_tlli(ms, start_tlli)); - ms->set_tlli(new_ms_tlli); - OSMO_ASSERT(ms->tlli() == new_ms_tlli); - OSMO_ASSERT(ms->check_tlli(new_ms_tlli)); - OSMO_ASSERT(ms->check_tlli(start_tlli)); + ms_set_tlli(ms, new_ms_tlli); + OSMO_ASSERT(ms_tlli(ms) == new_ms_tlli); + OSMO_ASSERT(ms_check_tlli(ms, new_ms_tlli)); + OSMO_ASSERT(ms_check_tlli(ms, start_tlli)); - ms->confirm_tlli(new_ms_tlli); - OSMO_ASSERT(ms->tlli() == new_ms_tlli); - OSMO_ASSERT(ms->check_tlli(new_ms_tlli)); - OSMO_ASSERT(!ms->check_tlli(start_tlli)); + ms_confirm_tlli(ms, new_ms_tlli); + OSMO_ASSERT(ms_tlli(ms) == new_ms_tlli); + OSMO_ASSERT(ms_check_tlli(ms, new_ms_tlli)); + OSMO_ASSERT(!ms_check_tlli(ms, start_tlli)); /* MS announces TLLI, SGSN uses it later after another new TLLI */ - ms->set_tlli(start_tlli); - ms->confirm_tlli(start_tlli); - - ms->set_tlli(new_ms_tlli); - OSMO_ASSERT(ms->tlli() == new_ms_tlli); - OSMO_ASSERT(ms->check_tlli(new_ms_tlli)); - OSMO_ASSERT(ms->check_tlli(start_tlli)); - - ms->confirm_tlli(other_sgsn_tlli); - OSMO_ASSERT(ms->tlli() == new_ms_tlli); - OSMO_ASSERT(ms->check_tlli(new_ms_tlli)); - OSMO_ASSERT(ms->check_tlli(other_sgsn_tlli)); - - ms->set_tlli(new_ms_tlli); - OSMO_ASSERT(ms->tlli() == new_ms_tlli); - OSMO_ASSERT(ms->check_tlli(new_ms_tlli)); - OSMO_ASSERT(ms->check_tlli(other_sgsn_tlli)); - - ms->confirm_tlli(new_ms_tlli); - OSMO_ASSERT(ms->tlli() == new_ms_tlli); - OSMO_ASSERT(ms->check_tlli(new_ms_tlli)); - OSMO_ASSERT(!ms->check_tlli(start_tlli)); - OSMO_ASSERT(!ms->check_tlli(other_sgsn_tlli)); + ms_set_tlli(ms, start_tlli); + ms_confirm_tlli(ms, start_tlli); + + ms_set_tlli(ms, new_ms_tlli); + OSMO_ASSERT(ms_tlli(ms) == new_ms_tlli); + OSMO_ASSERT(ms_check_tlli(ms, new_ms_tlli)); + OSMO_ASSERT(ms_check_tlli(ms, start_tlli)); + + ms_confirm_tlli(ms, other_sgsn_tlli); + OSMO_ASSERT(ms_tlli(ms) == new_ms_tlli); + OSMO_ASSERT(ms_check_tlli(ms, new_ms_tlli)); + OSMO_ASSERT(ms_check_tlli(ms, other_sgsn_tlli)); + + ms_set_tlli(ms, new_ms_tlli); + OSMO_ASSERT(ms_tlli(ms) == new_ms_tlli); + OSMO_ASSERT(ms_check_tlli(ms, new_ms_tlli)); + OSMO_ASSERT(ms_check_tlli(ms, other_sgsn_tlli)); + + ms_confirm_tlli(ms, new_ms_tlli); + OSMO_ASSERT(ms_tlli(ms) == new_ms_tlli); + OSMO_ASSERT(ms_check_tlli(ms, new_ms_tlli)); + OSMO_ASSERT(!ms_check_tlli(ms, start_tlli)); + OSMO_ASSERT(!ms_check_tlli(ms, other_sgsn_tlli)); /* SGSN uses the new TLLI before it is announced by the MS (shouldn't * happen in normal use) */ - ms->set_tlli(start_tlli); - ms->confirm_tlli(start_tlli); + ms_set_tlli(ms, start_tlli); + ms_confirm_tlli(ms, start_tlli); - ms->confirm_tlli(new_ms_tlli); - OSMO_ASSERT(ms->tlli() == start_tlli); - OSMO_ASSERT(ms->check_tlli(new_ms_tlli)); - OSMO_ASSERT(ms->check_tlli(start_tlli)); + ms_confirm_tlli(ms, new_ms_tlli); + OSMO_ASSERT(ms_tlli(ms) == start_tlli); + OSMO_ASSERT(ms_check_tlli(ms, new_ms_tlli)); + OSMO_ASSERT(ms_check_tlli(ms, start_tlli)); - ms->set_tlli(new_ms_tlli); - OSMO_ASSERT(ms->tlli() == new_ms_tlli); - OSMO_ASSERT(ms->check_tlli(new_ms_tlli)); - OSMO_ASSERT(!ms->check_tlli(start_tlli)); + ms_set_tlli(ms, new_ms_tlli); + OSMO_ASSERT(ms_tlli(ms) == new_ms_tlli); + OSMO_ASSERT(ms_check_tlli(ms, new_ms_tlli)); + OSMO_ASSERT(!ms_check_tlli(ms, start_tlli)); - delete ms; + /* This frees the MS: */ + ms_unref(ms, __func__); + talloc_free(bts); printf("=== end %s ===\n", __func__); } -static GprsMs *prepare_ms(GprsMsStorage *st, uint32_t tlli, enum gprs_rlcmac_tbf_direction dir) +static GprsMs *prepare_ms(struct gprs_rlcmac_bts *bts, uint32_t tlli, enum gprs_rlcmac_tbf_direction dir) { - GprsMs *ms = st->get_ms(tlli); + GprsMs *ms = bts_get_ms_by_tlli(bts, tlli, GSM_RESERVED_TMSI); if (ms) return ms; - ms = st->create_ms(); + ms = ms_alloc(bts, NULL); if (dir == GPRS_RLCMAC_UL_TBF) - ms->set_tlli(tlli); + ms_set_tlli(ms, tlli); else - ms->confirm_tlli(tlli); + ms_confirm_tlli(ms, tlli); return ms; } @@ -360,70 +302,69 @@ static void test_ms_storage() const char *imsi2 = "001001987654322"; gprs_rlcmac_ul_tbf *ul_tbf; + struct gprs_rlcmac_bts *bts = bts_alloc(the_pcu, 0); GprsMs *ms, *ms_tmp; - GprsMsStorage store(NULL); printf("=== start %s ===\n", __func__); - ul_tbf = talloc_zero(tall_pcu_ctx, struct gprs_rlcmac_ul_tbf); - new (ul_tbf) gprs_rlcmac_ul_tbf(NULL); - - ms = store.get_ms(tlli + 0); + ms = bts_get_ms_by_tlli(bts, tlli + 0, GSM_RESERVED_TMSI); OSMO_ASSERT(ms == NULL); - ms = prepare_ms(&store, tlli + 0, GPRS_RLCMAC_UL_TBF); + ms = prepare_ms(bts, tlli + 0, GPRS_RLCMAC_UL_TBF); OSMO_ASSERT(ms != NULL); - OSMO_ASSERT(ms->tlli() == tlli + 0); - ms->set_imsi(imsi1); - OSMO_ASSERT(strcmp(ms->imsi(), imsi1) == 0); + OSMO_ASSERT(ms_tlli(ms) == tlli + 0); + ms_set_imsi(ms, imsi1); + OSMO_ASSERT(strcmp(ms_imsi(ms), imsi1) == 0); - ms_tmp = store.get_ms(tlli + 0); + ms_tmp = bts_get_ms_by_tlli(bts, tlli + 0, GSM_RESERVED_TMSI); OSMO_ASSERT(ms == ms_tmp); - OSMO_ASSERT(ms->tlli() == tlli + 0); + OSMO_ASSERT(ms_tlli(ms) == tlli + 0); - ms_tmp = store.get_ms(0, 0, imsi1); + ms_tmp = bts_get_ms_by_imsi(bts, imsi1); OSMO_ASSERT(ms == ms_tmp); - OSMO_ASSERT(strcmp(ms->imsi(), imsi1) == 0); - ms_tmp = store.get_ms(0, 0, imsi2); + OSMO_ASSERT(strcmp(ms_imsi(ms), imsi1) == 0); + ms_tmp = bts_get_ms_by_imsi(bts, imsi2); OSMO_ASSERT(ms_tmp == NULL); - ms = prepare_ms(&store, tlli + 1, GPRS_RLCMAC_UL_TBF); + ms = prepare_ms(bts, tlli + 1, GPRS_RLCMAC_UL_TBF); OSMO_ASSERT(ms != NULL); - OSMO_ASSERT(ms->tlli() == tlli + 1); - ms->set_imsi(imsi2); - OSMO_ASSERT(strcmp(ms->imsi(), imsi2) == 0); + OSMO_ASSERT(ms_tlli(ms) == tlli + 1); + ms_set_imsi(ms, imsi2); + OSMO_ASSERT(strcmp(ms_imsi(ms), imsi2) == 0); - ms_tmp = store.get_ms(tlli + 1); + ms_tmp = bts_get_ms_by_tlli(bts, tlli + 1, GSM_RESERVED_TMSI); OSMO_ASSERT(ms == ms_tmp); - OSMO_ASSERT(ms->tlli() == tlli + 1); + OSMO_ASSERT(ms_tlli(ms) == tlli + 1); - ms_tmp = store.get_ms(0, 0, imsi1); + ms_tmp = bts_get_ms_by_imsi(bts, imsi1); OSMO_ASSERT(ms_tmp != NULL); OSMO_ASSERT(ms_tmp != ms); - ms_tmp = store.get_ms(0, 0, imsi2); + ms_tmp = bts_get_ms_by_imsi(bts, imsi2); OSMO_ASSERT(ms == ms_tmp); - OSMO_ASSERT(strcmp(ms->imsi(), imsi2) == 0); + OSMO_ASSERT(strcmp(ms_imsi(ms), imsi2) == 0); /* delete ms */ - ms = store.get_ms(tlli + 0); + ms = bts_get_ms_by_tlli(bts, tlli + 0, GSM_RESERVED_TMSI); OSMO_ASSERT(ms != NULL); - ms->attach_tbf(ul_tbf); - ms->detach_tbf(ul_tbf); - ms = store.get_ms(tlli + 0); + ul_tbf = alloc_ul_tbf(bts, ms); + ms_attach_tbf(ms, ul_tbf); + tbf_set_ms(ul_tbf, NULL); + ms = bts_get_ms_by_tlli(bts, tlli + 0, GSM_RESERVED_TMSI); OSMO_ASSERT(ms == NULL); - ms = store.get_ms(tlli + 1); + ms = bts_get_ms_by_tlli(bts, tlli + 1, GSM_RESERVED_TMSI); OSMO_ASSERT(ms != NULL); /* delete ms */ - ms = store.get_ms(tlli + 1); + ms = bts_get_ms_by_tlli(bts, tlli + 1, GSM_RESERVED_TMSI); OSMO_ASSERT(ms != NULL); - ms->attach_tbf(ul_tbf); - ms->detach_tbf(ul_tbf); - ms = store.get_ms(tlli + 1); + tbf_set_ms(ul_tbf, ms); + tbf_set_ms(ul_tbf, NULL); + ms = bts_get_ms_by_tlli(bts, tlli + 1, GSM_RESERVED_TMSI); OSMO_ASSERT(ms == NULL); + talloc_free(ms); talloc_free(ul_tbf); - + talloc_free(bts); printf("=== end %s ===\n", __func__); } @@ -432,73 +373,56 @@ static void test_ms_timeout() uint32_t tlli = 0xffeeddbb; gprs_rlcmac_dl_tbf *dl_tbf; gprs_rlcmac_ul_tbf *ul_tbf; + struct gprs_rlcmac_bts *bts = bts_alloc(the_pcu, 0); GprsMs *ms; - static enum {UNKNOWN, IS_IDLE, IS_ACTIVE} last_cb = UNKNOWN; - - struct MyCallback: public GprsMs::Callback { - virtual void ms_idle(class GprsMs *ms) { - OSMO_ASSERT(ms->is_idle()); - printf(" ms_idle() was called\n"); - last_cb = IS_IDLE; - } - virtual void ms_active(class GprsMs *ms) { - OSMO_ASSERT(!ms->is_idle()); - printf(" ms_active() was called\n"); - last_cb = IS_ACTIVE; - } - } cb; printf("=== start %s ===\n", __func__); - ms = new GprsMs(NULL, tlli); - ms->set_callback(&cb); - ms->set_timeout(1); + OSMO_ASSERT(osmo_tdef_set(the_pcu->T_defs, -2030, 1, OSMO_TDEF_S) == 0); - OSMO_ASSERT(ms->is_idle()); + ms = ms_alloc(bts, __func__); + ms_set_tlli(ms, tlli); - dl_tbf = talloc_zero(tall_pcu_ctx, struct gprs_rlcmac_dl_tbf); - new (dl_tbf) gprs_rlcmac_dl_tbf(NULL); - ul_tbf = talloc_zero(tall_pcu_ctx, struct gprs_rlcmac_ul_tbf); - new (ul_tbf) gprs_rlcmac_ul_tbf(NULL); + OSMO_ASSERT(ms_is_idle(ms)); - OSMO_ASSERT(last_cb == UNKNOWN); + dl_tbf = alloc_dl_tbf(bts, ms); + ul_tbf = alloc_ul_tbf(bts, ms); - ms->attach_tbf(ul_tbf); - OSMO_ASSERT(!ms->is_idle()); - OSMO_ASSERT(last_cb == IS_ACTIVE); + ms_attach_tbf(ms, ul_tbf); + OSMO_ASSERT(!ms_is_idle(ms)); - last_cb = UNKNOWN; + ms_attach_tbf(ms, dl_tbf); + OSMO_ASSERT(!ms_is_idle(ms)); - ms->attach_tbf(dl_tbf); - OSMO_ASSERT(!ms->is_idle()); - OSMO_ASSERT(last_cb == UNKNOWN); + /* MS is kept alive by TBFs referencing it: */ + ms_unref(ms, __func__); - ms->detach_tbf(ul_tbf); - OSMO_ASSERT(!ms->is_idle()); - OSMO_ASSERT(last_cb == UNKNOWN); + ms_detach_tbf(ms, ul_tbf); + OSMO_ASSERT(!ms_is_idle(ms)); - ms->detach_tbf(dl_tbf); - OSMO_ASSERT(!ms->is_idle()); - OSMO_ASSERT(last_cb == UNKNOWN); + ms_detach_tbf(ms, dl_tbf); + /* test MS still exists and it's idle: */ + OSMO_ASSERT(bts_get_ms_by_tlli(bts, tlli, GSM_RESERVED_TMSI) != NULL); + OSMO_ASSERT(ms_is_idle(ms)); + OSMO_ASSERT(osmo_timer_pending(&ms->release_timer)); usleep(1100000); osmo_timers_update(); - OSMO_ASSERT(ms->is_idle()); - OSMO_ASSERT(last_cb == IS_IDLE); + /* MS is gone now: */ + OSMO_ASSERT(bts_get_ms_by_tlli(bts, tlli, GSM_RESERVED_TMSI) == NULL); - last_cb = UNKNOWN; - delete ms; talloc_free(dl_tbf); talloc_free(ul_tbf); - + talloc_free(bts); printf("=== end %s ===\n", __func__); + /* Return the timer to the usually expected value 0 for other tests: */ + OSMO_ASSERT(osmo_tdef_set(the_pcu->T_defs, -2030, 0, OSMO_TDEF_S) == 0); } static void test_ms_cs_selection() { - BTS the_bts; - gprs_rlcmac_bts *bts = the_bts.bts_data(); + struct gprs_rlcmac_bts *bts = bts_alloc(the_pcu, 0); uint32_t tlli = 0xffeeddbb; gprs_rlcmac_dl_tbf *dl_tbf; @@ -508,42 +432,45 @@ static void test_ms_cs_selection() bts->initial_cs_dl = 4; bts->initial_cs_ul = 1; - bts->cs_downgrade_threshold = 0; + the_pcu->vty.cs_downgrade_threshold = 0; + the_pcu->vty.cs_adj_lower_limit = 0; - ms = new GprsMs(&the_bts, tlli); + ms = ms_alloc(bts, __func__); + ms_confirm_tlli(ms, tlli); - OSMO_ASSERT(ms->is_idle()); + OSMO_ASSERT(ms_is_idle(ms)); - dl_tbf = talloc_zero(tall_pcu_ctx, struct gprs_rlcmac_dl_tbf); - new (dl_tbf) gprs_rlcmac_dl_tbf(NULL); + dl_tbf = alloc_dl_tbf(bts, ms); + ms_attach_tbf(ms, dl_tbf); - dl_tbf->set_ms(ms); - OSMO_ASSERT(!ms->is_idle()); + OSMO_ASSERT(!ms_is_idle(ms)); - OSMO_ASSERT(mcs_chan_code(ms->current_cs_dl()) == 3); + OSMO_ASSERT(mcs_chan_code(ms_current_cs_dl(ms, ms_mode(ms))) == 3); - bts->cs_downgrade_threshold = 200; + the_pcu->vty.cs_downgrade_threshold = 200; - OSMO_ASSERT(mcs_chan_code(ms->current_cs_dl()) == 2); + OSMO_ASSERT(mcs_chan_code(ms_current_cs_dl(ms, ms_mode(ms))) == 2); + ms_detach_tbf(ms, dl_tbf); talloc_free(dl_tbf); - + ms_unref(ms, __func__); + /* MS has been freed here*/ + talloc_free(bts); printf("=== end %s ===\n", __func__); } static void dump_ms(const GprsMs *ms, const char *pref) { printf("%s MS DL %s/%s, UL %s/%s, mode %s, <%s>\n", pref, - mcs_name(ms->current_cs_dl()), mcs_name(ms->max_cs_dl()), - mcs_name(ms->current_cs_ul()), mcs_name(ms->max_cs_ul()), - mode_name(ms->mode()), - ms->is_idle() ? "IDLE" : "ACTIVE"); + mcs_name(ms_current_cs_dl(ms, ms_mode(ms))), mcs_name(ms_max_cs_dl(ms)), + mcs_name(ms_current_cs_ul(ms)), mcs_name(ms_max_cs_ul(ms)), + mode_name(ms_mode(ms)), + ms_is_idle(ms) ? "IDLE" : "ACTIVE"); } static void test_ms_mcs_mode() { - BTS the_bts; - gprs_rlcmac_bts *bts = the_bts.bts_data(); + struct gprs_rlcmac_bts *bts = bts_alloc(the_pcu, 0); uint32_t tlli = 0xdeadbeef; gprs_rlcmac_dl_tbf *dl_tbf; @@ -551,52 +478,54 @@ static void test_ms_mcs_mode() printf("=== start %s ===\n", __func__); - ms1 = new GprsMs(&the_bts, tlli); + ms1 = ms_alloc(bts, __func__); + ms_confirm_tlli(ms1, tlli); dump_ms(ms1, "1: no BTS defaults "); bts->initial_cs_dl = 4; bts->initial_cs_ul = 1; - bts->cs_downgrade_threshold = 0; + the_pcu->vty.cs_downgrade_threshold = 0; - ms2 = new GprsMs(&the_bts, tlli + 1); + ms2 = ms_alloc(bts,__func__); + ms_confirm_tlli(ms2, tlli + 1); dump_ms(ms2, "2: with BTS defaults"); - dl_tbf = talloc_zero(tall_pcu_ctx, struct gprs_rlcmac_dl_tbf); - new (dl_tbf) gprs_rlcmac_dl_tbf(NULL); + dl_tbf = alloc_dl_tbf(bts, ms2); + ms_attach_tbf(ms2, dl_tbf); - dl_tbf->set_ms(ms2); dump_ms(ms2, "2: after TBF attach "); - ms1->set_mode(EGPRS); + ms_set_mode(ms1, EGPRS); dump_ms(ms1, "1: after mode set "); - ms2->set_mode(EGPRS); + ms_set_mode(ms2, EGPRS); dump_ms(ms2, "2: after mode set "); - ms1->set_current_cs_dl(MCS7); + ms_set_current_cs_dl(ms1, MCS7); dump_ms(ms1, "1: after MCS set "); - ms2->set_current_cs_dl(MCS8); + ms_set_current_cs_dl(ms2, MCS8); dump_ms(ms2, "2: after MCS set "); - ms1->set_mode(EGPRS_GMSK); + ms_set_mode(ms1, EGPRS_GMSK); dump_ms(ms1, "1: after mode set "); - ms2->set_mode(EGPRS_GMSK); + ms_set_mode(ms2, EGPRS_GMSK); dump_ms(ms2, "2: after mode set "); - // FIXME: following code triggers ASAN failure: - // ms2->detach_tbf(dl_tbf); - // dump_ms(ms2, "2: after TBF detach "); + ms_detach_tbf(ms2, dl_tbf); + dump_ms(ms2, "2: after TBF detach "); - ms1->set_mode(GPRS); + ms_set_mode(ms1, GPRS); dump_ms(ms1, "1: after mode set "); - ms2->set_mode(GPRS); + ms_set_mode(ms2, GPRS); dump_ms(ms2, "2: after mode set "); talloc_free(dl_tbf); - + talloc_free(ms1); + talloc_free(ms2); + talloc_free(bts); printf("=== end %s ===\n", __func__); } @@ -611,15 +540,20 @@ int main(int argc, char **argv) msgb_talloc_ctx_init(tall_pcu_ctx, 0); osmo_init_logging2(tall_pcu_ctx, &gprs_log_info); log_set_use_color(osmo_stderr_target, 0); - log_set_print_filename(osmo_stderr_target, 0); + log_set_print_filename2(osmo_stderr_target, LOG_FILENAME_NONE); log_set_log_level(osmo_stderr_target, LOGL_INFO); - log_parse_category_mask(osmo_stderr_target, "DPCU,3:DRLCMAC,3"); + log_set_print_category(osmo_stderr_target, 0); + log_set_print_category_hex(osmo_stderr_target, 0); + log_parse_category_mask(osmo_stderr_target, "DPCU,3:DRLCMAC,3:DMS,3"); + + the_pcu = gprs_pcu_alloc(tall_pcu_ctx); vty_init(&pcu_vty_info); pcu_vty_init(); + osmo_tdef_set(the_pcu->T_defs, -2030, 0, OSMO_TDEF_S); + test_ms_state(); - test_ms_callback(); test_ms_replace_tbf(); test_ms_change_tlli(); test_ms_storage(); @@ -627,6 +561,8 @@ int main(int argc, char **argv) test_ms_cs_selection(); test_ms_mcs_mode(); + talloc_free(the_pcu); + if (getenv("TALLOC_REPORT_FULL")) talloc_report_full(tall_pcu_ctx, stderr); @@ -636,6 +572,7 @@ int main(int argc, char **argv) extern "C" { void l1if_pdch_req() { abort(); } void l1if_connect_pdch() { abort(); } -void l1if_close_pdch() { abort(); } -void l1if_open_pdch() { abort(); } +void l1if_disconnect_pdch() { abort(); } +void l1if_close_trx() { abort(); } +void l1if_open_trx() { abort(); } } diff --git a/tests/ms/MsTest.err b/tests/ms/MsTest.err index 735c4fe4..001898b9 100644 --- a/tests/ms/MsTest.err +++ b/tests/ms/MsTest.err @@ -1,25 +1,26 @@ -Creating MS object, TLLI = 0xffeeddbb -Attaching TBF to MS object, TLLI = 0xffeeddbb, TBF = TBF(TFI=0 TLLI=0x00000000 DIR=UL STATE=NULL) -Attaching TBF to MS object, TLLI = 0xffeeddbb, TBF = TBF(TFI=0 TLLI=0x00000000 DIR=DL STATE=NULL) -Detaching TBF from MS object, TLLI = 0xffeeddbb, TBF = TBF(TFI=0 TLLI=0x00000000 DIR=UL STATE=NULL) -Detaching TBF from MS object, TLLI = 0xffeeddbb, TBF = TBF(TFI=0 TLLI=0x00000000 DIR=DL STATE=NULL) -Destroying MS object, TLLI = 0xffeeddbb -Creating MS object, TLLI = 0xffeeddbb -Attaching TBF to MS object, TLLI = 0xffeeddbb, TBF = TBF(TFI=0 TLLI=0x00000000 DIR=UL STATE=NULL) -Attaching TBF to MS object, TLLI = 0xffeeddbb, TBF = TBF(TFI=0 TLLI=0x00000000 DIR=DL STATE=NULL) -Detaching TBF from MS object, TLLI = 0xffeeddbb, TBF = TBF(TFI=0 TLLI=0x00000000 DIR=UL STATE=NULL) -Detaching TBF from MS object, TLLI = 0xffeeddbb, TBF = TBF(TFI=0 TLLI=0x00000000 DIR=DL STATE=NULL) -Destroying MS object, TLLI = 0xffeeddbb -Creating MS object, TLLI = 0xffeeddbb -Attaching TBF to MS object, TLLI = 0xffeeddbb, TBF = TBF(TFI=0 TLLI=0x00000000 DIR=DL STATE=NULL) -Attaching TBF to MS object, TLLI = 0xffeeddbb, TBF = TBF(TFI=0 TLLI=0x00000000 DIR=DL STATE=NULL) -Attaching TBF to MS object, TLLI = 0xffeeddbb, TBF = TBF(TFI=0 TLLI=0x00000000 DIR=UL STATE=NULL) -Detaching TBF from MS object, TLLI = 0xffeeddbb, TBF = TBF(TFI=0 TLLI=0x00000000 DIR=UL STATE=NULL) -Detaching TBF from MS object, TLLI = 0xffeeddbb, TBF = TBF(TFI=0 TLLI=0x00000000 DIR=DL STATE=NULL) -Detaching TBF from MS object, TLLI = 0xffeeddbb, TBF = TBF(TFI=0 TLLI=0x00000000 DIR=DL STATE=NULL) -Destroying MS object, TLLI = 0xffeeddbb -Creating MS object, TLLI = 0xaa000000 -Modifying MS object, UL TLLI: 0xaa000000 -> 0xff001111, not yet confirmed +Creating MS object +MS(TA-220:MSCLS-0-0): + test_ms_state: now used by 1 (test_ms_state) +Modifying MS object, UL TLLI: 0xffffffff -> 0xffeeddbb, not yet confirmed +MS(TLLI-0xffeeddbb:TA-220:MSCLS-0-0) Attaching UL TBF: TBF(UL:G:TLLI-0xffeeddbb){NEW} +MS(TLLI-0xffeeddbb:TA-220:MSCLS-0-0:UL) Attaching DL TBF: TBF(DL:G:TLLI-0xffeeddbb){NEW} +MS(TLLI-0xffeeddbb:TA-220:MSCLS-0-0:UL:DL) Detaching TBF: TBF(UL:G:TLLI-0xffeeddbb){NEW} +MS(TLLI-0xffeeddbb:TA-220:MSCLS-0-0:DL) Detaching TBF: TBF(DL:G:TLLI-0xffeeddbb){NEW} +MS(TLLI-0xffeeddbb:TA-220:MSCLS-0-0): - tbf: now used by 0 (-) +MS(TLLI-0xffeeddbb:TA-220:MSCLS-0-0) Destroying MS object +Creating MS object +MS(TA-220:MSCLS-0-0): + test_ms_replace_tbf: now used by 1 (test_ms_replace_tbf) +The MS object cannot fully confirm an unexpected TLLI: 0xffeeddbb, partly confirmed +MS(TLLI-0xffeeddbb:TA-220:MSCLS-0-0) Attaching DL TBF: TBF(DL:G:TLLI-0xffeeddbb){NEW} +MS(TLLI-0xffeeddbb:TA-220:MSCLS-0-0:DL) Attaching DL TBF: TBF(DL:G:TLLI-0xffeeddbb){NEW} +MS(TLLI-0xffeeddbb:TA-220:MSCLS-0-0:DL) Attaching UL TBF: TBF(UL:G:TLLI-0xffeeddbb){NEW} +MS(TLLI-0xffeeddbb:TA-220:MSCLS-0-0:UL:DL) Detaching TBF: TBF(UL:G:TLLI-0xffeeddbb){NEW} +MS(TLLI-0xffeeddbb:TA-220:MSCLS-0-0:DL) Detaching TBF: TBF(DL:G:TLLI-0xffeeddbb){NEW} +MS(TLLI-0xffeeddbb:TA-220:MSCLS-0-0:DL) Detaching TBF: TBF(DL:G:TLLI-0xffeeddbb){NEW} +MS(TLLI-0xffeeddbb:TA-220:MSCLS-0-0): - tbf: now used by 0 (-) +MS(TLLI-0xffeeddbb:TA-220:MSCLS-0-0) Destroying MS object +Creating MS object +MS(TA-220:MSCLS-0-0): + test_ms_change_tlli: now used by 1 (test_ms_change_tlli) +Modifying MS object, UL TLLI: 0xffffffff -> 0xff001111, not yet confirmed Modifying MS object, TLLI: 0xff001111 confirmed Modifying MS object, UL TLLI: 0xff001111 -> 0xaa000000, not yet confirmed Modifying MS object, TLLI: 0xaa000000 confirmed @@ -34,28 +35,49 @@ Modifying MS object, UL TLLI: 0xff001111 -> 0xaa000000, not yet confirmed Modifying MS object, TLLI: 0xaa000000 confirmed The MS object cannot fully confirm an unexpected TLLI: 0xff001111, partly confirmed Modifying MS object, TLLI: 0xaa000000 -> 0xff001111, already confirmed partly -Destroying MS object, TLLI = 0xff001111 -Creating MS object, TLLI = 0x00000000 -Modifying MS object, UL TLLI: 0x00000000 -> 0xffeeddbb, not yet confirmed +MS(TLLI-0xff001111:TA-220:MSCLS-0-0): - test_ms_change_tlli: now used by 0 (-) +MS(TLLI-0xff001111:TA-220:MSCLS-0-0) Destroying MS object +Creating MS object +Modifying MS object, UL TLLI: 0xffffffff -> 0xffeeddbb, not yet confirmed Modifying MS object, TLLI = 0xffeeddbb, IMSI '' -> '001001987654321' -Creating MS object, TLLI = 0x00000000 -Modifying MS object, UL TLLI: 0x00000000 -> 0xffeeddbc, not yet confirmed +Creating MS object +Modifying MS object, UL TLLI: 0xffffffff -> 0xffeeddbc, not yet confirmed Modifying MS object, TLLI = 0xffeeddbc, IMSI '' -> '001001987654322' -Attaching TBF to MS object, TLLI = 0xffeeddbb, TBF = TBF(TFI=0 TLLI=0x00000000 DIR=UL STATE=NULL) -Detaching TBF from MS object, TLLI = 0xffeeddbb, TBF = TBF(TFI=0 TLLI=0x00000000 DIR=UL STATE=NULL) -Destroying MS object, TLLI = 0xffeeddbb -Attaching TBF to MS object, TLLI = 0xffeeddbc, TBF = TBF(TFI=0 TLLI=0x00000000 DIR=UL STATE=NULL) -Detaching TBF from MS object, TLLI = 0xffeeddbc, TBF = TBF(TFI=0 TLLI=0x00000000 DIR=UL STATE=NULL) -Destroying MS object, TLLI = 0xffeeddbc -Creating MS object, TLLI = 0xffeeddbb -Attaching TBF to MS object, TLLI = 0xffeeddbb, TBF = TBF(TFI=0 TLLI=0x00000000 DIR=UL STATE=NULL) -Attaching TBF to MS object, TLLI = 0xffeeddbb, TBF = TBF(TFI=0 TLLI=0x00000000 DIR=DL STATE=NULL) -Detaching TBF from MS object, TLLI = 0xffeeddbb, TBF = TBF(TFI=0 TLLI=0x00000000 DIR=UL STATE=NULL) -Detaching TBF from MS object, TLLI = 0xffeeddbb, TBF = TBF(TFI=0 TLLI=0x00000000 DIR=DL STATE=NULL) -Timeout for MS object, TLLI = 0xffeeddbb -Destroying MS object, TLLI = 0xffeeddbb -Creating MS object, TLLI = 0xffeeddbb -Attaching TBF to MS object, TLLI = 0xffeeddbb, TBF = TBF(TFI=0 TLLI=0xffeeddbb DIR=DL STATE=NULL) -Creating MS object, TLLI = 0xdeadbeef -Creating MS object, TLLI = 0xdeadbef0 -Attaching TBF to MS object, TLLI = 0xdeadbef0, TBF = TBF(TFI=0 TLLI=0xdeadbef0 DIR=DL STATE=NULL) +MS(IMSI-001001987654321:TLLI-0xffeeddbb:TA-220:MSCLS-0-0) Attaching UL TBF: TBF(UL:G:IMSI-001001987654321:TLLI-0xffeeddbb){NEW} +MS(IMSI-001001987654321:TLLI-0xffeeddbb:TA-220:MSCLS-0-0:UL): + tbf: now used by 1 (tbf) +MS(IMSI-001001987654321:TLLI-0xffeeddbb:TA-220:MSCLS-0-0:UL) Detaching TBF: TBF(UL:G:IMSI-001001987654321:TLLI-0xffeeddbb){NEW} +MS(IMSI-001001987654321:TLLI-0xffeeddbb:TA-220:MSCLS-0-0): - tbf: now used by 0 (-) +MS(IMSI-001001987654321:TLLI-0xffeeddbb:TA-220:MSCLS-0-0) Destroying MS object +MS(IMSI-001001987654322:TLLI-0xffeeddbc:TA-220:MSCLS-0-0) Attaching UL TBF: TBF(UL:G:IMSI-001001987654322:TLLI-0xffeeddbc){NEW} +MS(IMSI-001001987654322:TLLI-0xffeeddbc:TA-220:MSCLS-0-0:UL): + tbf: now used by 1 (tbf) +MS(IMSI-001001987654322:TLLI-0xffeeddbc:TA-220:MSCLS-0-0:UL) Detaching TBF: TBF(UL:G:IMSI-001001987654322:TLLI-0xffeeddbc){NEW} +MS(IMSI-001001987654322:TLLI-0xffeeddbc:TA-220:MSCLS-0-0): - tbf: now used by 0 (-) +MS(IMSI-001001987654322:TLLI-0xffeeddbc:TA-220:MSCLS-0-0) Destroying MS object +Creating MS object +MS(TA-220:MSCLS-0-0): + test_ms_timeout: now used by 1 (test_ms_timeout) +Modifying MS object, UL TLLI: 0xffffffff -> 0xffeeddbb, not yet confirmed +MS(TLLI-0xffeeddbb:TA-220:MSCLS-0-0) Attaching UL TBF: TBF(UL:G:TLLI-0xffeeddbb){NEW} +MS(TLLI-0xffeeddbb:TA-220:MSCLS-0-0:UL) Attaching DL TBF: TBF(DL:G:TLLI-0xffeeddbb){NEW} +MS(TLLI-0xffeeddbb:TA-220:MSCLS-0-0:UL:DL) Detaching TBF: TBF(UL:G:TLLI-0xffeeddbb){NEW} +MS(TLLI-0xffeeddbb:TA-220:MSCLS-0-0:DL) Detaching TBF: TBF(DL:G:TLLI-0xffeeddbb){NEW} +MS(TLLI-0xffeeddbb:TA-220:MSCLS-0-0): - tbf: now used by 0 (-) +MS(TLLI-0xffeeddbb:TA-220:MSCLS-0-0) Schedule MS release in 1 secs +MS(TLLI-0xffeeddbb:TA-220:MSCLS-0-0) Release timer expired +MS(TLLI-0xffeeddbb:TA-220:MSCLS-0-0) Destroying MS object +Creating MS object +MS(TA-220:MSCLS-0-0): + test_ms_cs_selection: now used by 1 (test_ms_cs_selection) +The MS object cannot fully confirm an unexpected TLLI: 0xffeeddbb, partly confirmed +MS(TLLI-0xffeeddbb:TA-220:MSCLS-0-0) Attaching DL TBF: TBF(DL:G:TLLI-0xffeeddbb){NEW} +MS(TLLI-0xffeeddbb:TA-220:MSCLS-0-0:DL) Detaching TBF: TBF(DL:G:TLLI-0xffeeddbb){NEW} +MS(TLLI-0xffeeddbb:TA-220:MSCLS-0-0): - test_ms_cs_selection: now used by 0 (-) +MS(TLLI-0xffeeddbb:TA-220:MSCLS-0-0) Destroying MS object +Creating MS object +MS(TA-220:MSCLS-0-0): + test_ms_mcs_mode: now used by 1 (test_ms_mcs_mode) +The MS object cannot fully confirm an unexpected TLLI: 0xdeadbeef, partly confirmed +Creating MS object +MS(TA-220:MSCLS-0-0): + test_ms_mcs_mode: now used by 1 (test_ms_mcs_mode) +The MS object cannot fully confirm an unexpected TLLI: 0xdeadbef0, partly confirmed +MS(TLLI-0xdeadbef0:TA-220:MSCLS-0-0) Attaching DL TBF: TBF(DL:G:TLLI-0xdeadbef0){NEW} +MS(TLLI-0xdeadbef0:TA-220:MSCLS-0-0:DL) Detaching TBF: TBF(DL:G:TLLI-0xdeadbef0){NEW} +MS(TLLI-0xdeadbeef:TA-220:MSCLS-0-0) Destroying MS object +MS(TLLI-0xdeadbef0:TA-220:MSCLS-0-0) Destroying MS object diff --git a/tests/ms/MsTest.ok b/tests/ms/MsTest.ok index 9952d59e..a79dedb1 100644 --- a/tests/ms/MsTest.ok +++ b/tests/ms/MsTest.ok @@ -1,33 +1,26 @@ === start test_ms_state === === end test_ms_state === -=== start test_ms_callback === - ms_active() was called - ms_idle() was called -=== end test_ms_callback === === start test_ms_replace_tbf === - ms_active() was called - ms_idle() was called === end test_ms_replace_tbf === === start test_ms_change_tlli === === end test_ms_change_tlli === === start test_ms_storage === === end test_ms_storage === === start test_ms_timeout === - ms_active() was called - ms_idle() was called === end test_ms_timeout === === start test_ms_cs_selection === === end test_ms_cs_selection === === start test_ms_mcs_mode === -1: no BTS defaults MS DL UNKNOWN/UNKNOWN, UL UNKNOWN/UNKNOWN, mode GPRS, <IDLE> +1: no BTS defaults MS DL CS-1/CS-4, UL CS-1/CS-4, mode GPRS, <IDLE> 2: with BTS defaults MS DL CS-4/CS-4, UL CS-1/CS-4, mode GPRS, <IDLE> 2: after TBF attach MS DL CS-4/CS-4, UL CS-1/CS-4, mode GPRS, <ACTIVE> -1: after mode set MS DL UNKNOWN/UNKNOWN, UL UNKNOWN/UNKNOWN, mode EGPRS, <IDLE> -2: after mode set MS DL UNKNOWN/UNKNOWN, UL UNKNOWN/UNKNOWN, mode EGPRS, <ACTIVE> -1: after MCS set MS DL MCS-7/MCS-4, UL UNKNOWN/UNKNOWN, mode EGPRS, <IDLE> -2: after MCS set MS DL MCS-8/MCS-4, UL UNKNOWN/UNKNOWN, mode EGPRS, <ACTIVE> -1: after mode set MS DL MCS-7/MCS-4, UL UNKNOWN/UNKNOWN, mode EGPRS_GMSK-only, <IDLE> -2: after mode set MS DL MCS-8/MCS-4, UL UNKNOWN/UNKNOWN, mode EGPRS_GMSK-only, <ACTIVE> +1: after mode set MS DL MCS-1/MCS-9, UL MCS-1/MCS-9, mode EGPRS, <IDLE> +2: after mode set MS DL MCS-1/MCS-9, UL MCS-1/MCS-9, mode EGPRS, <ACTIVE> +1: after MCS set MS DL MCS-7/MCS-9, UL MCS-1/MCS-9, mode EGPRS, <IDLE> +2: after MCS set MS DL MCS-8/MCS-9, UL MCS-1/MCS-9, mode EGPRS, <ACTIVE> +1: after mode set MS DL MCS-1/MCS-4, UL MCS-1/MCS-4, mode EGPRS_GMSK-only, <IDLE> +2: after mode set MS DL MCS-1/MCS-4, UL MCS-1/MCS-4, mode EGPRS_GMSK-only, <ACTIVE> +2: after TBF detach MS DL MCS-1/MCS-4, UL MCS-1/MCS-4, mode EGPRS_GMSK-only, <IDLE> 1: after mode set MS DL CS-4/CS-4, UL CS-1/CS-4, mode GPRS, <IDLE> -2: after mode set MS DL CS-4/CS-4, UL CS-1/CS-4, mode GPRS, <ACTIVE> +2: after mode set MS DL CS-4/CS-4, UL CS-1/CS-4, mode GPRS, <IDLE> === end test_ms_mcs_mode === |