summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ccan/rbtree/_info1
-rw-r--r--ccan/rbtree/test/run-many.c55
-rw-r--r--ccan/rbtree/test/run.c21
3 files changed, 69 insertions, 8 deletions
diff --git a/ccan/rbtree/_info b/ccan/rbtree/_info
index 4f0b0bc1..81ed5171 100644
--- a/ccan/rbtree/_info
+++ b/ccan/rbtree/_info
@@ -99,6 +99,7 @@ int main(int argc, char *argv[])
return 1;
if (strcmp(argv[1], "depends") == 0) {
+ printf("ccan/failtest\n");
printf("ccan/talloc\n");
return 0;
}
diff --git a/ccan/rbtree/test/run-many.c b/ccan/rbtree/test/run-many.c
index 75d2d01e..9ab96c82 100644
--- a/ccan/rbtree/test/run-many.c
+++ b/ccan/rbtree/test/run-many.c
@@ -3,8 +3,25 @@
#include <ccan/talloc/talloc.h>
#include <string.h>
#include <stdbool.h>
+#include <ccan/failtest/failtest_override.h>
+#include <ccan/failtest/failtest.h>
+#define NUM_ELEMS 100
-#define NUM_ELEMS 10000
+/* We want to test talloc failure paths. */
+static void *my_malloc(size_t size)
+{
+ return malloc(size);
+}
+
+static void my_free(void *ptr)
+{
+ free(ptr);
+}
+
+static void *my_realloc(void *ptr, size_t size)
+{
+ return realloc(ptr, size);
+}
static bool lookup_all(trbt_tree_t *rb, bool exist)
{
@@ -26,15 +43,25 @@ static bool lookup_all(trbt_tree_t *rb, bool exist)
static bool add_one(trbt_tree_t *rb, bool exist, unsigned int i)
{
- int *p = trbt_insert32(rb, i, talloc_memdup(rb, &i, sizeof(i)));
+ int *new = talloc_memdup(rb, &i, sizeof(i));
+ int *p;
+
+ if (!new)
+ return false;
+
+ p = trbt_insert32(rb, i, new);
if (p) {
if (!exist)
return false;
if (*p != i)
return false;
- } else
+ } else {
if (exist)
return false;
+ else
+ if (!trbt_lookup32(rb, i))
+ return false;
+ }
return true;
}
@@ -63,13 +90,27 @@ static void delete_all(trbt_tree_t *rb)
}
}
-int main(void)
+static void *ctx;
+static trbt_tree_t *rb;
+
+static void exit_test(void)
{
- trbt_tree_t *rb;
- void *ctx = talloc_strdup(NULL, "toplevel");
+ talloc_free(rb);
+ ok1(talloc_total_blocks(ctx) == 1);
+ talloc_free(ctx);
+ failtest_exit(exit_status());
+}
+int main(int argc, char *argv[])
+{
+ failtest_init(argc, argv);
+ tap_fail_callback = exit_test;
plan_tests(8);
+ ctx = talloc_strdup(NULL, "toplevel");
+
+ talloc_set_allocator(my_malloc, my_free, my_realloc);
+
rb = trbt_create(ctx, 0);
ok1(rb);
@@ -100,5 +141,5 @@ int main(void)
talloc_free(ctx);
/* This exits depending on whether all tests passed */
- return exit_status();
+ failtest_exit(exit_status());
}
diff --git a/ccan/rbtree/test/run.c b/ccan/rbtree/test/run.c
index 5f58fd05..e1ce3873 100644
--- a/ccan/rbtree/test/run.c
+++ b/ccan/rbtree/test/run.c
@@ -1,8 +1,25 @@
+#include <ccan/failtest/failtest.h>
#include <ccan/rbtree/rbtree.c>
#include <ccan/tap/tap.h>
#include <ccan/talloc/talloc.h>
#include <string.h>
+/* We want to test talloc failure paths. */
+static void *my_malloc(size_t size)
+{
+ return malloc(size);
+}
+
+static void my_free(void *ptr)
+{
+ free(ptr);
+}
+
+static void *my_realloc(void *ptr, size_t size)
+{
+ return realloc(ptr, size);
+}
+
static void *insert_callback(void *param, void *data)
{
ok1(data == param);
@@ -18,6 +35,8 @@ int main(void)
/* This is how many tests you plan to run */
plan_tests(19);
+ talloc_set_allocator(my_malloc, my_free, my_realloc);
+
rb = trbt_create(ctx, 0);
ok1(rb);
ok1(talloc_is_parent(rb, ctx));
@@ -73,5 +92,5 @@ int main(void)
talloc_free(ctx);
/* This exits depending on whether all tests passed */
- return exit_status();
+ failtest_exit(exit_status());
}