From 641d387409b6d11f7166784344701438be1a45e1 Mon Sep 17 00:00:00 2001 From: Holger Hans Peter Freyther Date: Fri, 2 Oct 2015 15:56:35 +0200 Subject: [PATCH] osmux: Test cid allocation and de-allocation * Test that one can get an id * That they are assigned predicatble right now * That returning them will make the number of used ones go down * That allocating more will fail --- openbsc/include/openbsc/osmux.h | 1 + openbsc/src/libmgcp/mgcp_osmux.c | 14 ++++++++++++++ openbsc/tests/mgcp/mgcp_test.c | 26 ++++++++++++++++++++++++++ 3 files changed, 41 insertions(+) diff --git a/openbsc/include/openbsc/osmux.h b/openbsc/include/openbsc/osmux.h index 8c01fd00b..0e727d5c4 100644 --- a/openbsc/include/openbsc/osmux.h +++ b/openbsc/include/openbsc/osmux.h @@ -22,6 +22,7 @@ int osmux_send_dummy(struct mgcp_endpoint *endp); int osmux_get_cid(void); void osmux_put_cid(uint8_t osmux_cid); +int osmux_used_cid(void); enum osmux_state { OSMUX_STATE_DISABLED = 0, diff --git a/openbsc/src/libmgcp/mgcp_osmux.c b/openbsc/src/libmgcp/mgcp_osmux.c index 90b73680b..b0ef69fd4 100644 --- a/openbsc/src/libmgcp/mgcp_osmux.c +++ b/openbsc/src/libmgcp/mgcp_osmux.c @@ -532,6 +532,20 @@ int osmux_send_dummy(struct mgcp_endpoint *endp) /* bsc-nat allocates/releases the Osmux circuit ID */ static uint8_t osmux_cid_bitmap[16]; +int osmux_used_cid(void) +{ + int i, j, used = 0; + + for (i = 0; i < sizeof(osmux_cid_bitmap) / 8; i++) { + for (j = 0; j < 8; j++) { + if (osmux_cid_bitmap[i] & (1 << j)) + used += 1; + } + } + + return used; +} + int osmux_get_cid(void) { int i, j; diff --git a/openbsc/tests/mgcp/mgcp_test.c b/openbsc/tests/mgcp/mgcp_test.c index b2cb938ce..7b5de31d6 100644 --- a/openbsc/tests/mgcp/mgcp_test.c +++ b/openbsc/tests/mgcp/mgcp_test.c @@ -1175,6 +1175,31 @@ static void test_no_name(void) talloc_free(cfg); } +static void test_osmux_cid(void) +{ + int id, i; + + OSMO_ASSERT(osmux_used_cid() == 0); + id = osmux_get_cid(); + OSMO_ASSERT(id == 0); + OSMO_ASSERT(osmux_used_cid() == 1); + osmux_put_cid(id); + OSMO_ASSERT(osmux_used_cid() == 0); + + for (i = 0; i < 16; ++i) { + id = osmux_get_cid(); + OSMO_ASSERT(id == i); + OSMO_ASSERT(osmux_used_cid() == i + 1); + } + + id = osmux_get_cid(); + OSMO_ASSERT(id == -1); + + for (i = 0; i < 256; ++i) + osmux_put_cid(i); + OSMO_ASSERT(osmux_used_cid() == 0); +} + int main(int argc, char **argv) { osmo_init_logging(&log_info); @@ -1193,6 +1218,7 @@ int main(int argc, char **argv) test_multilple_codec(); test_no_cycle(); test_no_name(); + test_osmux_cid(); printf("Done\n"); return EXIT_SUCCESS;