From: Colin Patrick McCabe Date: Thu, 27 Jan 2011 12:45:29 +0000 (-0800) Subject: units: add signals unit test X-Git-Tag: v0.25~235 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=adffe53ea950ef280fa28347fbda90a526241a12;p=ceph.git units: add signals unit test Signed-off-by: Colin McCabe --- diff --git a/src/Makefile.am b/src/Makefile.am index ca5a56323886..329f2c65f9cf 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -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' \ diff --git a/src/common/signal.cc b/src/common/signal.cc index 708f60540297..c3dcbc605bac 100644 --- a/src/common/signal.cc +++ b/src/common/signal.cc @@ -15,6 +15,7 @@ #include "common/BackTrace.h" #include "common/Logger.h" #include "common/debug.h" +#include "common/signal.h" #include "config.h" #include @@ -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; diff --git a/src/common/signal.h b/src/common/signal.h index d62c6864e62b..fa970285c4ad 100644 --- a/src/common/signal.h +++ b/src/common/signal.h @@ -18,6 +18,10 @@ #include #include +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 index 000000000000..5927d3c2aa51 --- /dev/null +++ b/src/test/signals.cc @@ -0,0 +1,48 @@ +#include "config.h" +#include "common/signal.h" + +#include "gtest/gtest.h" + +#include +#include +#include +#include + +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) +{ +}