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
This commit is contained in:
Holger Hans Peter Freyther 2015-10-02 15:56:35 +02:00
parent 2aedfbdfe1
commit 641d387409
3 changed files with 41 additions and 0 deletions

View File

@ -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,

View File

@ -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;

View File

@ -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;