]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
units: add signals unit test
authorColin Patrick McCabe <cmccabe@alumni.cmu.edu>
Thu, 27 Jan 2011 12:45:29 +0000 (04:45 -0800)
committerColin Patrick McCabe <cmccabe@alumni.cmu.edu>
Thu, 27 Jan 2011 18:48:32 +0000 (10:48 -0800)
Signed-off-by: Colin McCabe <colin.mccabe@dreamhost.com>
src/Makefile.am
src/common/signal.cc
src/common/signal.h
src/test/signals.cc [new file with mode: 0644]

index ca5a56323886863ff7920afd6fb387fb5916a4e9..329f2c65f9cf3de1bc272279933f5e3fb5d8d6ec 100644 (file)
@@ -350,6 +350,11 @@ unittest_run_cmd_LDADD = libceph.la ${UNITTEST_LDADD}
 unittest_run_cmd_CXXFLAGS = ${AM_CXXFLAGS} ${UNITTEST_CXXFLAGS}
 check_PROGRAMS += unittest_run_cmd
 
+unittest_signals_SOURCES = test/signals.cc
+unittest_signals_LDADD = libceph.la ${UNITTEST_LDADD}
+unittest_signals_CXXFLAGS = ${AM_CXXFLAGS} ${UNITTEST_CXXFLAGS}
+check_PROGRAMS += unittest_signals
+
 # shell scripts
 editpaths = sed \
        -e 's|@bindir[@]|$(bindir)|g' \
index 708f60540297afac03b6aa4c039a50b587e3cb45..c3dcbc605bacc6f60774391cc2a1ffa95a005a48 100644 (file)
@@ -15,6 +15,7 @@
 #include "common/BackTrace.h"
 #include "common/Logger.h"
 #include "common/debug.h"
+#include "common/signal.h"
 #include "config.h"
 
 #include <signal.h>
@@ -25,9 +26,7 @@
 
 #define dout_prefix *_dout
 
-typedef void (*signal_handler_t)(int);
-
-static void install_sighandler(int signum, signal_handler_t handler, int flags)
+void install_sighandler(int signum, signal_handler_t handler, int flags)
 {
   int ret;
   struct sigaction oldact;
index d62c6864e62b9163f3486bb2853dce3472a6519d..fa970285c4adf6952dd61b76bfc7acffc0f976bc 100644 (file)
 #include <signal.h>
 #include <string>
 
+typedef void (*signal_handler_t)(int);
+
+void install_sighandler(int signum, signal_handler_t handler, int flags);
+
 // Install the standard Ceph signal handlers
 void install_standard_sighandlers(void);
 
diff --git a/src/test/signals.cc b/src/test/signals.cc
new file mode 100644 (file)
index 0000000..5927d3c
--- /dev/null
@@ -0,0 +1,48 @@
+#include "config.h"
+#include "common/signal.h"
+
+#include "gtest/gtest.h"
+
+#include <errno.h>
+#include <signal.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+static volatile sig_atomic_t got_sigusr1 = 0;
+
+static void handle_sigusr1(int signo)
+{
+  got_sigusr1 = 1;
+}
+
+TEST(SignalApi, SimpleInstall)
+{
+  install_sighandler(SIGUSR1, handle_sigusr1, 0);
+}
+
+TEST(SignalApi, SimpleInstallAndTest)
+{
+  install_sighandler(SIGUSR1, handle_sigusr1, 0);
+
+  // blocked signal should not be delievered until we call sigsuspend()
+  sigset_t old_sigset;
+  block_all_signals(&old_sigset);
+
+  int ret = kill(getpid(), SIGUSR1);
+  ASSERT_EQ(ret, 0);
+  ASSERT_EQ(got_sigusr1, 0);
+
+  sigset_t mask;
+  sigemptyset(&mask);
+  sigdelset(&mask, SIGUSR1);
+  ret = sigsuspend(&mask);
+  if (ret == -1)
+    ret = errno;
+  ASSERT_EQ(ret, EINTR);
+  ASSERT_EQ(got_sigusr1, 1);
+  unblock_all_signals(&old_sigset);
+}
+
+TEST(SignalEffects, ErrnoTest1)
+{
+}