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 <pthread.h> 17#include <signal.h> 18#include <stdlib.h> 19#include <unistd.h> 20#include "functionalext.h" 21 22static int32_t errorParam = 3; 23 24/** 25 * @tc.name : pthread_sigmask_0100 26 * @tc.desc : Verify pthread_sigmask process success when define shield signal is SIGUSR1 27 * @tc.level : Level 1 28 */ 29void pthread_sigmask_0100(void) 30{ 31 sigset_t set; 32 sigaddset(&set, SIGUSR1); 33 int32_t ret = pthread_sigmask(SIG_BLOCK, &set, NULL); 34 EXPECT_EQ("pthread_sigmask_0100", ret, 0); 35 sigset_t setOne, setEmpty; 36 sigaddset(&setOne, SIGUSR2); 37 sigemptyset(&setEmpty); 38 ret = pthread_sigmask(SIG_BLOCK, &setOne, &setEmpty); 39 EXPECT_EQ("pthread_sigmask_0100", ret, 0); 40 sigismember(&set, SIGUSR1); 41 EXPECT_EQ("pthread_sigmask_0100", sigismember(&set, SIGUSR1), 1); 42} 43 44/** 45 * @tc.name : pthread_sigmask_0200 46 * @tc.desc : Verify pthread_sigmask process success when undefine shield signal 47 * @tc.level : Level 1 48 */ 49void pthread_sigmask_0200(void) 50{ 51 sigset_t set; 52 sigaddset(&set, SIGUSR1); 53 sigaddset(&set, SIGQUIT); 54 int32_t ret = pthread_sigmask(SIG_BLOCK, &set, NULL); 55 EXPECT_EQ("pthread_sigmask_0200", ret, 0); 56 sigset_t setEmpty; 57 sigemptyset(&setEmpty); 58 ret = pthread_sigmask(SIG_BLOCK, &setEmpty, NULL); 59 EXPECT_EQ("pthread_sigmask_0200", ret, 0); 60 ret = sigismember(&set, SIGUSR1); 61 EXPECT_EQ("pthread_sigmask_0200", ret, 1); 62 ret = sigismember(&set, SIGQUIT); 63 EXPECT_EQ("pthread_sigmask_0200", ret, 1); 64} 65 66/** 67 * @tc.name : pthread_sigmask_0300 68 * @tc.desc : Verify pthread_sigmask process fail becaus first param is error 69 * @tc.level : Level 2 70 */ 71void pthread_sigmask_0300(void) 72{ 73 sigset_t set; 74 sigaddset(&set, SIGUSR1); 75 sigaddset(&set, SIGQUIT); 76 int32_t ret = pthread_sigmask(SIG_BLOCK + errorParam, &set, NULL); 77 EXPECT_EQ("pthread_sigmask_0300", ret, EINVAL); 78} 79 80/** 81 * @tc.name : pthread_sigmask_0400 82 * @tc.desc : Verify pthread_sigmask process success when second and third param is null 83 * @tc.level : Level 2 84 */ 85void pthread_sigmask_0400(void) 86{ 87 sigset_t set, setEmpty; 88 sigaddset(&set, SIGUSR1); 89 sigemptyset(&setEmpty); 90 int32_t ret = pthread_sigmask(SIG_BLOCK, &set, NULL); 91 EXPECT_EQ("pthread_setschedparam_0400", ret, 0); 92 ret = pthread_sigmask(SIG_BLOCK, NULL, &setEmpty); 93 EXPECT_EQ("pthread_setschedparam_0400", ret, 0); 94 ret = sigismember(&set, SIGUSR1); 95 EXPECT_EQ("pthread_setschedparam_0400", ret, 1); 96} 97 98int main(void) 99{ 100 pthread_sigmask_0100(); 101 pthread_sigmask_0200(); 102 pthread_sigmask_0300(); 103 pthread_sigmask_0400(); 104 return t_status; 105}