分支昶
wcr 7 months ago
parent e40ef14308
commit ad862c087c

@ -2,74 +2,72 @@
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved. * Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device 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, * ... ...
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
#include "lt_net_netdb.h" // 引入测试所需的头文件
#include "lt_net_netdb.h" // 测试函数用于测试gethostbyaddr函数
static int GetHostByAddrTest(void) static int GetHostByAddrTest(void)
{ {
// 定义一个模拟的hosts文件内容
char host_file[] = "127.0.0.1 localhost\n100.0.0.0 example.com example\n"; char host_file[] = "127.0.0.1 localhost\n100.0.0.0 example.com example\n";
// 定义hosts文件的路径列表
char *pathList[] = {"/etc/hosts"}; char *pathList[] = {"/etc/hosts"};
// 定义模拟的hosts文件流列表
char *streamList[] = {host_file}; char *streamList[] = {host_file};
// 定义模拟的hosts文件流长度列表
int streamLen[] = {sizeof(host_file)}; int streamLen[] = {sizeof(host_file)};
// 定义文件数量
const int file_number = 1; const int file_number = 1;
// 准备文件环境将模拟的hosts文件内容设置为系统的hosts文件
int flag = PrepareFileEnv(pathList, streamList, streamLen, file_number); int flag = PrepareFileEnv(pathList, streamList, streamLen, file_number);
if (flag != 0) { if (flag != 0) {
// 如果准备失败,恢复原始文件环境
RecoveryFileEnv(pathList, file_number); RecoveryFileEnv(pathList, file_number);
return -1; return -1; // 返回错误码
} }
// 定义in_addr结构体用于存储IP地址
struct in_addr ia; struct in_addr ia;
int length = 4; // the address length is 4; // 定义地址长度
int length = 4; // IPv4地址长度为4
// 将点分十进制IP地址转换为网络字节序的整数值
ia.s_addr = inet_addr("127.0.0.1"); ia.s_addr = inet_addr("127.0.0.1");
// 使用gethostbyaddr获取hostent结构体指针
struct hostent *addr = gethostbyaddr(&ia, sizeof ia, AF_INET); struct hostent *addr = gethostbyaddr(&ia, sizeof ia, AF_INET);
// 断言addr不为空即gethostbyaddr成功
ICUNIT_ASSERT_NOT_EQUAL(addr, NULL, -1); ICUNIT_ASSERT_NOT_EQUAL(addr, NULL, -1);
// 断言返回的地址类型为AF_INET
ICUNIT_ASSERT_EQUAL(addr->h_addrtype, AF_INET, addr->h_addrtype); ICUNIT_ASSERT_EQUAL(addr->h_addrtype, AF_INET, addr->h_addrtype);
// 断言返回的主机名为"localhost"
ICUNIT_ASSERT_STRING_EQUAL(addr->h_name, "localhost", -1); ICUNIT_ASSERT_STRING_EQUAL(addr->h_name, "localhost", -1);
// 断言返回的地址长度为4
ICUNIT_ASSERT_EQUAL(addr->h_length, length, -1); ICUNIT_ASSERT_EQUAL(addr->h_length, length, -1);
// 测试另一个IP地址
ia.s_addr = inet_addr("100.0.0.0"); ia.s_addr = inet_addr("100.0.0.0");
addr = gethostbyaddr(&ia, sizeof ia, AF_INET); addr = gethostbyaddr(&ia, sizeof ia, AF_INET);
ICUNIT_ASSERT_NOT_EQUAL(addr, NULL, -1); ICUNIT_ASSERT_NOT_EQUAL(addr, NULL, -1);
ICUNIT_ASSERT_EQUAL(addr->h_addrtype, AF_INET, addr->h_addrtype); ICUNIT_ASSERT_EQUAL(addr->h_addrtype, AF_INET, addr->h_addrtype);
ICUNIT_ASSERT_STRING_EQUAL(addr->h_name, "example.com", -1); ICUNIT_ASSERT_STRING_EQUAL(addr->h_name, "example.com", -1);
// 测试一个不存在的IP地址
errno = 0; errno = 0;
ia.s_addr = inet_addr("127.0.0.0"); ia.s_addr = inet_addr("127.0.0.0");
addr = gethostbyaddr(&ia, sizeof ia, AF_INET); addr = gethostbyaddr(&ia, sizeof ia, AF_INET);
// 断言errno为ENOENT表示没有找到对应的主机名
ICUNIT_ASSERT_EQUAL(errno, ENOENT, errno); ICUNIT_ASSERT_EQUAL(errno, ENOENT, errno);
// 恢复原始文件环境
RecoveryFileEnv(pathList, file_number); RecoveryFileEnv(pathList, file_number);
return ICUNIT_SUCCESS; return ICUNIT_SUCCESS; // 返回成功码
} }
// 定义测试用例
void NetNetDbTest004(void) void NetNetDbTest004(void)
{ {
// 添加测试用例,指定测试函数、测试类型、测试级别等信息
TEST_ADD_CASE(__FUNCTION__, GetHostByAddrTest, TEST_POSIX, TEST_TCP, TEST_LEVEL0, TEST_FUNCTION); TEST_ADD_CASE(__FUNCTION__, GetHostByAddrTest, TEST_POSIX, TEST_TCP, TEST_LEVEL0, TEST_FUNCTION);
} }

Loading…
Cancel
Save