test: add case signal-handler-reuse
This commit is contained in:
parent
5708d49a1a
commit
21b8c7ca8b
@ -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 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user