mirror of https://gerrit.osmocom.org/libosmocore
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
This commit is contained in:
parent
5f349be820
commit
7cd8a1b063
|
@ -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
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
|
@ -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.
|
|
@ -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])
|
||||
|
|
Loading…
Reference in New Issue