kernel_liteos_a/testsuites/unittest/posix/pthread/It_posix_pthread.h

447 lines
14 KiB
C

/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _IT_POSIX_PTHREAD_H
#define _IT_POSIX_PTHREAD_H
#include "sched.h"
#include "signal.h"
#include "semaphore.h"
#include "sched.h"
#include "osTest.h"
#include "pthread.h"
#include "limits.h"
#include "unistd.h"
#include "mqueue.h"
#include "signal.h"
#include "sys/time.h"
#ifndef VERBOSE
#define VERBOSE 1
#endif
/* Some routines are part of the XSI Extensions */
#define LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE (0x6000)
#define LOS_HwiCreate(ID, prio, mode, Func, arg) (-1)
#define HalIrqMask(ID)
#define TEST_TEST_HwiDelete(ID, NULL)
#define TEST_HwiTrigger(HWI_NUM_TEST)
#define LOS_TaskLock()
#define LOS_TaskUnlock()
#define LOS_MS2Tick(ms) (ms / 10)
#define OS_TASK_PRIORITY_HIGHEST 0
#define OS_TASK_PRIORITY_LOWEST 31
#define PTHREAD_NO_ERROR 0
#define PTHREAD_IS_ERROR (-1)
#define PTHREAD_SIGNAL_SUPPORT 0 /* 0 means that not support the signal */
#define PTHREAD_PRIORITY_TEST 20
#define PTHREAD_DEFAULT_STACK_SIZE (LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE)
#define PTHREAD_KEY_NUM 10
#define THREAD_NUM 3
#define PTHREAD_TIMEOUT (THREAD_NUM * 2)
#define PTHREAD_INTHREAD_TEST 0 /* Control going to or is already for Thread */
#define PTHREAD_INMAIN_TEST 1 /* Control going to or is already for Main */
#define INVALID_PSHARED_VALUE (-100)
#define NUM_OF_CONDATTR 10
#define RUNTIME 5
#define PTHREAD_THREADS_NUM 3
#define TCOUNT 5 // Number of single-threaded polling
#define COUNT_LIMIT 7 // The number of times the signal is sent
#define HIGH_PRIORITY 5
#define LOW_PRIORITY 10
#define PTHREAD_EXIT_VALUE ((void *)100) /* The return code of the thread when using pthread_exit(). */
#define PTHREAD_EXISTED_NUM TASK_EXISTED_NUM
#define PTHREAD_EXISTED_SEM_NUM SEM_EXISTED_NUM
/* We are testing conformance to IEEE Std 1003.1, 2003 Edition */
#define _POSIX_C_SOURCE 200112L
#define uart_printf_func printf
/* The value below shall be >= to the # of CPU on the test architecture */
#define NCPU (4)
#define PRIORITY_OTHER (-1)
#define PRIORITY_FIFO 20
#define PRIORITY_RR 20
#define PTHREAD_TEST_BUG printf
#define CASE(det, expl, scp, spa, sco, sta, gua, ssi, desc, res) \
{ \
{ 0 }, det, expl, scp, spa, sco, sta, gua, ssi, desc, NULL, res, \
{ \
0 \
} \
}
#define CASE_POS(det, expl, scp, spa, sco, sta, gua, ssi, desc) CASE(det, expl, scp, spa, sco, sta, gua, ssi, desc, 0)
#define CASE_NEG(det, expl, scp, spa, sco, sta, gua, ssi, desc) CASE(det, expl, scp, spa, sco, sta, gua, ssi, desc, 1)
#define CASE_UNK(det, expl, scp, spa, sco, sta, gua, ssi, desc) CASE(det, expl, scp, spa, sco, sta, gua, ssi, desc, 2)
struct params {
INT32 policy;
INT32 priority;
char *policy_label;
INT32 status;
};
typedef struct {
/*
* Object to hold the given configuration,
* and which will be used to create the threads
*/
pthread_attr_t ta;
/* General parameters */
/* 0 => joinable; 1 => detached */
INT32 detached;
/* Scheduling parameters */
/*
* 0 => sched policy is inherited;
* 1 => sched policy from the attr param
*/
INT32 explicitsched;
/* 0 => default; 1=> SCHED_FIFO; 2=> SCHED_RR */
INT32 schedpolicy;
/*
* 0 => default sched param;
* 1 => max value for sched param;
* -1 => min value for sched param
*/
INT32 schedparam;
/*
* 0 => default contension scope;
* 1 => alternative contension scope
*/
INT32 altscope;
/* Stack parameters */
/* 0 => system manages the stack; 1 => stack is provided */
INT32 altstack;
/*
* 0 => default guardsize;
* 1=> guardsize is 0;
* 2=> guard is 1 page
* -- this setting only affect system stacks (not user's).
*/
INT32 guard;
/*
* 0 => default stack size;
* 1 => stack size specified (min value)
* -- ignored when stack is provided
*/
INT32 altsize;
/* Additionnal information */
/* object description */
char *descr;
/* Stores the stack start when an alternate stack is required */
void *bottom;
/*
* This thread creation is expected to:
* 0 => succeed; 1 => fail; 2 => unknown
*/
INT32 result;
/*
* This semaphore is used to signal the end of
* the detached threads execution
*/
sem_t sem;
} __scenario;
#define NSCENAR 10 // (sizeof(scenarii)/sizeof(scenarii[0]))
extern __scenario g_scenarii[];
extern pthread_key_t g_key;
extern pthread_key_t g_key1;
extern pthread_key_t g_key2;
extern pthread_key_t g_pthreadKeyTest[PTHREAD_KEY_NUM];
extern pthread_t g_newTh;
extern pthread_t g_newTh2;
extern UINT32 g_taskMaxNum;
extern pthread_once_t g_onceControl;
extern pthread_cond_t g_pthreadCondTest1;
extern pthread_mutex_t g_pthreadMutexTest1;
extern pthread_mutex_t g_pthreadMutexTest2;
extern INT32 g_startNum;
extern INT32 g_wakenNum;
extern INT32 g_t1Start;
extern INT32 g_signaled;
extern INT32 g_wokenUp;
extern INT32 g_lowDone;
extern INT32 g_pthreadSem;
extern INT32 g_pthreadScopeValue;
extern INT32 g_pthreadSchedInherit;
extern INT32 g_pthreadSchedPolicy;
extern sem_t g_pthreadSem1;
extern sem_t g_pthreadSem2;
extern pthread_t g_pthreadTestTh;
extern INT32 g_iCunitErrCode;
extern INT32 g_iCunitErrLineNo;
#ifdef LOSCFG_AARCH64
#define PTHREAD_STACK_MIN_TEST (PTHREAD_STACK_MIN * 3)
#else
#define PTHREAD_STACK_MIN_TEST PTHREAD_STACK_MIN
#endif
extern pthread_t g_Test_new_th;
struct testdata {
pthread_mutex_t mutex;
pthread_cond_t cond;
};
extern struct testdata g_td;
extern unsigned int sleep(unsigned int seconds);
extern unsigned int alarm(unsigned int seconds);
extern int map_errno(UINT32 err);
extern long sysconf(int name);
extern void posix_signal_start(void);
VOID ScenarInit(VOID);
VOID ScenarFini(VOID);
pthread_t TestPthreadSelf(void);
extern UINT32 PosixPthreadInit(pthread_attr_t *attr, INT32 pri);
#if defined(LOSCFG_USER_TEST_SMOKE)
VOID ItPosixPthread003(VOID);
VOID ItPosixPthread004(VOID);
VOID ItPosixPthread005(VOID);
VOID ItPosixPthread006(VOID);
VOID IT_POSIX_PTHREAD_009(VOID);
VOID ItPosixPthread018(VOID);
VOID ItPosixPthread019(VOID);
VOID ItPosixPthread020(VOID);
VOID ItPosixPthread021(VOID);
VOID ItPosixPthread022(VOID);
VOID ItPosixPthread203(VOID);
#endif
#if defined(LOSCFG_USER_TEST_FULL)
VOID ItPosixPthread001(VOID);
VOID ItPosixPthread002(VOID);
VOID ItPosixPthread007(VOID);
VOID IT_POSIX_PTHREAD_008(VOID);
VOID ItPosixPthread010(VOID);
VOID ItPosixPthread011(VOID);
VOID ItPosixPthread013(VOID);
VOID ItPosixPthread023(VOID);
VOID ItPosixPthread025(VOID);
VOID ItPosixPthread026(VOID);
VOID ItPosixPthread027(VOID);
VOID ItPosixPthread028(VOID);
VOID ItPosixPthread029(VOID);
VOID ItPosixPthread030(VOID);
VOID ItPosixPthread031(VOID);
VOID IT_POSIX_PTHREAD_032(VOID);
VOID IT_POSIX_PTHREAD_033(VOID);
VOID ItPosixPthread034(VOID);
VOID ItPosixPthread035(VOID);
VOID ItPosixPthread039(VOID);
VOID ItPosixPthread040(VOID);
VOID IT_POSIX_PTHREAD_041(VOID);
VOID ItPosixPthread042(VOID);
VOID ItPosixPthread044(VOID);
VOID ItPosixPthread045(VOID);
VOID ItPosixPthread046(VOID);
VOID IT_POSIX_PTHREAD_047(VOID);
VOID IT_POSIX_PTHREAD_048(VOID);
VOID IT_POSIX_PTHREAD_049(VOID);
VOID IT_POSIX_PTHREAD_050(VOID);
VOID ItPosixPthread051(VOID);
VOID ItPosixPthread052(VOID);
VOID ItPosixPthread053(VOID);
VOID ItPosixPthread054(VOID);
VOID ItPosixPthread055(VOID);
VOID IT_POSIX_PTHREAD_056(VOID);
VOID ItPosixPthread057(VOID);
VOID IT_POSIX_PTHREAD_058(VOID);
VOID ItPosixPthread059(VOID);
VOID ItPosixPthread060(VOID);
VOID ItPosixPthread061(VOID);
VOID ItPosixPthread062(VOID);
VOID ItPosixPthread063(VOID);
VOID ItPosixPthread064(VOID);
VOID ItPosixPthread066(VOID);
VOID IT_POSIX_PTHREAD_068(VOID);
VOID ItPosixPthread069(VOID);
VOID ItPosixPthread070(VOID);
VOID ItPosixPthread071(VOID);
VOID ItPosixPthread072(VOID);
VOID ItPosixPthread073(VOID);
VOID ItPosixPthread074(VOID);
VOID IT_POSIX_PTHREAD_075(VOID);
VOID ItPosixPthread078(VOID);
VOID ItPosixPthread079(VOID);
VOID ItPosixPthread080(VOID);
VOID ItPosixPthread081(VOID);
VOID ItPosixPthread082(VOID);
VOID ItPosixPthread083(VOID);
VOID ItPosixPthread084(VOID);
VOID ItPosixPthread085(VOID);
VOID ItPosixPthread087(VOID);
VOID ItPosixPthread088(VOID);
VOID ItPosixPthread089(VOID);
VOID ItPosixPthread090(VOID);
VOID ItPosixPthread091(VOID);
VOID ItPosixPthread092(VOID);
VOID ItPosixPthread094(VOID);
VOID ItPosixPthread095(VOID);
VOID IT_POSIX_PTHREAD_098(VOID);
VOID IT_POSIX_PTHREAD_101(VOID);
VOID IT_POSIX_PTHREAD_102(VOID);
VOID IT_POSIX_PTHREAD_103(VOID);
VOID IT_POSIX_PTHREAD_105(VOID);
VOID ItPosixPthread106(VOID);
VOID ItPosixPthread107(VOID);
VOID IT_POSIX_PTHREAD_108(VOID);
VOID IT_POSIX_PTHREAD_110(VOID);
VOID IT_POSIX_PTHREAD_112(VOID);
VOID ItPosixPthread116(VOID);
VOID ItPosixPthread121(VOID);
VOID ItPosixPthread123(VOID);
VOID ItPosixPthread124(VOID);
VOID ItPosixPthread125(VOID);
VOID ItPosixPthread127(VOID);
VOID IT_POSIX_PTHREAD_128(VOID);
VOID ItPosixPthread129(VOID);
VOID ItPosixPthread132(VOID);
VOID ItPosixPthread133(VOID);
VOID ItPosixPthread134(VOID);
VOID ItPosixPthread136(VOID);
VOID ItPosixPthread138(VOID);
VOID ItPosixPthread141(VOID);
VOID ItPosixPthread142(VOID);
VOID ItPosixPthread144(VOID);
VOID IT_POSIX_PTHREAD_150(VOID);
VOID ItPosixPthread152(VOID);
VOID ItPosixPthread154(VOID);
VOID ItPosixPthread166(VOID);
VOID ItPosixPthread167(VOID);
VOID ItPosixPthread173(VOID);
VOID ItPosixPthread175(VOID);
VOID ItPosixPthread176(VOID);
VOID ItPosixPthread177(VOID);
VOID ItPosixPthread182(VOID);
VOID ItPosixPthread185(VOID);
VOID ItPosixPthread186(VOID);
VOID ItPosixPthread187(VOID);
VOID ItPosixPthread188(VOID);
VOID ItPosixPthread193(VOID);
VOID ItPosixPthread194(VOID);
VOID IT_POSIX_PTHREAD_197(VOID);
VOID IT_POSIX_PTHREAD_198(VOID);
VOID ItPosixPthread200(VOID);
VOID ItPosixPthread204(VOID);
VOID ItPosixPthread205(VOID);
VOID ItPosixPthread206(VOID);
VOID IT_POSIX_PTHREAD_208(VOID);
VOID ItPosixPthread209(VOID);
VOID IT_POSIX_PTHREAD_211(VOID);
VOID ItPosixPthread213(VOID);
VOID IT_POSIX_PTHREAD_214(VOID);
VOID IT_POSIX_PTHREAD_215(VOID);
VOID ItPosixPthread217(VOID);
VOID ItPosixPthread218(VOID);
VOID ItPosixPthread219(VOID);
VOID ItPosixPthread221(VOID);
VOID ItPosixPthread224(VOID);
VOID ItPosixPthread226(VOID);
VOID ItPosixPthread233(VOID);
VOID IT_POSIX_PTHREAD_237(VOID);
VOID ItPosixPthread238(VOID);
VOID ItPosixPthread239(VOID);
VOID ItPosixPthread240(VOID);
VOID ItPosixPthread241(VOID);
VOID IT_POSIX_PTHREAD_246(VOID);
#endif
#if defined(LOSCFG_USER_TEST_PRESSURE)
VOID ItPosixPthread065(VOID);
#endif
#if defined(LOSCFG_USER_TEST_LLT)
VOID LltPosixPthread001(VOID);
VOID LltPosixPthread002(VOID);
VOID LltPosixPthread003(VOID);
VOID LltPosixPthread004(VOID);
VOID ItPosixPthread012(VOID);
VOID ItPosixPthread014(VOID);
VOID ItPosixPthread015(VOID);
VOID ItPosixPthread016(VOID);
VOID ItPosixPthread017(VOID);
VOID ItPosixPthread024(VOID);
VOID ItPosixPthread036(VOID);
VOID ItPosixPthread037(VOID);
VOID ItPosixPthread038(VOID);
VOID ItPosixPthread043(VOID);
VOID ItPosixPthread067(VOID);
VOID ItPosixPthread076(VOID);
VOID ItPosixPthread077(VOID);
VOID ItPosixPthread086(VOID);
VOID ItPosixPthread090(VOID);
VOID ItPosixPthread093(VOID);
VOID ItPosixPthread096(VOID);
VOID ItPosixPthread097(VOID);
VOID ItPosixPthread099(VOID);
VOID ItPosixPthread100(VOID);
VOID ItPosixPthread104(VOID);
VOID ItPosixPthread109(VOID);
VOID ItPosixPthread111(VOID);
VOID ItPosixPthread113(VOID);
VOID ItPosixPthread114(VOID);
VOID ItPosixPthread115(VOID);
VOID ItPosixPthread169(VOID);
VOID ItPosixPthread170(VOID);
VOID ItPosixPthread172(VOID);
VOID ItPosixPthread179(VOID);
VOID ItPosixPthread180(VOID);
VOID ItPosixPthread181(VOID);
VOID ItPosixPthread184(VOID);
VOID ItPosixPthread190(VOID);
VOID ItPosixPthread191(VOID);
VOID ItPosixPthread199(VOID);
VOID ItPosixPthread201(VOID);
VOID ItPosixPthread202(VOID);
#endif
#endif /* _IT_POSIX_PTHREAD_H */