aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPau Espin Pedrol <pespin@sysmocom.de>2017-12-04 12:52:23 +0100
committerPau Espin Pedrol <pespin@sysmocom.de>2017-12-04 13:25:02 +0100
commit9c0f4f49e9b15b55cd9baa42c1ba191903664397 (patch)
tree624b14e37d54fb93809a716cb0d67aa3ece381b0
parentac51c7e68e64740568c6843499cb3a352e3e549e (diff)
tests: Split ipv6 specific tests into a new test group
This way they can be easily disabled later on when IPv6 support is made optional. Change-Id: I3906dbf55ccf1650083398e08ac870add0bbdcef
-rw-r--r--tests/lib/Makefile.am8
-rw-r--r--tests/lib/in46a_test.c214
-rw-r--r--tests/lib/in46a_test.ok16
-rw-r--r--tests/lib/in46a_v6_test.ok8
-rw-r--r--tests/lib/ippool_test.c15
-rw-r--r--tests/lib/ippool_test.err2
-rw-r--r--tests/lib/ippool_test.ok257
-rw-r--r--tests/lib/ippool_v6_test.err2
-rw-r--r--tests/lib/ippool_v6_test.ok257
-rw-r--r--tests/testsuite.at13
10 files changed, 440 insertions, 352 deletions
diff --git a/tests/lib/Makefile.am b/tests/lib/Makefile.am
index 95d6901..ee46468 100644
--- a/tests/lib/Makefile.am
+++ b/tests/lib/Makefile.am
@@ -1,7 +1,11 @@
AM_CFLAGS = -Wall -I$(top_srcdir)/include $(LIBOSMOCORE_CFLAGS) -g
-EXTRA_DIST = ippool_test.ok ippool_test.err \
- in46a_test.ok
+EXTRA_DIST = ippool_test.ok \
+ ippool_test.err \
+ ippool_v6_test.ok \
+ ippool_v6_test.err \
+ in46a_test.ok \
+ in46a_v6_test.ok
noinst_PROGRAMS = ippool_test in46a_test
diff --git a/tests/lib/in46a_test.c b/tests/lib/in46a_test.c
index d4a5dbc..c0bb670 100644
--- a/tests/lib/in46a_test.c
+++ b/tests/lib/in46a_test.c
@@ -20,41 +20,24 @@ static const struct in46_addr g_ia4 = {
.v4.s_addr = 0x0d0c0b0a,
};
-static const struct in46_addr g_ia6 = {
- .len = 16,
- .v6.s6_addr = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 },
-};
-
static void test_in46a_to_af(void)
{
- struct in46_addr ia;
-
- printf("Testing in46a_to_af()\n");
+ printf("Testing in46a_to_af() with IPv4 addresses\n");
OSMO_ASSERT(in46a_to_af(&g_ia4) == AF_INET);
- OSMO_ASSERT(in46a_to_af(&g_ia6) == AF_INET6);
-
- ia.len = 8;
- OSMO_ASSERT(in46a_to_af(&ia) == AF_INET6);
}
static void test_in46a_to_sas(void)
{
struct sockaddr_storage ss;
struct sockaddr_in *sin = (struct sockaddr_in *) &ss;
- struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *) &ss;
- printf("Testing in46a_to_sas()\n");
+ printf("Testing in46a_to_sas() with IPv4 addresses\n");
memset(&ss, 0, sizeof(ss));
OSMO_ASSERT(in46a_to_sas(&ss, &g_ia4) == 0);
OSMO_ASSERT(sin->sin_family == AF_INET);
OSMO_ASSERT(sin->sin_addr.s_addr == g_ia4.v4.s_addr);
-
- memset(&ss, 0, sizeof(ss));
- OSMO_ASSERT(in46a_to_sas(&ss, &g_ia6) == 0);
- OSMO_ASSERT(sin6->sin6_family == AF_INET6);
- OSMO_ASSERT(!memcmp(&sin6->sin6_addr, &g_ia6.v6, sizeof(sin6->sin6_addr)));
}
static void test_in46a_ntop(void)
@@ -63,7 +46,7 @@ static void test_in46a_ntop(void)
char buf[256];
const char *res;
- printf("Testing in46a_ntop()\n");
+ printf("Testing in46a_ntop() with IPv4 addresses\n");
res = in46a_ntop(NULL, buf, sizeof(buf));
OSMO_ASSERT(res && !strcmp(res, "UNDEFINED"));
@@ -79,10 +62,6 @@ static void test_in46a_ntop(void)
res = in46a_ntop(&ia, buf, sizeof(buf));
OSMO_ASSERT(res && !strcmp(res, "1.2.3.4"));
printf("res = %s\n", res);
-
- res = in46a_ntop(&g_ia6, buf, sizeof(buf));
- OSMO_ASSERT(res && !strcmp(res, "102:304:506:708:90a:b0c:d0e:f10"));
- printf("res = %s\n", res);
}
static void test_in46p_ntoa(void)
@@ -101,21 +80,14 @@ static void test_in46a_equal(void)
{
struct in46_addr b;
- printf("Testing in46a_equal()\n");
+ printf("Testing in46a_equal() with IPv4 addresses\n");
memset(&b, 0xff, sizeof(b));
b.len = g_ia4.len;
b.v4.s_addr = g_ia4.v4.s_addr;
OSMO_ASSERT(in46a_equal(&g_ia4, &b));
-
- memset(&b, 0xff, sizeof(b));
- b.len = g_ia6.len;
- b.v6 = g_ia6.v6;
- OSMO_ASSERT(in46a_equal(&g_ia6, &b));
-
}
-
static int log_in46a_within_mask(const struct in46_addr *addr, const struct in46_addr *net,
size_t prefixlen)
{
@@ -134,7 +106,7 @@ static void test_in46a_within_mask(void)
{
struct in46_addr addr, mask;
- printf("Testing in46a_within_mask()\n");
+ printf("Testing in46a_within_mask() with IPv4 addresses\n");
addr = g_ia4;
mask = g_ia4;
@@ -155,13 +127,9 @@ static void test_in46a_within_mask(void)
static void test_in46a_to_eua(void)
{
- const struct in46_addr ia_v6_8 = {
- .len = 8,
- .v6.s6_addr = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 },
- };
struct ul66_t eua;
- printf("testing in46a_to_eua()\n");
+ printf("testing in46a_to_eua() with IPv4 addresses\n");
#if 0 /* triggers assert in current implementation */
const struct in46_addr ia_invalid = { .len = 3, };
@@ -173,18 +141,6 @@ static void test_in46a_to_eua(void)
OSMO_ASSERT(eua.v[0] == PDP_EUA_ORG_IETF);
OSMO_ASSERT(eua.v[1] == PDP_EUA_TYPE_v4);
OSMO_ASSERT(osmo_load32le(&eua.v[2]) == g_ia4.v4.s_addr);
-
- /* IPv6 address */
- OSMO_ASSERT(in46a_to_eua(&g_ia6, &eua) == 0);
- OSMO_ASSERT(eua.v[0] == PDP_EUA_ORG_IETF);
- OSMO_ASSERT(eua.v[1] == PDP_EUA_TYPE_v6);
- OSMO_ASSERT(!memcmp(&eua.v[2], &g_ia6.v6, 16));
-
- /* IPv6 address with prefix / length 8 */
- OSMO_ASSERT(in46a_to_eua(&ia_v6_8, &eua) == 0);
- OSMO_ASSERT(eua.v[0] == PDP_EUA_ORG_IETF);
- OSMO_ASSERT(eua.v[1] == PDP_EUA_TYPE_v6);
- OSMO_ASSERT(!memcmp(&eua.v[2], &ia_v6_8.v6, 16));
}
static void test_in46a_from_eua(void)
@@ -193,13 +149,9 @@ static void test_in46a_from_eua(void)
struct ul66_t eua;
const uint8_t v4_unspec[] = { PDP_EUA_ORG_IETF, PDP_EUA_TYPE_v4 };
const uint8_t v4_spec[] = { PDP_EUA_ORG_IETF, PDP_EUA_TYPE_v4, 1,2,3,4 };
- const uint8_t v6_unspec[] = { PDP_EUA_ORG_IETF, PDP_EUA_TYPE_v6 };
- const uint8_t v6_spec[] = { PDP_EUA_ORG_IETF, PDP_EUA_TYPE_v6,
- 1,2,3,4,5,6,7,8,9,0xa,0xb,0xc,0xd,0xe,0xf,0x10 };
-
memset(&eua, 0, sizeof(eua));
- printf("Testing in46a_from_eua()\n");
+ printf("Testing in46a_from_eua() with IPv4 addresses\n");
/* default: v4 unspec */
OSMO_ASSERT(in46a_from_eua(&eua, &ia) == 0);
@@ -231,20 +183,6 @@ static void test_in46a_from_eua(void)
OSMO_ASSERT(in46a_from_eua(&eua, &ia) == 0);
OSMO_ASSERT(ia.len == 4);
OSMO_ASSERT(ia.v4.s_addr == htonl(0x01020304));
-
- /* unspecified V6 */
- memcpy(eua.v, v6_unspec, sizeof(v6_unspec));
- eua.l = sizeof(v6_unspec);
- OSMO_ASSERT(in46a_from_eua(&eua, &ia) == 0);
- OSMO_ASSERT(ia.len == 16);
- OSMO_ASSERT(IN6_IS_ADDR_UNSPECIFIED(&ia.v6));
-
- /* specified V6 */
- memcpy(eua.v, v6_spec, sizeof(v6_spec));
- eua.l = sizeof(v6_spec);
- OSMO_ASSERT(in46a_from_eua(&eua, &ia) == 0);
- OSMO_ASSERT(ia.len == 16);
- OSMO_ASSERT(!memcmp(&ia.v6, v6_spec+2, ia.len));
}
static void test_in46a_netmasklen(void)
@@ -274,7 +212,117 @@ static void test_in46a_netmasklen(void)
netmask.v4.s_addr = 0x00000000;
len = in46a_netmasklen(&netmask);
OSMO_ASSERT(len == 0);
+}
+
+/* IPv6 specific tests */
+
+static const struct in46_addr g_ia6 = {
+ .len = 16,
+ .v6.s6_addr = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 },
+};
+
+static void test_in46a_to_af_v6(void)
+{
+ struct in46_addr ia;
+
+ printf("Testing in46a_to_af() with IPv6 addresses\n");
+
+ OSMO_ASSERT(in46a_to_af(&g_ia6) == AF_INET6);
+
+ ia.len = 8;
+ OSMO_ASSERT(in46a_to_af(&ia) == AF_INET6);
+}
+static void test_in46a_to_sas_v6(void)
+{
+ struct sockaddr_storage ss;
+ struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *) &ss;
+
+ printf("Testing in46a_to_sas() with IPv6 addresses\n");
+
+ memset(&ss, 0, sizeof(ss));
+ OSMO_ASSERT(in46a_to_sas(&ss, &g_ia6) == 0);
+ OSMO_ASSERT(sin6->sin6_family == AF_INET6);
+ OSMO_ASSERT(!memcmp(&sin6->sin6_addr, &g_ia6.v6, sizeof(sin6->sin6_addr)));
+}
+
+static void test_in46a_ntop_v6(void)
+{
+ char buf[256];
+ const char *res;
+
+ printf("Testing in46a_ntop() with IPv6 addresses\n");
+
+ res = in46a_ntop(&g_ia6, buf, sizeof(buf));
+ OSMO_ASSERT(res && !strcmp(res, "102:304:506:708:90a:b0c:d0e:f10"));
+ printf("res = %s\n", res);
+}
+
+static void test_in46a_equal_v6(void)
+{
+ struct in46_addr b;
+
+ printf("Testing in46a_equal() with IPv6 addresses\n");
+
+ memset(&b, 0xff, sizeof(b));
+ b.len = g_ia6.len;
+ b.v6 = g_ia6.v6;
+ OSMO_ASSERT(in46a_equal(&g_ia6, &b));
+}
+
+static void test_in46a_to_eua_v6(void)
+{
+ const struct in46_addr ia_v6_8 = {
+ .len = 8,
+ .v6.s6_addr = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 },
+ };
+ struct ul66_t eua;
+
+ printf("testing in46a_to_eua() with IPv6 addresses\n");
+
+ /* IPv6 address */
+ OSMO_ASSERT(in46a_to_eua(&g_ia6, &eua) == 0);
+ OSMO_ASSERT(eua.v[0] == PDP_EUA_ORG_IETF);
+ OSMO_ASSERT(eua.v[1] == PDP_EUA_TYPE_v6);
+ OSMO_ASSERT(!memcmp(&eua.v[2], &g_ia6.v6, 16));
+
+ /* IPv6 address with prefix / length 8 */
+ OSMO_ASSERT(in46a_to_eua(&ia_v6_8, &eua) == 0);
+ OSMO_ASSERT(eua.v[0] == PDP_EUA_ORG_IETF);
+ OSMO_ASSERT(eua.v[1] == PDP_EUA_TYPE_v6);
+ OSMO_ASSERT(!memcmp(&eua.v[2], &ia_v6_8.v6, 16));
+}
+
+static void test_in46a_from_eua_v6(void)
+{
+ struct in46_addr ia;
+ struct ul66_t eua;
+ const uint8_t v6_unspec[] = { PDP_EUA_ORG_IETF, PDP_EUA_TYPE_v6 };
+ const uint8_t v6_spec[] = { PDP_EUA_ORG_IETF, PDP_EUA_TYPE_v6,
+ 1,2,3,4,5,6,7,8,9,0xa,0xb,0xc,0xd,0xe,0xf,0x10 };
+
+ memset(&eua, 0, sizeof(eua));
+
+ printf("Testing in46a_from_eua() with IPv6 addresses\n");
+
+ /* unspecified V6 */
+ memcpy(eua.v, v6_unspec, sizeof(v6_unspec));
+ eua.l = sizeof(v6_unspec);
+ OSMO_ASSERT(in46a_from_eua(&eua, &ia) == 0);
+ OSMO_ASSERT(ia.len == 16);
+ OSMO_ASSERT(IN6_IS_ADDR_UNSPECIFIED(&ia.v6));
+
+ /* specified V6 */
+ memcpy(eua.v, v6_spec, sizeof(v6_spec));
+ eua.l = sizeof(v6_spec);
+ OSMO_ASSERT(in46a_from_eua(&eua, &ia) == 0);
+ OSMO_ASSERT(ia.len == 16);
+ OSMO_ASSERT(!memcmp(&ia.v6, v6_spec+2, ia.len));
+}
+
+static void test_in46a_netmasklen_v6(void)
+{
+ unsigned int len;
printf("Testing in46a_netmasklen() with IPv6 addresses\n");
const struct in46_addr netmaskA = {
.len = 16,
@@ -313,14 +361,24 @@ int main(int argc, char **argv)
srand(time(NULL));
- test_in46a_to_af();
- test_in46a_to_sas();
- test_in46a_ntop();
- test_in46p_ntoa();
- test_in46a_equal();
- test_in46a_within_mask();
- test_in46a_to_eua();
- test_in46a_from_eua();
- test_in46a_netmasklen();
+ if (argc < 2 || strcmp(argv[1], "-v6")) {
+ test_in46a_to_af();
+ test_in46a_to_sas();
+ test_in46a_ntop();
+ test_in46p_ntoa();
+ test_in46a_equal();
+ test_in46a_within_mask();
+ test_in46a_to_eua();
+ test_in46a_from_eua();
+ test_in46a_netmasklen();
+ } else {
+ test_in46a_to_af_v6();
+ test_in46a_to_sas_v6();
+ test_in46a_ntop_v6();
+ test_in46a_equal_v6();
+ test_in46a_to_eua_v6();
+ test_in46a_from_eua_v6();
+ test_in46a_netmasklen_v6();
+ }
return 0;
}
diff --git a/tests/lib/in46a_test.ok b/tests/lib/in46a_test.ok
index 9a0ff7a..b497ad1 100644
--- a/tests/lib/in46a_test.ok
+++ b/tests/lib/in46a_test.ok
@@ -1,19 +1,17 @@
-Testing in46a_to_af()
-Testing in46a_to_sas()
-Testing in46a_ntop()
+Testing in46a_to_af() with IPv4 addresses
+Testing in46a_to_sas() with IPv4 addresses
+Testing in46a_ntop() with IPv4 addresses
res = UNDEFINED
res = UNDEFINED
res = 1.2.3.4
-res = 102:304:506:708:90a:b0c:d0e:f10
in46p_ntoa() returns 16.32.48.0/24
-Testing in46a_equal()
-Testing in46a_within_mask()
+Testing in46a_equal() with IPv4 addresses
+Testing in46a_within_mask() with IPv4 addresses
in46a_within_mask(10.11.12.13, 10.11.12.13, 32) = 1
in46a_within_mask(10.11.12.13, 10.11.12.12, 30) = 1
in46a_within_mask(10.11.12.13, 10.8.0.0, 13) = 1
in46a_within_mask(10.11.12.14, 10.11.12.13, 32) = 0
in46a_within_mask(10.11.12.14, 10.11.12.12, 30) = 1
-testing in46a_to_eua()
-Testing in46a_from_eua()
+testing in46a_to_eua() with IPv4 addresses
+Testing in46a_from_eua() with IPv4 addresses
Testing in46a_netmasklen() with IPv4 addresses
-Testing in46a_netmasklen() with IPv6 addresses
diff --git a/tests/lib/in46a_v6_test.ok b/tests/lib/in46a_v6_test.ok
new file mode 100644
index 0000000..d092591
--- /dev/null
+++ b/tests/lib/in46a_v6_test.ok
@@ -0,0 +1,8 @@
+Testing in46a_to_af() with IPv6 addresses
+Testing in46a_to_sas() with IPv6 addresses
+Testing in46a_ntop() with IPv6 addresses
+res = 102:304:506:708:90a:b0c:d0e:f10
+Testing in46a_equal() with IPv6 addresses
+testing in46a_to_eua() with IPv6 addresses
+Testing in46a_from_eua() with IPv6 addresses
+Testing in46a_netmasklen() with IPv6 addresses
diff --git a/tests/lib/ippool_test.c b/tests/lib/ippool_test.c
index 5b3227c..8d3f46c 100644
--- a/tests/lib/ippool_test.c
+++ b/tests/lib/ippool_test.c
@@ -113,14 +113,17 @@ static void test_pool_sizes(void)
/* 65534 addresses [0.1..255.254] */
test_pool_size("192.168.0.0/16", IPPOOL_NONETWORK | IPPOOL_NOBROADCAST, NULL, 0, 65534);
- /* 256 prefixes of /64 each */
- test_pool_size("2001:DB8::/56", 0, NULL, 0, 256);
-
/* 253 addresses [1..254] & exclude 192.168.23.1/24 */
char *blacklist[] = {"176.16.222.10/24", "192.168.23.1/24", "192.168.38.2/24"};
test_pool_size("192.168.23.0/24", IPPOOL_NONETWORK | IPPOOL_NOBROADCAST, blacklist, 3, 253);
}
+static void test_pool_sizes_v6(void)
+{
+ /* 256 prefixes of /64 each */
+ test_pool_size("2001:DB8::/56", 0, NULL, 0, 256);
+}
+
int main(int argc, char **argv)
{
osmo_init_logging(&log_info);
@@ -129,6 +132,10 @@ int main(int argc, char **argv)
srand(time(NULL));
- test_pool_sizes();
+ if (argc < 2 || strcmp(argv[1], "-v6")) {
+ test_pool_sizes();
+ } else {
+ test_pool_sizes_v6();
+ }
return 0;
}
diff --git a/tests/lib/ippool_test.err b/tests/lib/ippool_test.err
index b11c12a..7dc5371 100644
--- a/tests/lib/ippool_test.err
+++ b/tests/lib/ippool_test.err
@@ -8,5 +8,3 @@ No more IP addresses available
No more IP addresses available
No more IP addresses available
No more IP addresses available
-No more IP addresses available
-No more IP addresses available
diff --git a/tests/lib/ippool_test.ok b/tests/lib/ippool_test.ok
index 263494e..d247c74 100644
--- a/tests/lib/ippool_test.ok
+++ b/tests/lib/ippool_test.ok
@@ -66301,263 +66301,6 @@ allocated address 192.168.255.251
allocated address 192.168.255.252
allocated address 192.168.255.253
allocated address 192.168.255.254
-testing pool for prefix 2001:DB8::/56, flags=0x0, blacklist_size=0, expected_size=256
-allocated address 2001:db8::
-allocated address 2001:db8:0:1::
-allocated address 2001:db8:0:2::
-allocated address 2001:db8:0:3::
-allocated address 2001:db8:0:4::
-allocated address 2001:db8:0:5::
-allocated address 2001:db8:0:6::
-allocated address 2001:db8:0:7::
-allocated address 2001:db8:0:8::
-allocated address 2001:db8:0:9::
-allocated address 2001:db8:0:a::
-allocated address 2001:db8:0:b::
-allocated address 2001:db8:0:c::
-allocated address 2001:db8:0:d::
-allocated address 2001:db8:0:e::
-allocated address 2001:db8:0:f::
-allocated address 2001:db8:0:10::
-allocated address 2001:db8:0:11::
-allocated address 2001:db8:0:12::
-allocated address 2001:db8:0:13::
-allocated address 2001:db8:0:14::
-allocated address 2001:db8:0:15::
-allocated address 2001:db8:0:16::
-allocated address 2001:db8:0:17::
-allocated address 2001:db8:0:18::
-allocated address 2001:db8:0:19::
-allocated address 2001:db8:0:1a::
-allocated address 2001:db8:0:1b::
-allocated address 2001:db8:0:1c::
-allocated address 2001:db8:0:1d::
-allocated address 2001:db8:0:1e::
-allocated address 2001:db8:0:1f::
-allocated address 2001:db8:0:20::
-allocated address 2001:db8:0:21::
-allocated address 2001:db8:0:22::
-allocated address 2001:db8:0:23::
-allocated address 2001:db8:0:24::
-allocated address 2001:db8:0:25::
-allocated address 2001:db8:0:26::
-allocated address 2001:db8:0:27::
-allocated address 2001:db8:0:28::
-allocated address 2001:db8:0:29::
-allocated address 2001:db8:0:2a::
-allocated address 2001:db8:0:2b::
-allocated address 2001:db8:0:2c::
-allocated address 2001:db8:0:2d::
-allocated address 2001:db8:0:2e::
-allocated address 2001:db8:0:2f::
-allocated address 2001:db8:0:30::
-allocated address 2001:db8:0:31::
-allocated address 2001:db8:0:32::
-allocated address 2001:db8:0:33::
-allocated address 2001:db8:0:34::
-allocated address 2001:db8:0:35::
-allocated address 2001:db8:0:36::
-allocated address 2001:db8:0:37::
-allocated address 2001:db8:0:38::
-allocated address 2001:db8:0:39::
-allocated address 2001:db8:0:3a::
-allocated address 2001:db8:0:3b::
-allocated address 2001:db8:0:3c::
-allocated address 2001:db8:0:3d::
-allocated address 2001:db8:0:3e::
-allocated address 2001:db8:0:3f::
-allocated address 2001:db8:0:40::
-allocated address 2001:db8:0:41::
-allocated address 2001:db8:0:42::
-allocated address 2001:db8:0:43::
-allocated address 2001:db8:0:44::
-allocated address 2001:db8:0:45::
-allocated address 2001:db8:0:46::
-allocated address 2001:db8:0:47::
-allocated address 2001:db8:0:48::
-allocated address 2001:db8:0:49::
-allocated address 2001:db8:0:4a::
-allocated address 2001:db8:0:4b::
-allocated address 2001:db8:0:4c::
-allocated address 2001:db8:0:4d::
-allocated address 2001:db8:0:4e::
-allocated address 2001:db8:0:4f::
-allocated address 2001:db8:0:50::
-allocated address 2001:db8:0:51::
-allocated address 2001:db8:0:52::
-allocated address 2001:db8:0:53::
-allocated address 2001:db8:0:54::
-allocated address 2001:db8:0:55::
-allocated address 2001:db8:0:56::
-allocated address 2001:db8:0:57::
-allocated address 2001:db8:0:58::
-allocated address 2001:db8:0:59::
-allocated address 2001:db8:0:5a::
-allocated address 2001:db8:0:5b::
-allocated address 2001:db8:0:5c::
-allocated address 2001:db8:0:5d::
-allocated address 2001:db8:0:5e::
-allocated address 2001:db8:0:5f::
-allocated address 2001:db8:0:60::
-allocated address 2001:db8:0:61::
-allocated address 2001:db8:0:62::
-allocated address 2001:db8:0:63::
-allocated address 2001:db8:0:64::
-allocated address 2001:db8:0:65::
-allocated address 2001:db8:0:66::
-allocated address 2001:db8:0:67::
-allocated address 2001:db8:0:68::
-allocated address 2001:db8:0:69::
-allocated address 2001:db8:0:6a::
-allocated address 2001:db8:0:6b::
-allocated address 2001:db8:0:6c::
-allocated address 2001:db8:0:6d::
-allocated address 2001:db8:0:6e::
-allocated address 2001:db8:0:6f::
-allocated address 2001:db8:0:70::
-allocated address 2001:db8:0:71::
-allocated address 2001:db8:0:72::
-allocated address 2001:db8:0:73::
-allocated address 2001:db8:0:74::
-allocated address 2001:db8:0:75::
-allocated address 2001:db8:0:76::
-allocated address 2001:db8:0:77::
-allocated address 2001:db8:0:78::
-allocated address 2001:db8:0:79::
-allocated address 2001:db8:0:7a::
-allocated address 2001:db8:0:7b::
-allocated address 2001:db8:0:7c::
-allocated address 2001:db8:0:7d::
-allocated address 2001:db8:0:7e::
-allocated address 2001:db8:0:7f::
-allocated address 2001:db8:0:80::
-allocated address 2001:db8:0:81::
-allocated address 2001:db8:0:82::
-allocated address 2001:db8:0:83::
-allocated address 2001:db8:0:84::
-allocated address 2001:db8:0:85::
-allocated address 2001:db8:0:86::
-allocated address 2001:db8:0:87::
-allocated address 2001:db8:0:88::
-allocated address 2001:db8:0:89::
-allocated address 2001:db8:0:8a::
-allocated address 2001:db8:0:8b::
-allocated address 2001:db8:0:8c::
-allocated address 2001:db8:0:8d::
-allocated address 2001:db8:0:8e::
-allocated address 2001:db8:0:8f::
-allocated address 2001:db8:0:90::
-allocated address 2001:db8:0:91::
-allocated address 2001:db8:0:92::
-allocated address 2001:db8:0:93::
-allocated address 2001:db8:0:94::
-allocated address 2001:db8:0:95::
-allocated address 2001:db8:0:96::
-allocated address 2001:db8:0:97::
-allocated address 2001:db8:0:98::
-allocated address 2001:db8:0:99::
-allocated address 2001:db8:0:9a::
-allocated address 2001:db8:0:9b::
-allocated address 2001:db8:0:9c::
-allocated address 2001:db8:0:9d::
-allocated address 2001:db8:0:9e::
-allocated address 2001:db8:0:9f::
-allocated address 2001:db8:0:a0::
-allocated address 2001:db8:0:a1::
-allocated address 2001:db8:0:a2::
-allocated address 2001:db8:0:a3::
-allocated address 2001:db8:0:a4::
-allocated address 2001:db8:0:a5::
-allocated address 2001:db8:0:a6::
-allocated address 2001:db8:0:a7::
-allocated address 2001:db8:0:a8::
-allocated address 2001:db8:0:a9::
-allocated address 2001:db8:0:aa::
-allocated address 2001:db8:0:ab::
-allocated address 2001:db8:0:ac::
-allocated address 2001:db8:0:ad::
-allocated address 2001:db8:0:ae::
-allocated address 2001:db8:0:af::
-allocated address 2001:db8:0:b0::
-allocated address 2001:db8:0:b1::
-allocated address 2001:db8:0:b2::
-allocated address 2001:db8:0:b3::
-allocated address 2001:db8:0:b4::
-allocated address 2001:db8:0:b5::
-allocated address 2001:db8:0:b6::
-allocated address 2001:db8:0:b7::
-allocated address 2001:db8:0:b8::
-allocated address 2001:db8:0:b9::
-allocated address 2001:db8:0:ba::
-allocated address 2001:db8:0:bb::
-allocated address 2001:db8:0:bc::
-allocated address 2001:db8:0:bd::
-allocated address 2001:db8:0:be::
-allocated address 2001:db8:0:bf::
-allocated address 2001:db8:0:c0::
-allocated address 2001:db8:0:c1::
-allocated address 2001:db8:0:c2::
-allocated address 2001:db8:0:c3::
-allocated address 2001:db8:0:c4::
-allocated address 2001:db8:0:c5::
-allocated address 2001:db8:0:c6::
-allocated address 2001:db8:0:c7::
-allocated address 2001:db8:0:c8::
-allocated address 2001:db8:0:c9::
-allocated address 2001:db8:0:ca::
-allocated address 2001:db8:0:cb::
-allocated address 2001:db8:0:cc::
-allocated address 2001:db8:0:cd::
-allocated address 2001:db8:0:ce::
-allocated address 2001:db8:0:cf::
-allocated address 2001:db8:0:d0::
-allocated address 2001:db8:0:d1::
-allocated address 2001:db8:0:d2::
-allocated address 2001:db8:0:d3::
-allocated address 2001:db8:0:d4::
-allocated address 2001:db8:0:d5::
-allocated address 2001:db8:0:d6::
-allocated address 2001:db8:0:d7::
-allocated address 2001:db8:0:d8::
-allocated address 2001:db8:0:d9::
-allocated address 2001:db8:0:da::
-allocated address 2001:db8:0:db::
-allocated address 2001:db8:0:dc::
-allocated address 2001:db8:0:dd::
-allocated address 2001:db8:0:de::
-allocated address 2001:db8:0:df::
-allocated address 2001:db8:0:e0::
-allocated address 2001:db8:0:e1::
-allocated address 2001:db8:0:e2::
-allocated address 2001:db8:0:e3::
-allocated address 2001:db8:0:e4::
-allocated address 2001:db8:0:e5::
-allocated address 2001:db8:0:e6::
-allocated address 2001:db8:0:e7::
-allocated address 2001:db8:0:e8::
-allocated address 2001:db8:0:e9::
-allocated address 2001:db8:0:ea::
-allocated address 2001:db8:0:eb::
-allocated address 2001:db8:0:ec::
-allocated address 2001:db8:0:ed::
-allocated address 2001:db8:0:ee::
-allocated address 2001:db8:0:ef::
-allocated address 2001:db8:0:f0::
-allocated address 2001:db8:0:f1::
-allocated address 2001:db8:0:f2::
-allocated address 2001:db8:0:f3::
-allocated address 2001:db8:0:f4::
-allocated address 2001:db8:0:f5::
-allocated address 2001:db8:0:f6::
-allocated address 2001:db8:0:f7::
-allocated address 2001:db8:0:f8::
-allocated address 2001:db8:0:f9::
-allocated address 2001:db8:0:fa::
-allocated address 2001:db8:0:fb::
-allocated address 2001:db8:0:fc::
-allocated address 2001:db8:0:fd::
-allocated address 2001:db8:0:fe::
-allocated address 2001:db8:0:ff::
testing pool for prefix 192.168.23.0/24, flags=0x3, blacklist_size=3, expected_size=253
allocated address 192.168.23.2
allocated address 192.168.23.3
diff --git a/tests/lib/ippool_v6_test.err b/tests/lib/ippool_v6_test.err
new file mode 100644
index 0000000..f0edefe
--- /dev/null
+++ b/tests/lib/ippool_v6_test.err
@@ -0,0 +1,2 @@
+No more IP addresses available
+No more IP addresses available
diff --git a/tests/lib/ippool_v6_test.ok b/tests/lib/ippool_v6_test.ok
new file mode 100644
index 0000000..19ea4d1
--- /dev/null
+++ b/tests/lib/ippool_v6_test.ok
@@ -0,0 +1,257 @@
+testing pool for prefix 2001:DB8::/56, flags=0x0, blacklist_size=0, expected_size=256
+allocated address 2001:db8::
+allocated address 2001:db8:0:1::
+allocated address 2001:db8:0:2::
+allocated address 2001:db8:0:3::
+allocated address 2001:db8:0:4::
+allocated address 2001:db8:0:5::
+allocated address 2001:db8:0:6::
+allocated address 2001:db8:0:7::
+allocated address 2001:db8:0:8::
+allocated address 2001:db8:0:9::
+allocated address 2001:db8:0:a::
+allocated address 2001:db8:0:b::
+allocated address 2001:db8:0:c::
+allocated address 2001:db8:0:d::
+allocated address 2001:db8:0:e::
+allocated address 2001:db8:0:f::
+allocated address 2001:db8:0:10::
+allocated address 2001:db8:0:11::
+allocated address 2001:db8:0:12::
+allocated address 2001:db8:0:13::
+allocated address 2001:db8:0:14::
+allocated address 2001:db8:0:15::
+allocated address 2001:db8:0:16::
+allocated address 2001:db8:0:17::
+allocated address 2001:db8:0:18::
+allocated address 2001:db8:0:19::
+allocated address 2001:db8:0:1a::
+allocated address 2001:db8:0:1b::
+allocated address 2001:db8:0:1c::
+allocated address 2001:db8:0:1d::
+allocated address 2001:db8:0:1e::
+allocated address 2001:db8:0:1f::
+allocated address 2001:db8:0:20::
+allocated address 2001:db8:0:21::
+allocated address 2001:db8:0:22::
+allocated address 2001:db8:0:23::
+allocated address 2001:db8:0:24::
+allocated address 2001:db8:0:25::
+allocated address 2001:db8:0:26::
+allocated address 2001:db8:0:27::
+allocated address 2001:db8:0:28::
+allocated address 2001:db8:0:29::
+allocated address 2001:db8:0:2a::
+allocated address 2001:db8:0:2b::
+allocated address 2001:db8:0:2c::
+allocated address 2001:db8:0:2d::
+allocated address 2001:db8:0:2e::
+allocated address 2001:db8:0:2f::
+allocated address 2001:db8:0:30::
+allocated address 2001:db8:0:31::
+allocated address 2001:db8:0:32::
+allocated address 2001:db8:0:33::
+allocated address 2001:db8:0:34::
+allocated address 2001:db8:0:35::
+allocated address 2001:db8:0:36::
+allocated address 2001:db8:0:37::
+allocated address 2001:db8:0:38::
+allocated address 2001:db8:0:39::
+allocated address 2001:db8:0:3a::
+allocated address 2001:db8:0:3b::
+allocated address 2001:db8:0:3c::
+allocated address 2001:db8:0:3d::
+allocated address 2001:db8:0:3e::
+allocated address 2001:db8:0:3f::
+allocated address 2001:db8:0:40::
+allocated address 2001:db8:0:41::
+allocated address 2001:db8:0:42::
+allocated address 2001:db8:0:43::
+allocated address 2001:db8:0:44::
+allocated address 2001:db8:0:45::
+allocated address 2001:db8:0:46::
+allocated address 2001:db8:0:47::
+allocated address 2001:db8:0:48::
+allocated address 2001:db8:0:49::
+allocated address 2001:db8:0:4a::
+allocated address 2001:db8:0:4b::
+allocated address 2001:db8:0:4c::
+allocated address 2001:db8:0:4d::
+allocated address 2001:db8:0:4e::
+allocated address 2001:db8:0:4f::
+allocated address 2001:db8:0:50::
+allocated address 2001:db8:0:51::
+allocated address 2001:db8:0:52::
+allocated address 2001:db8:0:53::
+allocated address 2001:db8:0:54::
+allocated address 2001:db8:0:55::
+allocated address 2001:db8:0:56::
+allocated address 2001:db8:0:57::
+allocated address 2001:db8:0:58::
+allocated address 2001:db8:0:59::
+allocated address 2001:db8:0:5a::
+allocated address 2001:db8:0:5b::
+allocated address 2001:db8:0:5c::
+allocated address 2001:db8:0:5d::
+allocated address 2001:db8:0:5e::
+allocated address 2001:db8:0:5f::
+allocated address 2001:db8:0:60::
+allocated address 2001:db8:0:61::
+allocated address 2001:db8:0:62::
+allocated address 2001:db8:0:63::
+allocated address 2001:db8:0:64::
+allocated address 2001:db8:0:65::
+allocated address 2001:db8:0:66::
+allocated address 2001:db8:0:67::
+allocated address 2001:db8:0:68::
+allocated address 2001:db8:0:69::
+allocated address 2001:db8:0:6a::
+allocated address 2001:db8:0:6b::
+allocated address 2001:db8:0:6c::
+allocated address 2001:db8:0:6d::
+allocated address 2001:db8:0:6e::
+allocated address 2001:db8:0:6f::
+allocated address 2001:db8:0:70::
+allocated address 2001:db8:0:71::
+allocated address 2001:db8:0:72::
+allocated address 2001:db8:0:73::
+allocated address 2001:db8:0:74::
+allocated address 2001:db8:0:75::
+allocated address 2001:db8:0:76::
+allocated address 2001:db8:0:77::
+allocated address 2001:db8:0:78::
+allocated address 2001:db8:0:79::
+allocated address 2001:db8:0:7a::
+allocated address 2001:db8:0:7b::
+allocated address 2001:db8:0:7c::
+allocated address 2001:db8:0:7d::
+allocated address 2001:db8:0:7e::
+allocated address 2001:db8:0:7f::
+allocated address 2001:db8:0:80::
+allocated address 2001:db8:0:81::
+allocated address 2001:db8:0:82::
+allocated address 2001:db8:0:83::
+allocated address 2001:db8:0:84::
+allocated address 2001:db8:0:85::
+allocated address 2001:db8:0:86::
+allocated address 2001:db8:0:87::
+allocated address 2001:db8:0:88::
+allocated address 2001:db8:0:89::
+allocated address 2001:db8:0:8a::
+allocated address 2001:db8:0:8b::
+allocated address 2001:db8:0:8c::
+allocated address 2001:db8:0:8d::
+allocated address 2001:db8:0:8e::
+allocated address 2001:db8:0:8f::
+allocated address 2001:db8:0:90::
+allocated address 2001:db8:0:91::
+allocated address 2001:db8:0:92::
+allocated address 2001:db8:0:93::
+allocated address 2001:db8:0:94::
+allocated address 2001:db8:0:95::
+allocated address 2001:db8:0:96::
+allocated address 2001:db8:0:97::
+allocated address 2001:db8:0:98::
+allocated address 2001:db8:0:99::
+allocated address 2001:db8:0:9a::
+allocated address 2001:db8:0:9b::
+allocated address 2001:db8:0:9c::
+allocated address 2001:db8:0:9d::
+allocated address 2001:db8:0:9e::
+allocated address 2001:db8:0:9f::
+allocated address 2001:db8:0:a0::
+allocated address 2001:db8:0:a1::
+allocated address 2001:db8:0:a2::
+allocated address 2001:db8:0:a3::
+allocated address 2001:db8:0:a4::
+allocated address 2001:db8:0:a5::
+allocated address 2001:db8:0:a6::
+allocated address 2001:db8:0:a7::
+allocated address 2001:db8:0:a8::
+allocated address 2001:db8:0:a9::
+allocated address 2001:db8:0:aa::
+allocated address 2001:db8:0:ab::
+allocated address 2001:db8:0:ac::
+allocated address 2001:db8:0:ad::
+allocated address 2001:db8:0:ae::
+allocated address 2001:db8:0:af::
+allocated address 2001:db8:0:b0::
+allocated address 2001:db8:0:b1::
+allocated address 2001:db8:0:b2::
+allocated address 2001:db8:0:b3::
+allocated address 2001:db8:0:b4::
+allocated address 2001:db8:0:b5::
+allocated address 2001:db8:0:b6::
+allocated address 2001:db8:0:b7::
+allocated address 2001:db8:0:b8::
+allocated address 2001:db8:0:b9::
+allocated address 2001:db8:0:ba::
+allocated address 2001:db8:0:bb::
+allocated address 2001:db8:0:bc::
+allocated address 2001:db8:0:bd::
+allocated address 2001:db8:0:be::
+allocated address 2001:db8:0:bf::
+allocated address 2001:db8:0:c0::
+allocated address 2001:db8:0:c1::
+allocated address 2001:db8:0:c2::
+allocated address 2001:db8:0:c3::
+allocated address 2001:db8:0:c4::
+allocated address 2001:db8:0:c5::
+allocated address 2001:db8:0:c6::
+allocated address 2001:db8:0:c7::
+allocated address 2001:db8:0:c8::
+allocated address 2001:db8:0:c9::
+allocated address 2001:db8:0:ca::
+allocated address 2001:db8:0:cb::
+allocated address 2001:db8:0:cc::
+allocated address 2001:db8:0:cd::
+allocated address 2001:db8:0:ce::
+allocated address 2001:db8:0:cf::
+allocated address 2001:db8:0:d0::
+allocated address 2001:db8:0:d1::
+allocated address 2001:db8:0:d2::
+allocated address 2001:db8:0:d3::
+allocated address 2001:db8:0:d4::
+allocated address 2001:db8:0:d5::
+allocated address 2001:db8:0:d6::
+allocated address 2001:db8:0:d7::
+allocated address 2001:db8:0:d8::
+allocated address 2001:db8:0:d9::
+allocated address 2001:db8:0:da::
+allocated address 2001:db8:0:db::
+allocated address 2001:db8:0:dc::
+allocated address 2001:db8:0:dd::
+allocated address 2001:db8:0:de::
+allocated address 2001:db8:0:df::
+allocated address 2001:db8:0:e0::
+allocated address 2001:db8:0:e1::
+allocated address 2001:db8:0:e2::
+allocated address 2001:db8:0:e3::
+allocated address 2001:db8:0:e4::
+allocated address 2001:db8:0:e5::
+allocated address 2001:db8:0:e6::
+allocated address 2001:db8:0:e7::
+allocated address 2001:db8:0:e8::
+allocated address 2001:db8:0:e9::
+allocated address 2001:db8:0:ea::
+allocated address 2001:db8:0:eb::
+allocated address 2001:db8:0:ec::
+allocated address 2001:db8:0:ed::
+allocated address 2001:db8:0:ee::
+allocated address 2001:db8:0:ef::
+allocated address 2001:db8:0:f0::
+allocated address 2001:db8:0:f1::
+allocated address 2001:db8:0:f2::
+allocated address 2001:db8:0:f3::
+allocated address 2001:db8:0:f4::
+allocated address 2001:db8:0:f5::
+allocated address 2001:db8:0:f6::
+allocated address 2001:db8:0:f7::
+allocated address 2001:db8:0:f8::
+allocated address 2001:db8:0:f9::
+allocated address 2001:db8:0:fa::
+allocated address 2001:db8:0:fb::
+allocated address 2001:db8:0:fc::
+allocated address 2001:db8:0:fd::
+allocated address 2001:db8:0:fe::
+allocated address 2001:db8:0:ff::
diff --git a/tests/testsuite.at b/tests/testsuite.at
index f365f95..fa94db3 100644
--- a/tests/testsuite.at
+++ b/tests/testsuite.at
@@ -8,12 +8,25 @@ cat $abs_srcdir/lib/ippool_test.err > experr
AT_CHECK([$abs_top_builddir/tests/lib/ippool_test], [], [expout], [experr])
AT_CLEANUP
+AT_SETUP([ippool_v6])
+AT_KEYWORDS([ippool_v6])
+cat $abs_srcdir/lib/ippool_v6_test.ok > expout
+cat $abs_srcdir/lib/ippool_v6_test.err > experr
+AT_CHECK([$abs_top_builddir/tests/lib/ippool_test -v6], [], [expout], [experr])
+AT_CLEANUP
+
AT_SETUP([in46a])
AT_KEYWORDS([in46a])
cat $abs_srcdir/lib/in46a_test.ok > expout
AT_CHECK([$abs_top_builddir/tests/lib/in46a_test], [], [expout], [])
AT_CLEANUP
+AT_SETUP([in46a_v6])
+AT_KEYWORDS([in46a_v6])
+cat $abs_srcdir/lib/in46a_v6_test.ok > expout
+AT_CHECK([$abs_top_builddir/tests/lib/in46a_test -v6], [], [expout], [])
+AT_CLEANUP
+
AT_SETUP([gtpie])
AT_KEYWORDS([gtpie])
cat $abs_srcdir/gtp/gtpie_test.ok > expout