aboutsummaryrefslogtreecommitdiffstats
path: root/tests/lib/ippool_test.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/lib/ippool_test.c')
-rw-r--r--tests/lib/ippool_test.c40
1 files changed, 27 insertions, 13 deletions
diff --git a/tests/lib/ippool_test.c b/tests/lib/ippool_test.c
index 1d0c3a2..04306ef 100644
--- a/tests/lib/ippool_test.c
+++ b/tests/lib/ippool_test.c
@@ -13,36 +13,46 @@
#include "../../lib/syserr.h"
-static struct ippool_t *create_pool(const char *prefix_str, unsigned int flags)
+static struct ippool_t *create_pool(const char *prefix_str, unsigned int flags, char **blacklist, size_t blacklist_size)
{
+ struct in46_prefix *blacklist_pfx;
struct ippool_t *pool;
struct in46_prefix pfx;
size_t t;
int rc;
+ blacklist_pfx = calloc(blacklist_size, sizeof(struct in46_prefix));
+ for (int i = 0; i < blacklist_size; i++) {
+ rc = ippool_aton(&blacklist_pfx[i].addr, &t, blacklist[i], 0);
+ OSMO_ASSERT(rc == 0);
+ pfx.prefixlen = t;
+ }
+
/* dynamic-only v4 */
- rc = ippool_aton(&pfx.addr, &t, prefix_str, flags);
+ rc = ippool_aton(&pfx.addr, &t, prefix_str, 0);
OSMO_ASSERT(rc == 0);
pfx.prefixlen = t;
- rc = ippool_new(&pool, &pfx, NULL, flags);
+ rc = ippool_new(&pool, &pfx, NULL, flags, blacklist_pfx, blacklist_size);
OSMO_ASSERT(rc == 0);
//ippool_printaddr(pool);
+ free(blacklist_pfx);
+
return pool;
}
-static int test_pool_size(const char *pfx, unsigned int flags, unsigned int expected_size)
+static void test_pool_size(const char *pfx, unsigned int flags, char **blacklist, size_t blacklist_size, unsigned int expected_size)
{
struct ippool_t *pool;
struct ippoolm_t *member;
struct in46_addr addr;
int i, rc, n;
- printf("testing pool for prefix %s, flags=0x%x, expected_size=%u\n", pfx, flags, expected_size);
- pool = create_pool(pfx, flags);
+ printf("testing pool for prefix %s, flags=0x%x, blacklist_size=%lu, expected_size=%u\n", pfx, flags, blacklist_size, expected_size);
+ pool = create_pool(pfx, flags, blacklist, blacklist_size);
OSMO_ASSERT(pool->listsize == expected_size);
memset(&addr, 0, sizeof(addr));
@@ -88,24 +98,28 @@ static int test_pool_size(const char *pfx, unsigned int flags, unsigned int expe
ippool_free(pool);
}
-static int test_pool_sizes(void)
+static void test_pool_sizes(void)
{
- struct ippool_t *pool;
/* 256 addresses [0..255] */
- test_pool_size("192.168.23.0/24", 0, 256);
+ test_pool_size("192.168.23.0/24", 0, NULL, 0, 256);
/* 255 addresses [1..255] */
- test_pool_size("192.168.23.0/24", IPPOOL_NONETWORK, 255);
+ test_pool_size("192.168.23.0/24", IPPOOL_NONETWORK, NULL, 0, 255);
/* 254 addresses [1..254] */
- test_pool_size("192.168.23.0/24", IPPOOL_NONETWORK | IPPOOL_NOBROADCAST, 254);
+ test_pool_size("192.168.23.0/24", IPPOOL_NONETWORK | IPPOOL_NOBROADCAST, NULL, 0, 254);
/* 65534 addresses [0.1..255.254] */
- test_pool_size("192.168.0.0/16", IPPOOL_NONETWORK | IPPOOL_NOBROADCAST, 65534);
+ 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, 256);
+ 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);
+
}
int main(int argc, char **argv)