aboutsummaryrefslogtreecommitdiffstats
path: root/tests/gtp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/gtp')
-rw-r--r--tests/gtp/Makefile.am19
-rw-r--r--tests/gtp/gtpie_test.c127
-rw-r--r--tests/gtp/gtpie_test.ok6
3 files changed, 152 insertions, 0 deletions
diff --git a/tests/gtp/Makefile.am b/tests/gtp/Makefile.am
new file mode 100644
index 0000000..bb01e3d
--- /dev/null
+++ b/tests/gtp/Makefile.am
@@ -0,0 +1,19 @@
+AM_CFLAGS = -Wall -I$(top_srcdir)/include $(LIBOSMOCORE_CFLAGS) -g
+
+EXTRA_DIST = \
+ gtpie_test.ok \
+ $(NULL)
+
+noinst_PROGRAMS = \
+ gtpie_test \
+ $(NULL)
+
+gtpie_test_SOURCES = \
+ gtpie_test.c \
+ $(NULL)
+
+gtpie_test_LDADD = \
+ $(top_builddir)/lib/debug.o \
+ $(top_builddir)/gtp/libgtp.la \
+ $(LIBOSMOCORE_LIBS) \
+ $(NULL)
diff --git a/tests/gtp/gtpie_test.c b/tests/gtp/gtpie_test.c
new file mode 100644
index 0000000..fe2d502
--- /dev/null
+++ b/tests/gtp/gtpie_test.c
@@ -0,0 +1,127 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <time.h>
+
+#include <osmocom/core/utils.h>
+#include <osmocom/core/application.h>
+#include <osmocom/core/logging.h>
+
+#include "../../lib/syserr.h"
+#include "../../gtp/gtpie.h"
+
+static const uint8_t in[] = { 1,2,3,4,5,6 };
+static uint8_t buf[256];
+static int rc;
+
+static void test_gtpie_tlv()
+{
+ unsigned int len = 0;
+
+ printf("Testing gtpie_tlv()\n");
+
+ /* normal / successful case */
+ memset(buf, 0, sizeof(buf));
+ rc = gtpie_tlv(buf, &len, sizeof(buf), 23, sizeof(in), in);
+ OSMO_ASSERT(rc == 0);
+ OSMO_ASSERT(len == sizeof(in) + 3);
+ OSMO_ASSERT(buf[0] == 23);
+ OSMO_ASSERT(ntohs(*(uint16_t *) &buf[1]) == sizeof(in));
+ OSMO_ASSERT(!memcmp(buf+3, in, sizeof(in)));
+
+ /* overflow */
+ memset(buf, 0, sizeof(buf));
+ rc = gtpie_tlv(buf, &len, 4, 23, sizeof(in), in);
+ OSMO_ASSERT(rc == 1);
+}
+
+static void test_gtpie_tv0()
+{
+ unsigned int len = 0;
+
+ printf("Testing gtpie_tv0()\n");
+
+ memset(buf, 0, sizeof(buf));
+ rc = gtpie_tv0(buf, &len, sizeof(buf), 42, sizeof(in), in);
+ OSMO_ASSERT(rc == 0);
+ OSMO_ASSERT(len == sizeof(in) + 1);
+}
+
+static void test_gtpie_tv1()
+{
+ unsigned int len = 0;
+
+ printf("Testing gtpie_tv1()\n");
+
+ memset(buf, 0, sizeof(buf));
+ rc = gtpie_tv1(buf, &len, sizeof(buf), 42, 0xAD);
+ OSMO_ASSERT(rc == 0);
+ OSMO_ASSERT(len == 2);
+ OSMO_ASSERT(buf[0] == 42);
+ OSMO_ASSERT(buf[1] == 0xAD);
+}
+
+static void test_gtpie_tv2()
+{
+ unsigned int len = 0;
+
+ printf("Testing gtpie_tv2()\n");
+
+ memset(buf, 0, sizeof(buf));
+ rc = gtpie_tv2(buf, &len, sizeof(buf), 42, 0xABCD);
+ OSMO_ASSERT(rc == 0);
+ OSMO_ASSERT(len == 3);
+ OSMO_ASSERT(buf[0] == 42);
+ OSMO_ASSERT(ntohs(*(uint16_t *) &buf[1]) == 0xABCD);
+}
+
+static void test_gtpie_tv4()
+{
+ unsigned int len = 0;
+
+ printf("Testing gtpie_tv4()\n");
+
+ memset(buf, 0, sizeof(buf));
+ rc = gtpie_tv4(buf, &len, sizeof(buf), 42, 0xABCD0123);
+ OSMO_ASSERT(rc == 0);
+ OSMO_ASSERT(len == 5);
+ OSMO_ASSERT(buf[0] == 42);
+ OSMO_ASSERT(ntohl(*(uint32_t *) &buf[1]) == 0xABCD0123);
+}
+
+static void test_gtpie_tv8()
+{
+ unsigned int len = 0;
+
+ printf("Testing gtpie_tv8()\n");
+
+ memset(buf, 0, sizeof(buf));
+ rc = gtpie_tv8(buf, &len, sizeof(buf), 42, 0x0001020304050607ULL);
+ OSMO_ASSERT(rc == 0);
+ OSMO_ASSERT(len == 9);
+ OSMO_ASSERT(buf[0] == 42);
+ OSMO_ASSERT(ntohl(*(uint32_t *) &buf[1]) == 0x00010203);
+ OSMO_ASSERT(ntohl(*(uint32_t *) &buf[5]) == 0x04050607);
+}
+
+int main(int argc, char **argv)
+{
+ osmo_init_logging(&log_info);
+ log_set_use_color(osmo_stderr_target, 0);
+ log_set_print_filename(osmo_stderr_target, 0);
+
+ srand(time(NULL));
+
+ test_gtpie_tlv();
+ test_gtpie_tv0();
+ test_gtpie_tv1();
+ test_gtpie_tv2();
+ test_gtpie_tv4();
+ test_gtpie_tv8();
+
+ /* TODO: gtpie_decaps() */
+ /* TODO: gtpie_encaps() */
+ /* TODO: gtpie_encaps2() */
+ /* TODO: gtpie_getie(), gtpie_exist(), gtpie_get*() */
+}
diff --git a/tests/gtp/gtpie_test.ok b/tests/gtp/gtpie_test.ok
new file mode 100644
index 0000000..465df72
--- /dev/null
+++ b/tests/gtp/gtpie_test.ok
@@ -0,0 +1,6 @@
+Testing gtpie_tlv()
+Testing gtpie_tv0()
+Testing gtpie_tv1()
+Testing gtpie_tv2()
+Testing gtpie_tv4()
+Testing gtpie_tv8()