radix: add tests for Bug #5066

Bug: #5066.
pull/7018/head
Victor Julien 3 years ago
parent 6aa6e3f953
commit 89b7ac0a60

@ -2220,6 +2220,197 @@ static int SCRadixTestIPV6Removal08(void)
return result;
}
/** Bug #5066
*
* insert:
* - 100.117.241.0/25: 100.117.241.0 - 100.117.241.127
* - 100.117.241.0/26: 100.117.241.0 - 100.117.241.63
*
* check:
* - 100.117.241.64/26: 100.117.241.64 - 100.117.241.127
*/
static int SCRadixTestIPV4Bug5066(void)
{
struct sockaddr_in servaddr;
SCRadixNode *node = NULL;
SCLogDebug("setup tree");
SCRadixTree *tree = SCRadixCreateRadixTree(free, NULL);
memset(&servaddr, 0, sizeof(servaddr));
FAIL_IF(inet_pton(AF_INET, "100.117.241.0", &servaddr.sin_addr) <= 0);
SCLogDebug("add 100.117.241.0/25");
SCRadixAddKeyIPV4Netblock((uint8_t *)&servaddr.sin_addr, tree, strdup("1"), 25);
SCRadixPrintTree(tree);
SCLogDebug("find 100.117.241.0/25");
char *r = NULL;
node = SCRadixFindKeyIPV4Netblock((uint8_t *)&servaddr.sin_addr, tree, 25, (void **)&r);
FAIL_IF_NULL(node);
SCRadixPrintNodeInfo(node, 0, NULL);
SCLogDebug("add 100.117.241.0/26");
FAIL_IF(inet_pton(AF_INET, "100.117.241.0", &servaddr.sin_addr) <= 0);
SCRadixAddKeyIPV4Netblock((uint8_t *)&servaddr.sin_addr, tree, strdup("2"), 26);
SCRadixPrintTree(tree);
SCLogDebug("find 100.117.241.0/26");
node = SCRadixFindKeyIPV4Netblock((uint8_t *)&servaddr.sin_addr, tree, 26, NULL);
FAIL_IF_NULL(node);
SCRadixPrintNodeInfo(node, 0, NULL);
SCLogDebug("find 100.117.241.64/26 (should fail)");
FAIL_IF(inet_pton(AF_INET, "100.117.241.64", &servaddr.sin_addr) <= 0);
node = SCRadixFindKeyIPV4Netblock((uint8_t *)&servaddr.sin_addr, tree, 26, NULL);
FAIL_IF_NOT_NULL(node);
SCRadixPrintNodeInfo(node, 0, NULL);
SCLogDebug("add 100.117.241.64/26");
SCRadixAddKeyIPV4Netblock((uint8_t *)&servaddr.sin_addr, tree, strdup("3"), 26);
SCLogDebug("find 100.117.241.64/26 (should succeed)");
node = SCRadixFindKeyIPV4Netblock((uint8_t *)&servaddr.sin_addr, tree, 26, NULL);
FAIL_IF_NULL(node);
SCRadixPrintNodeInfo(node, 0, NULL);
SCRadixPrintTree(tree);
SCRadixReleaseRadixTree(tree);
PASS;
}
static void SCRadixTestIPV4Bug5066v2PrintData(void *d)
{
const char *s = d;
printf("%s", s);
}
static int SCRadixTestIPV4Bug5066v2(void)
{
struct sockaddr_in servaddr;
SCRadixNode *node = NULL;
SCLogDebug("setup tree");
SCRadixTree *tree = SCRadixCreateRadixTree(free, SCRadixTestIPV4Bug5066v2PrintData);
memset(&servaddr, 0, sizeof(servaddr));
FAIL_IF(inet_pton(AF_INET, "1.2.3.0", &servaddr.sin_addr) <= 0);
SCRadixAddKeyIPV4Netblock((uint8_t *)&servaddr.sin_addr, tree, strdup("1.2.3.0/24"), 24);
SCRadixPrintTree(tree);
char *r = NULL;
node = SCRadixFindKeyIPV4Netblock((uint8_t *)&servaddr.sin_addr, tree, 24, (void **)&r);
SCRadixPrintTree(tree);
FAIL_IF_NULL(node);
SCRadixPrintNodeInfo(node, 0, NULL);
FAIL_IF_NOT(strcmp(r, "1.2.3.0/24") == 0);
memset(&servaddr, 0, sizeof(servaddr));
FAIL_IF(inet_pton(AF_INET, "1.2.3.0", &servaddr.sin_addr) <= 0);
SCRadixAddKeyIPV4Netblock((uint8_t *)&servaddr.sin_addr, tree, strdup("1.2.3.0/25"), 25);
SCRadixPrintTree(tree);
r = NULL;
node = SCRadixFindKeyIPV4Netblock((uint8_t *)&servaddr.sin_addr, tree, 25, (void **)&r);
SCRadixPrintTree(tree);
FAIL_IF_NULL(node);
SCRadixPrintNodeInfo(node, 0, NULL);
FAIL_IF_NOT(strcmp(r, "1.2.3.0/25") == 0);
memset(&servaddr, 0, sizeof(servaddr));
FAIL_IF(inet_pton(AF_INET, "1.2.3.0", &servaddr.sin_addr) <= 0);
SCRadixAddKeyIPV4Netblock((uint8_t *)&servaddr.sin_addr, tree, strdup("1.2.3.0/26"), 26);
SCRadixPrintTree(tree);
r = NULL;
node = SCRadixFindKeyIPV4Netblock((uint8_t *)&servaddr.sin_addr, tree, 26, (void **)&r);
SCRadixPrintTree(tree);
FAIL_IF_NULL(node);
SCRadixPrintNodeInfo(node, 0, NULL);
FAIL_IF_NOT(strcmp(r, "1.2.3.0/26") == 0);
memset(&servaddr, 0, sizeof(servaddr));
FAIL_IF(inet_pton(AF_INET, "1.2.3.64", &servaddr.sin_addr) <= 0);
SCRadixAddKeyIPV4Netblock((uint8_t *)&servaddr.sin_addr, tree, strdup("1.2.3.64/26"), 26);
SCRadixPrintTree(tree);
r = NULL;
node = SCRadixFindKeyIPV4Netblock((uint8_t *)&servaddr.sin_addr, tree, 26, (void **)&r);
SCRadixPrintTree(tree);
FAIL_IF_NULL(node);
SCRadixPrintNodeInfo(node, 0, NULL);
FAIL_IF_NOT(strcmp(r, "1.2.3.64/26") == 0);
memset(&servaddr, 0, sizeof(servaddr));
FAIL_IF(inet_pton(AF_INET, "1.2.3.64", &servaddr.sin_addr) <= 0);
SCRadixAddKeyIPV4Netblock((uint8_t *)&servaddr.sin_addr, tree, strdup("1.2.3.64/27"), 27);
SCRadixPrintTree(tree);
r = NULL;
node = SCRadixFindKeyIPV4Netblock((uint8_t *)&servaddr.sin_addr, tree, 27, (void **)&r);
SCRadixPrintTree(tree);
FAIL_IF_NULL(node);
SCRadixPrintNodeInfo(node, 0, NULL);
FAIL_IF_NOT(strcmp(r, "1.2.3.64/27") == 0);
memset(&servaddr, 0, sizeof(servaddr));
FAIL_IF(inet_pton(AF_INET, "1.2.3.96", &servaddr.sin_addr) <= 0);
SCRadixAddKeyIPV4Netblock((uint8_t *)&servaddr.sin_addr, tree, strdup("1.2.3.96/27"), 27);
SCRadixPrintTree(tree);
r = NULL;
node = SCRadixFindKeyIPV4Netblock((uint8_t *)&servaddr.sin_addr, tree, 27, (void **)&r);
SCRadixPrintTree(tree);
FAIL_IF_NULL(node);
SCLogNotice("node:");
SCRadixPrintNodeInfo(node, 0, NULL);
FAIL_IF_NOT(strcmp(r, "1.2.3.96/27") == 0);
SCRadixReleaseRadixTree(tree);
PASS;
}
/** Bug #5066
*/
static int SCRadixTestIPV6Bug5066(void)
{
struct sockaddr_in6 servaddr;
SCRadixNode *node = NULL;
SCLogDebug("setup tree");
SCRadixTree *tree = SCRadixCreateRadixTree(free, NULL);
memset(&servaddr, 0, sizeof(servaddr));
FAIL_IF(inet_pton(AF_INET6, "2000::1:0", &servaddr.sin6_addr) <= 0);
SCLogDebug("add 2000::1:0/121");
SCRadixAddKeyIPV6Netblock((uint8_t *)&servaddr.sin6_addr, tree, strdup("1"), 121);
SCRadixPrintTree(tree);
SCLogDebug("find 2000::1:0/121");
char *r = NULL;
node = SCRadixFindKeyIPV6Netblock((uint8_t *)&servaddr.sin6_addr, tree, 121, (void **)&r);
FAIL_IF_NULL(node);
SCRadixPrintNodeInfo(node, 0, NULL);
SCLogDebug("add 2000::1:0/122");
FAIL_IF(inet_pton(AF_INET6, "2000::1:0", &servaddr.sin6_addr) <= 0);
SCRadixAddKeyIPV6Netblock((uint8_t *)&servaddr.sin6_addr, tree, strdup("2"), 122);
SCRadixPrintTree(tree);
SCLogDebug("find 2000::1:0/122");
node = SCRadixFindKeyIPV6Netblock((uint8_t *)&servaddr.sin6_addr, tree, 122, NULL);
FAIL_IF_NULL(node);
SCRadixPrintNodeInfo(node, 0, NULL);
SCLogDebug("find 2000::1:64/122 (should fail)");
FAIL_IF(inet_pton(AF_INET6, "2000::1:64", &servaddr.sin6_addr) <= 0);
node = SCRadixFindKeyIPV6Netblock((uint8_t *)&servaddr.sin6_addr, tree, 122, NULL);
FAIL_IF_NOT_NULL(node);
SCRadixPrintNodeInfo(node, 0, NULL);
SCLogDebug("add 2000::1:64/122");
SCRadixAddKeyIPV6Netblock((uint8_t *)&servaddr.sin6_addr, tree, strdup("3"), 122);
SCLogDebug("find 2000::1:64/122 (should succeed)");
node = SCRadixFindKeyIPV6Netblock((uint8_t *)&servaddr.sin6_addr, tree, 122, NULL);
FAIL_IF_NULL(node);
SCRadixPrintNodeInfo(node, 0, NULL);
SCRadixPrintTree(tree);
SCRadixReleaseRadixTree(tree);
PASS;
}
static int SCRadixTestIPV4NetblockInsertion09(void)
{
SCRadixTree *tree = NULL;
@ -4035,6 +4226,9 @@ void SCRadixRegisterTests(void)
UtRegisterTest("SCRadixTestIPV6Removal08", SCRadixTestIPV6Removal08);
UtRegisterTest("SCRadixTestIPV4NetblockInsertion09",
SCRadixTestIPV4NetblockInsertion09);
UtRegisterTest("SCRadixTestIPV4Bug5066", SCRadixTestIPV4Bug5066);
UtRegisterTest("SCRadixTestIPV4Bug5066v2", SCRadixTestIPV4Bug5066v2);
UtRegisterTest("SCRadixTestIPV6Bug5066", SCRadixTestIPV6Bug5066);
UtRegisterTest("SCRadixTestIPV4NetblockInsertion10",
SCRadixTestIPV4NetblockInsertion10);
UtRegisterTest("SCRadixTestIPV4NetblockInsertion11",

Loading…
Cancel
Save