Browse Source

Merge remote-tracking branch 'twstrike/util_process_tests'

Nick Mathewson 8 years ago
parent
commit
a61158aa23
3 changed files with 75 additions and 1 deletions
  1. 1 0
      src/test/include.am
  2. 2 1
      src/test/test.c
  3. 72 0
      src/test/test_util_process.c

+ 1 - 0
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 \

+ 2 - 1
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
 };
-

+ 72 - 0
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
+};