diff options
author | jpadkins <jacobpadkins@gmail.com> | 2017-02-22 06:12:04 +0300 |
---|---|---|
committer | Ladar Levison <ladar@users.noreply.github.com> | 2017-02-22 10:20:38 +0300 |
commit | 014ae729605a2f7da3db9d45310ff96fca6067c5 (patch) | |
tree | 429a5051abd033c95e6f188b387d8ce827efda04 /check/magma/regression | |
parent | ddf65fb26803b233043b6dd0b6666206d9f8d70c (diff) |
Added regression test suite and reverted tests to say "MULTI THREADED"
Diffstat (limited to 'check/magma/regression')
-rw-r--r-- | check/magma/regression/regression_check.c | 73 | ||||
-rw-r--r-- | check/magma/regression/regression_check.h | 14 |
2 files changed, 87 insertions, 0 deletions
diff --git a/check/magma/regression/regression_check.c b/check/magma/regression/regression_check.c new file mode 100644 index 00000000..0e406d36 --- /dev/null +++ b/check/magma/regression/regression_check.c @@ -0,0 +1,73 @@ +/** + * @file /check/magma/regression/regression_check.c + * + * @brief The heart of the regression test suite + */ + +#include "magma_check.h" + +bool_t check_regression_file_descriptors_leak_mthread(void) { + stringer_t *m = st_alloc_opts(MAPPED_T | JOINTED | HEAP, 1024); + st_free(m); + return true; +} + +START_TEST (check_regression_file_descriptors_leak_m) { + + log_disable(); + void *result = NULL; + bool_t outcome = true; + pthread_t *threads = NULL; + stringer_t *errmsg = NULL, *path = NULL; + int_t folders_before, folder_difference = 0; + + if (!(threads = mm_alloc(sizeof(pthread_t) * REGRESSION_CHECK_FILE_DESCRIPTORS_LEAK_MTHREADS))) { + errmsg = NULLER("Thread allocation failed."); + outcome = false; + } else { + path = st_quick(MANAGEDBUF(255), "/proc/%i/fd/", process_my_pid()); + folders_before = folder_count(path, false, false); + + // fork a bunch of processes that open file descriptors + for (uint64_t counter = 0; counter < REGRESSION_CHECK_FILE_DESCRIPTORS_LEAK_MTHREADS; counter++) { + if (thread_launch(threads + counter, &check_regression_file_descriptors_leak_mthread, NULL)) { + errmsg = NULLER("Thread launch failed."); + outcome = false; + } + } + + // join them, each process should handle its own cleanup + for (uint64_t counter = 0; counter < REGRESSION_CHECK_FILE_DESCRIPTORS_LEAK_MTHREADS; counter++) { + if (thread_result(*(threads + counter), &result)) { + if (!errmsg) errmsg = NULLER("Thread join error."); + outcome = false; + } + else if (!result) { + if (!errmsg) errmsg = NULLER("Thread test failed."); + outcome = false; + } + } + + folder_difference = folder_count(path, false, false) - folders_before; + + if (folder_difference) { + outcome = false; + errmsg = NULLER("Failed to properly clean file handles."); + } + } + + log_test("REGRESSION / FILE DESCRIPTORS LEAK / MULTI THREADED:", errmsg); + ck_assert_msg(outcome, st_char_get(errmsg)); + mm_free(threads); +} +END_TEST + +Suite * suite_check_regression(void) { + TCase *tc; + Suite *s = suite_create("\tRegression"); + + testcase(s, tc, "Regression File Descriptors Leak/M", check_regression_file_descriptors_leak_m); + + tcase_set_timeout(tc, 120); + return s; +} diff --git a/check/magma/regression/regression_check.h b/check/magma/regression/regression_check.h new file mode 100644 index 00000000..cac4599e --- /dev/null +++ b/check/magma/regression/regression_check.h @@ -0,0 +1,14 @@ +/** + * @file /check/magma/regression/regression_check.h + * + * @brief Regression unit tests + */ + +#ifndef REGRESSION_CHECK_H +#define REGRESSION_CHECK_H + +/// regression_check.c +bool_t check_regression_file_descriptors_leak_mthread(void); +Suite * suite_check_regression(void); + +#endif |