summaryrefslogtreecommitdiff
path: root/tests/unit_tests/openvpn
diff options
context:
space:
mode:
Diffstat (limited to 'tests/unit_tests/openvpn')
-rw-r--r--tests/unit_tests/openvpn/Makefile.in25
-rw-r--r--tests/unit_tests/openvpn/mock_msg.c2
-rw-r--r--tests/unit_tests/openvpn/test_buffer.c183
-rw-r--r--tests/unit_tests/openvpn/test_packet_id.c2
-rw-r--r--tests/unit_tests/openvpn/test_tls_crypt.c2
5 files changed, 202 insertions, 12 deletions
diff --git a/tests/unit_tests/openvpn/Makefile.in b/tests/unit_tests/openvpn/Makefile.in
index 1ce10fc..0114d5c 100644
--- a/tests/unit_tests/openvpn/Makefile.in
+++ b/tests/unit_tests/openvpn/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -14,7 +14,17 @@
@SET_MAKE@
VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
am__make_running_with_option = \
case $${target_option-} in \
?) ;; \
@@ -81,8 +91,6 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2)
@HAVE_LD_WRAP_SUPPORT_TRUE@am__append_1 = argv_testdriver buffer_testdriver
@ENABLE_CRYPTO_TRUE@am__append_2 = packet_id_testdriver tls_crypt_testdriver
subdir = tests/unit_tests/openvpn
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
- $(top_srcdir)/depcomp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/ax_emptyarray.m4 \
$(top_srcdir)/m4/ax_socklen_t.m4 \
@@ -93,6 +101,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ax_emptyarray.m4 \
$(top_srcdir)/compat.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h \
$(top_builddir)/include/openvpn-plugin.h
@@ -243,6 +252,7 @@ am__tty_colors = { \
std=''; \
fi; \
}
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
@@ -291,6 +301,7 @@ LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
LZ4_CFLAGS = @LZ4_CFLAGS@
LZ4_LIBS = @LZ4_LIBS@
LZO_CFLAGS = @LZO_CFLAGS@
@@ -411,6 +422,7 @@ plugindir = @plugindir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
+runstatedir = @runstatedir@
sampledir = @sampledir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
@@ -489,7 +501,6 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/unit_tests/openvpn/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --foreign tests/unit_tests/openvpn/Makefile
-.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
@@ -1225,6 +1236,8 @@ uninstall-am:
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
tags tags-am uninstall uninstall-am
+.PRECIOUS: Makefile
+
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/tests/unit_tests/openvpn/mock_msg.c b/tests/unit_tests/openvpn/mock_msg.c
index 4bd11ca..140e637 100644
--- a/tests/unit_tests/openvpn/mock_msg.c
+++ b/tests/unit_tests/openvpn/mock_msg.c
@@ -5,7 +5,7 @@
* packet encryption, packet authentication, and
* packet compression.
*
- * Copyright (C) 2016-2017 Fox Crypto B.V. <openvpn@fox-it.com>
+ * Copyright (C) 2016-2018 Fox Crypto B.V. <openvpn@fox-it.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2
diff --git a/tests/unit_tests/openvpn/test_buffer.c b/tests/unit_tests/openvpn/test_buffer.c
index 69bb2e5..d083b78 100644
--- a/tests/unit_tests/openvpn/test_buffer.c
+++ b/tests/unit_tests/openvpn/test_buffer.c
@@ -5,7 +5,7 @@
* packet encryption, packet authentication, and
* packet compression.
*
- * Copyright (C) 2016-2017 Fox Crypto B.V. <openvpn@fox-it.com>
+ * Copyright (C) 2016-2018 Fox Crypto B.V. <openvpn@fox-it.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2
@@ -35,7 +35,7 @@
#include "buffer.h"
static void
-buffer_strprefix(void **state)
+test_buffer_strprefix(void **state)
{
assert_true(strprefix("123456", "123456"));
assert_true(strprefix("123456", "123"));
@@ -44,11 +44,188 @@ buffer_strprefix(void **state)
assert_false(strprefix("12", "123"));
}
+#define testsep ","
+#define testnosep ""
+#define teststr1 "one"
+#define teststr2 "two"
+#define teststr3 "three"
+#define teststr4 "four"
+
+#define assert_buf_equals_str(buf, str) \
+ assert_int_equal(BLEN(buf), strlen(str)); \
+ assert_memory_equal(BPTR(buf), str, BLEN(buf));
+
+struct test_buffer_list_aggregate_ctx {
+ struct buffer_list *empty;
+ struct buffer_list *one_two_three;
+ struct buffer_list *zero_length_strings;
+ struct buffer_list *empty_buffers;
+};
+
+static int test_buffer_list_setup(void **state)
+{
+ struct test_buffer_list_aggregate_ctx *ctx = calloc(1, sizeof(*ctx));
+ ctx->empty = buffer_list_new(0);
+
+ ctx->one_two_three = buffer_list_new(3);
+ buffer_list_push(ctx->one_two_three, teststr1);
+ buffer_list_push(ctx->one_two_three, teststr2);
+ buffer_list_push(ctx->one_two_three, teststr3);
+
+ ctx->zero_length_strings = buffer_list_new(2);
+ buffer_list_push(ctx->zero_length_strings, "");
+ buffer_list_push(ctx->zero_length_strings, "");
+
+ ctx->empty_buffers = buffer_list_new(2);
+ uint8_t data = 0;
+ buffer_list_push_data(ctx->empty_buffers, &data, 0);
+ buffer_list_push_data(ctx->empty_buffers, &data, 0);
+
+ *state = ctx;
+ return 0;
+}
+
+static int test_buffer_list_teardown(void **state)
+{
+ struct test_buffer_list_aggregate_ctx *ctx = *state;
+
+ buffer_list_free(ctx->empty);
+ buffer_list_free(ctx->one_two_three);
+ buffer_list_free(ctx->zero_length_strings);
+ buffer_list_free(ctx->empty_buffers);
+ free(ctx);
+ return 0;
+}
+
+static void
+test_buffer_list_full(void **state)
+{
+ struct test_buffer_list_aggregate_ctx *ctx = *state;
+
+ /* list full */
+ assert_int_equal(ctx->one_two_three->size, 3);
+ buffer_list_push(ctx->one_two_three, teststr4);
+ assert_int_equal(ctx->one_two_three->size, 3);
+}
+
+static void
+test_buffer_list_aggregate_separator_empty(void **state)
+{
+ struct test_buffer_list_aggregate_ctx *ctx = *state;
+
+ /* aggregating an empty buffer list results in an empty buffer list */
+ buffer_list_aggregate_separator(ctx->empty, 3, testsep);
+ assert_null(ctx->empty->head);
+}
+
+static void
+test_buffer_list_aggregate_separator_noop(void **state)
+{
+ struct test_buffer_list_aggregate_ctx *ctx = *state;
+
+ /* With a max length of 2, no aggregation should take place */
+ buffer_list_aggregate_separator(ctx->one_two_three, 2, testsep);
+ assert_int_equal(ctx->one_two_three->size, 3);
+ struct buffer *buf = buffer_list_peek(ctx->one_two_three);
+ assert_buf_equals_str(buf, teststr1);
+}
+
+static void
+test_buffer_list_aggregate_separator_two(void **state)
+{
+ struct test_buffer_list_aggregate_ctx *ctx = *state;
+ const char *expected = teststr1 testsep teststr2 testsep;
+
+ /* Aggregate the first two elements
+ * (add 1 to max_len to test if "three" is not sneaked in too)
+ */
+ buffer_list_aggregate_separator(ctx->one_two_three, strlen(expected) + 1,
+ testsep);
+ assert_int_equal(ctx->one_two_three->size, 2);
+ struct buffer *buf = buffer_list_peek(ctx->one_two_three);
+ assert_buf_equals_str(buf, expected);
+}
+
+static void
+test_buffer_list_aggregate_separator_all(void **state)
+{
+ struct test_buffer_list_aggregate_ctx *ctx = *state;
+
+ /* Aggregate all */
+ buffer_list_aggregate_separator(ctx->one_two_three, 1<<16, testsep);
+ assert_int_equal(ctx->one_two_three->size, 1);
+ struct buffer *buf = buffer_list_peek(ctx->one_two_three);
+ assert_buf_equals_str(buf,
+ teststr1 testsep teststr2 testsep teststr3 testsep);
+}
+
+static void
+test_buffer_list_aggregate_separator_nosep(void **state)
+{
+ struct test_buffer_list_aggregate_ctx *ctx = *state;
+
+ /* Aggregate all */
+ buffer_list_aggregate_separator(ctx->one_two_three, 1<<16, testnosep);
+ assert_int_equal(ctx->one_two_three->size, 1);
+ struct buffer *buf = buffer_list_peek(ctx->one_two_three);
+ assert_buf_equals_str(buf, teststr1 teststr2 teststr3);
+}
+
+static void
+test_buffer_list_aggregate_separator_zerolen(void **state)
+{
+ struct test_buffer_list_aggregate_ctx *ctx = *state;
+ struct buffer_list *bl_zerolen = ctx->zero_length_strings;
+
+ /* Aggregate all */
+ buffer_list_aggregate_separator(bl_zerolen, 1<<16, testnosep);
+ assert_int_equal(bl_zerolen->size, 1);
+ struct buffer *buf = buffer_list_peek(bl_zerolen);
+ assert_buf_equals_str(buf, "");
+}
+
+static void
+test_buffer_list_aggregate_separator_emptybuffers(void **state)
+{
+ struct test_buffer_list_aggregate_ctx *ctx = *state;
+ struct buffer_list *bl_emptybuffers = ctx->empty_buffers;
+
+ /* Aggregate all */
+ buffer_list_aggregate_separator(bl_emptybuffers, 1<<16, testnosep);
+ assert_int_equal(bl_emptybuffers->size, 1);
+ struct buffer *buf = buffer_list_peek(bl_emptybuffers);
+ assert_int_equal(BLEN(buf), 0);
+}
+
int
main(void)
{
const struct CMUnitTest tests[] = {
- cmocka_unit_test(buffer_strprefix),
+ cmocka_unit_test(test_buffer_strprefix),
+ cmocka_unit_test_setup_teardown(test_buffer_list_full,
+ test_buffer_list_setup,
+ test_buffer_list_teardown),
+ cmocka_unit_test_setup_teardown(test_buffer_list_aggregate_separator_empty,
+ test_buffer_list_setup,
+ test_buffer_list_teardown),
+ cmocka_unit_test_setup_teardown(test_buffer_list_aggregate_separator_noop,
+ test_buffer_list_setup,
+ test_buffer_list_teardown),
+ cmocka_unit_test_setup_teardown(test_buffer_list_aggregate_separator_two,
+ test_buffer_list_setup,
+ test_buffer_list_teardown),
+ cmocka_unit_test_setup_teardown(test_buffer_list_aggregate_separator_all,
+ test_buffer_list_setup,
+ test_buffer_list_teardown),
+ cmocka_unit_test_setup_teardown(test_buffer_list_aggregate_separator_nosep,
+ test_buffer_list_setup,
+ test_buffer_list_teardown),
+ cmocka_unit_test_setup_teardown(test_buffer_list_aggregate_separator_zerolen,
+ test_buffer_list_setup,
+ test_buffer_list_teardown),
+ cmocka_unit_test_setup_teardown(test_buffer_list_aggregate_separator_emptybuffers,
+ test_buffer_list_setup,
+ test_buffer_list_teardown),
};
return cmocka_run_group_tests_name("buffer", tests, NULL, NULL);
diff --git a/tests/unit_tests/openvpn/test_packet_id.c b/tests/unit_tests/openvpn/test_packet_id.c
index 0a785ad..ba420c4 100644
--- a/tests/unit_tests/openvpn/test_packet_id.c
+++ b/tests/unit_tests/openvpn/test_packet_id.c
@@ -5,7 +5,7 @@
* packet encryption, packet authentication, and
* packet compression.
*
- * Copyright (C) 2016 Fox Crypto B.V. <openvpn@fox-it.com>
+ * Copyright (C) 2016-2018 Fox Crypto B.V. <openvpn@fox-it.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2
diff --git a/tests/unit_tests/openvpn/test_tls_crypt.c b/tests/unit_tests/openvpn/test_tls_crypt.c
index 0a6a08f..f5618f8 100644
--- a/tests/unit_tests/openvpn/test_tls_crypt.c
+++ b/tests/unit_tests/openvpn/test_tls_crypt.c
@@ -5,7 +5,7 @@
* packet encryption, packet authentication, and
* packet compression.
*
- * Copyright (C) 2016-2017 Fox Crypto B.V. <openvpn@fox-it.com>
+ * Copyright (C) 2016-2018 Fox Crypto B.V. <openvpn@fox-it.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2