* 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.
*/
#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 <regex.h>
#include "securec.h"
#include "knet_lock.h"
#include "common.h"
#include "mock.h"
#include "knet_types.h"
#include "knet_log.h"
#include "knet_utils.h"
DTEST_CASE_F(BASE, TEST_BASE_PARSE_MAC_NORMAL, NULL, NULL)
{
KTestMock *Mock = CreateMock();
DT_ASSERT_NOT_EQUAL(Mock, NULL);
int ret = 0;
uint8_t outputMac;
ret = KNET_ParseMac(NULL, NULL);
DT_ASSERT_EQUAL(ret, -1);
ret = KNET_ParseMac("00:1A:2B:3C:4D:5E", NULL);
DT_ASSERT_EQUAL(ret, -1);
ret = KNET_ParseMac(":", &outputMac);
DT_ASSERT_EQUAL(ret, -1);
ret = KNET_ParseMac("000:1A:2B:3C:4D:5E", &outputMac);
DT_ASSERT_EQUAL(ret, -1);
ret = KNET_ParseMac("00:1A:2B:3C:4D:5E:6F", &outputMac);
DT_ASSERT_EQUAL(ret, -1);
ret = KNET_ParseMac("GG:1A:2B:3C:4D:5E", &outputMac);
DT_ASSERT_EQUAL(ret, -1);
Mock->Create(sscanf_s, TEST_GetFuncRetPositive(0));
ret = KNET_ParseMac("00:1A:2B:3C:4D:5E", &outputMac);
DT_ASSERT_EQUAL(ret, -1);
Mock->Delete(sscanf_s);
ret = KNET_ParseMac("00.1A.2B.3C.4D.5E", &outputMac);
DT_ASSERT_EQUAL(ret, -1);
ret = KNET_ParseMac("00:1A:2B:3c:4d:5e", &outputMac);
DT_ASSERT_EQUAL(ret, 0);
DeleteMock(Mock);
}
DTEST_CASE_F(BASE, TEST_REG_MATCH_NORMAL, NULL, NULL)
{
KTestMock *Mock = CreateMock();
DT_ASSERT_NOT_EQUAL(Mock, NULL);
bool ret;
ret = KNET_RegMatch("^[0-9]+$", "12345");
DT_ASSERT_EQUAL(ret, true);
ret = KNET_RegMatch("^[a-zA-Z]+$", "123abc");
DT_ASSERT_EQUAL(ret, false);
ret = KNET_RegMatch(NULL, "test_string");
DT_ASSERT_EQUAL(ret, false);
ret = KNET_RegMatch("test_pattern", NULL);
DT_ASSERT_EQUAL(ret, false);
ret = KNET_RegMatch("([a-z]*", "test");
DT_ASSERT_EQUAL(ret, false);
Mock->Create(regcomp, TEST_GetFuncRetPositive(1));
ret = KNET_RegMatch("pattern", "string");
DT_ASSERT_EQUAL(ret, false);
Mock->Delete(regcomp);
Mock->Create(regexec, TEST_GetFuncRetPositive(1));
ret = KNET_RegMatch("^[A-Z]+$", "abc123");
DT_ASSERT_EQUAL(ret, false);
Mock->Delete(regexec);
Mock->Create(regexec, TEST_GetFuncRetPositive(2));
ret = KNET_RegMatch("^[a-z]+$", "ABC123");
DT_ASSERT_EQUAL(ret, false);
Mock->Delete(regexec);
DeleteMock(Mock);
}
DTEST_CASE_F(MAIN_DAEMON, TEST_KNET_TRANS_STR_TO_NUM, NULL, NULL)
{
uint32_t num;
int32_t ret = 0;
ret = KNET_TransStrToNum("123", NULL);
DT_ASSERT_EQUAL(ret, -1);
ret = KNET_TransStrToNum(NULL, &num);
DT_ASSERT_EQUAL(ret, -1);
ret = KNET_TransStrToNum("123a", &num);
DT_ASSERT_EQUAL(ret, -1);
ret = KNET_TransStrToNum("", &num);
DT_ASSERT_EQUAL(ret, 0);
ret = KNET_TransStrToNum("9223372036854775808", &num);
DT_ASSERT_EQUAL(ret, -1);
ret = KNET_TransStrToNum("-1", &num);
DT_ASSERT_EQUAL(ret, -1);
ret = KNET_TransStrToNum("4294967296", &num);
DT_ASSERT_EQUAL(ret, -1);
ret = KNET_TransStrToNum("123", &num);
DT_ASSERT_EQUAL(ret, 0);
ret = KNET_TransStrToNum("0", &num);
DT_ASSERT_EQUAL(ret, 0);
DT_ASSERT_EQUAL(num, 0);
ret = KNET_TransStrToNum("4294967295", &num);
DT_ASSERT_EQUAL(ret, 0);
}
DTEST_CASE_F(BASE, TEST_CPU_DETECTED, NULL, NULL)
{
KTestMock *Mock = CreateMock();
DT_ASSERT_NOT_EQUAL(Mock, NULL);
int ret;
Mock->Create(snprintf_s, TEST_GetFuncRetNegative(1));
ret = KNET_CpuDetected(0);
DT_ASSERT_EQUAL(ret, -1);
Mock->Delete(snprintf_s);
Mock->Create(access, TEST_GetFuncRetPositive(1));
ret = KNET_CpuDetected(0);
DT_ASSERT_EQUAL(ret, -1);
Mock->Delete(access);
ret = KNET_CpuDetected(0);
DT_ASSERT_EQUAL(ret, 0);
DeleteMock(Mock);
}