summaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
authorSumit Bose <sbose@redhat.com>2010-02-03 11:54:46 +0100
committerStephen Gallagher <sgallagh@redhat.com>2010-02-03 10:35:18 -0500
commit067fbea128ea5f6298feb37f9aaab347afd59d8a (patch)
treecdfcd2ab310a249dc510be271dfb7d7e547f3569 /server
parentf77224d2141c713afefd5f953515ad1e42dca3e5 (diff)
downloadsssd-067fbea128ea5f6298feb37f9aaab347afd59d8a.tar.gz
sssd-067fbea128ea5f6298feb37f9aaab347afd59d8a.tar.bz2
sssd-067fbea128ea5f6298feb37f9aaab347afd59d8a.zip
Make resolve and failover test work with CK_FORK=no
The leak checking code which is used by the resolve and failover tests frees talloc's autofree context which is not recommended. As a consequence the initialization of tevent failed when it was called by the second test and CF_FORK=no, because it holds some data in the autofree context. This patch introduces a global talloc context which should be uses by the test as the root of their memory hierarchy instead of NULL. This global context is used in the leak checking routines. Not all types of memory leaks can be detected by the new version , it is recommended to use valgrind or similar tools additionally.
Diffstat (limited to 'server')
-rw-r--r--server/tests/common.c9
-rw-r--r--server/tests/common.h2
-rw-r--r--server/tests/fail_over-tests.c2
-rw-r--r--server/tests/resolv-tests.c4
4 files changed, 11 insertions, 6 deletions
diff --git a/server/tests/common.c b/server/tests/common.c
index 5b341abc..dad9dc66 100644
--- a/server/tests/common.c
+++ b/server/tests/common.c
@@ -47,7 +47,7 @@ _check_leaks(TALLOC_CTX *ctx, size_t bytes, const char *location)
bytes_allocated = talloc_total_size(ctx);
if (bytes_allocated != bytes) {
fprintf(stderr, "Leak report for %s:\n", location);
- talloc_report_full(NULL, stderr);
+ talloc_report_full(ctx, stderr);
fail("%s: memory leaks detected, %d bytes still allocated",
location, bytes_allocated - bytes);
}
@@ -91,14 +91,17 @@ void
leak_check_setup(void)
{
talloc_enable_null_tracking();
+ global_talloc_context = talloc_new(NULL);
+ fail_unless(global_talloc_context != NULL, "talloc_new failed");
+ check_leaks_push(global_talloc_context);
}
void
leak_check_teardown(void)
{
+ check_leaks_pop(global_talloc_context);
if (snapshot_stack != NULL) {
fail("Exiting with a non-empty stack");
}
- talloc_free(talloc_autofree_context());
- check_leaks(NULL, 0);
+ check_leaks(global_talloc_context, 0);
}
diff --git a/server/tests/common.h b/server/tests/common.h
index 39a2b8e0..44e2d9af 100644
--- a/server/tests/common.h
+++ b/server/tests/common.h
@@ -3,6 +3,8 @@
#include <talloc.h>
+TALLOC_CTX *global_talloc_context;
+
#define check_leaks(ctx, bytes) _check_leaks((ctx), (bytes), __location__)
void _check_leaks(TALLOC_CTX *ctx,
size_t bytes,
diff --git a/server/tests/fail_over-tests.c b/server/tests/fail_over-tests.c
index c3e9dfe5..e794f03b 100644
--- a/server/tests/fail_over-tests.c
+++ b/server/tests/fail_over-tests.c
@@ -62,7 +62,7 @@ setup_test(void)
struct test_ctx *ctx;
int ret;
- ctx = talloc_zero(NULL, struct test_ctx);
+ ctx = talloc_zero(global_talloc_context, struct test_ctx);
fail_if(ctx == NULL, "Could not allocate memory for test context");
ctx->ev = tevent_context_init(ctx);
diff --git a/server/tests/resolv-tests.c b/server/tests/resolv-tests.c
index c1b32781..04b9e2e7 100644
--- a/server/tests/resolv-tests.c
+++ b/server/tests/resolv-tests.c
@@ -60,7 +60,7 @@ static int setup_resolv_test(struct resolv_test_ctx **ctx)
struct resolv_test_ctx *test_ctx;
int ret;
- test_ctx = talloc_zero(NULL, struct resolv_test_ctx);
+ test_ctx = talloc_zero(global_talloc_context, struct resolv_test_ctx);
if (test_ctx == NULL) {
fail("Could not allocate memory for test context");
return ENOMEM;
@@ -109,7 +109,7 @@ START_TEST(test_copy_hostent)
sizeof(addr_1), addr_list
};
- ctx = talloc_new(NULL);
+ ctx = talloc_new(global_talloc_context);
fail_if(ctx == NULL);
check_leaks_push(ctx);