chiark / gitweb /
562f286cc469d9c1ec2babc995a2b2bf29b2ff7d
[elogind.git] / src / test / test-signal-util.c
1 /* SPDX-License-Identifier: LGPL-2.1+ */
2 /***
3   This file is part of systemd.
4
5   Copyright 2016 Lennart Poettering
6 ***/
7
8 #include <signal.h>
9 #include <unistd.h>
10
11 //#include "log.h"
12 #include "macro.h"
13 #include "signal-util.h"
14 /// Additional includes needed by elogind
15 #include "process-util.h"
16
17 #define info(sig) log_info(#sig " = " STRINGIFY(sig) " = %d", sig)
18
19 static void test_rt_signals(void) {
20         info(SIGRTMIN);
21         info(SIGRTMAX);
22
23         /* We use signals SIGRTMIN+0 to SIGRTMIN+24 unconditionally */
24         assert(SIGRTMAX - SIGRTMIN >= 24);
25 }
26
27 static void test_block_signals(void) {
28         sigset_t ss;
29
30         assert_se(sigprocmask(0, NULL, &ss) >= 0);
31
32         assert_se(sigismember(&ss, SIGUSR1) == 0);
33         assert_se(sigismember(&ss, SIGALRM) == 0);
34         assert_se(sigismember(&ss, SIGVTALRM) == 0);
35
36         {
37                 BLOCK_SIGNALS(SIGUSR1, SIGVTALRM);
38
39                 assert_se(sigprocmask(0, NULL, &ss) >= 0);
40                 assert_se(sigismember(&ss, SIGUSR1) == 1);
41                 assert_se(sigismember(&ss, SIGALRM) == 0);
42                 assert_se(sigismember(&ss, SIGVTALRM) == 1);
43
44         }
45
46         assert_se(sigprocmask(0, NULL, &ss) >= 0);
47         assert_se(sigismember(&ss, SIGUSR1) == 0);
48         assert_se(sigismember(&ss, SIGALRM) == 0);
49         assert_se(sigismember(&ss, SIGVTALRM) == 0);
50 }
51
52 static void test_ignore_signals(void) {
53         assert_se(ignore_signals(SIGINT, -1) >= 0);
54         assert_se(kill(getpid_cached(), SIGINT) >= 0);
55         assert_se(ignore_signals(SIGUSR1, SIGUSR2, SIGTERM, SIGPIPE, -1) >= 0);
56         assert_se(kill(getpid_cached(), SIGUSR1) >= 0);
57         assert_se(kill(getpid_cached(), SIGUSR2) >= 0);
58         assert_se(kill(getpid_cached(), SIGTERM) >= 0);
59         assert_se(kill(getpid_cached(), SIGPIPE) >= 0);
60         assert_se(default_signals(SIGINT, SIGUSR1, SIGUSR2, SIGTERM, SIGPIPE, -1) >= 0);
61 }
62
63 int main(int argc, char *argv[]) {
64         test_rt_signals();
65         test_block_signals();
66         test_ignore_signals();
67
68         return 0;
69 }