|
|
|
@ -2,74 +2,72 @@
|
|
|
|
|
* Copyright (c) 2013-2019 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,
|
|
|
|
|
* 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)
|
|
|
|
|
{
|
|
|
|
|
// 定义一个模拟的hosts文件内容
|
|
|
|
|
char host_file[] = "127.0.0.1 localhost\n100.0.0.0 example.com example\n";
|
|
|
|
|
// 定义hosts文件的路径列表
|
|
|
|
|
char *pathList[] = {"/etc/hosts"};
|
|
|
|
|
// 定义模拟的hosts文件流列表
|
|
|
|
|
char *streamList[] = {host_file};
|
|
|
|
|
// 定义模拟的hosts文件流长度列表
|
|
|
|
|
int streamLen[] = {sizeof(host_file)};
|
|
|
|
|
// 定义文件数量
|
|
|
|
|
const int file_number = 1;
|
|
|
|
|
|
|
|
|
|
// 准备文件环境,将模拟的hosts文件内容设置为系统的hosts文件
|
|
|
|
|
int flag = PrepareFileEnv(pathList, streamList, streamLen, file_number);
|
|
|
|
|
if (flag != 0) {
|
|
|
|
|
// 如果准备失败,恢复原始文件环境
|
|
|
|
|
RecoveryFileEnv(pathList, file_number);
|
|
|
|
|
return -1;
|
|
|
|
|
return -1; // 返回错误码
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 定义in_addr结构体,用于存储IP地址
|
|
|
|
|
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");
|
|
|
|
|
// 使用gethostbyaddr获取hostent结构体指针
|
|
|
|
|
struct hostent *addr = gethostbyaddr(&ia, sizeof ia, AF_INET);
|
|
|
|
|
// 断言addr不为空,即gethostbyaddr成功
|
|
|
|
|
ICUNIT_ASSERT_NOT_EQUAL(addr, NULL, -1);
|
|
|
|
|
// 断言返回的地址类型为AF_INET
|
|
|
|
|
ICUNIT_ASSERT_EQUAL(addr->h_addrtype, AF_INET, addr->h_addrtype);
|
|
|
|
|
// 断言返回的主机名为"localhost"
|
|
|
|
|
ICUNIT_ASSERT_STRING_EQUAL(addr->h_name, "localhost", -1);
|
|
|
|
|
// 断言返回的地址长度为4
|
|
|
|
|
ICUNIT_ASSERT_EQUAL(addr->h_length, length, -1);
|
|
|
|
|
|
|
|
|
|
// 测试另一个IP地址
|
|
|
|
|
ia.s_addr = inet_addr("100.0.0.0");
|
|
|
|
|
addr = gethostbyaddr(&ia, sizeof ia, AF_INET);
|
|
|
|
|
ICUNIT_ASSERT_NOT_EQUAL(addr, NULL, -1);
|
|
|
|
|
ICUNIT_ASSERT_EQUAL(addr->h_addrtype, AF_INET, addr->h_addrtype);
|
|
|
|
|
ICUNIT_ASSERT_STRING_EQUAL(addr->h_name, "example.com", -1);
|
|
|
|
|
|
|
|
|
|
// 测试一个不存在的IP地址
|
|
|
|
|
errno = 0;
|
|
|
|
|
ia.s_addr = inet_addr("127.0.0.0");
|
|
|
|
|
addr = gethostbyaddr(&ia, sizeof ia, AF_INET);
|
|
|
|
|
// 断言errno为ENOENT,表示没有找到对应的主机名
|
|
|
|
|
ICUNIT_ASSERT_EQUAL(errno, ENOENT, errno);
|
|
|
|
|
|
|
|
|
|
// 恢复原始文件环境
|
|
|
|
|
RecoveryFileEnv(pathList, file_number);
|
|
|
|
|
return ICUNIT_SUCCESS;
|
|
|
|
|
return ICUNIT_SUCCESS; // 返回成功码
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 定义测试用例
|
|
|
|
|
void NetNetDbTest004(void)
|
|
|
|
|
{
|
|
|
|
|
// 添加测试用例,指定测试函数、测试类型、测试级别等信息
|
|
|
|
|
TEST_ADD_CASE(__FUNCTION__, GetHostByAddrTest, TEST_POSIX, TEST_TCP, TEST_LEVEL0, TEST_FUNCTION);
|
|
|
|
|
}
|
|
|
|
|