分支昶
wcr 7 months ago
parent ad862c087c
commit cc2f7154e9

@ -4,8 +4,10 @@
*
* ... ...
*/
// 这是版权声明,表明代码的版权归属于华为技术有限公司和华为设备有限公司,并声明了保留所有权利。
#include "lt_net_netdb.h" // 引入测试所需的头文件
// 包含一个头文件,这个头文件可能包含了网络数据库相关的函数声明和宏定义。
// 测试函数用于测试gethostbyaddr函数
static int GetHostByAddrTest(void)
@ -23,8 +25,8 @@ static int GetHostByAddrTest(void)
// 准备文件环境将模拟的hosts文件内容设置为系统的hosts文件
int flag = PrepareFileEnv(pathList, streamList, streamLen, file_number);
if (flag != 0) {
// 如果准备失败,恢复原始文件环境
if (flag != 0) {
RecoveryFileEnv(pathList, file_number);
return -1; // 返回错误码
}

@ -28,11 +28,14 @@
* 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"
// 包含一个头文件,可能包含了网络数据库函数的声明和定义。
static int GetHostByAddrRTest(void)
{
// 定义一个静态函数用于测试gethostbyaddr_r函数。
struct in_addr ia;
struct hostent addr, *result = NULL;
char buf[1024];
@ -40,29 +43,47 @@ static int GetHostByAddrRTest(void)
int err, ret;
int length = 4;
// 定义了一些变量包括用于存储IP地址的in_addr结构体hostent结构体用于存储查询结果以及其他辅助变量。
ia.s_addr = inet_addr("127.0.0.1");
// 将字符串形式的IP地址"127.0.0.1"转换为网络字节序的二进制形式并存储在ia结构体中。
ret = gethostbyaddr_r(&ia, sizeof ia, AF_INET, &addr, buf, sizeof buf, &result, &err);
// 使用gethostbyaddr_r函数根据IP地址查询主机信息并将结果存储在result指向的hostent结构体中。
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
// 断言函数返回值应为0表示成功。
ICUNIT_ASSERT_NOT_EQUAL(result, NULL, -1);
// 断言result不应为空表示查询到了主机信息。
ICUNIT_ASSERT_EQUAL(result->h_addrtype, AF_INET, result->h_addrtype);
// 断言查询到的主机地址类型应为AF_INETIPv4
ICUNIT_ASSERT_STRING_EQUAL(result->h_name, "localhost", -1);
// 断言查询到的主机名应为"localhost"。
ICUNIT_ASSERT_EQUAL(result->h_length, length, -1);
// 断言查询到的主机地址长度应为4IPv4地址长度
errno = 0;
// 清空errno用于检测接下来的函数调用是否设置了errno。
ia.s_addr = inet_addr("127.0.0.0");
// 将字符串形式的IP地址"127.0.0.0"转换为网络字节序的二进制形式并存储在ia结构体中。
ret = gethostbyaddr_r(&ia, sizeof ia, AF_INET, &addr, buf, sizeof buf, &result, &err);
// 再次调用gethostbyaddr_r函数但这次传入的是一个无效的IP地址。
ICUNIT_ASSERT_EQUAL(errno, EINVAL, errno);
// 断言errno应被设置为EINVAL表示无效参数。
ret = gethostbyaddr_r(&ia, sizeof ia, AF_INET, &addr, buf, sizeof buf, &result, &err);
// 再次调用函数但errno已经被之前的调用设置这里检查是否保持不变。
ICUNIT_ASSERT_EQUAL(errno, EINVAL, errno);
// 断言errno仍然为EINVAL。
ret = gethostbyaddr_r(&ia, sizeof ia, AF_INET, &addr, buf1, sizeof buf1, &result, &err);
// 调用gethostbyaddr_r函数但这次传入的缓冲区buf1大小不足以存储结果。
ICUNIT_ASSERT_EQUAL(ret, ERANGE, ret);
// 断言函数返回值应为ERANGE表示缓冲区太小。
return ICUNIT_SUCCESS;
// 返回测试成功。
}
void NetNetDbTest005(void)
{
TEST_ADD_CASE(__FUNCTION__, GetHostByAddrRTest, TEST_POSIX, TEST_TCP, TEST_LEVEL0, TEST_FUNCTION);
// 将当前测试函数添加到测试用例中,指定测试类型、协议、级别和函数。
}

@ -28,42 +28,60 @@
* 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"
// 引入头文件,可能包含了网络数据库相关的函数声明和宏定义。
static int GetHostByNameTest(void)
{
// 定义一个模拟的hosts文件内容
char host_file[] = "127.0.0.1 localhost\n";
// 定义hosts文件的路径列表
char *pathList[] = {"/etc/hosts"};
// 定义模拟的hosts文件流列表
char *streamList[] = {host_file};
// 定义模拟的hosts文件流长度列表
int streamLen[] = {sizeof(host_file)};
// 定义文件数量
int flag = PrepareFileEnv(pathList, streamList, streamLen, 1);
// 如果准备文件环境失败,则恢复原始文件环境并返回错误码
if (flag != 0) {
RecoveryFileEnv(pathList, 1);
return -1;
}
// 使用gethostbyname函数根据主机名获取hostent结构体指针
struct hostent *addr = gethostbyname("localhost");
// 断言addr不为空即gethostbyname成功
ICUNIT_ASSERT_NOT_EQUAL(addr, NULL, -1);
// 断言返回的主机名与输入的主机名相同
ICUNIT_ASSERT_EQUAL(strcmp(addr->h_name, "localhost"), 0, -1);
// 断言返回的地址类型为AF_INET
ICUNIT_ASSERT_EQUAL(addr->h_addrtype, AF_INET, addr->h_addrtype);
// 断言返回的地址长度不为0
ICUNIT_ASSERT_NOT_EQUAL(addr->h_length, 0, addr->h_length);
// 测试gethostbyname函数传入IP地址字符串作为主机名
addr = gethostbyname("127.0.0.1");
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 = gethostbyname("lo");
// 断言addr为空即gethostbyname失败
ICUNIT_ASSERT_EQUAL(addr, NULL, -1);
// 恢复原始文件环境
RecoveryFileEnv(pathList, 1);
return ICUNIT_SUCCESS;
}
// 定义测试用例
void NetNetDbTest006(void)
{
// 添加测试用例,指定测试函数、测试类型、测试级别等信息
TEST_ADD_CASE(__FUNCTION__, GetHostByNameTest, TEST_POSIX, TEST_TCP, TEST_LEVEL0, TEST_FUNCTION);
}
Loading…
Cancel
Save