blob: d06086171309efb39d19eba6cd29f316effca4cd [file] [log] [blame]
William A. Kennington III9c97d2c2018-11-02 17:25:36 -07001#include <cstring>
William A. Kennington III0bd13702022-08-24 13:33:34 -07002#include <gtest/gtest.h>
William A. Kennington III9c97d2c2018-11-02 17:25:36 -07003#include <signal.h>
4#include <stdplus/signal.hpp>
5
6namespace stdplus
7{
8namespace signal
9{
10namespace
11{
12
William A. Kennington III0bd13702022-08-24 13:33:34 -070013TEST(Signal, Block)
William A. Kennington III9c97d2c2018-11-02 17:25:36 -070014{
15 constexpr int s = SIGINT;
16 constexpr int otherS = SIGTERM;
17 constexpr int notBlocked = SIGPROF;
18
19 sigset_t expectedSet;
William A. Kennington III0bd13702022-08-24 13:33:34 -070020 ASSERT_EQ(0, sigprocmask(SIG_BLOCK, nullptr, &expectedSet));
21 ASSERT_EQ(0, sigaddset(&expectedSet, otherS));
22 ASSERT_EQ(0, sigprocmask(SIG_BLOCK, &expectedSet, nullptr));
23 ASSERT_EQ(0, sigismember(&expectedSet, notBlocked));
24 ASSERT_EQ(0, sigismember(&expectedSet, s));
25 ASSERT_EQ(0, sigaddset(&expectedSet, s));
William A. Kennington III9c97d2c2018-11-02 17:25:36 -070026
27 block(s);
28
29 sigset_t newSet;
William A. Kennington III0bd13702022-08-24 13:33:34 -070030 ASSERT_EQ(0, sigprocmask(SIG_BLOCK, nullptr, &newSet));
31 EXPECT_EQ(sigismember(&expectedSet, s), sigismember(&newSet, s));
32 EXPECT_EQ(sigismember(&expectedSet, otherS), sigismember(&newSet, otherS));
33 EXPECT_EQ(sigismember(&expectedSet, notBlocked),
34 sigismember(&newSet, notBlocked));
William A. Kennington III9c97d2c2018-11-02 17:25:36 -070035}
36
William A. Kennington III0bd13702022-08-24 13:33:34 -070037TEST(Signal, StayBlocked)
William A. Kennington III9c97d2c2018-11-02 17:25:36 -070038{
39 constexpr int s = SIGINT;
40 constexpr int otherS = SIGTERM;
41 constexpr int notBlocked = SIGPROF;
42
43 sigset_t expectedSet;
William A. Kennington III0bd13702022-08-24 13:33:34 -070044 ASSERT_EQ(0, sigprocmask(SIG_BLOCK, nullptr, &expectedSet));
45 ASSERT_EQ(0, sigaddset(&expectedSet, s));
46 ASSERT_EQ(0, sigaddset(&expectedSet, otherS));
47 ASSERT_EQ(0, sigismember(&expectedSet, notBlocked));
48 ASSERT_EQ(0, sigprocmask(SIG_BLOCK, &expectedSet, nullptr));
William A. Kennington III9c97d2c2018-11-02 17:25:36 -070049
50 block(s);
51
52 sigset_t newSet;
William A. Kennington III0bd13702022-08-24 13:33:34 -070053 ASSERT_EQ(0, sigprocmask(SIG_BLOCK, nullptr, &newSet));
54 EXPECT_EQ(sigismember(&expectedSet, s), sigismember(&newSet, s));
55 EXPECT_EQ(sigismember(&expectedSet, otherS), sigismember(&newSet, otherS));
56 EXPECT_EQ(sigismember(&expectedSet, notBlocked),
57 sigismember(&newSet, notBlocked));
William A. Kennington III9c97d2c2018-11-02 17:25:36 -070058}
59
60} // namespace
61} // namespace signal
62} // namespace stdplus