|
|
|
@ -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函数注册为一个测试案例。
|