test: add case signal-handler-reuse

This commit is contained in:
Tom 2019-09-16 18:11:13 +02:00
parent 5708d49a1a
commit 21b8c7ca8b

View File

@ -9,6 +9,7 @@
#include <chrono> #include <chrono>
#include <future> #include <future>
#include <map>
#include <vector> #include <vector>
@ -162,3 +163,30 @@ TEST_CASE("exit-condition-looping")
} }
} }
TEST_CASE("signal-handler-reuse")
{
std::map<int, int> signal_map({{SIGINT, 1 << 0},
{SIGTERM, 1 << 1},
{SIGUSR1, 1 << 2},
{SIGUSR2, 1 << 3}});
sgnl::AtomicCondition<int> condition(0);
sgnl::SignalHandler signal_handler(signal_map, condition);
for( auto p : signal_map )
{
std::promise<pthread_t> signal_handler_thread_id;
std::future<int> ft_sig_handler =
std::async(std::launch::async, [&]() {
signal_handler_thread_id.set_value(pthread_self());
return signal_handler();
});
REQUIRE(
pthread_kill(
signal_handler_thread_id.get_future().get(),
p.first) == 0 );
REQUIRE( ft_sig_handler.get() == p.first );
REQUIRE( condition.get() == p.second );
}
}