]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
detect-csum: redo tests
authorVictor Julien <victor@inliniac.net>
Sun, 16 Oct 2016 08:44:33 +0000 (10:44 +0200)
committerVictor Julien <victor@inliniac.net>
Thu, 16 Feb 2017 09:35:38 +0000 (10:35 +0100)
src/detect-csum.c

index 8d9fcf5959cfe8eb6016dcd6553d393d7a38ab26..ed5c17554f0927a900d7473d60a4811407d2a17e 100644 (file)
@@ -886,622 +886,107 @@ static void DetectICMPV6CsumFree(void *ptr)
 /* ---------------------------------- Unit Tests --------------------------- */
 
 #ifdef UNITTESTS
+#include "detect-engine.h"
 
-static int DetectCsumIPV4ValidArgsTestParse01(void)
-{
-    Signature s;
-    int result = 0;
-    SigMatch *temp = NULL;
-
-    memset(&s, 0, sizeof(Signature));
-
-    result = (DetectIPV4CsumSetup(NULL, &s, "\"valid\"") == 0);
-    result &= (DetectIPV4CsumSetup(NULL, &s, "\"invalid\"") == 0);
-    result &= (DetectIPV4CsumSetup(NULL, &s, "\"vaLid\"") == 0);
-    result &= (DetectIPV4CsumSetup(NULL, &s, "\"VALID\"") == 0);
-    result &= (DetectIPV4CsumSetup(NULL, &s, "\"iNvaLid\"") == 0);
-
-    while (s.sm_lists[DETECT_SM_LIST_MATCH] != NULL) {
-        DetectIPV4CsumFree(s.sm_lists[DETECT_SM_LIST_MATCH]->ctx);
-        temp = s.sm_lists[DETECT_SM_LIST_MATCH];
-        s.sm_lists[DETECT_SM_LIST_MATCH] = s.sm_lists[DETECT_SM_LIST_MATCH]->next;
-        SCFree(temp);
-    }
-
-    return result;
-}
-
-static int DetectCsumIPV4InValidArgsTestParse02(void)
-{
-    Signature s;
-    int result = -1;
-    SigMatch *temp = NULL;
-
-    memset(&s, 0, sizeof(Signature));
-
-    result = (DetectIPV4CsumSetup(NULL, &s, "vaid") == -1);
-    result &= (DetectIPV4CsumSetup(NULL, &s, "invaalid") == -1);
-    result &= (DetectIPV4CsumSetup(NULL, &s, "vaLiid") == -1);
-    result &= (DetectIPV4CsumSetup(NULL, &s, "VALieD") == -1);
-    result &= (DetectIPV4CsumSetup(NULL, &s, "iNvamid") == -1);
-
-    while (s.sm_lists[DETECT_SM_LIST_MATCH] != NULL) {
-        DetectIPV4CsumFree(s.sm_lists[DETECT_SM_LIST_MATCH]->ctx);
-        temp = s.sm_lists[DETECT_SM_LIST_MATCH];
-        s.sm_lists[DETECT_SM_LIST_MATCH] = s.sm_lists[DETECT_SM_LIST_MATCH]->next;
-        SCFree(temp);
-    }
-
-    return result;
-}
-
-static int DetectCsumIPV4ValidArgsTestParse03(void)
-{
-    Signature s;
-    DetectCsumData *cd = NULL;
-    int result = 0;
-    SigMatch *temp = NULL;
-
-    memset(&s, 0, sizeof(Signature));
-
-    result = (DetectIPV4CsumSetup(NULL, &s, "valid") == 0);
-
-    while (s.sm_lists[DETECT_SM_LIST_MATCH] != NULL) {
-        if (s.sm_lists[DETECT_SM_LIST_MATCH]->ctx != NULL) {
-            cd = (DetectCsumData *)s.sm_lists[DETECT_SM_LIST_MATCH]->ctx;
-            result &= (cd->valid == 1);
-        }
-        DetectIPV4CsumFree(s.sm_lists[DETECT_SM_LIST_MATCH]->ctx);
-        temp = s.sm_lists[DETECT_SM_LIST_MATCH];
-        s.sm_lists[DETECT_SM_LIST_MATCH] = s.sm_lists[DETECT_SM_LIST_MATCH]->next;
-        SCFree(temp);
-    }
-    s.sm_lists[DETECT_SM_LIST_MATCH] = NULL;
-
-    result &= (DetectIPV4CsumSetup(NULL, &s, "INVALID") == 0);
-
-    if (s.sm_lists[DETECT_SM_LIST_MATCH] != NULL) {
-        if (s.sm_lists[DETECT_SM_LIST_MATCH]->ctx != NULL) {
-            cd = (DetectCsumData *)s.sm_lists[DETECT_SM_LIST_MATCH]->ctx;
-            result &= (cd->valid == 0);
-        }
-        DetectIPV4CsumFree(s.sm_lists[DETECT_SM_LIST_MATCH]->ctx);
-        temp = s.sm_lists[DETECT_SM_LIST_MATCH];
-        s.sm_lists[DETECT_SM_LIST_MATCH] = s.sm_lists[DETECT_SM_LIST_MATCH]->next;
-        SCFree(temp);
-    }
-
-    return result;
-}
-
-static int DetectCsumICMPV4ValidArgsTestParse01(void)
-{
-    Signature s;
-    int result = 0;
-    SigMatch *temp = NULL;
-
-    memset(&s, 0, sizeof(Signature));
-
-    result = (DetectICMPV4CsumSetup(NULL, &s, "valid") == 0);
-    result &= (DetectICMPV4CsumSetup(NULL, &s, "invalid") == 0);
-    result &= (DetectICMPV4CsumSetup(NULL, &s, "vaLid") == 0);
-    result &= (DetectICMPV4CsumSetup(NULL, &s, "VALID") == 0);
-    result &= (DetectICMPV4CsumSetup(NULL, &s, "iNvaLid") == 0);
-
-    while (s.sm_lists[DETECT_SM_LIST_MATCH] != NULL) {
-        DetectICMPV4CsumFree(s.sm_lists[DETECT_SM_LIST_MATCH]->ctx);
-        temp = s.sm_lists[DETECT_SM_LIST_MATCH];
-        s.sm_lists[DETECT_SM_LIST_MATCH] = s.sm_lists[DETECT_SM_LIST_MATCH]->next;
-        SCFree(temp);
-    }
-
-    return result;
-}
-
-static int DetectCsumICMPV4InValidArgsTestParse02(void)
-{
-    Signature s;
-    int result = -1;
-    SigMatch *temp = NULL;
-
-    memset(&s, 0, sizeof(Signature));
-
-    result = (DetectICMPV4CsumSetup(NULL, &s, "vaid") == -1);
-    result &= (DetectICMPV4CsumSetup(NULL, &s, "invaalid") == -1);
-    result &= (DetectICMPV4CsumSetup(NULL, &s, "vaLiid") == -1);
-    result &= (DetectICMPV4CsumSetup(NULL, &s, "VALieD") == -1);
-    result &= (DetectICMPV4CsumSetup(NULL, &s, "iNvamid") == -1);
-
-    while (s.sm_lists[DETECT_SM_LIST_MATCH] != NULL) {
-        DetectICMPV4CsumFree(s.sm_lists[DETECT_SM_LIST_MATCH]->ctx);
-        temp = s.sm_lists[DETECT_SM_LIST_MATCH];
-        s.sm_lists[DETECT_SM_LIST_MATCH] = s.sm_lists[DETECT_SM_LIST_MATCH]->next;
-        SCFree(temp);
-    }
-
-    return result;
-}
-
-static int DetectCsumICMPV4ValidArgsTestParse03(void)
-{
-    Signature s;
-    DetectCsumData *cd = NULL;
-    int result = 0;
-    SigMatch *temp = NULL;
-
-    memset(&s, 0, sizeof(Signature));
-
-    result = (DetectICMPV4CsumSetup(NULL, &s, "valid") == 0);
-
-    while (s.sm_lists[DETECT_SM_LIST_MATCH] != NULL) {
-        if (s.sm_lists[DETECT_SM_LIST_MATCH]->ctx != NULL) {
-            cd = (DetectCsumData *)s.sm_lists[DETECT_SM_LIST_MATCH]->ctx;
-            result &= (cd->valid == 1);
-        }
-        DetectICMPV4CsumFree(s.sm_lists[DETECT_SM_LIST_MATCH]->ctx);
-        temp = s.sm_lists[DETECT_SM_LIST_MATCH];
-        s.sm_lists[DETECT_SM_LIST_MATCH] = s.sm_lists[DETECT_SM_LIST_MATCH]->next;
-        SCFree(temp);
-    }
-    s.sm_lists[DETECT_SM_LIST_MATCH] = NULL;
-
-    result &= (DetectICMPV4CsumSetup(NULL, &s, "INVALID") == 0);
-
-    if (s.sm_lists[DETECT_SM_LIST_MATCH] != NULL) {
-        if (s.sm_lists[DETECT_SM_LIST_MATCH]->ctx != NULL) {
-            cd = (DetectCsumData *)s.sm_lists[DETECT_SM_LIST_MATCH]->ctx;
-            result &= (cd->valid == 0);
-        }
-        DetectICMPV4CsumFree(s.sm_lists[DETECT_SM_LIST_MATCH]->ctx);
-        temp = s.sm_lists[DETECT_SM_LIST_MATCH];
-        s.sm_lists[DETECT_SM_LIST_MATCH] = s.sm_lists[DETECT_SM_LIST_MATCH]->next;
-        SCFree(temp);
-    }
-
-    return result;
-}
-
-static int DetectCsumTCPV4ValidArgsTestParse01(void)
-{
-    Signature s;
-    int result = 0;
-    SigMatch *temp = NULL;
-
-    memset(&s, 0, sizeof(Signature));
-
-    result = (DetectTCPV4CsumSetup(NULL, &s, "valid") == 0);
-    result &= (DetectTCPV4CsumSetup(NULL, &s, "invalid") == 0);
-    result &= (DetectTCPV4CsumSetup(NULL, &s, "vaLid") == 0);
-    result &= (DetectTCPV4CsumSetup(NULL, &s, "VALID") == 0);
-    result &= (DetectTCPV4CsumSetup(NULL, &s, "iNvaLid") == 0);
-
-    while (s.sm_lists[DETECT_SM_LIST_MATCH] != NULL) {
-        DetectTCPV4CsumFree(s.sm_lists[DETECT_SM_LIST_MATCH]->ctx);
-        temp = s.sm_lists[DETECT_SM_LIST_MATCH];
-        s.sm_lists[DETECT_SM_LIST_MATCH] = s.sm_lists[DETECT_SM_LIST_MATCH]->next;
-        SCFree(temp);
-    }
-
-    return result;
-}
-
-static int DetectCsumTCPV4InValidArgsTestParse02(void)
-{
-    Signature s;
-    int result = -1;
-    SigMatch *temp = NULL;
-
-    memset(&s, 0, sizeof(Signature));
-
-    result = (DetectTCPV4CsumSetup(NULL, &s, "vaid") == -1);
-    result &= (DetectTCPV4CsumSetup(NULL, &s, "invaalid") == -1);
-    result &= (DetectTCPV4CsumSetup(NULL, &s, "vaLiid") == -1);
-    result &= (DetectTCPV4CsumSetup(NULL, &s, "VALieD") == -1);
-    result &= (DetectTCPV4CsumSetup(NULL, &s, "iNvamid") == -1);
-
-    while (s.sm_lists[DETECT_SM_LIST_MATCH] != NULL) {
-        DetectTCPV4CsumFree(s.sm_lists[DETECT_SM_LIST_MATCH]->ctx);
-        temp = s.sm_lists[DETECT_SM_LIST_MATCH];
-        s.sm_lists[DETECT_SM_LIST_MATCH] = s.sm_lists[DETECT_SM_LIST_MATCH]->next;
-        SCFree(temp);
-    }
-
-    return result;
-}
-
-static int DetectCsumTCPV4ValidArgsTestParse03(void)
-{
-    Signature s;
-    DetectCsumData *cd = NULL;
-    int result = 0;
-    SigMatch *temp = NULL;
-
-    memset(&s, 0, sizeof(Signature));
-
-    result = (DetectTCPV4CsumSetup(NULL, &s, "valid") == 0);
-
-    while (s.sm_lists[DETECT_SM_LIST_MATCH] != NULL) {
-        if (s.sm_lists[DETECT_SM_LIST_MATCH]->ctx != NULL) {
-            cd = (DetectCsumData *)s.sm_lists[DETECT_SM_LIST_MATCH]->ctx;
-            result &= (cd->valid == 1);
-        }
-        DetectTCPV4CsumFree(s.sm_lists[DETECT_SM_LIST_MATCH]->ctx);
-        temp = s.sm_lists[DETECT_SM_LIST_MATCH];
-        s.sm_lists[DETECT_SM_LIST_MATCH] = s.sm_lists[DETECT_SM_LIST_MATCH]->next;
-        SCFree(temp);
-    }
-    s.sm_lists[DETECT_SM_LIST_MATCH] = NULL;
-
-    result &= (DetectTCPV4CsumSetup(NULL, &s, "INVALID") == 0);
-
-    if (s.sm_lists[DETECT_SM_LIST_MATCH] != NULL) {
-        if (s.sm_lists[DETECT_SM_LIST_MATCH]->ctx != NULL) {
-            cd = (DetectCsumData *)s.sm_lists[DETECT_SM_LIST_MATCH]->ctx;
-            result &= (cd->valid == 0);
-        }
-        DetectTCPV4CsumFree(s.sm_lists[DETECT_SM_LIST_MATCH]->ctx);
-        temp = s.sm_lists[DETECT_SM_LIST_MATCH];
-        s.sm_lists[DETECT_SM_LIST_MATCH] = s.sm_lists[DETECT_SM_LIST_MATCH]->next;
-        SCFree(temp);
-    }
-
-    return result;
-}
-
-static int DetectCsumUDPV4ValidArgsTestParse01(void)
-{
-    Signature s;
-    int result = 0;
-    SigMatch *temp = NULL;
-
-    memset(&s, 0, sizeof(Signature));
-
-    result = (DetectUDPV4CsumSetup(NULL, &s, "valid") == 0);
-    result &= (DetectUDPV4CsumSetup(NULL, &s, "invalid") == 0);
-    result &= (DetectUDPV4CsumSetup(NULL, &s, "vaLid") == 0);
-    result &= (DetectUDPV4CsumSetup(NULL, &s, "VALID") == 0);
-    result &= (DetectUDPV4CsumSetup(NULL, &s, "iNvaLid") == 0);
-
-    while (s.sm_lists[DETECT_SM_LIST_MATCH] != NULL) {
-        DetectUDPV4CsumFree(s.sm_lists[DETECT_SM_LIST_MATCH]->ctx);
-        temp = s.sm_lists[DETECT_SM_LIST_MATCH];
-        s.sm_lists[DETECT_SM_LIST_MATCH] = s.sm_lists[DETECT_SM_LIST_MATCH]->next;
-        SCFree(temp);
-    }
-
-    return result;
-}
-
-static int DetectCsumUDPV4InValidArgsTestParse02(void)
-{
-    Signature s;
-    int result = -1;
-    SigMatch *temp = NULL;
-
-    memset(&s, 0, sizeof(Signature));
-
-    result = (DetectUDPV4CsumSetup(NULL, &s, "vaid") == -1);
-    result &= (DetectUDPV4CsumSetup(NULL, &s, "invaalid") == -1);
-    result &= (DetectUDPV4CsumSetup(NULL, &s, "vaLiid") == -1);
-    result &= (DetectUDPV4CsumSetup(NULL, &s, "VALieD") == -1);
-    result &= (DetectUDPV4CsumSetup(NULL, &s, "iNvamid") == -1);
-
-    while (s.sm_lists[DETECT_SM_LIST_MATCH] != NULL) {
-        DetectUDPV4CsumFree(s.sm_lists[DETECT_SM_LIST_MATCH]->ctx);
-        temp = s.sm_lists[DETECT_SM_LIST_MATCH];
-        s.sm_lists[DETECT_SM_LIST_MATCH] = s.sm_lists[DETECT_SM_LIST_MATCH]->next;
-        SCFree(temp);
-    }
-
-    return result;
-}
-
-static int DetectCsumUDPV4ValidArgsTestParse03(void)
-{
-    Signature s;
-    DetectCsumData *cd = NULL;
-    int result = 0;
-    SigMatch *temp = NULL;
-
-    memset(&s, 0, sizeof(Signature));
-
-    result = (DetectUDPV4CsumSetup(NULL, &s, "valid") == 0);
-
-    while (s.sm_lists[DETECT_SM_LIST_MATCH] != NULL) {
-        if (s.sm_lists[DETECT_SM_LIST_MATCH]->ctx != NULL) {
-            cd = (DetectCsumData *)s.sm_lists[DETECT_SM_LIST_MATCH]->ctx;
-            result &= (cd->valid == 1);
-        }
-        DetectUDPV4CsumFree(s.sm_lists[DETECT_SM_LIST_MATCH]->ctx);
-        temp = s.sm_lists[DETECT_SM_LIST_MATCH];
-        s.sm_lists[DETECT_SM_LIST_MATCH] = s.sm_lists[DETECT_SM_LIST_MATCH]->next;
-        SCFree(temp);
-    }
-    s.sm_lists[DETECT_SM_LIST_MATCH] = NULL;
-
-    result &= (DetectUDPV4CsumSetup(NULL, &s, "INVALID") == 0);
-
-    if (s.sm_lists[DETECT_SM_LIST_MATCH] != NULL) {
-        if (s.sm_lists[DETECT_SM_LIST_MATCH]->ctx != NULL) {
-            cd = (DetectCsumData *)s.sm_lists[DETECT_SM_LIST_MATCH]->ctx;
-            result &= (cd->valid == 0);
-        }
-        DetectUDPV4CsumFree(s.sm_lists[DETECT_SM_LIST_MATCH]->ctx);
-        temp = s.sm_lists[DETECT_SM_LIST_MATCH];
-        s.sm_lists[DETECT_SM_LIST_MATCH] = s.sm_lists[DETECT_SM_LIST_MATCH]->next;
-        SCFree(temp);
-    }
-
-    return result;
+#define mystr(s) #s
+#define TEST1(kwstr) {\
+    DetectEngineCtx *de_ctx = DetectEngineCtxInit();\
+    FAIL_IF_NULL(de_ctx);\
+    de_ctx->flags = DE_QUIET;\
+    \
+    Signature *s = DetectEngineAppendSig(de_ctx, "alert ip any any -> any any ("mystr(kwstr)"-csum:valid; sid:1;)");\
+    FAIL_IF_NULL(s);\
+    s = DetectEngineAppendSig(de_ctx, "alert ip any any -> any any ("mystr(kwstr)"-csum:invalid; sid:2;)");\
+    FAIL_IF_NULL(s);\
+    s = DetectEngineAppendSig(de_ctx, "alert ip any any -> any any ("mystr(kwstr)"-csum:vaLid; sid:3;)");\
+    FAIL_IF_NULL(s);\
+    s = DetectEngineAppendSig(de_ctx, "alert ip any any -> any any ("mystr(kwstr)"-csum:VALID; sid:4;)");\
+    FAIL_IF_NULL(s);\
+    s = DetectEngineAppendSig(de_ctx, "alert ip any any -> any any ("mystr(kwstr)"-csum:iNvaLid; sid:5;)");\
+    FAIL_IF_NULL(s);\
+    DetectEngineCtxFree(de_ctx);\
 }
 
