summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/test/include.am1
-rw-r--r--src/test/test.c3
-rw-r--r--src/test/test_util_process.c72
3 files changed, 75 insertions, 1 deletions
diff --git a/src/test/include.am b/src/test/include.am
index 5b3c045de1..d0a819fb7f 100644
--- a/src/test/include.am
+++ b/src/test/include.am
@@ -102,6 +102,7 @@ src_test_test_SOURCES = \
src/test/test_tortls.c \
src/test/test_util.c \
src/test/test_util_format.c \
+ src/test/test_util_process.c \
src/test/test_helpers.c \
src/test/test_dns.c \
src/test/testing_common.c \
diff --git a/src/test/test.c b/src/test/test.c
index 3468f7fdaa..1c421d98ab 100644
--- a/src/test/test.c
+++ b/src/test/test.c
@@ -1168,6 +1168,7 @@ extern struct testcase_t thread_tests[];
extern struct testcase_t tortls_tests[];
extern struct testcase_t util_tests[];
extern struct testcase_t util_format_tests[];
+extern struct testcase_t util_process_tests[];
extern struct testcase_t dns_tests[];
struct testgroup_t testgroups[] = {
@@ -1220,8 +1221,8 @@ struct testgroup_t testgroups[] = {
{ "util/", util_tests },
{ "util/format/", util_format_tests },
{ "util/logging/", logging_tests },
+ { "util/process/", util_process_tests },
{ "util/thread/", thread_tests },
{ "dns/", dns_tests },
END_OF_GROUPS
};
-
diff --git a/src/test/test_util_process.c b/src/test/test_util_process.c
new file mode 100644
index 0000000000..5d45b58d3e
--- /dev/null
+++ b/src/test/test_util_process.c
@@ -0,0 +1,72 @@
+/* Copyright (c) 2010-2015, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#define UTIL_PROCESS_PRIVATE
+#include "orconfig.h"
+#include "or.h"
+
+#include "test.h"
+
+#include "util_process.h"
+
+#include "log_test_helpers.h"
+
+#define NS_MODULE util_process
+
+static void
+temp_callback(int r, void *s)
+{
+ (void)r;
+ (void)s;
+}
+
+static void
+test_util_process_set_waitpid_callback(void *ignored)
+{
+ (void)ignored;
+ waitpid_callback_t *res;
+ int previous_log = setup_capture_of_logs(LOG_WARN);
+ pid_t pid = (pid_t)42;
+
+ res = set_waitpid_callback(pid, temp_callback, NULL);
+ tt_assert(res);
+
+ res = set_waitpid_callback(pid, temp_callback, NULL);
+ tt_assert(res);
+ tt_str_op(mock_saved_log_at(0), OP_EQ,
+ "Replaced a waitpid monitor on pid 42. That should be "
+ "impossible.\n");
+
+ done:
+ teardown_capture_of_logs(previous_log);
+}
+
+static void
+test_util_process_clear_waitpid_callback(void *ignored)
+{
+ (void)ignored;
+ waitpid_callback_t *res;
+ int previous_log = setup_capture_of_logs(LOG_WARN);
+ pid_t pid = (pid_t)43;
+
+ clear_waitpid_callback(NULL);
+
+ res = set_waitpid_callback(pid, temp_callback, NULL);
+ clear_waitpid_callback(res);
+ tt_int_op(mock_saved_log_number(), OP_EQ, 0);
+
+ clear_waitpid_callback(res);
+ tt_str_op(mock_saved_log_at(0), OP_EQ,
+ "Couldn't remove waitpid monitor for pid 43.\n");
+
+ done:
+ teardown_capture_of_logs(previous_log);
+}
+
+struct testcase_t util_process_tests[] = {
+ { "set_waitpid_callback", test_util_process_set_waitpid_callback, 0,
+ NULL, NULL },
+ { "clear_waitpid_callback", test_util_process_clear_waitpid_callback, 0,
+ NULL, NULL },
+ END_OF_TESTCASES
+};