分支昶
wcr 7 months ago
parent d38443f8c2
commit fa052b7a28

@ -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,
@ -29,6 +29,7 @@
*/
#include "lt_net_netdb.h"
// 引入头文件,可能包含了网络数据库相关的函数声明和宏定义。
static int GetServByNameTest(void)
{
@ -38,43 +39,65 @@ static int GetServByNameTest(void)
"discard 9/udp sink null\n"
"systat 11/tcp users\n"
"ssh 22/tcp\n";
// 定义一个模拟的services文件内容包含多个服务的条目。
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 *se1 = nullptr;
struct servent *se2 = nullptr;
se1 = getservbyname("discard", "tcp");
// 使用getservbyname函数根据服务名"discard"和协议名"tcp"获取servent结构体指针。
ICUNIT_ASSERT_NOT_EQUAL(se1, NULL, -1);
// 断言se1不为空即getservbyname成功。
ICUNIT_ASSERT_STRING_EQUAL(se1->s_name, "discard", -1);
// 断言返回的服务名称与"discard"相同。
ICUNIT_ASSERT_STRING_EQUAL(se1->s_proto, "tcp", -1);
// 断言返回的服务协议与"tcp"相同。
ICUNIT_ASSERT_STRING_EQUAL(se1->s_aliases[0], "discard", -1);
// 断言返回的服务别名与"discard"相同。
se1 = getservbyname("ssh", "tcp");
// 使用getservbyname函数根据服务名"ssh"和协议名"tcp"获取servent结构体指针。
ICUNIT_ASSERT_NOT_EQUAL(se1, nullptr, -1);
// 断言se1不为空即getservbyname成功。
ICUNIT_ASSERT_STRING_EQUAL(se1->s_name, "ssh", -1);
// 断言返回的服务名称与"ssh"相同。
ICUNIT_ASSERT_STRING_EQUAL(se1->s_proto, "tcp", -1);
// 断言返回的服务协议与"tcp"相同。
ICUNIT_ASSERT_STRING_EQUAL(se1->s_aliases[0], "ssh", -1);
// 断言返回的服务别名与"ssh"相同。
se2 = getservbyname("cho", "udp");
// 尝试使用getservbyname函数根据错误的服务名"cho"和协议名"udp"获取servent结构体指针预期失败。
ICUNIT_ASSERT_EQUAL(se2, nullptr, -1);
se2 = getservbyname("systat", "udp");
// 尝试使用getservbyname函数根据服务名"systat"和协议名"udp"获取servent结构体指针预期失败。
ICUNIT_ASSERT_EQUAL(se2, nullptr, -1);
RecoveryFileEnv(pathList, file_number);
// 恢复原始文件环境。
return ICUNIT_SUCCESS;
// 返回测试成功。
}
void NetNetDbTest016(void)
{
TEST_ADD_CASE(__FUNCTION__, GetServByNameTest, TEST_POSIX, TEST_TCP, TEST_LEVEL0, TEST_FUNCTION);
}
// 定义测试用例将GetServByNameTest函数注册为一个测试案例。

@ -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,
@ -29,19 +29,27 @@
*/
#include "lt_net_netdb.h"
// 引入头文件,可能包含了网络数据库相关的函数声明和宏定义。
static int GetServByNameRTest(void)
{
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;
struct servent *result = NULL;
@ -51,29 +59,47 @@ static int GetServByNameRTest(void)
errno = 0;
ret = getservbyname_r("ssh", "tcp", &se, buf1, sizeof buf1, &result);
// 使用getservbyname_r函数根据服务名"ssh"和协议名"tcp"获取servent结构体指针。
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
// 断言返回值ret为0表示getservbyname_r函数调用成功。
ICUNIT_ASSERT_NOT_EQUAL(result, NULL, -1);
// 断言result不为空即getservbyname_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 = getservbyname_r("ssh", "tcp", &se, buf2, sizeof buf2, &result);
// 测试getservbyname_r函数的边界条件传入的缓冲区太小。
ICUNIT_ASSERT_EQUAL(ret, ERANGE, ret);
// 断言返回值ret为ERANGE表示缓冲区太小。
ret = getservbyname_r("ssh", "tp", &se, buf1, sizeof buf1, &result);
// 尝试使用getservbyname_r函数根据服务名"ssh"和错误的协议名"tp"获取servent结构体指针预期失败。
ICUNIT_ASSERT_EQUAL(ret, EINVAL, ret);
// 断言返回值ret为EINVAL表示提供的协议名不合法。
ret = getservbyname_r("sh", "tcp", &se, buf1, sizeof buf1, &result);
// 尝试使用getservbyname_r函数根据不完整的服务名"sh"和协议名"tcp"获取servent结构体指针预期失败。
ICUNIT_ASSERT_EQUAL(ret, ENOENT, ret);
// 断言返回值ret为ENOENT表示未找到对应服务。
RecoveryFileEnv(pathList, file_number);
// 恢复原始文件环境。
return ICUNIT_SUCCESS;
// 返回测试成功。
}
void NetNetDbTest017(void)
{
TEST_ADD_CASE(__FUNCTION__, GetServByNameRTest, TEST_POSIX, TEST_TCP, TEST_LEVEL0, TEST_FUNCTION);
}
// 定义测试用例将GetServByNameRTest函数注册为一个测试案例。

