]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
unittests: fail if TCP memory still in use
authorVictor Julien <victor@inliniac.net>
Sat, 7 May 2016 15:24:32 +0000 (17:24 +0200)
committerVictor Julien <victor@inliniac.net>
Thu, 20 Apr 2017 15:41:11 +0000 (17:41 +0200)
abort() so test can be analyzed.

src/stream-tcp-reassemble.c
src/stream-tcp-reassemble.h
src/stream-tcp.c
src/stream-tcp.h
src/util-unittest.c

index a907574cfebeb461495a9bdc941262567b3fddad..7b58eae68f9ccab439e2780161861432f1a3d5ff 100644 (file)
@@ -83,6 +83,11 @@ TcpSegment *StreamTcpGetSegment(ThreadVars *tv, TcpReassemblyThreadCtx *);
 void StreamTcpCreateTestPacket(uint8_t *, uint8_t, uint8_t, uint8_t);
 void StreamTcpReassemblePseudoPacketCreate(TcpStream *, Packet *, PacketQueue *);
 
+void StreamTcpReassembleInitMemuse(void)
+{
+    SC_ATOMIC_INIT(ra_memuse);
+}
+
 /**
  *  \brief  Function to Increment the memory usage counter for the TCP reassembly
  *          segments
@@ -387,7 +392,7 @@ int StreamTcpReassemblyConfig(char quiet)
 int StreamTcpReassembleInit(char quiet)
 {
     /* init the memcap/use tracker */
-    SC_ATOMIC_INIT(ra_memuse);
+    StreamTcpReassembleInitMemuse();
 
     if (StreamTcpReassemblyConfig(quiet) < 0)
         return -1;
index 38b88be14c6220625d05e71e27d5b1e521988a85..8f3a3a6803bf21367149a6cd5444d3978e1ec992 100644 (file)
@@ -75,6 +75,7 @@ typedef struct TcpReassemblyThreadCtx_ {
 
 #define OS_POLICY_DEFAULT   OS_POLICY_BSD
 
+void StreamTcpReassembleInitMemuse(void);
 int StreamTcpReassembleHandleSegment(ThreadVars *, TcpReassemblyThreadCtx *, TcpSession *, TcpStream *, Packet *, PacketQueue *);
 int StreamTcpReassembleInit(char);
 void StreamTcpReassembleFree(char);
@@ -108,6 +109,7 @@ int StreamTcpReassembleDepthReached(Packet *p);
 void StreamTcpReassembleIncrMemuse(uint64_t size);
 void StreamTcpReassembleDecrMemuse(uint64_t size);
 int StreamTcpReassembleCheckMemcap(uint32_t size);
+uint64_t StreamTcpReassembleMemuseGlobalCounter(void);
 
 void StreamTcpDisableAppLayer(Flow *f);
 int StreamTcpAppLayerIsDisabled(Flow *f);
index 07c332ff01cb6dd8c0915742ccd1e89dd9a155ff..126c7fde72cea259a1b7543ef2ffb8a7ce582ce8 100644 (file)
@@ -119,6 +119,11 @@ SC_ATOMIC_DECLARE(uint64_t, st_memuse);
 /* stream engine running in "inline" mode. */
 int stream_inline = 0;
 
+void StreamTcpInitMemuse(void)
+{
+    SC_ATOMIC_INIT(st_memuse);
+}
+
 void StreamTcpIncrMemuse(uint64_t size)
 {
     (void) SC_ATOMIC_ADD(st_memuse, size);
@@ -598,7 +603,7 @@ void StreamTcpInitConfig(char quiet)
         SCLogConfig("stream.reassembly.raw: %s", enable_raw ? "enabled" : "disabled");
 
     /* init the memcap/use tracking */
-    SC_ATOMIC_INIT(st_memuse);
+    StreamTcpInitMemuse();
     StatsRegisterGlobalCounter("tcp.memuse", StreamTcpMemuseCounter);
 
     StreamTcpReassembleInit(quiet);
index 2d0354bb797fe0f3d00a41da1798d311791cca31..98afac2737ee24a70e20010066a5586d893e9cf6 100644 (file)
@@ -103,9 +103,11 @@ void StreamTcpRegisterTests (void);
 
 void StreamTcpSessionPktFree (Packet *);
 
+void StreamTcpInitMemuse(void);
 void StreamTcpIncrMemuse(uint64_t);
 void StreamTcpDecrMemuse(uint64_t);
 int StreamTcpCheckMemcap(uint64_t);
+uint64_t StreamTcpMemuseCounter(void);
 uint64_t StreamTcpReassembleMemuseGlobalCounter(void);
 
 Packet *StreamTcpPseudoSetup(Packet *, uint8_t *, uint32_t);
index 0503a2431b0ab5818cf07ffb00108528e8646edf..9e2c6de619f712b42a05802338321d9bd7359996 100644 (file)
@@ -39,6 +39,9 @@
 #include "util-time.h"
 #include "conf.h"
 
+#include "stream-tcp.h"
+#include "stream-tcp-reassemble.h"
+
 #ifdef UNITTESTS
 
 static pcre *parse_regex;
@@ -192,6 +195,9 @@ uint32_t UtRunTests(char *regex_arg)
     int ret = 0, rcomp = 0;
     int ov[MAX_SUBSTRINGS];
 
+    StreamTcpInitMemuse();
+    StreamTcpReassembleInitMemuse();
+
     rcomp = UtRegex(regex_arg);
 
     if(rcomp == 1){
@@ -207,7 +213,19 @@ uint32_t UtRunTests(char *regex_arg)
                 TimeSetToCurrentTime();
 
                 ret = ut->TestFn();
+
+                if (StreamTcpMemuseCounter() != 0) {
+                    printf("STREAM MEMORY IN USE %"PRIu64"\n", StreamTcpMemuseCounter());
+                    ret = 0;
+                }
+
+                if (StreamTcpReassembleMemuseGlobalCounter() != 0) {
+                    printf("STREAM REASSEMBLY MEMORY IN USE %"PRIu64"\n", StreamTcpReassembleMemuseGlobalCounter());
+                    ret = 0;
+                }
+
                 printf("%s\n", ret ? "pass" : "FAILED");
+
                 if (!ret) {
                     if (unittests_fatal == 1) {
                         fprintf(stderr, "ERROR: unittest failed.\n");