分支昶
wcr 7 months ago
parent cc2f7154e9
commit e885d4d491

@ -31,33 +31,51 @@
#include "lt_net_netdb.h"
// 引入头文件,可能包含了网络数据库相关的函数声明和宏定义。
static int GetHostByNameRTest(void)
{
char host_file[] = "127.0.0.1 localhost\n";
// 定义一个模拟的hosts文件内容包含localhost映射到127.0.0.1的条目。
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 addr, *result = NULL;
// 定义hostent结构体变量addr用于存储gethostbyname_r函数的结果。
char buf[1024];
// 定义一个足够大的缓冲区buf用于gethostbyname_r函数。
char buf1[1];
// 定义一个非常小的缓冲区buf1用于测试gethostbyname_r函数的边界条件。
int err, ret;
ret = gethostbyname_r("localhost", &addr, buf, sizeof buf, &result, &err);
// 使用gethostbyname_r函数根据主机名"localhost"获取hostent结构体指针。
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
// 断言返回值ret为0表示gethostbyname_r函数调用成功。
ICUNIT_ASSERT_NOT_EQUAL(result, NULL, -1);
// 断言result不为空即gethostbyname_r成功。
ICUNIT_ASSERT_EQUAL(strcmp(result->h_name, "localhost"), 0, -1);
// 断言返回的主机名与输入的主机名相同。
ICUNIT_ASSERT_EQUAL(result->h_addrtype, AF_INET, result->h_addrtype);
// 断言返回的地址类型为AF_INET。
ICUNIT_ASSERT_NOT_EQUAL(result->h_length, 0, result->h_length);
// 断言返回的地址长度不为0。
ret = gethostbyname_r("127.0.0.1", &addr, buf, sizeof buf, &result, &err);
// 使用gethostbyname_r函数根据IP地址字符串"127.0.0.1"获取hostent结构体指针。
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ICUNIT_ASSERT_NOT_EQUAL(result, NULL, -1);
ICUNIT_ASSERT_EQUAL(strcmp(result->h_name, "127.0.0.1"), 0, -1);
@ -65,17 +83,26 @@ static int GetHostByNameRTest(void)
ICUNIT_ASSERT_NOT_EQUAL(result->h_length, 0, result->h_length);
ret = gethostbyname_r("127.0.0.1", &addr, buf1, sizeof buf1, &result, &err);
// 测试gethostbyname_r函数的边界条件传入的缓冲区太小。
ICUNIT_ASSERT_NOT_EQUAL(ret, 0, ret);
// 断言返回值ret不为0表示gethostbyname_r函数调用失败。
ret = gethostbyname_r("127.0.0.0.0", &addr, buf, sizeof buf, &result, &err);
// 测试一个不存在的IP地址。
ICUNIT_ASSERT_NOT_EQUAL(ret, 0, ret);
// 断言返回值ret不为0表示gethostbyname_r函数调用失败。
ret = gethostbyname_r("lo", &addr, buf, sizeof buf, &result, &err);
// 测试一个不存在的主机名。
ICUNIT_ASSERT_NOT_EQUAL(ret, 0, ret);
// 断言返回值ret不为0表示gethostbyname_r函数调用失败。
RecoveryFileEnv(pathList, file_number);
// 恢复原始文件环境。
return ICUNIT_SUCCESS;
// 返回测试成功。
}
void NetNetDbTest007(void)
{
TEST_ADD_CASE(__FUNCTION__, GetHostByNameRTest, TEST_POSIX, TEST_TCP, TEST_LEVEL0, TEST_FUNCTION);
}
// 定义测试用例将GetHostByNameRTest函数注册为一个测试案例。

