diff --git a/openbsc/.gitignore b/openbsc/.gitignore index 21b66a13f..c08495f9e 100644 --- a/openbsc/.gitignore +++ b/openbsc/.gitignore @@ -69,6 +69,7 @@ tests/bsc/bsc_test tests/trau/trau_test tests/mgcp/mgcp_transcoding_test tests/sgsn/sgsn_test +tests/subscr/subscr_test tests/atconfig tests/atlocal diff --git a/openbsc/configure.ac b/openbsc/configure.ac index 5e705c767..69be8b632 100644 --- a/openbsc/configure.ac +++ b/openbsc/configure.ac @@ -192,6 +192,7 @@ AC_OUTPUT( tests/smpp/Makefile tests/trau/Makefile tests/sgsn/Makefile + tests/subscr/Makefile doc/Makefile doc/examples/Makefile Makefile) diff --git a/openbsc/tests/Makefile.am b/openbsc/tests/Makefile.am index 273c84f63..773830b64 100644 --- a/openbsc/tests/Makefile.am +++ b/openbsc/tests/Makefile.am @@ -1,4 +1,4 @@ -SUBDIRS = gsm0408 db channel mgcp gprs abis gbproxy trau +SUBDIRS = gsm0408 db channel mgcp gprs abis gbproxy trau subscr if BUILD_NAT SUBDIRS += bsc-nat bsc-nat-trie diff --git a/openbsc/tests/subscr/Makefile.am b/openbsc/tests/subscr/Makefile.am new file mode 100644 index 000000000..4f96dc9d0 --- /dev/null +++ b/openbsc/tests/subscr/Makefile.am @@ -0,0 +1,18 @@ +AM_CPPFLAGS = $(all_includes) -I$(top_srcdir)/include +AM_CFLAGS=-Wall -ggdb3 $(LIBOSMOCORE_CFLAGS) $(LIBOSMOGSM_CFLAGS) $(LIBOSMOABIS_CFLAGS) $(LIBSMPP34_CFLAGS) $(COVERAGE_CFLAGS) +AM_LDFLAGS = $(COVERAGE_LDFLAGS) + +EXTRA_DIST = subscr_test.ok + +noinst_PROGRAMS = subscr_test + +subscr_test_SOURCES = subscr_test.c +subscr_test_LDADD = $(top_builddir)/src/libbsc/libbsc.a \ + $(top_builddir)/src/libmsc/libmsc.a \ + $(top_builddir)/src/libbsc/libbsc.a \ + $(top_builddir)/src/libtrau/libtrau.a \ + $(top_builddir)/src/libcommon/libcommon.a \ + $(LIBOSMOCORE_LIBS) $(LIBOSMOABIS_LIBS) \ + $(LIBOSMOGSM_LIBS) $(LIBSMPP34_LIBS) $(LIBOSMOVTY_LIBS) +# -ldbi + diff --git a/openbsc/tests/subscr/subscr_test.c b/openbsc/tests/subscr/subscr_test.c new file mode 100644 index 000000000..fdd5cd848 --- /dev/null +++ b/openbsc/tests/subscr/subscr_test.c @@ -0,0 +1,104 @@ +/* (C) 2008 by Jan Luebbe + * (C) 2009 by Holger Hans Peter Freyther + * (C) 2014 by Alexander Chemeris + * All Rights Reserved + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +#include +#include +#include +#include + +#include + +#include +#include +#include +#include + +static struct gsm_network dummy_net; +static struct gsm_subscriber_group dummy_sgrp; + +static void test_subscr(void) +{ + int rc; + struct gsm_subscriber *subscr; + const char *imsi = "1234567890"; + + printf("Test subscriber allocation and deletion\n"); + + /* Don't keep subscr */ + + dummy_sgrp.keep_subscr = 0; + + OSMO_ASSERT(llist_empty(&active_subscribers)); + + subscr = subscr_get_or_create(&dummy_sgrp, imsi); + + OSMO_ASSERT(!llist_empty(&active_subscribers)); + OSMO_ASSERT(subscr->use_count == 1); + + subscr_put(subscr); + + OSMO_ASSERT(llist_empty(&active_subscribers)); + + /* Keep subscr */ + + dummy_sgrp.keep_subscr = 1; + + subscr = subscr_get_or_create(&dummy_sgrp, imsi); + + OSMO_ASSERT(!llist_empty(&active_subscribers)); + OSMO_ASSERT(subscr->use_count == 1); + + subscr_put(subscr); + OSMO_ASSERT(!llist_empty(&active_subscribers)); + OSMO_ASSERT(subscr->use_count == 0); + + subscr_get(subscr); + OSMO_ASSERT(subscr->use_count == 1); + + subscr_purge_inactive(&dummy_sgrp); + + OSMO_ASSERT(!llist_empty(&active_subscribers)); + OSMO_ASSERT(subscr->use_count == 1); + + subscr_put(subscr); + OSMO_ASSERT(!llist_empty(&active_subscribers)); + OSMO_ASSERT(subscr->use_count == 0); + + subscr_purge_inactive(&dummy_sgrp); + + OSMO_ASSERT(llist_empty(&active_subscribers)); +} + +int main() +{ + char scratch_str[256]; + + printf("Testing subscriber core code.\n"); + osmo_init_logging(&log_info); + log_set_print_filename(osmo_stderr_target, 0); + + dummy_net.subscr_group = &dummy_sgrp; + dummy_sgrp.net = &dummy_net; + + test_subscr(); + + printf("Done\n"); + return 0; +} diff --git a/openbsc/tests/subscr/subscr_test.ok b/openbsc/tests/subscr/subscr_test.ok new file mode 100644 index 000000000..72a376944 --- /dev/null +++ b/openbsc/tests/subscr/subscr_test.ok @@ -0,0 +1,3 @@ +Testing subscriber core code. +Test subscriber allocation and deletion +Done diff --git a/openbsc/tests/testsuite.at b/openbsc/tests/testsuite.at index ee62fa932..74aaef09f 100644 --- a/openbsc/tests/testsuite.at +++ b/openbsc/tests/testsuite.at @@ -7,6 +7,12 @@ cat $abs_srcdir/gsm0408/gsm0408_test.ok > expout AT_CHECK([$abs_top_builddir/tests/gsm0408/gsm0408_test], [], [expout], [ignore]) AT_CLEANUP +AT_SETUP([subscr]) +AT_KEYWORDS([subscr]) +cat $abs_srcdir/subscr/subscr_test.ok > expout +AT_CHECK([$abs_top_builddir/tests/subscr/subscr_test], [], [expout], [ignore]) +AT_CLEANUP + AT_SETUP([db]) AT_KEYWORDS([db]) cat $abs_srcdir/db/db_test.ok > expout