talloc: added test suite for talloc_free_children()
authorAndrew Tridgell <tridge@samba.org>
Fri, 29 Jul 2011 01:57:07 +0000 (11:57 +1000)
committerAndrew Tridgell <tridge@samba.org>
Fri, 29 Jul 2011 09:30:13 +0000 (11:30 +0200)
this tests the fix from Simo

Autobuild-User: Andrew Tridgell <tridge@samba.org>
Autobuild-Date: Fri Jul 29 11:30:13 CEST 2011 on sn-devel-104

lib/talloc/testsuite.c

index 90417c6ade5e7b75a74fc911744f520fa58ff9ab..b038d340d1c1d7d7357f84a56eb87edc54864750 100644 (file)
@@ -1320,6 +1320,48 @@ static bool test_rusty(void)
        return true;
 }
 
+static bool test_free_children(void)
+{
+       void *root;
+       const char *p1, *p2, *name, *name2;
+
+       talloc_enable_null_tracking();
+       root = talloc_new(NULL);
+       p1 = talloc_strdup(root, "foo1");
+       p2 = talloc_strdup(p1, "foo2");
+
+       talloc_set_name(p1, "%s", "testname");
+       talloc_free_children(p1);
+       /* check its still a valid talloc ptr */
+       talloc_get_size(talloc_get_name(p1));
+       if (strcmp(talloc_get_name(p1), "testname") != 0) {
+               return false;
+       }
+
+       talloc_set_name(p1, "%s", "testname");
+       name = talloc_get_name(p1);
+       talloc_free_children(p1);
+       /* check its still a valid talloc ptr */
+       talloc_get_size(talloc_get_name(p1));
+       torture_assert("name", name == talloc_get_name(p1), "name ptr changed");
+       torture_assert("namecheck", strcmp(talloc_get_name(p1), "testname") == 0,
+                      "wrong name");
+       CHECK_BLOCKS("name1", p1, 2);
+
+       /* note that this does not free the old child name */
+       talloc_set_name_const(p1, "testname2");
+       name2 = talloc_get_name(p1);
+       /* but this does */
+       talloc_free_children(p1);
+       torture_assert("namecheck", strcmp(talloc_get_name(p1), "testname2") == 0,
+                      "wrong name");
+       CHECK_BLOCKS("name1", p1, 1);
+
+       talloc_report_full(root, stdout);
+       talloc_free(root);
+       return true;
+}
+
 
 static void test_reset(void)
 {
@@ -1379,6 +1421,8 @@ bool torture_local_talloc(struct torture_context *tctx)
        ret &= test_free_ref_null_context();
        test_reset();
        ret &= test_rusty();
+       test_reset();
+       ret &= test_free_children();
 
        if (ret) {
                test_reset();