-static int DetectCsumTCPV6ValidArgsTestParse01(void)
-{
-    Signature s;
-    int result = 0;
-    SigMatch *temp = NULL;
-
-    memset(&s, 0, sizeof(Signature));
-
-    result = (DetectTCPV6CsumSetup(NULL, &s, "valid") == 0);
-    result &= (DetectTCPV6CsumSetup(NULL, &s, "invalid") == 0);
-    result &= (DetectTCPV6CsumSetup(NULL, &s, "vaLid") == 0);
-    result &= (DetectTCPV6CsumSetup(NULL, &s, "VALID") == 0);
-    result &= (DetectTCPV6CsumSetup(NULL, &s, "iNvaLid") == 0);
-
-    while (s.sm_lists[DETECT_SM_LIST_MATCH] != NULL) {
-        DetectTCPV6CsumFree(s.sm_lists[DETECT_SM_LIST_MATCH]->ctx);
-        temp = s.sm_lists[DETECT_SM_LIST_MATCH];
-        s.sm_lists[DETECT_SM_LIST_MATCH] = s.sm_lists[DETECT_SM_LIST_MATCH]->next;
-        SCFree(temp);
-    }
-
-    return result;
-}
 
-static int DetectCsumTCPV6InValidArgsTestParse02(void)
+static int DetectCsumValidArgsTestParse01(void)
 {
-    Signature s;
-    int result = -1;
-    SigMatch *temp = NULL;
-
-    memset(&s, 0, sizeof(Signature));
-
-    result = (DetectTCPV6CsumSetup(NULL, &s, "vaid") == -1);
-    result &= (DetectTCPV6CsumSetup(NULL, &s, "invaalid") == -1);
-    result &= (DetectTCPV6CsumSetup(NULL, &s, "vaLiid") == -1);
-    result &= (DetectTCPV6CsumSetup(NULL, &s, "VALieD") == -1);
-    result &= (DetectTCPV6CsumSetup(NULL, &s, "iNvamid") == -1);
-
-    while (s.sm_lists[DETECT_SM_LIST_MATCH] != NULL) {
-        DetectTCPV6CsumFree(s.sm_lists[DETECT_SM_LIST_MATCH]->ctx);
-        temp = s.sm_lists[DETECT_SM_LIST_MATCH];
-        s.sm_lists[DETECT_SM_LIST_MATCH] = s.sm_lists[DETECT_SM_LIST_MATCH]->next;
-        SCFree(temp);
-    }
-
-    return result;
+    TEST1(ipv4);
+    TEST1(tcpv4);
+    TEST1(tcpv6);
+    TEST1(udpv4);
+    TEST1(udpv6);
+    TEST1(icmpv4);
+    TEST1(icmpv6);
+    PASS;
 }