@ -31,42 +31,61 @@
#include "lt_net_netdb.h"
// 引入头文件,可能包含了网络数据库相关的函数声明和宏定义。
static int GetHostByName2Test(void)
{
char host_file[] = "127.0.0.1 localhost\n";
// 定义一个模拟的hosts文件内容包含localhost映射到127.0.0.1的条目。
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 *addr = gethostbyname2("localhost", AF_INET);
// 使用gethostbyname2函数根据主机名"localhost"和地址族AF_INET获取hostent结构体指针。
ICUNIT_ASSERT_NOT_EQUAL(addr, NULL, -1);
// 断言addr不为空即gethostbyname2成功。
ICUNIT_ASSERT_EQUAL(strcmp(addr->h_name, "localhost"), 0, -1);
// 断言返回的主机名与输入的主机名相同。
ICUNIT_ASSERT_EQUAL(addr->h_addrtype, AF_INET, addr->h_addrtype);
// 断言返回的地址类型为AF_INET。
ICUNIT_ASSERT_NOT_EQUAL(addr->h_length, 0, addr->h_length);
// 断言返回的地址长度不为0。
addr = gethostbyname2("127.0.0.1", AF_INET);
// 使用gethostbyname2函数根据IP地址字符串"127.0.0.1"和地址族AF_INET获取hostent结构体指针。
ICUNIT_ASSERT_NOT_EQUAL(addr, NULL, -1);
ICUNIT_ASSERT_EQUAL(strcmp(addr->h_name, "127.0.0.1"), 0, -1);
ICUNIT_ASSERT_EQUAL(addr->h_addrtype, AF_INET, addr->h_addrtype);
ICUNIT_ASSERT_NOT_EQUAL(addr->h_length, 0, addr->h_length);
addr = gethostbyname2("127.0.0.1", AF_INET6);
// 尝试使用gethostbyname2函数根据IP地址字符串"127.0.0.1"和地址族AF_INET6获取hostent结构体指针预期失败。
ICUNIT_ASSERT_EQUAL(addr, NULL, -1);
addr = gethostbyname2("localh", AF_INET);
// 尝试使用gethostbyname2函数根据不完整的主机名"localh"和地址族AF_INET获取hostent结构体指针预期失败。
ICUNIT_ASSERT_EQUAL(addr, NULL, -1);
RecoveryFileEnv(pathList, file_number);
// 恢复原始文件环境。
return ICUNIT_SUCCESS;
// 返回测试成功。
}
void NetNetDbTest008(void)
{
TEST_ADD_CASE(__FUNCTION__, GetHostByName2Test, TEST_POSIX, TEST_TCP, TEST_LEVEL0, TEST_FUNCTION);
}
// 定义测试用例将GetHostByName2Test函数注册为一个测试案例。

@ -30,33 +30,51 @@
*/
#include "lt_net_netdb.h"
// 引入头文件,可能包含了网络数据库相关的函数声明和宏定义。
static int GetHostByName2RTest(void)
{
char host_file[] = "127.0.0.1 localhost\n";
// 定义一个模拟的hosts文件内容包含localhost映射到127.0.0.1的条目。
char *pathList[] = {"/etc/hosts"};
// 定义hosts文件的路径列表这里只有一个路径指向系统的hosts文件。
char *streamList[] = {host_file};
// 定义模拟的hosts文件流列表这里直接使用host_file。
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 addr, *result = NULL;
// 定义hostent结构体变量addr用于存储gethostbyname2_r函数的结果。
char buf[1024];
// 定义一个足够大的缓冲区buf用于gethostbyname2_r函数。
char buf1[1];
// 定义一个非常小的缓冲区buf1用于测试gethostbyname2_r函数的边界条件。
int err, ret;
ret = gethostbyname2_r("localhost", AF_INET, &addr, buf, sizeof buf, &result, &err);
// 使用gethostbyname2_r函数根据主机名"localhost"、地址族AF_INET获取hostent结构体指针。
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
// 断言返回值ret为0表示gethostbyname2_r函数调用成功。
ICUNIT_ASSERT_NOT_EQUAL(result, NULL, -1);
// 断言result不为空即gethostbyname2_r成功。
ICUNIT_ASSERT_EQUAL(strcmp(result->h_name, "localhost"), 0, -1);
// 断言返回的主机名与输入的主机名相同。
ICUNIT_ASSERT_EQUAL(result->h_addrtype, AF_INET, result->h_addrtype);
// 断言返回的地址类型为AF_INET。
ICUNIT_ASSERT_NOT_EQUAL(result->h_length, 0, result->h_length);
// 断言返回的地址长度不为0。
ret = gethostbyname2_r("127.0.0.1", AF_INET, &addr, buf, sizeof buf, &result, &err);
// 使用gethostbyname2_r函数根据IP地址字符串"127.0.0.1"、地址族AF_INET获取hostent结构体指针。
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
ICUNIT_ASSERT_NOT_EQUAL(result, NULL, -1);
ICUNIT_ASSERT_EQUAL(strcmp(result->h_name, "127.0.0.1"), 0, -1);
@ -64,17 +82,26 @@ static int GetHostByName2RTest(void)
ICUNIT_ASSERT_NOT_EQUAL(result->h_length, 0, result->h_length);
ret = gethostbyname2_r("127.0.0.1", AF_INET, &addr, buf1, sizeof buf1, &result, &err);
// 测试gethostbyname2_r函数的边界条件传入的缓冲区太小。
ICUNIT_ASSERT_NOT_EQUAL(ret, 0, ret);
// 断言返回值ret不为0表示gethostbyname2_r函数调用失败。
ret = gethostbyname2_r("127.0.0.1.1", AF_INET, &addr, buf, sizeof buf, &result, &err);
// 测试一个不存在的IP地址。
ICUNIT_ASSERT_NOT_EQUAL(ret, 0, ret);
// 断言返回值ret不为0表示gethostbyname2_r函数调用失败。
ret = gethostbyname2_r("lo", AF_INET, &addr, buf, sizeof buf, &result, &err);
// 测试一个不存在的主机名。
ICUNIT_ASSERT_NOT_EQUAL(ret, 0, ret);
// 断言返回值ret不为0表示gethostbyname2_r函数调用失败。
RecoveryFileEnv(pathList, file_number);
// 恢复原始文件环境。
return ICUNIT_SUCCESS;
// 返回测试成功。
}
void NetNetDbTest009(void)
{
TEST_ADD_CASE(__FUNCTION__, GetHostByName2RTest, TEST_POSIX, TEST_TCP, TEST_LEVEL0, TEST_FUNCTION);
}
// 定义测试用例将GetHostByName2RTest函数注册为一个测试案例。

