* Copyright (c) Huawei Technologies Co., Ltd. 2026. All rights reserved.
* K-NET is licensed under the Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
http://license.coscl.org.cn/MulanPSL2
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
*/
#define _GNU_SOURCE
#include <pthread.h>
#include <sched.h>
#include "knet_log.h"
#include "knet_thread.h"
#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <sys/time.h>
#include <sys/select.h>
#include <sys/epoll.h>
#include <unistd.h>
#include <fcntl.h>
#include "securec.h"
#include "knet_lock.h"
#include "common.h"
#include "mock.h"
void *ThreadFunc(void *args)
{
printf("Thread_Func\n");
}
DTEST_CASE_F(THREAD, TEST_THREAD_CREATE_NORMAL, NULL, NULL)
{
int32_t ret = 0;
uint64_t *thread = 1;
KTestMock *Mock = CreateMock();
DT_ASSERT_NOT_EQUAL(Mock, NULL);
Mock->Create(pthread_create, TEST_GetFuncRetPositive(0));
uint64_t threadID = 0;
ret = KNET_CreateThread(&threadID, ThreadFunc, NULL);
DT_ASSERT_EQUAL(ret, 0);
Mock->Delete(pthread_create);
DeleteMock(Mock);
}
DTEST_CASE_F(THREAD, TEST_THREAD_SET_NORMAL, NULL, NULL)
{
int32_t ret = 0;
uint64_t threadId = 0;
uint16_t cpus[1];
cpus[0] = 1;
uint32_t len = 1;
ret = KNET_SetThreadAffinity(threadId, NULL, len);
DT_ASSERT_EQUAL(ret, -1);
KTestMock *Mock = CreateMock();
DT_ASSERT_NOT_EQUAL(Mock, NULL);
Mock->Create(pthread_setaffinity_np, TEST_GetFuncRetPositive(0));
ret = KNET_SetThreadAffinity(threadId, cpus, len);
DT_ASSERT_EQUAL(ret, 0);
Mock->Delete(pthread_setaffinity_np);
DeleteMock(Mock);
}
DTEST_CASE_F(THREAD, TEST_THREAD_GET_NORMAL, NULL, NULL)
{
int32_t ret = 0;
uint64_t threadId = 0;
uint16_t cpus[1];
cpus[0] = 1;
uint32_t len[1];
len[0] = 1;
ret = KNET_GetThreadAffinity(threadId, NULL, len);
DT_ASSERT_EQUAL(ret, -1);
KTestMock *Mock = CreateMock();
DT_ASSERT_NOT_EQUAL(Mock, NULL);
Mock->Create(pthread_getaffinity_np, TEST_GetFuncRetPositive(0));
ret = KNET_GetThreadAffinity(threadId, cpus, len);
DT_ASSERT_EQUAL(ret, 0);
Mock->Delete(pthread_getaffinity_np);
DeleteMock(Mock);
}
DTEST_CASE_F(THREAD, TEST_THREAD_JOIN_NORMAL, NULL, NULL)
{
int32_t res = 0;
uint64_t threadId = 0;
void **ret = { 0 };
KTestMock *Mock = CreateMock();
DT_ASSERT_NOT_EQUAL(Mock, NULL);
Mock->Create(pthread_join, TEST_GetFuncRetPositive(0));
res = KNET_JoinThread(threadId, ret);
DT_ASSERT_EQUAL(res, 0);
Mock->Delete(pthread_join);
DeleteMock(Mock);
}
DTEST_CASE_F(THREAD, TEST_THREAD_ThreadNameSet_NORMAL, NULL, NULL)
{
int32_t res = 0;
uint64_t threadId = 0;
KTestMock *Mock = CreateMock();
DT_ASSERT_NOT_EQUAL(Mock, NULL);
Mock->Create(pthread_setname_np, TEST_GetFuncRetPositive(0));
res = KNET_ThreadNameSet(threadId, "KnetCpThread");
DT_ASSERT_EQUAL(res, 0);
Mock->Delete(pthread_setname_np);
DeleteMock(Mock);
}
DTEST_CASE_F(THREAD, TEST_THREAD_KNET_ThreadId_NORMAL, NULL, NULL)
{
int32_t res = 0;
uint64_t threadId = 0;
KTestMock *Mock = CreateMock();
DT_ASSERT_NOT_EQUAL(Mock, NULL);
Mock->Create(pthread_self, TEST_GetFuncRetPositive(0));
res = KNET_ThreadId();
DT_ASSERT_EQUAL(res, 0);
Mock->Delete(pthread_self);
DeleteMock(Mock);
}