-
-static int DetectCsumTCPV6ValidArgsTestParse03(void)
-{
-    Signature s;
-    DetectCsumData *cd = NULL;
-    int result = 0;
-    SigMatch *temp = NULL;
-
-    memset(&s, 0, sizeof(Signature));
-
-    result = (DetectTCPV6CsumSetup(NULL, &s, "valid") == 0);
-
-    while (s.sm_lists[DETECT_SM_LIST_MATCH] != NULL) {
-        if (s.sm_lists[DETECT_SM_LIST_MATCH]->ctx != NULL) {
-            cd = (DetectCsumData *)s.sm_lists[DETECT_SM_LIST_MATCH]->ctx;
-            result &= (cd->valid == 1);
-        }
-        DetectTCPV6CsumFree(s.sm_lists[DETECT_SM_LIST_MATCH]->ctx);
-        temp = s.sm_lists[DETECT_SM_LIST_MATCH];
-        s.sm_lists[DETECT_SM_LIST_MATCH] = s.sm_lists[DETECT_SM_LIST_MATCH]->next;
-        SCFree(temp);
-    }
-    s.sm_lists[DETECT_SM_LIST_MATCH] = NULL;
-
-    result &= (DetectTCPV6CsumSetup(NULL, &s, "INVALID") == 0);
-
-    if (s.sm_lists[DETECT_SM_LIST_MATCH] != NULL) {
-        if (s.sm_lists[DETECT_SM_LIST_MATCH]->ctx != NULL) {
-            cd = (DetectCsumData *)s.sm_lists[DETECT_SM_LIST_MATCH]->ctx;
-            result &= (cd->valid == 0);
-        }
-        DetectTCPV6CsumFree(s.sm_lists[DETECT_SM_LIST_MATCH]->ctx);
-        temp = s.sm_lists[DETECT_SM_LIST_MATCH];
-        s.sm_lists[DETECT_SM_LIST_MATCH] = s.sm_lists[DETECT_SM_LIST_MATCH]->next;
-        SCFree(temp);
-    }
-
-    return result;
+#undef TEST1
+
+#define TEST2(kwstr) { \
+    DetectEngineCtx *de_ctx = DetectEngineCtxInit();\
+    FAIL_IF_NULL(de_ctx);\
+    Signature *s = DetectEngineAppendSig(de_ctx, "alert ip any any -> any any ("mystr(kwstr)"-csum:vaid; sid:1;)");\
+    FAIL_IF(s);\
+    s = DetectEngineAppendSig(de_ctx, "alert ip any any -> any any ("mystr(kwstr)"-csum:invaalid; sid:2;)");\
+    FAIL_IF(s);\
+    s = DetectEngineAppendSig(de_ctx, "alert ip any any -> any any ("mystr(kwstr)"-csum:vaLiid; sid:3;)");\
+    FAIL_IF(s);\
+    s = DetectEngineAppendSig(de_ctx, "alert ip any any -> any any ("mystr(kwstr)"-csum:VALieD; sid:4;)");\
+    FAIL_IF(s);\
+    s = DetectEngineAppendSig(de_ctx, "alert ip any any -> any any ("mystr(kwstr)"-csum:iNvamid; sid:5;)");\
+    FAIL_IF(s);\
+    DetectEngineCtxFree(de_ctx);\
 }
 