@ -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,
@ -29,6 +29,7 @@
*/
#include "lt_net_netdb.h"
// 引入头文件,可能包含了网络数据库相关的函数声明和宏定义。
static int GetServEntTest(void)
{
@ -39,15 +40,22 @@ static int GetServEntTest(void)
"ssh 100000/tcp\n"
"ssh /tcp\n"
"ssh 22/";
// 定义一个模拟的services文件内容包含多个服务的条目。
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;
}
// 如果准备文件环境失败,则恢复原始文件环境并返回错误码。
/* tcpmux,echo,discard port number is 1,7,9 */
const int tcpmux_port_no = 1;
@ -59,55 +67,96 @@ static int GetServEntTest(void)
struct servent *se3 = nullptr;
se1 = getservent();
// 调用getservent函数获取services数据库中的第一个服务条目。
ICUNIT_ASSERT_NOT_EQUAL(se1, nullptr, -1);
// 断言se1不为空即getservent成功。
ICUNIT_ASSERT_STRING_EQUAL(se1->s_name, "tcpmux", -1);
// 断言返回的服务名称与"tcpmux"相同。
ICUNIT_ASSERT_STRING_EQUAL(se1->s_proto, "tcp", -1);
// 断言返回的服务协议与"tcp"相同。
ICUNIT_ASSERT_EQUAL(se1->s_port, ntohs(tcpmux_port_no), -1);
// 断言返回的服务端口号与转换为网络字节序的1相同。
endservent();
// 调用endservent函数结束服务数据库的搜索。
se2 = getservent();
// 再次调用getservent函数获取services数据库中的第一个服务条目。
ICUNIT_ASSERT_NOT_EQUAL(se2, nullptr, -1);
// 断言se2不为空即getservent成功。
ICUNIT_ASSERT_STRING_EQUAL(se1->s_name, se2->s_name, -1);
// 断言返回的服务名称与之前相同。
ICUNIT_ASSERT_STRING_EQUAL(se1->s_proto, se2->s_proto, -1);
// 断言返回的服务协议与之前相同。
ICUNIT_ASSERT_EQUAL(se1->s_port, se2->s_port, -1);
// 断言返回的服务端口号与之前相同。
setservent(0);
// 调用setservent函数设置服务数据库的搜索位置到开始。
se3 = getservent();
// 调用getservent函数获取services数据库中的第一个服务条目。
ICUNIT_ASSERT_NOT_EQUAL(se3, nullptr, -1);
// 断言se3不为空即getservent成功。
ICUNIT_ASSERT_STRING_EQUAL(se1->s_name, se3->s_name, -1);
// 断言返回的服务名称与之前相同。
ICUNIT_ASSERT_STRING_EQUAL(se1->s_proto, se3->s_proto, -1);
// 断言返回的服务协议与之前相同。
ICUNIT_ASSERT_EQUAL(se1->s_port, se3->s_port, -1);
// 断言返回的服务端口号与之前相同。
se3 = getservent();
// 获取下一个服务条目。
ICUNIT_ASSERT_NOT_EQUAL(se3, nullptr, -1);
// 断言se3不为空即getservent成功。
ICUNIT_ASSERT_STRING_EQUAL(se3->s_name, "echo", -1);
// 断言返回的服务名称与"echo"相同。
ICUNIT_ASSERT_STRING_EQUAL(se3->s_proto, "tcp", -1);
// 断言返回的服务协议与"tcp"相同。
ICUNIT_ASSERT_EQUAL(se3->s_port, ntohs(echo_port_no), -1);
// 断言返回的服务端口号与转换为网络字节序的7相同。
se3 = getservent();
// 获取下一个服务条目。
ICUNIT_ASSERT_NOT_EQUAL(se3, nullptr, -1);
// 断言se3不为空即getservent成功。
ICUNIT_ASSERT_STRING_EQUAL(se3->s_name, "echo", -1);
// 断言返回的服务名称与"echo"相同。
ICUNIT_ASSERT_STRING_EQUAL(se3->s_proto, "udp", -1);
// 断言返回的服务协议与"udp"相同。
ICUNIT_ASSERT_EQUAL(se3->s_port, ntohs(echo_port_no), -1);
// 断言返回的服务端口号与转换为网络字节序的7相同。
se3 = getservent();
// 获取下一个服务条目。
ICUNIT_ASSERT_NOT_EQUAL(se3, nullptr, -1);
// 断言se3不为空即getservent成功。
ICUNIT_ASSERT_STRING_EQUAL(se3->s_name, "discard", -1);
// 断言返回的服务名称与"discard"相同。
ICUNIT_ASSERT_STRING_EQUAL(se3->s_proto, "tcp", -1);
// 断言返回的服务协议与"tcp"相同。
ICUNIT_ASSERT_EQUAL(se3->s_port, ntohs(discard_port_no), -1);
// 断言返回的服务端口号与转换为网络字节序的9相同。
ICUNIT_ASSERT_STRING_EQUAL(se3->s_aliases[0], "sink", -1);
// 断言返回的服务别名列表中的第一个别名与"sink"相同。
ICUNIT_ASSERT_STRING_EQUAL(se3->s_aliases[1], "null", -1);
// 断言返回的服务别名列表中的第二个别名与"null"相同。
ICUNIT_ASSERT_EQUAL(se3->s_aliases[2], nullptr, -1);
// 断言返回的服务别名列表中的第三个别名为nullptr表示别名列表结束。
se3 = getservent();
// 获取下一个服务条目。
ICUNIT_ASSERT_EQUAL(se3, nullptr, -1);
// 断言se3为空即已经到达services数据库的末尾。
endservent();
// 调用endservent函数结束服务数据库的搜索。
RecoveryFileEnv(pathList, file_number);
// 恢复原始文件环境。
return ICUNIT_SUCCESS;
// 返回测试成功。
}
void NetNetDbTest018(void)
{
TEST_ADD_CASE(__FUNCTION__, GetServEntTest, TEST_POSIX, TEST_TCP, TEST_LEVEL0, TEST_FUNCTION);
}
// 定义测试用例将GetServEntTest函数注册为一个测试案例。

