2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-08-22 18:19:42 +00:00

IPv6 case to isc_netaddr_masktoprefixlen tests

Unit test for isc_netaddr_masktoprefixlen were missing IPv6 mask cases.
Add those and few other IPv4 cases. Also, the test is refactored in
order to make it easy to add new cases.
This commit is contained in:
Colin Vidal 2025-03-26 10:44:11 +01:00
parent f7161a263a
commit ad2c3fa4f7

View File

@ -58,43 +58,52 @@ ISC_RUN_TEST_IMPL(netaddr_isnetzero) {
/* test isc_netaddr_masktoprefixlen() calculates correct prefix lengths */
ISC_RUN_TEST_IMPL(netaddr_masktoprefixlen) {
struct in_addr na_a;
struct in_addr na_b;
struct in_addr na_c;
struct in_addr na_d;
isc_netaddr_t ina_a;
isc_netaddr_t ina_b;
isc_netaddr_t ina_c;
isc_netaddr_t ina_d;
struct {
int family;
const char *addr;
unsigned int len;
} tests[] = { { AF_INET, "0.0.0.0", 0 },
{ AF_INET, "255.255.255.254", 31 },
{ AF_INET, "255.255.255.255", 32 },
{ AF_INET, "255.255.255.0", 24 },
{ AF_INET, "255.128.0.0", 9 },
{ AF_INET, "255.192.0.0", 10 },
{ AF_INET6, "ffff::", 16 },
{ AF_INET6, "ffff:ffff::", 32 },
{ AF_INET6, "ffff:ffff:ffff::", 48 },
{ AF_INET6, "ffff:ffff:ffff:ffff::", 64 },
{ AF_INET6, "ffff:ffff:ffff:ffff:ffff::", 80 } };
for (size_t i = 0; i < ARRAY_SIZE(tests); i++) {
isc_netaddr_t ina;
unsigned int plen;
isc_result_t result;
UNUSED(state);
switch (tests[i].family) {
case AF_INET: {
struct in_addr na;
assert_true(inet_pton(AF_INET, "0.0.0.0", &na_a) >= 0);
assert_true(inet_pton(AF_INET, "255.255.255.254", &na_b) >= 0);
assert_true(inet_pton(AF_INET, "255.255.255.255", &na_c) >= 0);
assert_true(inet_pton(AF_INET, "255.255.255.0", &na_d) >= 0);
assert_true(inet_pton(AF_INET, tests[i].addr, &na) >=
0);
isc_netaddr_fromin(&ina, &na);
break;
}
case AF_INET6: {
struct in6_addr na6;
isc_netaddr_fromin(&ina_a, &na_a);
isc_netaddr_fromin(&ina_b, &na_b);
isc_netaddr_fromin(&ina_c, &na_c);
isc_netaddr_fromin(&ina_d, &na_d);
assert_true(inet_pton(AF_INET6, tests[i].addr, &na6) >=
0);
isc_netaddr_fromin6(&ina, &na6);
break;
}
default:
assert_true(false);
}
assert_int_equal(isc_netaddr_masktoprefixlen(&ina_a, &plen),
ISC_R_SUCCESS);
assert_int_equal(plen, 0);
assert_int_equal(isc_netaddr_masktoprefixlen(&ina_b, &plen),
ISC_R_SUCCESS);
assert_int_equal(plen, 31);
assert_int_equal(isc_netaddr_masktoprefixlen(&ina_c, &plen),
ISC_R_SUCCESS);
assert_int_equal(plen, 32);
assert_int_equal(isc_netaddr_masktoprefixlen(&ina_d, &plen),
ISC_R_SUCCESS);
assert_int_equal(plen, 24);
result = isc_netaddr_masktoprefixlen(&ina, &plen);
assert_int_equal(result, ISC_R_SUCCESS);
assert_int_equal(plen, tests[i].len);
}
}
/* check multicast addresses are detected properly */