-static int DetectCsumUDPV6ValidArgsTestParse01(void)
+int DetectCsumInvalidArgsTestParse02(void)
 {
-    Signature s;
-    int result = 0;
-    SigMatch *temp = NULL;
-
-    memset(&s, 0, sizeof(Signature));
-
-    result = (DetectUDPV6CsumSetup(NULL, &s, "valid") == 0);
-    result &= (DetectUDPV6CsumSetup(NULL, &s, "invalid") == 0);
-    result &= (DetectUDPV6CsumSetup(NULL, &s, "vaLid") == 0);
-    result &= (DetectUDPV6CsumSetup(NULL, &s, "VALID") == 0);
-    result &= (DetectUDPV6CsumSetup(NULL, &s, "iNvaLid") == 0);
-
-    while (s.sm_lists[DETECT_SM_LIST_MATCH] != NULL) {
-        DetectUDPV6CsumFree(s.sm_lists[DETECT_SM_LIST_MATCH]->ctx);
-        temp = s.sm_lists[DETECT_SM_LIST_MATCH];
-        s.sm_lists[DETECT_SM_LIST_MATCH] = s.sm_lists[DETECT_SM_LIST_MATCH]->next;
-        SCFree(temp);
-    }
-
-    return result;
+    TEST2(ipv4);
+    TEST2(tcpv4);
+    TEST2(tcpv6);
+    TEST2(udpv4);
+    TEST2(udpv6);
+    TEST2(icmpv4);
+    TEST2(icmpv6);
+    PASS;
 }
