Add memory test utilities

This commit is contained in:
Drew DeVault 2016-06-19 11:25:58 -04:00
parent 698ba55860
commit e563bec64d
8 changed files with 153 additions and 10 deletions

View file

@ -1 +1,7 @@
set(test_targets "")
add_subdirectory(common)
add_custom_target(check
WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
COMMAND ${CMAKE_SOURCE_DIR}/test/runner)

View file

@ -5,15 +5,16 @@
#include "tests.h"
#include "list.h"
static void test_test(void **state) {
static void test_create_list(void **state) {
memory_behavior(WRAPPER_INVOKE_CMOCKA);
list_t *list = create_list();
free(list);
assert_true(true);
assert_int_equal(list->length, 0);
list_free(list);
}
int main() {
int main(int argc, char **argv) {
const struct CMUnitTest tests[] = {
cmocka_unit_test(test_test),
cmocka_unit_test(test_create_list),
};
return cmocka_run_group_tests(tests, NULL, NULL);
return cmocka_run_group_tests(tests, reset_mem_wrappers, NULL);
}

11
test/runner Executable file
View file

@ -0,0 +1,11 @@
#!/usr/bin/bash
tests=$(find . -type f -name "*_test")
ret=0
for test in $tests
do
printf 'Running %s\n' $(basename $test)
$test
ret+=$?
done
exit $ret

74
test/util.c Normal file
View file

@ -0,0 +1,74 @@
#include <stdbool.h>
#include "tests.h"
void *__real_malloc(size_t size);
void __real_free(void *ptr);
void *__real_calloc(size_t nmemb, size_t size);
void *__real_realloc(void *ptr, size_t size);
enum wrapper_behavior _memory_behavior = WRAPPER_INVOKE_REAL;
int reset_mem_wrappers(void **state) {
_memory_behavior = WRAPPER_INVOKE_REAL;
return 0;
}
void memory_behavior(enum wrapper_behavior behavior) {
_memory_behavior = behavior;
}
void *__wrap_malloc(size_t size) {
switch (_memory_behavior) {
case WRAPPER_INVOKE_CMOCKA:
return test_malloc(size);
case WRAPPER_DO_ASSERTIONS:
check_expected(size);
return mock_type(void *);
case WRAPPER_INVOKE_REAL:
default:
return __real_malloc(size);
}
}
void __wrap_free(void *ptr) {
switch (_memory_behavior) {
case WRAPPER_INVOKE_CMOCKA:
test_free(ptr);
break;
case WRAPPER_DO_ASSERTIONS:
check_expected_ptr(ptr);
break;
case WRAPPER_INVOKE_REAL:
default:
__real_free(ptr);
break;
}
}
void *__wrap_calloc(size_t nmemb, size_t size) {
switch (_memory_behavior) {
case WRAPPER_INVOKE_CMOCKA:
return test_calloc(nmemb, size);
case WRAPPER_DO_ASSERTIONS:
check_expected(nmemb);
check_expected(size);
return mock_type(void *);
case WRAPPER_INVOKE_REAL:
default:
return __real_calloc(nmemb, size);
}
}
void *__wrap_realloc(void *ptr, size_t size) {
switch (_memory_behavior) {
case WRAPPER_INVOKE_CMOCKA:
return test_realloc(ptr, size);
case WRAPPER_DO_ASSERTIONS:
check_expected_ptr(ptr);
check_expected(size);
return mock_type(void *);
case WRAPPER_INVOKE_REAL:
default:
return __real_realloc(ptr, size);
}
}