@ -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,
@ -29,7 +29,8 @@
*/
#include "lt_net_netdb.h"
#include<arpa/nameser.h>
#include <arpa/nameser.h>
// 引入头文件包括网络数据库相关的函数声明和宏定义以及Nameser.h中定义的与DNS相关的宏和结构。
static int GetHostEntTest(void)
{
@ -38,15 +39,22 @@ static int GetHostEntTest(void)
"10.0.0.0 example example.com example.cn\n"
"10.0.0.0\n"
"10.0.0 example.com";
// 定义一个模拟的hosts文件内容包含IPv4和IPv6的条目。
char *pathList[] = {"/etc/hosts"};
// 定义hosts文件的路径列表这里只有一个路径指向系统的hosts文件。
char *streamList[] = {static_cast<char *>(host_file)};
// 定义模拟的hosts文件流列表这里将模拟的hosts文件内容转换为char*类型。
int streamLen[] = {sizeof(host_file)};
// 定义模拟的hosts文件流长度列表。
const int file_number = 1;
// 定义文件数量。
int flag = PrepareFileEnv(pathList, streamList, streamLen, file_number);
// 调用PrepareFileEnv函数准备文件环境模拟hosts文件。
if (flag != 0) {
RecoveryFileEnv(pathList, file_number);
return -1;
}
// 如果准备文件环境失败,则恢复原始文件环境并返回错误码。
struct hostent *se1 = nullptr;
struct hostent *se2 = nullptr;
@ -54,52 +62,91 @@ static int GetHostEntTest(void)
char addr[INET6_ADDRSTRLEN];
se1 = gethostent();
// 调用gethostent函数获取hosts数据库中的第一个主机条目。
ICUNIT_ASSERT_NOT_EQUAL(se1, nullptr, -1);
// 断言se1不为空即gethostent成功。
ICUNIT_ASSERT_STRING_EQUAL(se1->h_name, "localhost", -1);
// 断言返回的主机名与"localhost"相同。
ICUNIT_ASSERT_EQUAL(se1->h_addrtype, AF_INET, -1);
// 断言返回的地址类型为AF_INETIPv4
ICUNIT_ASSERT_EQUAL(se1->h_length, INADDRSZ, -1);
// 断言返回的地址长度为IPv4地址长度。
ICUNIT_ASSERT_STRING_EQUAL("127.0.0.1", inet_ntop(AF_INET, se1->h_addr_list[0], addr, INET_ADDRSTRLEN), -1);
// 断言返回的第一个地址为"127.0.0.1"。
ICUNIT_ASSERT_EQUAL(se1->h_aliases[0], nullptr, -1);
// 断言别名列表中的第一个别名为nullptr表示别名列表结束。
endhostent();
// 调用endhostent函数结束主机数据库的搜索。
se2 = gethostent();
// 再次调用gethostent函数获取hosts数据库中的第一个主机条目。
ICUNIT_ASSERT_NOT_EQUAL(se2, nullptr, -1);
// 断言se2不为空即gethostent成功。
ICUNIT_ASSERT_STRING_EQUAL(se1->h_name, se2->h_name, -1);
// 断言返回的主机名与之前相同。
ICUNIT_ASSERT_EQUAL(se1->h_addrtype, se2->h_addrtype, -1);
// 断言返回的地址类型与之前相同。
ICUNIT_ASSERT_EQUAL(se1->h_length, se2->h_length, -1);
// 断言返回的地址长度与之前相同。
sethostent(0);
// 调用sethostent函数设置主机数据库的搜索位置到开始。
se3 = gethostent();
// 调用gethostent函数获取hosts数据库中的第一个主机条目。
ICUNIT_ASSERT_NOT_EQUAL(se3, nullptr, -1);
// 断言se3不为空即gethostent成功。
ICUNIT_ASSERT_STRING_EQUAL(se1->h_name, se3->h_name, -1);
// 断言返回的主机名与之前相同。
ICUNIT_ASSERT_EQUAL(se1->h_addrtype, se3->h_addrtype, -1);
// 断言返回的地址类型与之前相同。
ICUNIT_ASSERT_EQUAL(se1->h_length, se3->h_length, -1);
// 断言返回的地址长度与之前相同。
se3 = gethostent();
// 获取下一个主机条目。
ICUNIT_ASSERT_NOT_EQUAL(se3, nullptr, -1);
// 断言se3不为空即gethostent成功。
ICUNIT_ASSERT_EQUAL(se3->h_addrtype, AF_INET6, -1);
// 断言返回的地址类型为AF_INET6IPv6
ICUNIT_ASSERT_STRING_EQUAL(se3->h_name, "ip6-localhost", -1);
// 断言返回的主机名为"ip6-localhost"。
ICUNIT_ASSERT_EQUAL(se3->h_length, IN6ADDRSZ, -1);
// 断言返回的地址长度为IPv6地址长度。
ICUNIT_ASSERT_STRING_EQUAL("::1", inet_ntop(AF_INET6, se3->h_addr_list[0], addr, INET6_ADDRSTRLEN), -1);
// 断言返回的第一个地址为"::1"。
se3 = gethostent();
// 获取下一个主机条目。
ICUNIT_ASSERT_NOT_EQUAL(se3, nullptr, -1);
// 断言se3不为空即gethostent成功。
ICUNIT_ASSERT_EQUAL(se3->h_addrtype, AF_INET, -1);
// 断言返回的地址类型为AF_INETIPv4
ICUNIT_ASSERT_STRING_EQUAL(se3->h_name, "example", -1);
// 断言返回的主机名为"example"。
ICUNIT_ASSERT_STRING_EQUAL("10.0.0.0", inet_ntop(AF_INET, se3->h_addr_list[0], addr, INET_ADDRSTRLEN), -1);
// 断言返回的第一个地址为"10.0.0.0"。
ICUNIT_ASSERT_STRING_EQUAL(se3->h_aliases[0], "example.com", -1);
// 断言别名列表中的第一个别名为"example.com"。
ICUNIT_ASSERT_STRING_EQUAL(se3->h_aliases[1], "example.cn", -1);
// 断言别名列表中的第二个别名为"example.cn"。
ICUNIT_ASSERT_EQUAL(se3->h_aliases[2], nullptr, -1);
// 断言别名列表中的第三个别名为nullptr表示别名列表结束。
se3 = gethostent();
// 获取下一个主机条目。
ICUNIT_ASSERT_EQUAL(se3, nullptr, -1);
// 断言se3为空即已经到达hosts数据库的末尾。
endhostent();
// 调用endhostent函数结束主机数据库的搜索。
RecoveryFileEnv(pathList, file_number);
// 恢复原始文件环境。
return ICUNIT_SUCCESS;
// 返回测试成功。
}
void NetNetDbTest019(void)
{
TEST_ADD_CASE(__FUNCTION__, GetHostEntTest, TEST_POSIX, TEST_TCP, TEST_LEVEL0, TEST_FUNCTION);
}
// 定义测试用例将GetHostEntTest函数注册为一个测试案例。

