diff --git a/openbsc/configure.in b/openbsc/configure.in index b886e7ac1..94fb15f4d 100644 --- a/openbsc/configure.in +++ b/openbsc/configure.in @@ -45,4 +45,5 @@ AC_OUTPUT( tests/sms/Makefile tests/gsm0408/Makefile tests/db/Makefile + tests/channel/Makefile Makefile) diff --git a/openbsc/tests/Makefile.am b/openbsc/tests/Makefile.am index 2b72c9c11..2d4e81c75 100644 --- a/openbsc/tests/Makefile.am +++ b/openbsc/tests/Makefile.am @@ -1 +1 @@ -SUBDIRS = debug timer sms gsm0408 db +SUBDIRS = debug timer sms gsm0408 db channel diff --git a/openbsc/tests/channel/Makefile.am b/openbsc/tests/channel/Makefile.am new file mode 100644 index 000000000..60defe0a6 --- /dev/null +++ b/openbsc/tests/channel/Makefile.am @@ -0,0 +1,14 @@ +INCLUDES = $(all_includes) -I$(top_srcdir)/include +AM_CFLAGS=-Wall -ggdb3 + +noinst_PROGRAMS = channel_test + +channel_test_SOURCES = channel_test.c \ + $(top_srcdir)/src/db.c \ + $(top_srcdir)/src/gsm_subscriber.c \ + $(top_srcdir)/src/debug.c \ + $(top_srcdir)/src/timer.c \ + $(top_srcdir)/src/select.c \ + $(top_srcdir)/src/gsm_data.c +channel_test_LDADD = -ldl -ldbi + diff --git a/openbsc/tests/channel/channel_test.c b/openbsc/tests/channel/channel_test.c new file mode 100644 index 000000000..1787e358c --- /dev/null +++ b/openbsc/tests/channel/channel_test.c @@ -0,0 +1,72 @@ +/* + * (C) 2009 by Holger Hans Peter Freyther + * All Rights Reserved + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + */ + +#include + +#include + +#include +#include +#include + +/* our handler */ +static int subscr_cb(unsigned int hook, unsigned int event, struct msgb *msg, void *data, void *param) +{ + assert(hook == 101); + assert(event == 200); + assert(msg == (void*)0x1323L); + assert(data == (void*)0x4242L); + assert(param == (void*)0x2342L); + printf("Reached, didn't crash, test passed\n"); + return 0; +} + +/* mock object for testing, directly invoke the cb... maybe later through the timer */ +void paging_request(struct gsm_bts *bts, struct gsm_subscriber *subscriber, int type, gsm_cbfn *cbfn, void *data) +{ + cbfn(101, 200, (void*)0x1323L, (void*)0x4242L, data); +} + + +int main(int argc, char** argv) +{ + struct gsm_network network; + + printf("Testing the gsm_subscriber chan logic\n"); + + /* Create a dummy network */ + network.bts[0].location_area_code = 23; + network.bts[0].network = &network; + + /* Create a dummy subscriber */ + struct gsm_subscriber *subscr = subscr_alloc(); + subscr->lac = 23; + + /* Ask for a channel... */ + subscr_get_channel(subscr, &network, RSL_CHANNEED_TCH_F, subscr_cb, (void*)0x2342L); + + while (1) { + bsc_select_main(0); + } +} + +void nm_state_event() {} +void input_event() {} +