From 6058220d2a05bada0a656809f9011fc86a1e22a5 Mon Sep 17 00:00:00 2001 From: Holger Hans Peter Freyther Date: Thu, 21 Nov 2013 21:30:23 +0100 Subject: types: Add a simple testcase for basic types and fix the LLC code * Make append_data, remaining_space and fits_in_current.. work on m_length and not the index. This ways things can't overflow. * The current API consumer was moving the m_index so it should have worked okay. --- tests/Makefile.am | 13 ++++++- tests/testsuite.at | 7 ++++ tests/types/TypesTest.cpp | 93 +++++++++++++++++++++++++++++++++++++++++++++++ tests/types/TypesTest.err | 0 tests/types/TypesTest.ok | 1 + 5 files changed, 112 insertions(+), 2 deletions(-) create mode 100644 tests/types/TypesTest.cpp create mode 100644 tests/types/TypesTest.err create mode 100644 tests/types/TypesTest.ok (limited to 'tests') diff --git a/tests/Makefile.am b/tests/Makefile.am index 415fb4d4..e84f17de 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -1,6 +1,6 @@ AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(LIBOSMOCORE_CFLAGS) $(LIBOSMOGB_CFLAGS) $(LIBOSMOGSM_CFLAGS) -I$(top_srcdir)/src/ -check_PROGRAMS = rlcmac/RLCMACTest alloc/AllocTest tbf/TbfTest +check_PROGRAMS = rlcmac/RLCMACTest alloc/AllocTest tbf/TbfTest types/TypesTest noinst_PROGRAMS = emu/pcu_emu rlcmac_RLCMACTest_SOURCES = rlcmac/RLCMACTest.cpp @@ -35,6 +35,14 @@ emu_pcu_emu_LDADD = \ $(LIBOSMOCORE_LIBS) \ $(COMMON_LA) +types_TypesTest_SOURCES = types/TypesTest.cpp +types_TypesTest_LDADD = \ + $(LIBOSMOGB_LIBS) \ + $(LIBOSMOGSM_LIBS) \ + $(LIBOSMOCORE_LIBS) \ + $(COMMON_LA) \ + $(top_builddir)/src/libgprs.la + # The `:;' works around a Bash 3.2 bug when the output is not writeable. $(srcdir)/package.m4: $(top_srcdir)/configure.ac @@ -58,7 +66,8 @@ EXTRA_DIST = \ testsuite.at $(srcdir)/package.m4 $(TESTSUITE) \ rlcmac/RLCMACTest.ok rlcmac/RLCMACTest.err \ alloc/AllocTest.ok alloc/AllocTest.err \ - tbf/TbfTest.ok tbf/TbfTest.err + tbf/TbfTest.ok tbf/TbfTest.err \ + types/TypesTest.ok types/TypesTest.err DISTCLEANFILES = atconfig diff --git a/tests/testsuite.at b/tests/testsuite.at index 4d770050..27f66b9f 100644 --- a/tests/testsuite.at +++ b/tests/testsuite.at @@ -22,3 +22,10 @@ cat $abs_srcdir/tbf/TbfTest.ok > expout cat $abs_srcdir/tbf/TbfTest.err > experr AT_CHECK([$abs_top_builddir/tests/tbf/TbfTest], [0], [expout], [experr]) AT_CLEANUP + +AT_SETUP([types]) +AT_KEYWORDS([types]) +cat $abs_srcdir/types/TypesTest.ok > expout +cat $abs_srcdir/types/TypesTest.err > experr +AT_CHECK([$abs_top_builddir/tests/types/TypesTest], [0], [expout], [experr]) +AT_CLEANUP diff --git a/tests/types/TypesTest.cpp b/tests/types/TypesTest.cpp new file mode 100644 index 00000000..235ba974 --- /dev/null +++ b/tests/types/TypesTest.cpp @@ -0,0 +1,93 @@ +/* + * TypesTest.cpp Test the primitive data types + * + * Copyright (C) 2013 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 "bts.h" +#include "tbf.h" +#include "gprs_debug.h" + +extern "C" { +#include +#include +#include +#include +} + +void *tall_pcu_ctx; +int16_t spoof_mnc = 0, spoof_mcc = 0; + +static void test_llc(void) +{ + { + uint8_t data[LLC_MAX_LEN] = {1, 2, 3, 4, }; + uint8_t out; + gprs_llc llc; + llc.init(); + + OSMO_ASSERT(llc.chunk_size() == 0); + OSMO_ASSERT(llc.remaining_space() == LLC_MAX_LEN); + OSMO_ASSERT(llc.frame_length() == 0); + + llc.put_frame(data, 2); + OSMO_ASSERT(llc.remaining_space() == LLC_MAX_LEN - 2); + OSMO_ASSERT(llc.frame_length() == 2); + OSMO_ASSERT(llc.chunk_size() == 2); + OSMO_ASSERT(llc.frame[0] == 1); + OSMO_ASSERT(llc.frame[1] == 2); + + llc.append_frame(&data[3], 1); + OSMO_ASSERT(llc.remaining_space() == LLC_MAX_LEN - 3); + OSMO_ASSERT(llc.frame_length() == 3); + OSMO_ASSERT(llc.chunk_size() == 3); + + /* consume two bytes */ + llc.consume(&out, 1); + OSMO_ASSERT(llc.remaining_space() == LLC_MAX_LEN - 3); + OSMO_ASSERT(llc.frame_length() == 3); + OSMO_ASSERT(llc.chunk_size() == 2); + + /* check that the bytes are as we expected */ + OSMO_ASSERT(llc.frame[0] == 1); + OSMO_ASSERT(llc.frame[1] == 2); + OSMO_ASSERT(llc.frame[2] == 4); + + /* now fill the frame */ + llc.append_frame(data, llc.remaining_space() - 1); + OSMO_ASSERT(llc.fits_in_current_frame(1)); + OSMO_ASSERT(!llc.fits_in_current_frame(2)); + } +} + +int main(int argc, char **argv) +{ + printf("Making some basic type testing.\n"); + test_llc(); + return EXIT_SUCCESS; +} + +/* + * stubs that should not be reached + */ +extern "C" { +void l1if_pdch_req() { abort(); } +void l1if_connect_pdch() { abort(); } +void l1if_close_pdch() { abort(); } +void l1if_open_pdch() { abort(); } +} diff --git a/tests/types/TypesTest.err b/tests/types/TypesTest.err new file mode 100644 index 00000000..e69de29b diff --git a/tests/types/TypesTest.ok b/tests/types/TypesTest.ok new file mode 100644 index 00000000..9d0cbfbb --- /dev/null +++ b/tests/types/TypesTest.ok @@ -0,0 +1 @@ +Making some basic type testing. -- cgit v1.2.3