From 33429735f35214da5ce2e35a8fe2fa63a0dae708 Mon Sep 17 00:00:00 2001 From: Sascha Steinbiss Date: Wed, 27 Apr 2022 23:12:26 +0200 Subject: [PATCH] util: add unit tests for CIDRFromMask() (cherry picked from commit 5ec6f3ba51c449f7588afac0820ad57b1cea5de9) --- src/runmode-unittests.c | 1 + src/util-cidr.c | 59 +++++++++++++++++++++++++++++++++++++++++ src/util-cidr.h | 2 ++ 3 files changed, 62 insertions(+) diff --git a/src/runmode-unittests.c b/src/runmode-unittests.c index 500287cec9..357d30889c 100644 --- a/src/runmode-unittests.c +++ b/src/runmode-unittests.c @@ -208,6 +208,7 @@ static void RegisterUnittests(void) SourceWinDivertRegisterTests(); #endif SCProtoNameRegisterTests(); + UtilCIDRTests(); } #endif diff --git a/src/util-cidr.c b/src/util-cidr.c index bdab3063c2..92f1d70876 100644 --- a/src/util-cidr.c +++ b/src/util-cidr.c @@ -25,6 +25,7 @@ #include "suricata-common.h" #include "util-cidr.h" +#include "util-unittest.h" /** \brief turn 32 bit mask into CIDR * \retval cidr cidr value or -1 if the netmask can't be expressed as cidr @@ -94,3 +95,61 @@ void CIDRGetIPv6(int cidr, struct in6_addr *in6) in6->s6_addr[i] = in6->s6_addr[i] >> 1; } } + +#ifdef UNITTESTS + +static int CIDRFromMaskTest01(void) +{ + struct in_addr in; + int v = inet_pton(AF_INET, "255.255.255.0", &in); + + FAIL_IF(v <= 0); + FAIL_IF_NOT(24 == CIDRFromMask(in.s_addr)); + + PASS; +} + +static int CIDRFromMaskTest02(void) +{ + struct in_addr in; + int v = inet_pton(AF_INET, "255.255.0.42", &in); + + FAIL_IF(v <= 0); + FAIL_IF_NOT(-1 == CIDRFromMask(in.s_addr)); + + PASS; +} + +static int CIDRFromMaskTest03(void) +{ + struct in_addr in; + int v = inet_pton(AF_INET, "0.0.0.0", &in); + + FAIL_IF(v <= 0); + FAIL_IF_NOT(0 == CIDRFromMask(in.s_addr)); + + PASS; +} + +static int CIDRFromMaskTest04(void) +{ + struct in_addr in; + int v = inet_pton(AF_INET, "255.255.255.255", &in); + + FAIL_IF(v <= 0); + FAIL_IF_NOT(32 == CIDRFromMask(in.s_addr)); + + PASS; +} + +#endif /* UNITTESTS */ + +void UtilCIDRTests(void) +{ +#ifdef UNITTESTS + UtRegisterTest("CIDRFromMaskTest01", CIDRFromMaskTest01); + UtRegisterTest("CIDRFromMaskTest02", CIDRFromMaskTest02); + UtRegisterTest("CIDRFromMaskTest03", CIDRFromMaskTest03); + UtRegisterTest("CIDRFromMaskTest04", CIDRFromMaskTest04); +#endif /* UNITTESTS */ +} diff --git a/src/util-cidr.h b/src/util-cidr.h index a5d4a94bbb..745f67823c 100644 --- a/src/util-cidr.h +++ b/src/util-cidr.h @@ -28,5 +28,7 @@ int CIDRFromMask(uint32_t netmask); uint32_t CIDRGet(int); void CIDRGetIPv6(int cidr, struct in6_addr *in6); +void UtilCIDRTests(void); + #endif /* __UTIL_NETMASK_H__ */ -- 2.47.2