]> git.ipfire.org Git - thirdparty/strongswan.git/commitdiff
mem-pool: Add basic unit tests
authorTobias Brunner <tobias@strongswan.org>
Fri, 24 Oct 2014 14:48:34 +0000 (16:48 +0200)
committerTobias Brunner <tobias@strongswan.org>
Thu, 30 Oct 2014 11:32:44 +0000 (12:32 +0100)
src/libhydra/tests/Makefile.am
src/libhydra/tests/hydra_tests.h
src/libhydra/tests/suites/test_mem_pool.c [new file with mode: 0644]

index 5acd5c28cf35cc5c55ed285f1cceb98981834bfa..c2377c1607fd6b301cd470ac94cd0757e8cfefac 100644 (file)
@@ -3,6 +3,7 @@ TESTS = hydra_tests
 check_PROGRAMS = $(TESTS)
 
 hydra_tests_SOURCES = \
+  suites/test_mem_pool.c \
   hydra_tests.h hydra_tests.c
 
 hydra_tests_CFLAGS = \
index 6b213d026b00c39c5c8942affc23680111afd56d..a73b78dc7c730d0897df4af0d625305fb9f70c4f 100644 (file)
@@ -12,3 +12,5 @@
  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  * for more details.
  */
+
+TEST_SUITE(mem_pool_suite_create)
diff --git a/src/libhydra/tests/suites/test_mem_pool.c b/src/libhydra/tests/suites/test_mem_pool.c
new file mode 100644 (file)
index 0000000..c47a92f
--- /dev/null
@@ -0,0 +1,230 @@
+/*
+ * Copyright (C) 2014 Tobias Brunner
+ * Hochschule fuer Technik Rapperswil
+ *
+ * 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.  See <http://www.fsf.org/copyleft/gpl.txt>.
+ *
+ * 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.
+ */
+
+#include "test_suite.h"
+
+#include <attributes/mem_pool.h>
+
+static void assert_host(char *expected, host_t *host)
+{
+       if (!expected)
+       {
+               ck_assert_msg(!host, "not epxecting IP != %+H", host);
+       }
+       else
+       {
+               host_t *verifier;
+               verifier = host_create_from_string(expected, 0);
+               ck_assert_msg(host, "expected IP %+H != NULL", verifier);
+               ck_assert_msg(verifier->ip_equals(verifier, host), "expected IP %+H != "
+                                         "%+H", verifier, host);;
+               verifier->destroy(verifier);
+       }
+}
+
+static void assert_acquire(mem_pool_t *pool, char *requested, char *expected,
+                                                  mem_pool_op_t operation)
+{
+       identification_t *id;
+       host_t *req, *acquired;
+
+       id = identification_create_from_string("tester");
+       req = host_create_from_string(requested, 0);
+
+       acquired = pool->acquire_address(pool, id, req, operation);
+       assert_host(expected, acquired);
+       DESTROY_IF(acquired);
+
+       req->destroy(req);
+       id->destroy(id);
+}
+
+static void assert_acquires_new(mem_pool_t *pool, char *pattern, int first)
+{
+       char expected[16];
+       int i;
+
+       for (i = 0; i < pool->get_size(pool); i++)
+       {
+               snprintf(expected, sizeof(expected), pattern, first + i);
+               assert_acquire(pool, "0.0.0.0", expected, MEM_POOL_NEW);
+               ck_assert_int_eq(i + 1, pool->get_online(pool));
+       }
+       assert_acquire(pool, "0.0.0.0", NULL, MEM_POOL_NEW);
+}
+
+START_TEST(test_config)
+{
+       mem_pool_t *pool;
+
+       pool = mem_pool_create("test", NULL, 0);
+       ck_assert_int_eq(0, pool->get_size(pool));
+       assert_acquire(pool, "192.168.0.1", "192.168.0.1", MEM_POOL_NEW);
+       assert_acquire(pool, "10.0.1.1", "10.0.1.1", MEM_POOL_NEW);
+       assert_acquire(pool, "0.0.0.0", "0.0.0.0", MEM_POOL_NEW);
+       assert_acquire(pool, "255.255.255.255", "255.255.255.255", MEM_POOL_NEW);
+       ck_assert_int_eq(0, pool->get_online(pool));
+       pool->destroy(pool);
+}
+END_TEST
+
+START_TEST(test_cidr)
+{
+       mem_pool_t *pool;
+       host_t *base;
+
+       base = host_create_from_string("192.168.0.0", 0);
+
+       pool = mem_pool_create("test", base, 32);
+       ck_assert_int_eq(1, pool->get_size(pool));
+       assert_acquires_new(pool, "192.168.0.%d", 0);
+       pool->destroy(pool);
+
+       pool = mem_pool_create("test", base, 31);
+       ck_assert_int_eq(2, pool->get_size(pool));
+       assert_acquires_new(pool, "192.168.0.%d", 0);
+       pool->destroy(pool);
+
+       pool = mem_pool_create("test", base, 30);
+       ck_assert_int_eq(2, pool->get_size(pool));
+       assert_acquires_new(pool, "192.168.0.%d", 1);
+       pool->destroy(pool);
+
+       pool = mem_pool_create("test", base, 29);
+       ck_assert_int_eq(6, pool->get_size(pool));
+       assert_acquires_new(pool, "192.168.0.%d", 1);
+       pool->destroy(pool);
+
+       pool = mem_pool_create("test", base, 24);
+       ck_assert_int_eq(254, pool->get_size(pool));
+       assert_acquires_new(pool, "192.168.0.%d", 1);
+       pool->destroy(pool);
+
+       base->destroy(base);
+}
+END_TEST
+
+START_TEST(test_cidr_offset)
+{
+       mem_pool_t *pool;
+       host_t *base;
+
+       base = host_create_from_string("192.168.0.1", 0);
+       pool = mem_pool_create("test", base, 31);
+       ck_assert_int_eq(1, pool->get_size(pool));
+       assert_acquires_new(pool, "192.168.0.%d", 1);
+       pool->destroy(pool);
+
+       pool = mem_pool_create("test", base, 30);
+       ck_assert_int_eq(2, pool->get_size(pool));
+       assert_acquires_new(pool, "192.168.0.%d", 1);
+       pool->destroy(pool);
+       base->destroy(base);
+
+       base = host_create_from_string("192.168.0.2", 0);
+       pool = mem_pool_create("test", base, 30);
+       ck_assert_int_eq(1, pool->get_size(pool));
+       assert_acquires_new(pool, "192.168.0.%d", 2);
+       pool->destroy(pool);
+
+       pool = mem_pool_create("test", base, 24);
+       ck_assert_int_eq(253, pool->get_size(pool));
+       assert_acquires_new(pool, "192.168.0.%d", 2);
+       pool->destroy(pool);
+       base->destroy(base);
+
+       base = host_create_from_string("192.168.0.254", 0);
+       pool = mem_pool_create("test", base, 24);
+       ck_assert_int_eq(1, pool->get_size(pool));
+       assert_acquires_new(pool, "192.168.0.%d", 254);
+       pool->destroy(pool);
+       base->destroy(base);
+
+       /* due to size == 0 we get the requested IP back */
+       base = host_create_from_string("192.168.0.255", 0);
+       pool = mem_pool_create("test", base, 24);
+       ck_assert_int_eq(0, pool->get_size(pool));
+       assert_acquire(pool, "192.168.0.1", "192.168.0.1", MEM_POOL_NEW);
+       pool->destroy(pool);
+
+       base->destroy(base);
+}
+END_TEST
+
+START_TEST(test_range)
+{
+       mem_pool_t *pool;
+       host_t *from, *to;
+
+       from = host_create_from_string("192.168.0.0", 0);
+       to = host_create_from_string("192.168.0.0", 0);
+       pool = mem_pool_create_range("test", from, to);
+       ck_assert_int_eq(1, pool->get_size(pool));
+       assert_acquires_new(pool, "192.168.0.%d", 0);
+       pool->destroy(pool);
+
+       to->destroy(to);
+       to = host_create_from_string("192.168.0.1", 0);
+       pool = mem_pool_create_range("test", from, to);
+       ck_assert_int_eq(2, pool->get_size(pool));
+       assert_acquires_new(pool, "192.168.0.%d", 0);
+       pool->destroy(pool);
+
+       from->destroy(from);
+       from = host_create_from_string("192.168.0.10", 0);
+       pool = mem_pool_create_range("test", from, to);
+       ck_assert(!pool);
+
+       to->destroy(to);
+       to = host_create_from_string("192.168.0.20", 0);
+       pool = mem_pool_create_range("test", from, to);
+       ck_assert_int_eq(11, pool->get_size(pool));
+       assert_acquires_new(pool, "192.168.0.%d", 10);
+       pool->destroy(pool);
+
+       from->destroy(from);
+       from = host_create_from_string("fec::1", 0);
+       to->destroy(to);
+       to = host_create_from_string("fed::1", 0);
+       pool = mem_pool_create_range("test", from, to);
+       ck_assert(!pool);
+
+       from->destroy(from);
+       to->destroy(to);
+}
+END_TEST
+
+Suite *mem_pool_suite_create()
+{
+       Suite *s;
+       TCase *tc;
+
+       s = suite_create("mem_pool");
+
+       tc = tcase_create("%config-like pool");
+       tcase_add_test(tc, test_config);
+       suite_add_tcase(s, tc);
+
+       tc = tcase_create("cidr constructor");
+       tcase_add_test(tc, test_cidr);
+       tcase_add_test(tc, test_cidr_offset);
+       suite_add_tcase(s, tc);
+
+       tc = tcase_create("range constructor");
+       tcase_add_test(tc, test_range);
+       suite_add_tcase(s, tc);
+
+       return s;
+}