Fix the test_xxx macros, and generate coredump if the test fails
authorTrond Norbye <tn202803@tor01>
Thu, 3 Dec 2009 15:22:16 +0000 (16:22 +0100)
committerTrond Norbye <tn202803@tor01>
Thu, 3 Dec 2009 15:22:16 +0000 (16:22 +0100)
tests/test.c
tests/test.h

index 920ffe5f8f5b1836ee860c8c885d3a0755c66e02..aa8501160af45afa232d89472f83f78895d1c080 100644 (file)
@@ -44,6 +44,14 @@ static const char *test_strerror(test_return_t code)
 
 }
 
+void create_core(void)
+{
+   if (getenv("LIBMEMCACHED_NO_COREDUMP") == NULL && fork() == 0)
+     abort();
+
+   abort();
+}
+
 int main(int argc, char *argv[])
 {
   test_return_t failed;
index e786e9eae35fb321e8415d3977107d1226ef2297..18da50f216bfe18fc42d5ef36761e3ab0a325402 100644 (file)
@@ -42,9 +42,38 @@ struct world_st {
 /* How we make all of this work :) */
 void get_world(world_st *world);
 
-#define test_truth(A) if (! (A)) {fprintf(stderr, "%d", __LINE__); return TEST_FAILURE;}
-#define test_false(A) if ((A)) {fprintf(stderr, "%d", __LINE__); return TEST_FAILURE;}
-#define test_strcmp(A,B) if (strcmp((A), (B))) {fprintf(stderr, "%d", __LINE__); return TEST_FAILURE;}
+void create_core(void);
+
+#define test_truth(A) \
+do \
+{ \
+  if (! (A)) { \
+    fprintf(stderr, "Assertion failed in %s:%d: %s\n", __FILE__, __LINE__, #A);\
+    create_core(); \
+    return TEST_FAILURE; \
+  } \
+} while (0)
+
+#define test_false(A) \
+do \
+{ \
+  if ((A)) { \
+    fprintf(stderr, "Assertion failed in %s:%d: %s\n", __FILE__, __LINE__, #A);\
+    create_core(); \
+    return TEST_FAILURE; \
+  } \
+} while (0)
+
+#define test_strcmp(A,B) \
+do \
+{ \
+  if (strcmp((A), (B))) \
+  { \
+    fprintf(stderr, "%d", __LINE__); \
+    create_core(); \
+    return TEST_FAILURE; \
+  } \
+} while (0)
 
 #ifdef __cplusplus
 }