-
-static int DetectCsumUDPV6InValidArgsTestParse02(void)
-{
-    Signature s;
-    int result = -1;
-    SigMatch *temp = NULL;
-
-    memset(&s, 0, sizeof(Signature));
-
-    result = (DetectUDPV6CsumSetup(NULL, &s, "vaid") == -1);
-    result &= (DetectUDPV6CsumSetup(NULL, &s, "invaalid") == -1);
-    result &= (DetectUDPV6CsumSetup(NULL, &s, "vaLiid") == -1);
-    result &= (DetectUDPV6CsumSetup(NULL, &s, "VALieD") == -1);
-    result &= (DetectUDPV6CsumSetup(NULL, &s, "iNvamid") == -1);
-
-    while (s.sm_lists[DETECT_SM_LIST_MATCH] != NULL) {
-        DetectUDPV6CsumFree(s.sm_lists[DETECT_SM_LIST_MATCH]->ctx);
-        temp = s.sm_lists[DETECT_SM_LIST_MATCH];
-        s.sm_lists[DETECT_SM_LIST_MATCH] = s.sm_lists[DETECT_SM_LIST_MATCH]->next;
-        SCFree(temp);
-    }
-
-    return result;
+#undef TEST2
+
+#define TEST3(kwstr, kwtype) { \
+    DetectEngineCtx *de_ctx = DetectEngineCtxInit();\
+    FAIL_IF_NULL(de_ctx);\
+    Signature *s = DetectEngineAppendSig(de_ctx, "alert ip any any -> any any ("mystr(kwstr)"-csum:valid; sid:1;)");\
+    FAIL_IF_NULL(s);\
+    SigMatch *sm = SigMatchGetLastSMFromLists(s, 2, (kwtype), s->sm_lists[DETECT_SM_LIST_MATCH]);\
+    FAIL_IF_NULL(sm);\
+    FAIL_IF_NULL(sm->ctx);\
+    FAIL_IF_NOT(((DetectCsumData *)sm->ctx)->valid == 1);\
+    s = DetectEngineAppendSig(de_ctx, "alert ip any any -> any any ("mystr(kwstr)"-csum:INVALID; sid:2;)");\
+    FAIL_IF_NULL(s);\
+    sm = SigMatchGetLastSMFromLists(s, 2, (kwtype), s->sm_lists[DETECT_SM_LIST_MATCH]);\
+    FAIL_IF_NULL(sm);\
+    FAIL_IF_NULL(sm->ctx);\
+    FAIL_IF_NOT(((DetectCsumData *)sm->ctx)->valid == 0);\
+    DetectEngineCtxFree(de_ctx);\
 }
 
