分支昶
wcr 7 months ago
parent e885d4d491
commit d38443f8c2

@ -31,50 +31,80 @@
#include "lt_net_netdb.h"
// 引入头文件,可能包含了网络数据库相关的函数声明和宏定义。
static int GetServByPortRTest(void)
{
// refer to the `/etc/services' file.
char serv_file[] = "ssh 22/tcp\n";
// 定义一个模拟的services文件内容包含ssh服务的条目。
char *pathList[] = {"/etc/services"};
// 定义services文件的路径列表这里只有一个路径指向系统的services文件。
char *streamList[] = {static_cast<char *>(serv_file)};
// 定义模拟的services文件流列表这里将模拟的services文件内容转换为char*类型。
int streamLen[] = {sizeof(serv_file)};
// 定义模拟的services文件流长度列表。
const int file_number = 1;
// 定义文件数量。
int flag = PrepareFileEnv(pathList, streamList, streamLen, file_number);
// 调用PrepareFileEnv函数准备文件环境模拟services文件。
if (flag != 0) {
RecoveryFileEnv(pathList, file_number);
return -1;
}
// 如果准备文件环境失败,则恢复原始文件环境并返回错误码。
struct servent se, *result = NULL;
// 定义servent结构体变量se用于存储getservbyport_r函数的结果。
char buf[1024];
// 定义一个足够大的缓冲区buf用于getservbyport_r函数。
char buf1[2];
// 定义一个非常小的缓冲区buf1用于测试getservbyport_r函数的边界条件。
const int test_port_no = 22; // ssh port number is 22
// 定义测试的端口号这里是22即SSH服务的标准端口号。
int ret = getservbyport_r(htons(test_port_no), "tcp", &se, buf, sizeof buf, &result);
// 使用getservbyport_r函数根据端口号和协议名"tcp"获取servent结构体指针。
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
// 断言返回值ret为0表示getservbyport_r函数调用成功。
ICUNIT_ASSERT_NOT_EQUAL(result, NULL, -1);
// 断言result不为空即getservbyport_r成功。
ICUNIT_ASSERT_STRING_EQUAL(se.s_name, "ssh", -1);
// 断言返回的服务名称与"ssh"相同。
ICUNIT_ASSERT_STRING_EQUAL(se.s_proto, "tcp", -1);
// 断言返回的服务协议与"tcp"相同。
ICUNIT_ASSERT_STRING_EQUAL(se.s_aliases[0], "ssh", -1);
// 断言返回的服务别名与"ssh"相同。
ICUNIT_ASSERT_STRING_EQUAL(result->s_name, "ssh", -1);
// 断言result结构体中的服务名称与"ssh"相同。
ICUNIT_ASSERT_STRING_EQUAL(result->s_proto, "tcp", -1);
// 断言result结构体中的服务协议与"tcp"相同。
ICUNIT_ASSERT_STRING_EQUAL(result->s_aliases[0], "ssh", -1);
// 断言result结构体中的服务别名与"ssh"相同。
ret = getservbyport_r(htons(test_port_no), "udp", &se, buf, sizeof buf, &result);
// 尝试使用getservbyport_r函数根据端口号和协议名"udp"获取servent结构体指针预期失败。
ICUNIT_ASSERT_EQUAL(ret, ENOENT, -1);
// 断言返回值ret为ENOENT表示未找到对应服务。
ret = getservbyport_r(htons(test_port_no), "udp", &se, buf1, sizeof buf1, &result);
// 测试getservbyport_r函数的边界条件传入的缓冲区太小。
ICUNIT_ASSERT_EQUAL(ret, ERANGE, ret);
// 断言返回值ret为ERANGE表示缓冲区太小。
ret = getservbyport_r(htons(test_port_no), "ud", &se, buf, sizeof buf, &result);
// 尝试使用getservbyport_r函数根据端口号和不完整的协议名"ud"获取servent结构体指针预期失败。
ICUNIT_ASSERT_EQUAL(ret, EINVAL, ret);
// 断言返回值ret为EINVAL表示提供的协议名不合法。
RecoveryFileEnv(pathList, file_number);
// 恢复原始文件环境。
return ICUNIT_SUCCESS;
// 返回测试成功。
}
void NetNetDbTest012(void)
{
TEST_ADD_CASE(__FUNCTION__, GetServByPortRTest, TEST_POSIX, TEST_TCP, TEST_LEVEL0, TEST_FUNCTION);
}
// 定义测试用例将GetServByPortRTest函数注册为一个测试案例。

@ -1,5 +1,5 @@
/*
* opyright (c) 2021-2021, Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2021-2021, 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,
@ -30,6 +30,7 @@
#include "lt_net_netdb.h"
#include <net/if.h>
// 引入头文件,包括网络数据库相关的函数声明和宏定义,以及网络接口相关的函数和宏定义。
static int IfNameToIndexTest(void)
{
@ -38,20 +39,30 @@ static int IfNameToIndexTest(void)
char *str = nullptr;
ret = if_nametoindex("lo");
// 调用if_nametoindex函数将接口名称"lo"转换为系统索引。
ICUNIT_ASSERT_NOT_EQUAL(ret, 0, -1);
// 断言转换成功返回的索引值不为0。
str = if_indextoname(ret, if_name);
// 调用if_indextoname函数将系统索引转换回接口名称。
ICUNIT_ASSERT_NOT_EQUAL(str, nullptr, -1);
// 断言转换成功返回的字符串指针不为nullptr。
ICUNIT_ASSERT_STRING_EQUAL(if_name, "lo", -1);
// 断言转换回的接口名称为"lo"。
ret = if_nametoindex("eth1");
// 尝试调用if_nametoindex函数将接口名称"eth1"转换为系统索引。
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
// 断言转换失败返回的索引值为0。
ICUNIT_ASSERT_EQUAL(errno, ENODEV, errno);
// 断言errno被设置为ENODEV表示没有找到对应的设备。
return ICUNIT_SUCCESS;
// 返回测试成功。
}
void NetNetDbTest015(void)
{
TEST_ADD_CASE(__FUNCTION__, IfNameToIndexTest, TEST_POSIX, TEST_TCP, TEST_LEVEL0, TEST_FUNCTION);
}
// 定义测试用例将IfNameToIndexTest函数注册为一个测试案例。
Loading…
Cancel
Save