diff options
Diffstat (limited to 'test/test_signal_handler.cc')
| -rw-r--r-- | test/test_signal_handler.cc | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/test/test_signal_handler.cc b/test/test_signal_handler.cc new file mode 100644 index 0000000..511ab3c --- /dev/null +++ b/test/test_signal_handler.cc @@ -0,0 +1,63 @@ +#include "common.hh" + +#include "logger.hh" +#include "looper.hh" +#include "signal_handler.hh" + +#include <gtest/gtest.h> + +class SignalHandlerTestFixture : + public testing::TestWithParam<std::pair<SignalHandler::Signal, int>> { +}; + +TEST_P(SignalHandlerTestFixture, raise_before_loop) { + bool called = false; + auto logger = Logger::create_null(); + std::shared_ptr<Looper> looper = Looper::create(); + auto handler = SignalHandler::create(looper, + GetParam().first, + [&called, &looper] { + called = true; + looper->quit(); + }); + raise(GetParam().second); + looper->run(logger.get()); + EXPECT_TRUE(called); +} + +TEST_P(SignalHandlerTestFixture, raise_during_loop) { + bool called = false; + auto logger = Logger::create_null(); + std::shared_ptr<Looper> looper = Looper::create(); + auto handler = SignalHandler::create(looper, + GetParam().first, + [&called, &looper] { + called = true; + looper->quit(); + }); + looper->schedule(0, [] (uint32_t) { raise(GetParam().second); }); + looper->run(logger.get()); + EXPECT_TRUE(called); +} + +TEST_P(SignalHandlerTestFixture, no_raise) { + bool called = false; + auto logger = Logger::create_null(); + std::shared_ptr<Looper> looper = Looper::create(); + auto handler = SignalHandler::create(looper, + GetParam().first, + [&called, &looper] { + called = true; + looper->quit(); + }); + looper->schedule(0, [&looper] (uint32_t) { looper->quit(); }); + looper->run(logger.get()); + EXPECT_FALSE(called); +} + +INSTANTIATE_TEST_SUITE_P( + SignalHandlerTests, + SignalHandlerTestFixture, + testing::Values(std::make_pair(SignalHandler::Signal::INT, SIGINT), + std::make_pair(SignalHandler::Signal::TERM, SIGTERM), + std::make_pair(SignalHandler::Signal::HUP, SIGHUP))); |
