From ad862c087c2691fcefc74928362a5ebafef16a78 Mon Sep 17 00:00:00 2001 From: wcr <2108380043@qq.com> Date: Mon, 23 Dec 2024 20:26:09 +0800 Subject: [PATCH] 13 --- .../net/netdb/full/net_netdb_test_004.cpp | 58 +++++++++---------- 1 file changed, 28 insertions(+), 30 deletions(-) diff --git a/kernel_liteos_a-master/testsuites/unittest/net/netdb/full/net_netdb_test_004.cpp b/kernel_liteos_a-master/testsuites/unittest/net/netdb/full/net_netdb_test_004.cpp index c05a6fb..2c2e804 100644 --- a/kernel_liteos_a-master/testsuites/unittest/net/netdb/full/net_netdb_test_004.cpp +++ b/kernel_liteos_a-master/testsuites/unittest/net/netdb/full/net_netdb_test_004.cpp @@ -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); }