@ -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,
@ -29,6 +29,7 @@
*/
#include "lt_net_netdb.h"
// 引入头文件,包含了网络数据库相关的函数声明和宏定义。
static int GetNetEntTest(void)
{
@ -36,59 +37,98 @@ static int GetNetEntTest(void)
"link-local 169.254.0.0\n"
"example 192.168.1.0 network example-network\n"
"test1";
// 定义一个模拟的networks文件内容包含网络名称和对应的地址。
char *pathList[] = {"/etc/networks"};
// 定义networks文件的路径列表这里只有一个路径指向系统的networks文件。
char *streamList[] = {static_cast<char *>(network_file)};
// 定义模拟的networks文件流列表这里将模拟的networks文件内容转换为char*类型。
int streamLen[] = {sizeof(network_file)};
// 定义模拟的networks文件流长度列表。
const int file_number = 1;
// 定义文件数量。
int flag = PrepareFileEnv(pathList, streamList, streamLen, file_number);
// 调用PrepareFileEnv函数准备文件环境模拟networks文件。
if (flag != 0) {
RecoveryFileEnv(pathList, file_number);
return -1;
}
// 如果准备文件环境失败,则恢复原始文件环境并返回错误码。
struct netent *se1 = nullptr;
struct netent *se2 = nullptr;
struct netent *se3 = nullptr;
se1 = getnetent();
// 调用getnetent函数获取networks数据库中的第一个网络条目。
ICUNIT_ASSERT_NOT_EQUAL(se1, nullptr, -1);
// 断言se1不为空即getnetent成功。
ICUNIT_ASSERT_STRING_EQUAL(se1->n_name, "link-local", -1);
// 断言返回的网络名称与"link-local"相同。
ICUNIT_ASSERT_EQUAL(se1->n_addrtype, AF_INET, -1);
// 断言返回的地址类型为AF_INETIPv4
ICUNIT_ASSERT_EQUAL(se1->n_net, inet_network("169.254.0.0"), -1);
// 断言返回的网络地址与"169.254.0.0"相同。
ICUNIT_ASSERT_EQUAL(se1->n_aliases[0], nullptr, -1);
// 断言别名列表中的第一个别名为nullptr表示别名列表结束。
endnetent();
// 调用endnetent函数结束网络数据库的搜索。
se2 = getnetent();
// 再次调用getnetent函数获取networks数据库中的第一个网络条目。
ICUNIT_ASSERT_NOT_EQUAL(se2, nullptr, -1);
// 断言se2不为空即getnetent成功。
ICUNIT_ASSERT_STRING_EQUAL(se1->n_name, se2->n_name, -1);
// 断言返回的网络名称与之前相同。
ICUNIT_ASSERT_EQUAL(se1->n_addrtype, se2->n_addrtype, -1);
// 断言返回的地址类型与之前相同。
ICUNIT_ASSERT_EQUAL(se1->n_net, se2->n_net, -1);
// 断言返回的网络地址与之前相同。
setnetent(0);
// 调用setnetent函数设置网络数据库的搜索位置到开始。
se3 = getnetent();
// 调用getnetent函数获取networks数据库中的第一个网络条目。
ICUNIT_ASSERT_NOT_EQUAL(se3, nullptr, -1);
// 断言se3不为空即getnetent成功。
ICUNIT_ASSERT_STRING_EQUAL(se1->n_name, se3->n_name, -1);
// 断言返回的网络名称与之前相同。
ICUNIT_ASSERT_EQUAL(se1->n_addrtype, se3->n_addrtype, -1);
// 断言返回的地址类型与之前相同。
ICUNIT_ASSERT_EQUAL(se1->n_net, se3->n_net, -1);
// 断言返回的网络地址与之前相同。
se1 = getnetent();
// 获取下一个网络条目。
ICUNIT_ASSERT_NOT_EQUAL(se1, nullptr, -1);
// 断言se1不为空即getnetent成功。
ICUNIT_ASSERT_STRING_EQUAL(se1->n_name, "example", -1);
// 断言返回的网络名称与"example"相同。
ICUNIT_ASSERT_EQUAL(se1->n_addrtype, AF_INET, -1);
// 断言返回的地址类型为AF_INETIPv4
ICUNIT_ASSERT_EQUAL(se1->n_net, inet_network("192.168.1.0"), -1);
// 断言返回的网络地址与"192.168.1.0"相同。
ICUNIT_ASSERT_STRING_EQUAL(se1->n_aliases[0], "network", -1);
// 断言别名列表中的第一个别名为"network"。
ICUNIT_ASSERT_STRING_EQUAL(se1->n_aliases[1], "example-network", -1);
// 断言别名列表中的第二个别名为"example-network"。
ICUNIT_ASSERT_EQUAL(se1->n_aliases[2], nullptr, -1);
// 断言别名列表中的第三个别名为nullptr表示别名列表结束。
se1 = getnetent();
// 获取下一个网络条目。
ICUNIT_ASSERT_EQUAL(se1, nullptr, -1);
// 断言se1为空即已经到达networks数据库的末尾。
endnetent();
// 调用endnetent函数结束网络数据库的搜索。
RecoveryFileEnv(pathList, file_number);
// 恢复原始文件环境。
return ICUNIT_SUCCESS;
// 返回测试成功。
}
void NetNetDbTest020(void)
{
TEST_ADD_CASE(__FUNCTION__, GetNetEntTest, TEST_POSIX, TEST_TCP, TEST_LEVEL0, TEST_FUNCTION);
}
// 定义测试用例将GetNetEntTest函数注册为一个测试案例。

