1/* 2 * Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without modification, 5 * are permitted provided that the following conditions are met: 6 * 7 * 1. Redistributions of source code must retain the above copyright notice, this list of 8 * conditions and the following disclaimer. 9 * 10 * 2. Redistributions in binary form must reproduce the above copyright notice, this list 11 * of conditions and the following disclaimer in the documentation and/or other materials 12 * provided with the distribution. 13 * 14 * 3. Neither the name of the copyright holder nor the names of its contributors may be used 15 * to endorse or promote products derived from this software without specific prior written 16 * permission. 17 * 18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 20 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 21 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 22 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 23 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 24 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 25 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 26 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 27 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 28 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 */ 30 31#include "pthread_test.h" 32 33LITE_TEST_SUIT(PROCESS, PthreadAttr, PthreadAttrTestSuite); 34 35static BOOL PthreadAttrTestSuiteSetUp(void) 36{ 37 return TRUE; 38} 39 40static BOOL PthreadAttrTestSuiteTearDown(void) 41{ 42 return TRUE; 43} 44 45/** 46 * @tc.number SUB_KERNEL_PTHREAD_ATTR_SETDETACHSTATE_0100 47 * @tc.name basic test about pthread_attr_setdetachstate 48 * @tc.desc [C- SOFTWARE -0200] 49 */ 50LITE_TEST_CASE(PthreadAttrTestSuite, testPthreadAttrSetdetachstate, Function | MediumTest | Level3) 51{ 52 int ret; 53 pthread_t tid; 54 pthread_attr_t attr; 55 int param; 56 ret = pthread_attr_init(&attr); 57 ICUNIT_ASSERT_EQUAL(ret, 0, ret); 58 ret = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); 59 ICUNIT_ASSERT_EQUAL(ret, 0, ret); 60 ret = pthread_attr_getdetachstate(&attr, ¶m); 61 ICUNIT_ASSERT_EQUAL(ret, 0, ret); 62 ICUNIT_ASSERT_EQUAL(param, PTHREAD_CREATE_DETACHED, param); 63 ret = pthread_create(&tid, &attr, ThreadPublic, NULL); 64 ICUNIT_ASSERT_EQUAL(ret, 0, ret); 65 ret = pthread_attr_destroy(&attr); 66 ICUNIT_ASSERT_EQUAL(ret, 0, ret); 67 ret = pthread_join(tid, NULL); 68 ICUNIT_ASSERT_EQUAL(ret, EINVAL, ret); 69 70 ret = pthread_attr_init(&attr); 71 ICUNIT_ASSERT_EQUAL(ret, 0, ret); 72 ret = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); 73 ICUNIT_ASSERT_EQUAL(ret, 0, ret); 74 ret = pthread_attr_getdetachstate(&attr, ¶m); 75 ICUNIT_ASSERT_EQUAL(ret, 0, ret); 76 ICUNIT_ASSERT_EQUAL(param, PTHREAD_CREATE_JOINABLE, param); 77 ret = pthread_create(&tid, &attr, ThreadPublic, NULL); 78 ICUNIT_ASSERT_EQUAL(ret, 0, ret); 79 ret = pthread_attr_destroy(&attr); 80 ICUNIT_ASSERT_EQUAL(ret, 0, ret); 81 ret = pthread_join(tid, NULL); 82 ICUNIT_ASSERT_EQUAL(ret, 0, ret); 83 return 0; 84} 85 86/** 87 * @tc.number SUB_KERNEL_PTHREAD_ATTR_SETSTACKSIZE_0200 88 * @tc.name test pthread_attr_setstacksize EINVAL 89 * @tc.desc [C- SOFTWARE -0200] 90 */ 91LITE_TEST_CASE(PthreadAttrTestSuite, testPthreadAttrSetstacksizeEINVAL, Function | MediumTest | Level3) 92{ 93 int ret; 94 pthread_attr_t attr; 95 size_t stackSize; 96 ret = pthread_attr_init(&attr); 97 ICUNIT_ASSERT_EQUAL(ret, 0, ret); 98 ret = pthread_attr_getstacksize(&attr, &stackSize); 99 ICUNIT_ASSERT_EQUAL(ret, 0, ret); 100 101 stackSize = PTHREAD_STACK_MIN - 1; /* 1, common data for test, no special meaning */ 102 ret = pthread_attr_setstacksize(&attr, stackSize); 103 ICUNIT_ASSERT_EQUAL(ret, EINVAL, ret); 104 ret = pthread_attr_destroy(&attr); 105 ICUNIT_ASSERT_EQUAL(ret, 0, ret); 106 return 0; 107} 108 109RUN_TEST_SUITE(PthreadAttrTestSuite); 110 111void PthreadAttrTest(void) 112{ 113 RUN_ONE_TESTCASE(testPthreadAttrSetdetachstate); 114 RUN_ONE_TESTCASE(testPthreadAttrSetstacksizeEINVAL); 115} 116 117