@ -31,21 +31,31 @@
#include "lt_net_netdb.h"
// 引入头文件,可能包含了网络数据库相关的函数声明和宏定义。
static int NameInfoTest(void)
{
char host[256], serv[256];
// 定义两个数组用于存储getnameinfo函数返回的主机名和服务器名。
struct sockaddr_in addr;
// 定义一个sockaddr_in结构体用于存储IPv4地址信息。
addr.sin_family = AF_INET;
// 设置地址族为IPv4。
addr.sin_port = htons(22);
// 设置端口号为22例如SSH端口htons函数用于将主机字节序转换为网络字节序。
addr.sin_addr.s_addr = inet_addr("127.0.0.1");
// 设置IP地址为127.0.0.1inet_addr函数将点分十进制IP地址转换为网络字节序的整数。
int ret = getnameinfo((struct sockaddr*)&addr, sizeof addr, host, sizeof host, serv, sizeof serv, 0);
// 调用getnameinfo函数传入地址信息、主机名和服务器名的缓冲区尝试获取主机名和服务器名。
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
// 断言getnameinfo函数调用成功返回值为0。
return ICUNIT_SUCCESS;
// 返回测试成功。
}
void NetNetDbTest010(void)
{
TEST_ADD_CASE(__FUNCTION__, NameInfoTest, TEST_POSIX, TEST_TCP, TEST_LEVEL0, TEST_FUNCTION);
}
// 定义测试用例将NameInfoTest函数注册为一个测试案例。

@ -31,37 +31,57 @@
#include "lt_net_netdb.h"
// 引入头文件,可能包含了网络数据库相关的函数声明和宏定义。
static int GetServByPortTest(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;
}
// 如果准备文件环境失败,则恢复原始文件环境并返回错误码。
const int test_port_no = 22; // ssh port number is 22
// 定义测试的端口号这里是22即SSH服务的标准端口号。
struct servent *se1 = nullptr;
// 定义servent结构体指针变量se1初始化为nullptr。
struct servent *se = getservbyport(htons(test_port_no), "tcp");
// 使用getservbyport函数根据端口号和协议名"tcp"获取servent结构体指针。
ICUNIT_ASSERT_NOT_EQUAL(se, NULL, -1);
// 断言se不为空即getservbyport成功。
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"相同。
se1 = getservbyport(htons(test_port_no), "tp");
// 尝试使用getservbyport函数根据端口号和错误的协议名"tp"获取servent结构体指针预期失败。
ICUNIT_ASSERT_EQUAL(se1, nullptr, -1);
// 断言se1为空即getservbyport失败。
RecoveryFileEnv(pathList, file_number);
// 恢复原始文件环境。
return ICUNIT_SUCCESS;
// 返回测试成功。
}
void NetNetDbTest011(void)
{
TEST_ADD_CASE(__FUNCTION__, GetServByPortTest, TEST_POSIX, TEST_TCP, TEST_LEVEL0, TEST_FUNCTION);
}
// 定义测试用例将GetServByPortTest函数注册为一个测试案例。
Loading…
Cancel
Save