@ -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,
@ -29,42 +29,60 @@
*/
#include "lt_net_netdb.h"
// 引入头文件,包含了网络数据库相关的函数声明和宏定义。
static int GetNetBynametTest(void)
{
char network_file[] = "# symbolic names for networks, see networks(5) for more information\n"
"link-local 169.254.0.0\n";
// 定义一个模拟的networks文件内容包含网络名称和对应的地址。
char *pathList[] = {"/etc/networks"};
// 定义networks文件的路径列表这里只有一个路径指向系统的networks文件。
char *streamList[] = {static_cast<char *>(network_file)};
// 定义模拟的networks文件流列表这里将模拟的networks文件内容转换为char*类型。
int streamLen[] = {sizeof(network_file)};
// 定义模拟的networks文件流长度列表。
const int file_number = 1;
// 定义文件数量。
int flag = PrepareFileEnv(pathList, streamList, streamLen, file_number);
// 调用PrepareFileEnv函数准备文件环境模拟networks文件。
if (flag != 0) {
RecoveryFileEnv(pathList, file_number);
return -1;
}
// 如果准备文件环境失败,则恢复原始文件环境并返回错误码。
struct netent *se1 = nullptr;
struct netent *se2 = nullptr;
struct netent *se3 = nullptr;
se1 = getnetbyname("link-local");
// 使用getnetbyname函数根据网络名称"link-local"获取netent结构体指针。
ICUNIT_ASSERT_NOT_EQUAL(se1, nullptr, -1);
// 断言se1不为空即getnetbyname成功。
ICUNIT_ASSERT_STRING_EQUAL(se1->n_name, "link-local", -1);
// 断言返回的网络名称与"link-local"相同。
ICUNIT_ASSERT_EQUAL(se1->n_addrtype, AF_INET, -1);
// 断言返回的地址类型为AF_INETIPv4
ICUNIT_ASSERT_EQUAL(se1->n_net, inet_network("169.254.0.0"), -1);
// 断言返回的网络地址与"169.254.0.0"相同。
se2 = getnetbyname("link");
// 尝试使用getnetbyname函数根据不完整的网络名称"link"获取netent结构体指针预期失败。
ICUNIT_ASSERT_EQUAL(se2, nullptr, -1);
se3 = getnetbyname("hs");
// 尝试使用getnetbyname函数根据不存在的网络名称"hs"获取netent结构体指针预期失败。
ICUNIT_ASSERT_EQUAL(se3, nullptr, -1);
RecoveryFileEnv(pathList, file_number);
// 恢复原始文件环境。
return ICUNIT_SUCCESS;
// 返回测试成功。
}
void NetNetDbTest021(void)
{
TEST_ADD_CASE(__FUNCTION__, GetNetBynametTest, TEST_POSIX, TEST_TCP, TEST_LEVEL0, TEST_FUNCTION);
}
// 定义测试用例将GetNetBynametTest函数注册为一个测试案例。

