diff options
-rw-r--r-- | src/Makefile.am | 8 | ||||
-rw-r--r-- | src/configure.ac | 2 | ||||
-rw-r--r-- | src/tests/common.c | 82 | ||||
-rw-r--r-- | src/tests/common_check.c | 109 |
4 files changed, 115 insertions, 86 deletions
diff --git a/src/Makefile.am b/src/Makefile.am index 9da383b5..4bedaa9e 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -453,15 +453,15 @@ sss_groupshow_LDADD = \ ################# # Feature Tests # ################# -if HAVE_CHECK noinst_LTLIBRARIES += \ libsss_test_common.la libsss_test_common_la_SOURCES = \ tests/common.c -libsss_test_common_la_LIBADD = \ - $(SSSD_LIBS) \ - $(CHECK_LIBS) + +if HAVE_CHECK +libsss_test_common_la_SOURCES += \ + tests/common_check.c sysdb_tests_DEPENDENCIES = \ $(ldblib_LTLIBRARIES) diff --git a/src/configure.ac b/src/configure.ac index d7a7a770..da718eef 100644 --- a/src/configure.ac +++ b/src/configure.ac @@ -135,6 +135,8 @@ AC_CHECK_HEADERS([sasl/sasl.h],,AC_MSG_ERROR([Could not find SASL headers])) PKG_CHECK_MODULES([CHECK], [check >= 0.9.5], [have_check=1], [have_check=]) if test x$have_check = x; then AC_MSG_WARN([Without the 'CHECK' libraries, you will be unable to run all tests in the 'make check' suite]) +else + AC_CHECK_HEADERS([check.h],,AC_MSG_ERROR([Could not find CHECK headers])) fi AC_PATH_PROG([DOXYGEN], [doxygen], [false]) diff --git a/src/tests/common.c b/src/tests/common.c index 4ae1f490..cd13507c 100644 --- a/src/tests/common.c +++ b/src/tests/common.c @@ -22,92 +22,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */ -#include <check.h> #include <stdio.h> - #include "tests/common.h" -#include "util/dlinklist.h" - -TALLOC_CTX *global_talloc_context = NULL; #include "util/util.h" -struct size_snapshot { - struct size_snapshot *prev; - struct size_snapshot *next; - - TALLOC_CTX *ctx; - size_t bytes_allocated; -}; - -static struct size_snapshot *snapshot_stack; - -void -_check_leaks(TALLOC_CTX *ctx, size_t bytes, const char *location) -{ - size_t bytes_allocated; - - bytes_allocated = talloc_total_size(ctx); - if (bytes_allocated != bytes) { - fprintf(stderr, "Leak report for %s:\n", location); - talloc_report_full(ctx, stderr); - fail("%s: memory leaks detected, %d bytes still allocated", - location, bytes_allocated - bytes); - } -} - -void -check_leaks_push(TALLOC_CTX *ctx) -{ - struct size_snapshot *snapshot; - - snapshot = talloc(NULL, struct size_snapshot); - snapshot->ctx = ctx; - snapshot->bytes_allocated = talloc_total_size(ctx); - DLIST_ADD(snapshot_stack, snapshot); -} - -void -_check_leaks_pop(TALLOC_CTX *ctx, const char *location) -{ - struct size_snapshot *snapshot; - TALLOC_CTX *old_ctx; - size_t bytes_allocated; - - if (snapshot_stack == NULL) { - fail("%s: trying to pop an empty stack"); - } - - snapshot = snapshot_stack; - DLIST_REMOVE(snapshot_stack, snapshot); - - old_ctx = snapshot->ctx; - bytes_allocated = snapshot->bytes_allocated; - - fail_if(old_ctx != ctx, "Bad push/pop order"); - - talloc_zfree(snapshot); - _check_leaks(old_ctx, bytes_allocated, location); -} - -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"); - } - check_leaks(global_talloc_context, 0); -} - void tests_set_cwd(void) { diff --git a/src/tests/common_check.c b/src/tests/common_check.c new file mode 100644 index 00000000..d845923f --- /dev/null +++ b/src/tests/common_check.c @@ -0,0 +1,109 @@ +/* + SSSD + + Common utilities for check-based tests using talloc. + + Authors: + Martin Nagy <mnagy@redhat.com> + + Copyright (C) Red Hat, Inc 2009 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include <stdio.h> +#include <check.h> +#include "tests/common.h" +#include "util/util.h" +#include "util/dlinklist.h" + +TALLOC_CTX *global_talloc_context = NULL; + + +struct size_snapshot { + struct size_snapshot *prev; + struct size_snapshot *next; + + TALLOC_CTX *ctx; + size_t bytes_allocated; +}; + +static struct size_snapshot *snapshot_stack; + +void +_check_leaks(TALLOC_CTX *ctx, size_t bytes, const char *location) +{ + size_t bytes_allocated; + + bytes_allocated = talloc_total_size(ctx); + if (bytes_allocated != bytes) { + fprintf(stderr, "Leak report for %s:\n", location); + talloc_report_full(ctx, stderr); + fail("%s: memory leaks detected, %d bytes still allocated", + location, bytes_allocated - bytes); + } +} + +void +check_leaks_push(TALLOC_CTX *ctx) +{ + struct size_snapshot *snapshot; + + snapshot = talloc(NULL, struct size_snapshot); + snapshot->ctx = ctx; + snapshot->bytes_allocated = talloc_total_size(ctx); + DLIST_ADD(snapshot_stack, snapshot); +} + +void +_check_leaks_pop(TALLOC_CTX *ctx, const char *location) +{ + struct size_snapshot *snapshot; + TALLOC_CTX *old_ctx; + size_t bytes_allocated; + + if (snapshot_stack == NULL) { + fail("%s: trying to pop an empty stack"); + } + + snapshot = snapshot_stack; + DLIST_REMOVE(snapshot_stack, snapshot); + + old_ctx = snapshot->ctx; + bytes_allocated = snapshot->bytes_allocated; + + fail_if(old_ctx != ctx, "Bad push/pop order"); + + talloc_zfree(snapshot); + _check_leaks(old_ctx, bytes_allocated, location); +} + +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"); + } + check_leaks(global_talloc_context, 0); +} |