From bce5675e5fa1eb4bcbe0dd24d503456eaeb58a0d Mon Sep 17 00:00:00 2001 From: Holger Hans Peter Freyther Date: Thu, 22 Nov 2012 14:59:46 +0100 Subject: abis: Create a routine that can parse all SW Descriptions of a SW Config Be able to parse the entire SW Config IE. Parse the SW Descruption into a struct provided by the caller. --- openbsc/tests/abis/Makefile.am | 17 ++++++ openbsc/tests/abis/abis_test.c | 118 ++++++++++++++++++++++++++++++++++++++++ openbsc/tests/abis/abis_test.ok | 9 +++ 3 files changed, 144 insertions(+) create mode 100644 openbsc/tests/abis/Makefile.am create mode 100644 openbsc/tests/abis/abis_test.c create mode 100644 openbsc/tests/abis/abis_test.ok (limited to 'openbsc/tests/abis') diff --git a/openbsc/tests/abis/Makefile.am b/openbsc/tests/abis/Makefile.am new file mode 100644 index 000000000..3255ecf55 --- /dev/null +++ b/openbsc/tests/abis/Makefile.am @@ -0,0 +1,17 @@ +INCLUDES = $(all_includes) -I$(top_srcdir)/include +AM_CFLAGS=-Wall -ggdb3 $(LIBOSMOCORE_CFLAGS) $(LIBOSMOABIS_CFLAGS) \ + $(LIBOSMOGSM_CFLAGS) $(COVERAGE_CFLAGS) + +EXTRA_DIST = abis_test.ok + +noinst_PROGRAMS = abis_test + +abis_test_SOURCES = abis_test.c + +abis_test_LDADD = \ + $(top_builddir)/src/libbsc/libbsc.a \ + $(top_builddir)/src/libcommon/libcommon.a \ + $(top_builddir)/src/libbsc/libbsc.a \ + $(top_builddir)/src/libtrau/libtrau.a \ + $(LIBOSMOCORE_LIBS) $(LIBOSMOABIS_LIBS) \ + $(LIBOSMOGSM_LIBS) diff --git a/openbsc/tests/abis/abis_test.c b/openbsc/tests/abis/abis_test.c new file mode 100644 index 000000000..a2f6a05c2 --- /dev/null +++ b/openbsc/tests/abis/abis_test.c @@ -0,0 +1,118 @@ +/* + * (C) 2012 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 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 + +static const uint8_t simple_config[] = { + /*0, 13, */ + 66, 18, 0, 3, 1, 2, 3, 19, 0, 3, 3, 4, 5, +}; + +static const uint8_t dual_config[] = { + /*0, 26, */ + 66, 18, 0, 3, 1, 2, 3, 19, 0, 3, 3, 4, 5, + 66, 18, 0, 3, 9, 7, 5, 19, 0, 3, 6, 7, 8, +}; + +static void test_simple_sw_config(void) +{ + struct abis_nm_sw_descr descr[1]; + int rc; + + rc = abis_nm_parse_sw_config(simple_config, ARRAY_SIZE(simple_config), + &descr[0], ARRAY_SIZE(descr)); + if (rc != 1) { + printf("FAILED to parse the File Id/File version\n"); + abort(); + } + + if (descr[0].len != 13) { + printf("WRONG SIZE: %d\n", descr[0].len); + abort(); + } + + printf("Start: %u len: %zu\n", descr[0].start - simple_config, descr[0].len); + printf("file_id: %s\n", osmo_hexdump(descr[0].file_id, descr[0].file_id_len)); + printf("file_ver: %s\n", osmo_hexdump(descr[0].file_ver, descr[0].file_ver_len)); +} + +static void test_simple_sw_short(void) +{ + struct abis_nm_sw_descr descr[1]; + int i; + + for (i = 1; i < ARRAY_SIZE(simple_config); ++i) { + int rc = abis_nm_parse_sw_config(simple_config, + ARRAY_SIZE(simple_config) - i, &descr[0], + ARRAY_SIZE(descr)); + if (rc >= 1) { + printf("SHOULD not have parsed: %d\n", rc); + abort(); + } + } +} + +static void test_dual_sw_config(void) +{ + struct abis_nm_sw_descr descr[2]; + int rc; + + rc = abis_nm_parse_sw_config(dual_config, ARRAY_SIZE(dual_config), + &descr[0], ARRAY_SIZE(descr)); + if (rc != 2) { + printf("FAILED to parse the File Id/File version\n"); + abort(); + } + + if (descr[0].len != 13) { + printf("WRONG SIZE0: %d\n", descr[0].len); + abort(); + } + + if (descr[1].len != 13) { + printf("WRONG SIZE1: %d\n", descr[1].len); + abort(); + } + + printf("Start: %u len: %zu\n", descr[0].start - dual_config, descr[0].len); + printf("file_id: %s\n", osmo_hexdump(descr[0].file_id, descr[0].file_id_len)); + printf("file_ver: %s\n", osmo_hexdump(descr[0].file_ver, descr[0].file_ver_len)); + + printf("Start: %u len: %zu\n", descr[1].start - dual_config, descr[1].len); + printf("file_id: %s\n", osmo_hexdump(descr[1].file_id, descr[1].file_id_len)); + printf("file_ver: %s\n", osmo_hexdump(descr[1].file_ver, descr[1].file_ver_len)); +} + +int main(int argc, char **argv) +{ + osmo_init_logging(&log_info); + test_simple_sw_config(); + test_simple_sw_short(); + test_dual_sw_config(); + + return EXIT_SUCCESS; +} diff --git a/openbsc/tests/abis/abis_test.ok b/openbsc/tests/abis/abis_test.ok new file mode 100644 index 000000000..64019880c --- /dev/null +++ b/openbsc/tests/abis/abis_test.ok @@ -0,0 +1,9 @@ +Start: 0 len: 13 +file_id: 01 02 03 +file_ver: 03 04 05 +Start: 13 len: 26 +file_id: 01 02 03 +file_ver: 03 04 05 +Start: 26 len: 13 +file_id: 09 07 05 +file_ver: 06 07 08 -- cgit v1.2.3