1 /*
2 * Copyright (c) 2022 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include <errno.h>
17 #include <signal.h>
18
19 #include "test.h"
20
21 /**
22 * @tc.name : sigignore_0100
23 * @tc.desc : sets the disposition of sig to SIG_IGN
24 * @tc.level : Level 0
25 */
sigignore_0100(void)26 void sigignore_0100(void)
27 {
28 int sig = SIGALRM;
29 struct sigaction old_act = {0};
30 errno = 0;
31 int result = sigaction(sig, NULL, &old_act);
32 if (result != 0 || errno != 0) {
33 t_error("%s failed: result = %d\n", __func__, result);
34 t_error("%s failed: errno = %d\n", __func__, errno);
35 }
36
37 errno = 0;
38 result = sigignore(sig);
39 if (result != 0 || errno != 0) {
40 t_error("%s failed: result = %d\n", __func__, result);
41 t_error("%s failed: errno = %d\n", __func__, errno);
42 }
43
44 struct sigaction sa;
45 errno = 0;
46 result = sigaction(SIGALRM, NULL, &sa);
47 if (result != 0 || errno != 0) {
48 t_error("%s failed: result = %d\n", __func__, result);
49 t_error("%s failed: errno = %d\n", __func__, errno);
50 }
51
52 if (SIG_IGN != sa.sa_handler) {
53 t_error("%s failed: sa.sa_handler\n", __func__);
54 }
55 }
56
57 /**
58 * @tc.name : sigignore_0200
59 * @tc.desc : sets the disposition of the SIGKILL sig to SIG_IGN
60 * @tc.level : Level 1
61 */
sigignore_0200(void)62 void sigignore_0200(void)
63 {
64 errno = 0;
65 int result = sigignore(SIGKILL);
66 if (result != -1 || errno != EINVAL) {
67 t_error("%s failed: result = %d\n", __func__, result);
68 t_error("%s failed: errno = %d\n", __func__, errno);
69 }
70 }
71
72 /**
73 * @tc.name : sigignore_0300
74 * @tc.desc : sets the disposition of the SIGSTOP sig to SIG_IGN
75 * @tc.level : Level 1
76 */
sigignore_0300(void)77 void sigignore_0300(void)
78 {
79 errno = 0;
80 int result = sigignore(SIGSTOP);
81 if (result != -1 || errno != EINVAL) {
82 t_error("%s failed: result = %d\n", __func__, result);
83 t_error("%s failed: errno = %d\n", __func__, errno);
84 }
85 }
86
87 /**
88 * @tc.name : sigignore_0400
89 * @tc.desc : sets the disposition of an invalid sig to SIG_IGN
90 * @tc.level : Level 2
91 */
sigignore_0400(void)92 void sigignore_0400(void)
93 {
94 int sig = 99999;
95
96 errno = 0;
97 int result = sigignore(sig);
98 if (result == 0 || errno != EINVAL) {
99 t_error("%s failed: result = %d\n", __func__, result);
100 t_error("%s failed: errno = %d\n", __func__, errno);
101 }
102 }
103
main(int argc,char * argv[])104 int main(int argc, char *argv[])
105 {
106 sigignore_0100();
107 sigignore_0200();
108 sigignore_0300();
109 sigignore_0400();
110
111 return t_status;
112 }
113