Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/lavabit/magma.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjpadkins <jacobpadkins@gmail.com>2017-02-22 06:12:04 +0300
committerLadar Levison <ladar@users.noreply.github.com>2017-02-22 10:20:38 +0300
commit014ae729605a2f7da3db9d45310ff96fca6067c5 (patch)
tree429a5051abd033c95e6f188b387d8ce827efda04 /check/magma/regression
parentddf65fb26803b233043b6dd0b6666206d9f8d70c (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.c73
-rw-r--r--check/magma/regression/regression_check.h14
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