/** * Copyright (c) 2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include #include #include "functionalext.h" #define TEST_STACK_SIZE 4096 /** * @tc.name : pthread_attr_getscope_0100 * @tc.desc : Get thread scope * @tc.level : Level 0 */ void pthread_attr_getscope_0100(void) { int scope = 0; pthread_attr_t attr; pthread_attr_init(&attr); int rev = pthread_attr_getscope(&attr, &scope); EXPECT_EQ("pthread_attr_getscope_0100", rev, 0); EXPECT_EQ("pthread_attr_getscope_0100", scope, PTHREAD_SCOPE_SYSTEM); pthread_attr_destroy(&attr); } /** * @tc.name : pthread_attr_getguardsize_0100 * @tc.desc : Get the guard value of the thread property * @tc.level : Level 0 */ void pthread_attr_getguardsize_0100(void) { size_t size = 0; pthread_attr_t attr; pthread_attr_init(&attr); int rev = pthread_attr_getguardsize(&attr, &size); EXPECT_EQ("pthread_attr_getguardsize_0100", rev, 0); pthread_attr_destroy(&attr); } /** * @tc.name : pthread_attr_getinheritsched_0100 * @tc.desc : Verify that the preset properties can be obtained through get inheritsched in * a single-threaded environment * @tc.level : Level 0 */ void pthread_attr_getinheritsched_0100(void) { pthread_attr_t attr; int result = -1; int ret = pthread_attr_init(&attr); EXPECT_EQ("pthread_attr_getinheritsched_0100", ret, CMPFLAG); ret = pthread_attr_setinheritsched(&attr, PTHREAD_INHERIT_SCHED); EXPECT_EQ("pthread_attr_getinheritsched_0100", ret, CMPFLAG); ret = pthread_attr_getinheritsched(&attr, &result); EXPECT_EQ("pthread_attr_getinheritsched_0100", ret, CMPFLAG); EXPECT_EQ("pthread_attr_getinheritsched_0100", result, PTHREAD_INHERIT_SCHED); ret = pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED); EXPECT_EQ("pthread_attr_getinheritsched_0100", ret, CMPFLAG); ret = pthread_attr_getinheritsched(&attr, &result); EXPECT_EQ("pthread_attr_getinheritsched_0100", ret, CMPFLAG); EXPECT_EQ("pthread_attr_getinheritsched_0100", result, PTHREAD_EXPLICIT_SCHED); pthread_attr_destroy(&attr); } /** * @tc.name : pthread_attr_getinheritsched_0200 * @tc.desc : Verify that the return value is EINVAL when setting an exception value in a single-threaded * environment * @tc.level : Level 0 */ void pthread_attr_getinheritsched_0200(void) { pthread_attr_t attr; int inheritsched = 2; int result = -1; int ret = pthread_attr_init(&attr); EXPECT_EQ("pthread_attr_getinheritsched_0200", ret, CMPFLAG); ret = pthread_attr_setinheritsched(&attr, inheritsched); EXPECT_EQ("pthread_attr_getinheritsched_0200", ret, EINVAL); ret = pthread_attr_getinheritsched(&attr, &result); EXPECT_EQ("pthread_attr_getinheritsched_0200", ret, CMPFLAG); pthread_attr_destroy(&attr); } /** * @tc.name : pthread_barrierattr_getpshared_0100 * @tc.desc : Correct parameter setting barrier variable property value * @tc.level : Level 0 */ void pthread_barrierattr_getpshared_0100(void) { pthread_barrierattr_t attr; int result = -1; int share = 0; int ret = pthread_barrierattr_init(&attr); EXPECT_EQ("pthread_barrierattr_getpshared_0100", ret, CMPFLAG); ret = pthread_barrierattr_setpshared(&attr, share); EXPECT_EQ("pthread_barrierattr_getpshared_0100", ret, CMPFLAG); ret = pthread_barrierattr_getpshared(&attr, &result); EXPECT_EQ("pthread_barrierattr_getpshared_0100", ret, CMPFLAG); EXPECT_EQ("pthread_barrierattr_getpshared_0100", result, share); share = 1; ret = pthread_barrierattr_setpshared(&attr, share); ret = pthread_barrierattr_getpshared(&attr, &result); EXPECT_EQ("pthread_barrierattr_getpshared_0100", ret, CMPFLAG); EXPECT_EQ("pthread_barrierattr_getpshared_0100", result, share); pthread_barrierattr_destroy(&attr); } /** * @tc.name : pthread_condattr_getclock_0100 * @tc.desc : Correct parameter setting condition variable property value * @tc.level : Level 0 */ void pthread_condattr_getclock_0100(void) { pthread_condattr_t attr; clockid_t result = -1; int ret = pthread_condattr_init(&attr); EXPECT_EQ("pthread_condattr_getclock_0100", ret, CMPFLAG); ret = pthread_condattr_setclock(&attr, CLOCK_MONOTONIC_RAW); EXPECT_EQ("pthread_condattr_getclock_0100", ret, CMPFLAG); ret = pthread_condattr_getclock(&attr, &result); EXPECT_EQ("pthread_condattr_getclock_0200", ret, CMPFLAG); EXPECT_EQ("pthread_condattr_getclock_0100", result, CLOCK_MONOTONIC_RAW); pthread_condattr_destroy(&attr); } /** * @tc.name : pthread_condattr_getpshared_0100 * @tc.desc : Correct parameter setting condition variable property value * @tc.level : Level 0 */ void pthread_condattr_getpshared_0100(void) { pthread_condattr_t attr; int result = -1; int share = 0; int ret = pthread_condattr_init(&attr); EXPECT_EQ("pthread_condattr_getpshared_0100", ret, CMPFLAG); ret = pthread_condattr_setpshared(&attr, share); EXPECT_EQ("pthread_condattr_getpshared_0100", ret, CMPFLAG); ret = pthread_condattr_getpshared(&attr, &result); EXPECT_EQ("pthread_condattr_getpshared_0100", ret, CMPFLAG); EXPECT_EQ("pthread_condattr_getpshared_0100", result, share); share = 1; ret = pthread_condattr_setpshared(&attr, share); ret = pthread_condattr_getpshared(&attr, &result); EXPECT_EQ("pthread_condattr_getpshared_0100", ret, CMPFLAG); EXPECT_EQ("pthread_condattr_getpshared_0100", result, share); pthread_condattr_destroy(&attr); } /** * @tc.name : pthread_mutexattr_getprotocol_0100 * @tc.desc : Correct parameter setting condition variable property value * @tc.level : Level 0 */ void pthread_mutexattr_getprotocol_0100(void) { pthread_mutexattr_t attr; int result = -1; int ret = pthread_mutexattr_init(&attr); EXPECT_EQ("pthread_mutexattr_getprotocol_0100", ret, CMPFLAG); ret = pthread_mutexattr_setprotocol(&attr, PTHREAD_PRIO_NONE); EXPECT_EQ("pthread_mutexattr_getprotocol_0100", ret, CMPFLAG); ret = pthread_mutexattr_getprotocol(&attr, &result); EXPECT_EQ("pthread_mutexattr_getprotocol_0100", ret, CMPFLAG); EXPECT_EQ("pthread_mutexattr_getprotocol_0100", result, PTHREAD_PRIO_NONE); pthread_mutexattr_destroy(&attr); } /** * @tc.name : pthread_mutexattr_gettype_0100 * @tc.desc : Correct parameter setting condition variable property value * @tc.level : Level 0 */ void pthread_mutexattr_gettype_0100(void) { pthread_mutexattr_t attr; int result = -1; int ret = pthread_mutexattr_init(&attr); EXPECT_EQ("pthread_mutexattr_gettype_0100", ret, CMPFLAG); ret = pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_NORMAL); EXPECT_EQ("pthread_mutexattr_gettype_0100", ret, CMPFLAG); ret = pthread_mutexattr_gettype(&attr, &result); EXPECT_EQ("pthread_mutexattr_gettype_0100", ret, CMPFLAG); EXPECT_EQ("pthread_mutexattr_gettype_0100", result, PTHREAD_MUTEX_NORMAL); ret = pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_ERRORCHECK); EXPECT_EQ("pthread_mutexattr_gettype_0100", ret, CMPFLAG); ret = pthread_mutexattr_gettype(&attr, &result); EXPECT_EQ("pthread_mutexattr_gettype_0100", ret, CMPFLAG); EXPECT_EQ("pthread_mutexattr_gettype_0100", result, PTHREAD_MUTEX_ERRORCHECK); ret = pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); EXPECT_EQ("pthread_mutexattr_gettype_0100", ret, CMPFLAG); ret = pthread_mutexattr_gettype(&attr, &result); EXPECT_EQ("pthread_mutexattr_gettype_0100", ret, CMPFLAG); EXPECT_EQ("pthread_mutexattr_gettype_0100", result, PTHREAD_MUTEX_RECURSIVE); ret = pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_DEFAULT); EXPECT_EQ("pthread_mutexattr_gettype_0100", ret, CMPFLAG); ret = pthread_mutexattr_gettype(&attr, &result); EXPECT_EQ("pthread_mutexattr_gettype_0100", ret, CMPFLAG); EXPECT_EQ("pthread_mutexattr_gettype_0100", result, PTHREAD_MUTEX_DEFAULT); pthread_mutexattr_destroy(&attr); } /** * @tc.name : pthread_mutexattr_getpshared_0100 * @tc.desc : Correct parameter setting mutex variable property value * @tc.level : Level 0 */ void pthread_mutexattr_getpshared_0100(void) { pthread_mutexattr_t attr; int result = -1; int share = 0; int ret = pthread_mutexattr_init(&attr); EXPECT_EQ("pthread_mutexattr_getpshared_0100", ret, CMPFLAG); ret = pthread_mutexattr_setpshared(&attr, share); EXPECT_EQ("pthread_mutexattr_getpshared_0100", ret, CMPFLAG); ret = pthread_mutexattr_getpshared(&attr, &result); EXPECT_EQ("pthread_mutexattr_getpshared_0100", ret, CMPFLAG); EXPECT_EQ("pthread_mutexattr_getpshared_0100", result, share); share = 1; ret = pthread_mutexattr_setpshared(&attr, share); ret = pthread_mutexattr_getpshared(&attr, &result); EXPECT_EQ("pthread_mutexattr_getpshared_0100", ret, CMPFLAG); EXPECT_EQ("pthread_mutexattr_getpshared_0100", result, share); pthread_mutexattr_destroy(&attr); } /** * @tc.name : pthread_rwlockattr_getpshared_0100 * @tc.desc : Correct parameter setting rwlock variable property value * @tc.level : Level 0 */ void pthread_rwlockattr_getpshared_0100(void) { pthread_rwlockattr_t attr; int result = -1; int share = 0; int ret = pthread_rwlockattr_init(&attr); EXPECT_EQ("pthread_rwlockattr_getpshared_0100", ret, CMPFLAG); ret = pthread_rwlockattr_setpshared(&attr, share); EXPECT_EQ("pthread_rwlockattr_getpshared_0100", ret, CMPFLAG); ret = pthread_rwlockattr_getpshared(&attr, &result); EXPECT_EQ("pthread_rwlockattr_getpshared_0100", ret, CMPFLAG); EXPECT_EQ("pthread_rwlockattr_getpshared_0100", result, share); share = 1; ret = pthread_rwlockattr_setpshared(&attr, share); ret = pthread_rwlockattr_getpshared(&attr, &result); EXPECT_EQ("pthread_rwlockattr_getpshared_0100", ret, CMPFLAG); EXPECT_EQ("pthread_rwlockattr_getpshared_0100", result, share); pthread_rwlockattr_destroy(&attr); } /** * @tc.name : pthread_attr_getdetachstate_0100 * @tc.desc : Get detached state from thread attr * @tc.level : Level 0 */ void pthread_attr_getdetachstate_0100(void) { pthread_attr_t attr; int state = 0; pthread_attr_init(&attr); int ret = pthread_attr_getdetachstate(&attr, &state); EXPECT_EQ("pthread_attr_getdetachstate_0100", ret, CMPFLAG); EXPECT_EQ("pthread_attr_getdetachstate_0100", state, CMPFLAG); pthread_attr_destroy(&attr); } /** * @tc.name : pthread_attr_getschedpolicy_0100 * @tc.desc : Get detached state from thread attr * @tc.level : Level 0 */ void pthread_attr_getschedpolicy_0100(void) { pthread_attr_t attr; int setpolicy = 1; int getpolicy = 0; pthread_attr_init(&attr); int ret = pthread_attr_setschedpolicy(&attr, setpolicy); EXPECT_EQ("pthread_attr_getschedpolicy_0100", ret, CMPFLAG); ret = pthread_attr_getschedpolicy(&attr, &getpolicy); EXPECT_EQ("pthread_attr_getschedpolicy_0100", ret, CMPFLAG); EXPECT_EQ("pthread_attr_getschedpolicy_0100", getpolicy, setpolicy); pthread_attr_destroy(&attr); } /** * @tc.name : pthread_attr_getschedparam_0100 * @tc.desc : Get scheduling parameter attributes in thread attributes object * @tc.level : Level 0 */ void pthread_attr_getschedparam_0100(void) { pthread_attr_t attr; struct sched_param setparam; struct sched_param getparam; memset(&setparam, 0x0, sizeof(setparam)); memset(&getparam, 0x0, sizeof(getparam)); setparam.sched_priority = 1; pthread_attr_init(&attr); int ret = pthread_attr_setschedparam(&attr, &setparam); EXPECT_EQ("pthread_attr_getschedparam_0100", ret, CMPFLAG); ret = pthread_attr_getschedparam(&attr, &getparam); EXPECT_EQ("pthread_attr_getschedparam_0100", ret, CMPFLAG); EXPECT_EQ("pthread_attr_getschedparam_0100", getparam.sched_priority, 1); pthread_attr_destroy(&attr); } /** * @tc.name : pthread_attr_getstacksize_0100 * @tc.desc : Get stack size attribute in thread attributes object * @tc.level : Level 0 */ void pthread_attr_getstacksize_0100(void) { size_t size; pthread_attr_t attr; pthread_attr_init(&attr); int ret = pthread_attr_setstacksize(&attr, TEST_STACK_SIZE); EXPECT_EQ("pthread_attr_getstacksize_0100", ret, CMPFLAG); ret = pthread_attr_getstacksize(&attr, &size); EXPECT_EQ("pthread_attr_getstacksize_0100", ret, CMPFLAG); EXPECT_EQ("pthread_attr_getstacksize_0100", size, TEST_STACK_SIZE); pthread_attr_destroy(&attr); } int main(void) { pthread_attr_getscope_0100(); pthread_attr_getguardsize_0100(); pthread_attr_getinheritsched_0100(); pthread_attr_getinheritsched_0200(); pthread_barrierattr_getpshared_0100(); pthread_condattr_getclock_0100(); pthread_condattr_getpshared_0100(); pthread_mutexattr_getprotocol_0100(); pthread_mutexattr_gettype_0100(); pthread_mutexattr_getpshared_0100(); pthread_rwlockattr_getpshared_0100(); pthread_attr_getdetachstate_0100(); pthread_attr_getschedpolicy_0100(); pthread_attr_getschedparam_0100(); pthread_attr_getstacksize_0100(); return t_status; }