-static int DetectCsumUDPV6ValidArgsTestParse03(void)
+int DetectCsumValidArgsTestParse03(void)
 {
-    Signature s;
-    DetectCsumData *cd = NULL;
-    int result = 0;
-    SigMatch *temp = NULL;
-
-    memset(&s, 0, sizeof(Signature));
-
-    result = (DetectUDPV6CsumSetup(NULL, &s, "valid") == 0);
-
-    while (s.sm_lists[DETECT_SM_LIST_MATCH] != NULL) {
-        if (s.sm_lists[DETECT_SM_LIST_MATCH]->ctx != NULL) {
-            cd = (DetectCsumData *)s.sm_lists[DETECT_SM_LIST_MATCH]->ctx;
-            result &= (cd->valid == 1);
-        }
-        DetectUDPV6CsumFree(s.sm_lists[DETECT_SM_LIST_MATCH]->ctx);
-        temp = s.sm_lists[DETECT_SM_LIST_MATCH];
-        s.sm_lists[DETECT_SM_LIST_MATCH] = s.sm_lists[DETECT_SM_LIST_MATCH]->next;
-        SCFree(temp);
-    }
-    s.sm_lists[DETECT_SM_LIST_MATCH] = NULL;
-
-    result &= (DetectUDPV6CsumSetup(NULL, &s, "INVALID") == 0);
-
-    if (s.sm_lists[DETECT_SM_LIST_MATCH] != NULL) {
-        if (s.sm_lists[DETECT_SM_LIST_MATCH]->ctx != NULL) {
-            cd = (DetectCsumData *)s.sm_lists[DETECT_SM_LIST_MATCH]->ctx;
-            result &= (cd->valid == 0);
-        }
-        DetectUDPV6CsumFree(s.sm_lists[DETECT_SM_LIST_MATCH]->ctx);
-        temp = s.sm_lists[DETECT_SM_LIST_MATCH];
-        s.sm_lists[DETECT_SM_LIST_MATCH] = s.sm_lists[DETECT_SM_LIST_MATCH]->next;
-        SCFree(temp);
-    }
-
-    return result;
-}
-
-static int DetectCsumICMPV6ValidArgsTestParse01(void)
-{
-    Signature s;
-    int result = 0;
-    SigMatch *temp = NULL;
-
-    memset(&s, 0, sizeof(Signature));
-
-    result = (DetectICMPV6CsumSetup(NULL, &s, "valid") == 0);
-    result &= (DetectICMPV6CsumSetup(NULL, &s, "invalid") == 0);
-    result &= (DetectICMPV6CsumSetup(NULL, &s, "vaLid") == 0);
-    result &= (DetectICMPV6CsumSetup(NULL, &s, "VALID") == 0);
-    result &= (DetectICMPV6CsumSetup(NULL, &s, "iNvaLid") == 0);
-
-    while (s.sm_lists[DETECT_SM_LIST_MATCH] != NULL) {
-        DetectICMPV6CsumFree(s.sm_lists[DETECT_SM_LIST_MATCH]->ctx);
-        temp = s.sm_lists[DETECT_SM_LIST_MATCH];
-        s.sm_lists[DETECT_SM_LIST_MATCH] = s.sm_lists[DETECT_SM_LIST_MATCH]->next;
-        SCFree(temp);
-    }
-
-    return result;
-}
-
-static int DetectCsumICMPV6InValidArgsTestParse02(void)
-{
-    Signature s;
-    int result = -1;
-    SigMatch *temp = NULL;
-
-    memset(&s, 0, sizeof(Signature));
-
-    result = (DetectICMPV6CsumSetup(NULL, &s, "vaid") == -1);
-    result &= (DetectICMPV6CsumSetup(NULL, &s, "invaalid") == -1);
-    result &= (DetectICMPV6CsumSetup(NULL, &s, "vaLiid") == -1);
-    result &= (DetectICMPV6CsumSetup(NULL, &s, "VALieD") == -1);
-    result &= (DetectICMPV6CsumSetup(NULL, &s, "iNvamid") == -1);
-
-    while (s.sm_lists[DETECT_SM_LIST_MATCH] != NULL) {
-        DetectICMPV6CsumFree(s.sm_lists[DETECT_SM_LIST_MATCH]->ctx);
-        temp = s.sm_lists[DETECT_SM_LIST_MATCH];
-        s.sm_lists[DETECT_SM_LIST_MATCH] = s.sm_lists[DETECT_SM_LIST_MATCH]->next;
-        SCFree(temp);
-    }
-
-    return result;
-}
-
-static int DetectCsumICMPV6ValidArgsTestParse03(void)
-{
-    Signature s;
-    DetectCsumData *cd = NULL;
-    int result = 0;
-    SigMatch *temp = NULL;
-
-    memset(&s, 0, sizeof(Signature));
-
-    result = (DetectICMPV6CsumSetup(NULL, &s, "valid") == 0);
-
-    while (s.sm_lists[DETECT_SM_LIST_MATCH] != NULL) {
-        if (s.sm_lists[DETECT_SM_LIST_MATCH]->ctx != NULL) {
-            cd = (DetectCsumData *)s.sm_lists[DETECT_SM_LIST_MATCH]->ctx;
-            result &= (cd->valid == 1);
-        }
-        DetectICMPV6CsumFree(s.sm_lists[DETECT_SM_LIST_MATCH]->ctx);
-        temp = s.sm_lists[DETECT_SM_LIST_MATCH];
-        s.sm_lists[DETECT_SM_LIST_MATCH] = s.sm_lists[DETECT_SM_LIST_MATCH]->next;
-        SCFree(temp);
-    }
-    s.sm_lists[DETECT_SM_LIST_MATCH] = NULL;
-
-    result &= (DetectICMPV6CsumSetup(NULL, &s, "INVALID") == 0);
-
-    if (s.sm_lists[DETECT_SM_LIST_MATCH] != NULL) {
-        if (s.sm_lists[DETECT_SM_LIST_MATCH]->ctx != NULL) {
-            cd = (DetectCsumData *)s.sm_lists[DETECT_SM_LIST_MATCH]->ctx;
-            result &= (cd->valid == 0);
-        }
-        DetectICMPV6CsumFree(s.sm_lists[DETECT_SM_LIST_MATCH]->ctx);
-        temp = s.sm_lists[DETECT_SM_LIST_MATCH];
-        s.sm_lists[DETECT_SM_LIST_MATCH] = s.sm_lists[DETECT_SM_LIST_MATCH]->next;
-        SCFree(temp);
-    }
-
-    return result;
+    TEST3(ipv4, DETECT_IPV4_CSUM);
+    TEST3(tcpv4, DETECT_TCPV4_CSUM);
+    TEST3(tcpv6, DETECT_TCPV6_CSUM);
+    TEST3(udpv4, DETECT_UDPV4_CSUM);
+    TEST3(udpv6, DETECT_UDPV6_CSUM);
+    TEST3(icmpv4, DETECT_ICMPV4_CSUM);
+    TEST3(icmpv6, DETECT_ICMPV6_CSUM);
+    PASS;
 }
