diff options
Diffstat (limited to 'tests/ms')
-rw-r--r-- | tests/ms/MsTest.cpp | 70 | ||||
-rw-r--r-- | tests/ms/MsTest.err | 7 | ||||
-rw-r--r-- | tests/ms/MsTest.ok | 4 |
3 files changed, 81 insertions, 0 deletions
diff --git a/tests/ms/MsTest.cpp b/tests/ms/MsTest.cpp index 9c8ec2c3..bb9e21bf 100644 --- a/tests/ms/MsTest.cpp +++ b/tests/ms/MsTest.cpp @@ -36,6 +36,7 @@ extern "C" { } #include <errno.h> +#include <unistd.h> void *tall_pcu_ctx; int16_t spoof_mnc = 0, spoof_mcc = 0; @@ -399,6 +400,74 @@ static void test_ms_storage() printf("=== end %s ===\n", __func__); } +static void test_ms_timeout() +{ + uint32_t tlli = 0xffeeddbb; + gprs_rlcmac_dl_tbf *dl_tbf; + gprs_rlcmac_ul_tbf *ul_tbf; + 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(tlli); + ms->set_callback(&cb); + ms->set_timeout(1); + + OSMO_ASSERT(ms->is_idle()); + + dl_tbf = talloc_zero(tall_pcu_ctx, struct gprs_rlcmac_dl_tbf); + dl_tbf->direction = GPRS_RLCMAC_DL_TBF; + ul_tbf = talloc_zero(tall_pcu_ctx, struct gprs_rlcmac_ul_tbf); + ul_tbf->direction = GPRS_RLCMAC_UL_TBF; + + OSMO_ASSERT(last_cb == UNKNOWN); + + ms->attach_tbf(ul_tbf); + OSMO_ASSERT(!ms->is_idle()); + OSMO_ASSERT(last_cb == IS_ACTIVE); + + last_cb = UNKNOWN; + + ms->attach_tbf(dl_tbf); + OSMO_ASSERT(!ms->is_idle()); + OSMO_ASSERT(last_cb == UNKNOWN); + + ms->detach_tbf(ul_tbf); + OSMO_ASSERT(!ms->is_idle()); + OSMO_ASSERT(last_cb == UNKNOWN); + + ms->detach_tbf(dl_tbf); + OSMO_ASSERT(!ms->is_idle()); + OSMO_ASSERT(last_cb == UNKNOWN); + + usleep(1100000); + osmo_timers_update(); + + OSMO_ASSERT(ms->is_idle()); + OSMO_ASSERT(last_cb == IS_IDLE); + + last_cb = UNKNOWN; + delete ms; + talloc_free(dl_tbf); + talloc_free(ul_tbf); + + printf("=== end %s ===\n", __func__); +} + static const struct log_info_cat default_categories[] = { {"DPCU", "", "GPRS Packet Control Unit (PCU)", LOGL_INFO, 1}, }; @@ -437,6 +506,7 @@ int main(int argc, char **argv) test_ms_replace_tbf(); test_ms_change_tlli(); test_ms_storage(); + test_ms_timeout(); if (getenv("TALLOC_REPORT_FULL")) talloc_report_full(tall_pcu_ctx, stderr); diff --git a/tests/ms/MsTest.err b/tests/ms/MsTest.err index 86dbb5b0..9e9df557 100644 --- a/tests/ms/MsTest.err +++ b/tests/ms/MsTest.err @@ -47,3 +47,10 @@ 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 diff --git a/tests/ms/MsTest.ok b/tests/ms/MsTest.ok index 004b36d4..c49e840a 100644 --- a/tests/ms/MsTest.ok +++ b/tests/ms/MsTest.ok @@ -12,3 +12,7 @@ === 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 === |