enh: ut for os threads

This commit is contained in:
Shengliang Guan 2024-12-13 14:56:57 +08:00
parent c482868a47
commit 3737ce4fd2
1 changed files with 76 additions and 49 deletions

View File

@ -29,38 +29,91 @@
#include "os.h" #include "os.h"
#include "tlog.h" #include "tlog.h"
static void *funcPtr0(void *param) { return NULL; } static int32_t globalVar = 0;
static void *funcPtr1(void *param) {
taosMsleep(1000); static void *funcPtr100(void *param) {
taosMsleep(100);
return NULL; return NULL;
} }
TEST(osThreadTests, para1) { static void *funcPtr500(void *param) {
TdThread tid1 = {0}; taosMsleep(500);
TdThread tid2 = {0}; return NULL;
int32_t reti = 0; }
TdThreadAttr attr = {0};
TdThreadAttr attr2 = {0};
int32_t param = 0;
(void)taosThreadAttrInit(&attr);
reti = taosThreadCreate(NULL, NULL, funcPtr0, NULL); static void *funcPtrExit1(void *param) {
taosThreadExit(NULL);
return NULL;
}
static void *funcPtrExit2(void *param) {
taosThreadExit(&globalVar);
return NULL;
}
static void funcPtrKey(void *param) { taosMsleep(100); }
TEST(osThreadTests, thread) {
TdThread tid1 = {0};
TdThread tid2 = {0};
int32_t reti = 0;
reti = taosThreadCreate(NULL, NULL, funcPtr100, NULL);
EXPECT_NE(reti, 0); EXPECT_NE(reti, 0);
reti = taosThreadCreate(&tid1, NULL, NULL, NULL); reti = taosThreadCreate(&tid1, NULL, NULL, NULL);
EXPECT_NE(reti, 0); EXPECT_NE(reti, 0);
reti = taosThreadCreate(&tid1, NULL, funcPtr1, NULL); reti = taosThreadCreate(&tid1, NULL, funcPtr100, NULL);
EXPECT_EQ(reti, 0); EXPECT_EQ(reti, 0);
reti = taosThreadCancel(tid1); reti = taosThreadCancel(tid1);
EXPECT_EQ(reti, 0); EXPECT_EQ(reti, 0);
reti = taosThreadCreate(&tid2, NULL, funcPtr0, NULL); reti = taosThreadCreate(&tid2, NULL, funcPtr500, NULL);
EXPECT_EQ(reti, 0); EXPECT_EQ(reti, 0);
taosMsleep(1000); taosMsleep(1000);
reti = taosThreadCancel(tid2); reti = taosThreadCancel(tid2);
EXPECT_EQ(reti, 0); EXPECT_EQ(reti, 0);
taosThreadDetach(tid1);
reti = taosThreadCreate(&tid2, NULL, funcPtr500, NULL);
EXPECT_EQ(reti, 0);
reti = taosThreadDetach(tid2);
reti = taosThreadEqual(tid1, tid2);
EXPECT_NE(reti, 0);
reti = taosThreadCreate(&tid2, NULL, funcPtrExit1, NULL);
EXPECT_EQ(reti, 0);
reti = taosThreadCreate(&tid2, NULL, funcPtrExit2, NULL);
EXPECT_EQ(reti, 0);
reti = taosThreadCreate(&tid2, NULL, funcPtr500, NULL);
EXPECT_EQ(reti, 0);
taosThreadKill(tid2, SIGINT);
int32_t policy;
struct sched_param param;
taosThreadGetSchedParam(tid2, &policy, &param);
taosThreadGetSchedParam(tid2, NULL, &param);
taosThreadGetSchedParam(tid2, &policy, NULL);
TdThreadKey key;
taosThreadKeyCreate(&key, funcPtrKey);
taosThreadGetSpecific(key);
taosThreadKeyDelete(key);
}
TEST(osThreadTests, attr) {
int32_t reti = 0;
TdThreadAttr attr = {0};
int32_t param = 0;
reti = taosThreadAttrInit(NULL);
EXPECT_NE(reti, 0);
reti = taosThreadAttrDestroy(NULL); reti = taosThreadAttrDestroy(NULL);
EXPECT_NE(reti, 0); EXPECT_NE(reti, 0);
(void)taosThreadAttrInit(&attr);
reti = taosThreadAttrSetDetachState(&attr, PTHREAD_CREATE_JOINABLE); reti = taosThreadAttrSetDetachState(&attr, PTHREAD_CREATE_JOINABLE);
EXPECT_EQ(reti, 0); EXPECT_EQ(reti, 0);
reti = taosThreadAttrSetDetachState(&attr, -1); reti = taosThreadAttrSetDetachState(&attr, -1);
@ -141,21 +194,22 @@ TEST(osThreadTests, para1) {
EXPECT_NE(reti, 0); EXPECT_NE(reti, 0);
reti = taosThreadAttrGetStackSize(&attr, NULL); reti = taosThreadAttrGetStackSize(&attr, NULL);
EXPECT_NE(reti, 0); EXPECT_NE(reti, 0);
}
reti = taosThreadAttrInit(NULL); TEST(osThreadTests, cond) {
EXPECT_NE(reti, 0); int32_t reti = 0;
reti = taosThreadCondDestroy(NULL);
EXPECT_NE(reti, 0);
reti = taosThreadCondInit(NULL, NULL); reti = taosThreadCondInit(NULL, NULL);
EXPECT_NE(reti, 0); EXPECT_NE(reti, 0);
reti = taosThreadCondDestroy(NULL);
EXPECT_NE(reti, 0);
reti = taosThreadCondSignal(NULL); reti = taosThreadCondSignal(NULL);
EXPECT_NE(reti, 0); EXPECT_NE(reti, 0);
reti = taosThreadCondBroadcast(NULL); reti = taosThreadCondBroadcast(NULL);
EXPECT_NE(reti, 0); EXPECT_NE(reti, 0);
TdThreadCond cond; TdThreadCond cond{0};
TdThreadMutex mutex; TdThreadMutex mutex = {0};
reti = taosThreadCondWait(&cond, NULL); reti = taosThreadCondWait(&cond, NULL);
EXPECT_NE(reti, 0); EXPECT_NE(reti, 0);
reti = taosThreadCondWait(NULL, &mutex); reti = taosThreadCondWait(NULL, &mutex);
@ -169,7 +223,7 @@ TEST(osThreadTests, para1) {
reti = taosThreadCondTimedWait(&cond, &mutex, NULL); reti = taosThreadCondTimedWait(&cond, &mutex, NULL);
EXPECT_NE(reti, 0); EXPECT_NE(reti, 0);
TdThreadCondAttr condattr; TdThreadCondAttr condattr = {0};
(void)taosThreadCondAttrInit(&condattr); (void)taosThreadCondAttrInit(&condattr);
reti = taosThreadCondAttrInit(NULL); reti = taosThreadCondAttrInit(NULL);
EXPECT_NE(reti, 0); EXPECT_NE(reti, 0);
@ -193,34 +247,7 @@ TEST(osThreadTests, para1) {
EXPECT_EQ(reti, 0); EXPECT_EQ(reti, 0);
} }
TEST(osThreadTests, option) { TEST(osThreadTests, spinlock) {
int32_t reti = 0;
TdThreadSpinlock lock = {0};
reti = taosThreadSpinInit(&lock, -1);
EXPECT_NE(reti, 0);
reti = taosThreadSpinLock(&lock);
EXPECT_NE(reti, 0);
reti = taosThreadSpinTrylock(&lock);
EXPECT_NE(reti, 0);
reti = taosThreadSpinUnlock(&lock);
EXPECT_NE(reti, 0);
reti = taosThreadSpinDestroy(&lock);
EXPECT_NE(reti, 0);
reti = taosThreadSpinInit(NULL, 0);
EXPECT_NE(reti, 0);
reti = taosThreadSpinLock(NULL);
EXPECT_NE(reti, 0);
reti = taosThreadSpinTrylock(NULL);
EXPECT_NE(reti, 0);
reti = taosThreadSpinUnlock(NULL);
EXPECT_NE(reti, 0);
reti = taosThreadSpinDestroy(NULL);
EXPECT_NE(reti, 0);
}
TEST(osThreadTests, splilock) {
int32_t reti = 0; int32_t reti = 0;
TdThreadSpinlock lock = {0}; TdThreadSpinlock lock = {0};