+#undef TEST3
+#undef mystr
 
 #include "detect-engine.h"
 #include "stream-tcp.h"
 
 static int DetectCsumICMPV6Test01(void)
 {
-    int result = 0;
     DetectEngineCtx *de_ctx = NULL;
     Signature *s = NULL;
     ThreadVars tv;
@@ -1509,10 +994,7 @@ static int DetectCsumICMPV6Test01(void)
     DecodeThreadVars dtv;
 
     Packet *p = PacketGetFromAlloc();
-    if (p == NULL) {
-        printf("failure PacketGetFromAlloc\n");
-        goto end;
-    }
+    FAIL_IF_NULL(p);
 
     uint8_t pkt[] = {
         0x00, 0x30, 0x18, 0xa8, 0x7c, 0x23, 0x2c, 0x41,
@@ -1540,19 +1022,13 @@ static int DetectCsumICMPV6Test01(void)
     FlowInitConfig(FLOW_QUIET);
 
     de_ctx = DetectEngineCtxInit();
-    if (de_ctx == NULL) {
-        printf("DetectEngineCtxInit failure\n");
-        goto end;
-    }
+    FAIL_IF_NULL(de_ctx);
     de_ctx->mpm_matcher = mpm_default_matcher;
     de_ctx->flags |= DE_QUIET;
 
     s = de_ctx->sig_list = SigInit(de_ctx, "alert ip any any -> any any "
                                    "(icmpv6-csum:valid; sid:1;)");
-    if (s == NULL) {
-        printf("SigInit failed\n");
-        goto end;
-    }
+    FAIL_IF_NULL(s);
     SigGroupBuild(de_ctx);
 
     DecodeEthernet(&tv, &dtv, p, GET_PKT_DATA(p), GET_PKT_LEN(p), NULL);
@@ -1561,28 +1037,16 @@ static int DetectCsumICMPV6Test01(void)
 
     SigMatchSignatures(&tv, de_ctx, det_ctx, p);
 
-    if (!PacketAlertCheck(p, 1)) {
-        printf("sig 1 didn't alert on p, but it should: ");
-        goto end;
-    }
+    FAIL_IF(!PacketAlertCheck(p, 1));
 
-    result = 1;
-
- end:
-    if (det_ctx != NULL)
-        DetectEngineThreadCtxDeinit(&tv, det_ctx);
-    if (de_ctx != NULL) {
-        SigGroupCleanup(de_ctx);
-        DetectEngineCtxFree(de_ctx);
-    }
+    DetectEngineThreadCtxDeinit(&tv, det_ctx);
+    DetectEngineCtxFree(de_ctx);
 
     StreamTcpFreeConfig(TRUE);
     PACKET_RECYCLE(p);
     FlowShutdown();
-
     SCFree(p);
-
-    return result;
+    PASS;
 }
 
 #endif /* UNITTESTS */
@@ -1590,55 +1054,16 @@ static int DetectCsumICMPV6Test01(void)
 static void DetectCsumRegisterTests(void)
 {
 #ifdef UNITTESTS
-    UtRegisterTest("DetectCsumIPV4ValidArgsTestParse01",
-                   DetectCsumIPV4ValidArgsTestParse01);
-    UtRegisterTest("DetectCsumIPV4InValidArgsTestParse02",
-                   DetectCsumIPV4InValidArgsTestParse02);
-    UtRegisterTest("DetectCsumIPV4ValidArgsTestParse03",
-                   DetectCsumIPV4ValidArgsTestParse03);
-
-    UtRegisterTest("DetectCsumICMPV4ValidArgsTestParse01",
-                   DetectCsumICMPV4ValidArgsTestParse01);
-    UtRegisterTest("DetectCsumICMPV4InValidArgsTestParse02",
-                   DetectCsumICMPV4InValidArgsTestParse02);
-    UtRegisterTest("DetectCsumICMPV4ValidArgsTestParse03",
-                   DetectCsumICMPV4ValidArgsTestParse03);
-
-    UtRegisterTest("DetectCsumTCPV4ValidArgsTestParse01",
-                   DetectCsumTCPV4ValidArgsTestParse01);
-    UtRegisterTest("DetectCsumTCPV4InValidArgsTestParse02",
-                   DetectCsumTCPV4InValidArgsTestParse02);
-    UtRegisterTest("DetectCsumTCPV4ValidArgsTestParse03",
-                   DetectCsumTCPV4ValidArgsTestParse03);
-
-    UtRegisterTest("DetectCsumUDPV4ValidArgsTestParse01",
-                   DetectCsumUDPV4ValidArgsTestParse01);
-    UtRegisterTest("DetectCsumUDPV4InValidArgsTestParse02",
-                   DetectCsumUDPV4InValidArgsTestParse02);
-    UtRegisterTest("DetectCsumUDPV4ValidArgsTestParse03",
-                   DetectCsumUDPV4ValidArgsTestParse03);
-
-    UtRegisterTest("DetectCsumUDPV6ValidArgsTestParse01",
-                   DetectCsumUDPV6ValidArgsTestParse01);
-    UtRegisterTest("DetectCsumUDPV6InValidArgsTestParse02",
-                   DetectCsumUDPV6InValidArgsTestParse02);
-    UtRegisterTest("DetectCsumUDPV6ValidArgsTestParse03",
-                   DetectCsumUDPV6ValidArgsTestParse03);
-
-    UtRegisterTest("DetectCsumTCPV6ValidArgsTestParse01",
-                   DetectCsumTCPV6ValidArgsTestParse01);
-    UtRegisterTest("DetectCsumTCPV6InValidArgsTestParse02",
-                   DetectCsumTCPV6InValidArgsTestParse02);
-    UtRegisterTest("DetectCsumTCPV6ValidArgsTestParse03",
-                   DetectCsumTCPV6ValidArgsTestParse03);
-
-    UtRegisterTest("DetectCsumICMPV6ValidArgsTestParse01",
-                   DetectCsumICMPV6ValidArgsTestParse01);
-    UtRegisterTest("DetectCsumICMPV6InValidArgsTestParse02",
-                   DetectCsumICMPV6InValidArgsTestParse02);
-    UtRegisterTest("DetectCsumICMPV6ValidArgsTestParse03",
-                   DetectCsumICMPV6ValidArgsTestParse03);
-
-    UtRegisterTest("DetectCsumICMPV6Test01", DetectCsumICMPV6Test01);
+
+    UtRegisterTest("DetectCsumValidArgsTestParse01",
+                   DetectCsumValidArgsTestParse01);
+    UtRegisterTest("DetectCsumInvalidArgsTestParse02",
+                   DetectCsumInvalidArgsTestParse02);
+    UtRegisterTest("DetectCsumValidArgsTestParse03",
+                   DetectCsumValidArgsTestParse03);
+
+    UtRegisterTest("DetectCsumICMPV6Test01",
+            DetectCsumICMPV6Test01);
+
 #endif /* UNITTESTS */
 }