Add simple limited pool tests to test_memlimit().
authorJeremy Allison <jra@samba.org>
Tue, 27 Aug 2013 20:09:03 +0000 (13:09 -0700)
committerJeremy Allison <jra@samba.org>
Tue, 27 Aug 2013 22:44:20 +0000 (15:44 -0700)
Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Simo Sorce <idra@samba.org>
lib/talloc/testsuite.c

index d456cbb0c23a80e25bd0558cfeed02fc828a6f79..426c31a8f24d2caaf7abc3881e95ce28cb641ed4 100644 (file)
@@ -1359,6 +1359,8 @@ static bool test_memlimit(void)
 {
        void *root;
        char *l1, *l2, *l3, *l4, *l5, *t;
+       char *pool;
+       int i;
 
        printf("test: memlimit\n# MEMORY LIMITS\n");
 
@@ -1520,6 +1522,31 @@ static bool test_memlimit(void)
        talloc_report_full(root, stdout);
        talloc_free(root);
 
+       /* Test memlimits with pools. */
+       pool = talloc_pool(NULL, 10*1024);
+       torture_assert("memlimit", pool != NULL,
+               "failed: alloc should not fail due to memory limit\n");
+       talloc_set_memlimit(pool, 10*1024);
+       for (i = 0; i < 9; i++) {
+               l1 = talloc_size(pool, 1024);
+               torture_assert("memlimit", l1 != NULL,
+                       "failed: alloc should not fail due to memory limit\n");
+       }
+       /* The next alloc should fail. */
+       l2 = talloc_size(pool, 1024);
+       torture_assert("memlimit", l2 == NULL,
+                       "failed: alloc should fail due to memory limit\n");
+
+       /* Moving one of the children shouldn't change the limit,
+          as it's still inside the pool. */
+       root = talloc_new(NULL);
+       talloc_steal(root, l1);
+       l2 = talloc_size(pool, 1024);
+       torture_assert("memlimit", l2 == NULL,
+                       "failed: alloc should fail due to memory limit\n");
+
+       talloc_free(pool);
+       talloc_free(root);
        printf("success: memlimit\n");
 
        return true;