@ -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,
@ -29,42 +29,60 @@
*/
#include "lt_net_netdb.h"
// 引入头文件,包含了网络数据库相关的函数声明和宏定义。
static int GetNetByAddrtTest(void)
{
char network_file[] = "# symbolic names for networks, see networks(5) for more information\n"
"link-local 169.254.0.0\n";
// 定义一个模拟的networks文件内容包含网络名称和对应的地址。
char *pathList[] = {"/etc/networks"};
// 定义networks文件的路径列表这里只有一个路径指向系统的networks文件。
char *streamList[] = {static_cast<char *>(network_file)};
// 定义模拟的networks文件流列表这里将模拟的networks文件内容转换为char*类型。
int streamLen[] = {sizeof(network_file)};
// 定义模拟的networks文件流长度列表。
const int file_number = 1;
// 定义文件数量。
int flag = PrepareFileEnv(pathList, streamList, streamLen, file_number);
// 调用PrepareFileEnv函数准备文件环境模拟networks文件。
if (flag != 0) {
RecoveryFileEnv(pathList, file_number);
return -1;
}
// 如果准备文件环境失败,则恢复原始文件环境并返回错误码。
struct netent *se1 = nullptr;
struct netent *se2 = nullptr;
struct netent *se3 = nullptr;
se1 = getnetbyaddr(inet_network("169.254.0.0"), AF_INET);
// 使用getnetbyaddr函数根据网络地址"169.254.0.0"和地址族AF_INET获取netent结构体指针。
ICUNIT_ASSERT_NOT_EQUAL(se1, nullptr, -1);
// 断言se1不为空即getnetbyaddr成功。
ICUNIT_ASSERT_STRING_EQUAL(se1->n_name, "link-local", -1);
// 断言返回的网络名称与"link-local"相同。
ICUNIT_ASSERT_EQUAL(se1->n_addrtype, AF_INET, -1);
// 断言返回的地址类型为AF_INETIPv4
ICUNIT_ASSERT_EQUAL(se1->n_net, inet_network("169.254.0.0"), -1);
// 断言返回的网络地址与"169.254.0.0"相同。
se2 = getnetbyaddr(inet_network("169.254.0.1"), AF_INET);
// 尝试使用getnetbyaddr函数根据网络地址"169.254.0.1"和地址族AF_INET获取netent结构体指针预期失败。
ICUNIT_ASSERT_EQUAL(se2, nullptr, -1);
se3 = getnetbyaddr(inet_network("169.254.0.1"), AF_INET6);
// 尝试使用getnetbyaddr函数根据网络地址"169.254.0.1"和地址族AF_INET6获取netent结构体指针预期失败。
ICUNIT_ASSERT_EQUAL(se3, nullptr, -1);
RecoveryFileEnv(pathList, file_number);
// 恢复原始文件环境。
return ICUNIT_SUCCESS;
// 返回测试成功。
}
void NetNetDbTest022(void)
{
TEST_ADD_CASE(__FUNCTION__, GetNetByAddrtTest, TEST_POSIX, TEST_TCP, TEST_LEVEL0, TEST_FUNCTION);
}
// 定义测试用例将GetNetByAddrtTest函数注册为一个测试案例。
Loading…
Cancel
Save