diff options
author | Martin Willi <martin@revosec.ch> | 2014-03-25 14:14:37 +0100 |
---|---|---|
committer | Martin Willi <martin@revosec.ch> | 2014-04-01 14:28:55 +0200 |
commit | 70889c42a6f6fd1709b074c5468d3ce1669f1aa3 (patch) | |
tree | 0629412594ee0c52854340f7fc5658c202d02637 /src | |
parent | 4e8ff4f010f95ca5d6e36e5e0659d4a7d0f61d35 (diff) | |
download | strongswan-70889c42a6f6fd1709b074c5468d3ce1669f1aa3.tar.bz2 strongswan-70889c42a6f6fd1709b074c5468d3ce1669f1aa3.tar.xz |
unit-tests: Catch timeouts during test runner deinit function
The test runner deinit function often cancels all threads from the pool. This
operation might hang on error conditions, hence we should include that hook in
the test timeout to fail properly.
Diffstat (limited to 'src')
-rw-r--r-- | src/libstrongswan/tests/test_runner.c | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/src/libstrongswan/tests/test_runner.c b/src/libstrongswan/tests/test_runner.c index 6bb1b290c..5ec4198e7 100644 --- a/src/libstrongswan/tests/test_runner.c +++ b/src/libstrongswan/tests/test_runner.c @@ -315,7 +315,7 @@ static void sum_leaks(report_data_t *data, int count, size_t bytes, * Do library cleanup and optionally check for memory leaks */ static bool post_test(test_runner_init_t init, bool check_leaks, - array_t *failures, char *name, int i) + array_t *failures, char *name, int i, int *leaks) { report_data_t data = { .failures = failures, @@ -325,7 +325,15 @@ static bool post_test(test_runner_init_t init, bool check_leaks, if (init) { - init(FALSE); + if (test_restore_point()) + { + init(FALSE); + } + else + { + library_deinit(); + return FALSE; + } } if (check_leaks && lib->leak_detective) { @@ -335,7 +343,8 @@ static bool post_test(test_runner_init_t init, bool check_leaks, } library_deinit(); - return data.leaks != 0; + *leaks = data.leaks; + return TRUE; } /** @@ -407,7 +416,8 @@ static bool run_case(test_case_t *tcase, test_runner_init_t init) { if (pre_test(init)) { - bool ok = FALSE, leaks = FALSE; + bool ok = FALSE; + int leaks = 0; test_setup_timeout(tcase->timeout); @@ -424,9 +434,11 @@ static bool run_case(test_case_t *tcase, test_runner_init_t init) { call_fixture(tcase, FALSE); } - } - leaks = post_test(init, ok, failures, tfun->name, i); + if (!post_test(init, ok, failures, tfun->name, i, &leaks)) + { + ok = FALSE; + } test_setup_timeout(0); |