]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
add unittest for atomic operation with void *
authorAnoop Saldanha <poonaatsoc@gmail.com>
Fri, 22 Jun 2012 16:12:57 +0000 (21:42 +0530)
committerVictor Julien <victor@inliniac.net>
Tue, 26 Jun 2012 07:36:10 +0000 (09:36 +0200)
src/Makefile.am
src/detect-engine.c
src/suricata.c
src/util-atomic.c [new file with mode: 0644]
src/util-atomic.h

index 5a4d434c41aebeb3faf59e7a1d1663be8e4695ee..3508af10ccef2fdf0ebe52e0ea56403d96731c20 100644 (file)
@@ -3,7 +3,7 @@ noinst_HEADERS = action-globals.h \
     debug.h \
        flow-private.h queue.h source-nfq-prototypes.h \
        suricata-common.h threadvars.h util-binsearch.h \
-    util-atomic.h util-validate.h
+        util-validate.h
 bin_PROGRAMS = suricata
 
 AM_CPPFLAGS = -DCONFIG_DIR=\"$(e_sysconfdir)\"
@@ -180,7 +180,7 @@ decode-events.c decode-events.h \
 detect-replace.c detect-replace.h \
 util-magic.c util-magic.h \
 util-misc.c util-misc.h \
-util-atomic.h \
+util-atomic.c util-atomic.h \
 util-print.c util-print.h \
 util-fmemopen.c util-fmemopen.h \
 util-cpu.c util-cpu.h \
index 669294ea61e69e19c736149af61c09996fa4eff4..06ae57932368dbc75d22c37db7f3efe420ca4e00 100644 (file)
@@ -212,8 +212,8 @@ static void *DetectEngineLiveRuleSwap(void *arg)
             }
 
 
-            SC_ATOMIC_CAS(&slots->slot_data, SC_ATOMIC_GET(slots->slot_data),
-                          det_ctx);
+            BUG_ON(SC_ATOMIC_CAS(&slots->slot_data, SC_ATOMIC_GET(slots->slot_data),
+                                 det_ctx) == 0);;
             SCLogDebug("swapping new det_ctx with older one");
 
             slots = slots->slot_next;
index f29161e36a2310b1aca7e147b75295197ce7eebc..5a9ed6654a589b9e90580a18583f991c20aa783d 100644 (file)
@@ -1570,6 +1570,7 @@ int main(int argc, char **argv)
         DetectAddressTests();
         DetectProtoTests();
         DetectPortTests();
+        SCAtomicRegisterTests();
         if (list_unittests) {
             UtListTests(regex_arg);
         }
diff --git a/src/util-atomic.c b/src/util-atomic.c
new file mode 100644 (file)
index 0000000..de85c31
--- /dev/null
@@ -0,0 +1,67 @@
+/* Copyright (C) 2007-2012 Open Information Security Foundation
+ *
+ * You can copy, redistribute or modify this Program under the terms of
+ * the GNU General Public License version 2 as published by the Free
+ * Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * version 2 along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA.
+ */
+
+/**
+ * \file
+ *
+ * \author Anoop Saldanha <anoopsaldanha@gmail.com>
+ */
+
+#include "suricata-common.h"
+#include "suricata.h"
+#include "util-atomic.h"
+#include "util-unittest.h"
+
+static int SCAtomicTest01(void)
+{
+    int result = 0;
+    int a = 10;
+    int b = 20;
+    int *temp_int = NULL;
+
+    SC_ATOMIC_DECL_AND_INIT(void *, temp);
+
+    temp_int = SC_ATOMIC_GET(temp);
+    if (temp_int != NULL)
+        goto end;
+
+    SC_ATOMIC_CAS(&temp, SC_ATOMIC_GET(temp), &a);
+    temp_int = SC_ATOMIC_GET(temp);
+    if (temp_int == NULL)
+        goto end;
+    if (*temp_int != a)
+        goto end;
+
+    SC_ATOMIC_CAS(&temp, SC_ATOMIC_GET(temp), &b);
+    temp_int = SC_ATOMIC_GET(temp);
+    if (temp_int == NULL)
+        goto end;
+    if (*temp_int != b)
+        goto end;
+
+    result = 1;
+
+ end:
+    return result;
+}
+
+void SCAtomicRegisterTests(void)
+{
+    UtRegisterTest("SCAtomicTest01", SCAtomicTest01, 1);
+
+    return;
+}
index 4f2868e26ac54f0becc9f4fbef43a297e2e74feb..650bf7deda2e9a06736adf0522e968973a065055 100644 (file)
         })
 
 #endif /* !no atomic operations */
+
+void SCAtomicRegisterTests(void);
+
 #endif /* __UTIL_ATOMIC_H__ */