]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
util: add unit tests for CIDRFromMask() 7449/head
authorSascha Steinbiss <satta@debian.org>
Wed, 27 Apr 2022 21:12:26 +0000 (23:12 +0200)
committerJeff Lucovsky <jeff@lucovsky.org>
Tue, 24 May 2022 19:51:21 +0000 (15:51 -0400)
(cherry picked from commit 5ec6f3ba51c449f7588afac0820ad57b1cea5de9)

src/runmode-unittests.c
src/util-cidr.c
src/util-cidr.h

index 500287cec98b098e4c403ebae7b94b6221fe04ea..357d30889c09d7e9dbd612695ea328435d3d9784 100644 (file)
@@ -208,6 +208,7 @@ static void RegisterUnittests(void)
     SourceWinDivertRegisterTests();
 #endif
     SCProtoNameRegisterTests();
+    UtilCIDRTests();
 }
 #endif
 
index bdab3063c2688b417417a38434f46bc36e443b1b..92f1d708767ab8219276032805c02a6d4b5c26b7 100644 (file)
@@ -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 */
+}
index a5d4a94bbba682436c6c42a7886a45adc76743ee..745f67823c61d28d65207b650ae926521a3df63c 100644 (file)
@@ -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__ */