diff options
| author | Jacob Erlbeck <jerlbeck@sysmocom.de> | 2015-11-27 13:26:16 +0100 | 
|---|---|---|
| committer | Holger Hans Peter Freyther <holger@moiji-mobile.com> | 2016-01-15 18:09:06 +0100 | 
| commit | 7cd8a1b06387427c6db4fd9f6dee116212ec304a (patch) | |
| tree | a939e2bdfbfc3d42284ad71dbc08ac5be8d73371 /tests | |
| parent | 5f349be820b32a5bb312566a4a35ef679fe7e478 (diff) | |
msgb/test: Add test for msgb message buffers
This tests several API functions of the msgb by checking the
invariant and by dumping resulting message buffers as hex.
Sponsored-by: On-Waves ehf
Conflicts:
	tests/Makefile.am
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/Makefile.am | 7 | ||||
| -rw-r--r-- | tests/msgb/msgb_test.c | 104 | ||||
| -rw-r--r-- | tests/msgb/msgb_test.ok | 21 | ||||
| -rw-r--r-- | tests/testsuite.at | 6 | 
4 files changed, 136 insertions, 2 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am index 2411afa3..a4a6b2e0 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -12,7 +12,7 @@ check_PROGRAMS = timer/timer_test sms/sms_test ussd/ussd_test		\  		 loggingrb/loggingrb_test strrb/strrb_test              \  		 vty/vty_test comp128/comp128_test utils/utils_test	\  		 smscb/gsm0341_test stats/stats_test			\ -		 bitvec/bitvec_test +		 bitvec/bitvec_test msgb/msgb_test  if ENABLE_MSGFILE  check_PROGRAMS += msgfile/msgfile_test @@ -57,6 +57,9 @@ gprs_gprs_test_LDADD = $(top_builddir)/src/libosmocore.la $(top_builddir)/src/gs  lapd_lapd_test_SOURCES = lapd/lapd_test.c  lapd_lapd_test_LDADD = $(top_builddir)/src/libosmocore.la $(top_builddir)/src/gsm/libosmogsm.la +msgb_msgb_test_SOURCES = msgb/msgb_test.c +msgb_msgb_test_LDADD = $(top_builddir)/src/libosmocore.la +  msgfile_msgfile_test_SOURCES = msgfile/msgfile_test.c  msgfile_msgfile_test_LDADD = $(top_builddir)/src/libosmocore.la @@ -133,7 +136,7 @@ EXTRA_DIST = testsuite.at $(srcdir)/package.m4 $(TESTSUITE)		\               loggingrb/logging_test.err	strrb/strrb_test.ok		\  	     vty/vty_test.ok comp128/comp128_test.ok			\  	     utils/utils_test.ok stats/stats_test.ok			\ -	     bitvec/bitvec_test.ok +	     bitvec/bitvec_test.ok msgb/msgb_test.ok  DISTCLEANFILES = atconfig diff --git a/tests/msgb/msgb_test.c b/tests/msgb/msgb_test.c new file mode 100644 index 00000000..75925095 --- /dev/null +++ b/tests/msgb/msgb_test.c @@ -0,0 +1,104 @@ +/* + * (C) 2014 by On-Waves + * 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 <stdlib.h> +#include <osmocom/core/application.h> +#include <osmocom/core/logging.h> +#include <osmocom/core/utils.h> +#include <osmocom/core/msgb.h> + +#include <errno.h> + +#include <string.h> + +#define CHECK_RC(rc)	\ +	if (rc != 0) {	\ +		printf("Operation failed rc=%d on %s:%d\n", rc, __FILE__, __LINE__); \ +		abort(); \ +	} + +static void test_msgb_api() +{ +	struct msgb *msg = msgb_alloc_headroom(4096, 128, "data"); +	unsigned char *cptr = NULL; +	int rc; + +	printf("Testing the msgb API\n"); + +	printf("Buffer: %s\n", msgb_hexdump(msg)); +	OSMO_ASSERT(msgb_test_invariant(msg)); +	cptr = msg->l1h = msgb_put(msg, 4); +	printf("put(4) -> data%+d\n", cptr - msg->data); +	printf("Buffer: %s\n", msgb_hexdump(msg)); +	OSMO_ASSERT(msgb_test_invariant(msg)); +	cptr = msg->l2h = msgb_put(msg, 4); +	printf("put(4) -> data%+d\n", cptr - msg->data); +	printf("Buffer: %s\n", msgb_hexdump(msg)); +	OSMO_ASSERT(msgb_test_invariant(msg)); +	cptr = msg->l3h = msgb_put(msg, 4); +	printf("put(4) -> data%+d\n", cptr - msg->data); +	printf("Buffer: %s\n", msgb_hexdump(msg)); +	OSMO_ASSERT(msgb_test_invariant(msg)); +	cptr = msg->l4h = msgb_put(msg, 4); +	printf("put(4) -> data%+d\n", cptr - msg->data); +	printf("Buffer: %s\n", msgb_hexdump(msg)); +	OSMO_ASSERT(msgb_test_invariant(msg)); +	OSMO_ASSERT(msgb_length(msg) == 16); +	cptr = msgb_push(msg, 4); +	printf("push(4) -> data%+d\n", cptr - msg->data); +	printf("Buffer: %s\n", msgb_hexdump(msg)); +	OSMO_ASSERT(msgb_test_invariant(msg)); +	OSMO_ASSERT(msgb_length(msg) == 20); +	rc = msgb_trim(msg, 16); +	printf("trim(16) -> %d\n", rc); +	CHECK_RC(rc); +	OSMO_ASSERT(msgb_test_invariant(msg)); +	printf("Buffer: %s\n", msgb_hexdump(msg)); +	OSMO_ASSERT(msgb_length(msg) == 16); + +	cptr = msgb_get(msg, 4); +	printf("get(4) -> data%+d\n", cptr - msg->data); +	printf("Buffer: %s\n", msgb_hexdump(msg)); +	OSMO_ASSERT(msgb_test_invariant(msg)); +	OSMO_ASSERT(msgb_length(msg) == 12); + +	printf("Test msgb_hexdump\n"); +	msg->l1h = msg->head; +	printf("Buffer: %s\n", msgb_hexdump(msg)); +	msg->l3h = msg->data; +	printf("Buffer: %s\n", msgb_hexdump(msg)); +	msg->l3h = msg->head - 1; +	printf("Buffer: %s\n", msgb_hexdump(msg)); + +	msgb_free(msg); +} + +static struct log_info info = {}; + +int main(int argc, char **argv) +{ +	osmo_init_logging(&info); + +	test_msgb_api(); + +	printf("Success.\n"); + +	return 0; +} diff --git a/tests/msgb/msgb_test.ok b/tests/msgb/msgb_test.ok new file mode 100644 index 00000000..f8de0cd1 --- /dev/null +++ b/tests/msgb/msgb_test.ok @@ -0,0 +1,21 @@ +Testing the msgb API +Buffer:  +put(4) -> data+0 +Buffer: [L1]> 00 00 00 00  +put(4) -> data+4 +Buffer: [L1]> 00 00 00 00 [L2]> 00 00 00 00  +put(4) -> data+8 +Buffer: [L1]> 00 00 00 00 [L2]> 00 00 00 00 [L3]> 00 00 00 00  +put(4) -> data+12 +Buffer: [L1]> 00 00 00 00 [L2]> 00 00 00 00 [L3]> 00 00 00 00 [L4]> 00 00 00 00  +push(4) -> data+0 +Buffer: 00 00 00 00 [L1]> 00 00 00 00 [L2]> 00 00 00 00 [L3]> 00 00 00 00 [L4]> 00 00 00 00  +trim(16) -> 0 +Buffer: 00 00 00 00 [L1]> 00 00 00 00 [L2]> 00 00 00 00 [L3]> 00 00 00 00 [L4]>  +get(4) -> data+12 +Buffer: 00 00 00 00 [L1]> 00 00 00 00 [L2]> 00 00 00 00 [L3]> (L4=tail+4)  +Test msgb_hexdump +Buffer: (L1=data-124) 00 00 00 00 00 00 00 00 [L2]> 00 00 00 00 [L3]> (L4=tail+4)  +Buffer: (L1=data-124) 00 00 00 00 00 00 00 00 [L2]> (L3+8) 00 00 00 00 (L4=tail+4)  +Buffer: (L1=data-124) 00 00 00 00 00 00 00 00 [L2]> 00 00 00 00 (L3 out of range) (L4=tail+4)  +Success. diff --git a/tests/testsuite.at b/tests/testsuite.at index 55e79f19..d9bd3236 100644 --- a/tests/testsuite.at +++ b/tests/testsuite.at @@ -33,6 +33,12 @@ cat $abs_srcdir/conv/conv_test.ok > expout  AT_CHECK([$abs_top_builddir/tests/conv/conv_test], [0], [expout])  AT_CLEANUP +AT_SETUP([msgb]) +AT_KEYWORDS([msgb]) +cat $abs_srcdir/msgb/msgb_test.ok > expout +AT_CHECK([$abs_top_builddir/tests/msgb/msgb_test], [0], [expout]) +AT_CLEANUP +  if ENABLE_MSGFILE  AT_SETUP([msgfile])  AT_KEYWORDS([msgfile])  | 
