diff --git a/kernel_liteos_a-master/testsuites/unittest/net/netdb/full/net_netdb_test_016.cpp b/kernel_liteos_a-master/testsuites/unittest/net/netdb/full/net_netdb_test_016.cpp index c9d2d67..53e84c3 100644 --- a/kernel_liteos_a-master/testsuites/unittest/net/netdb/full/net_netdb_test_016.cpp +++ b/kernel_liteos_a-master/testsuites/unittest/net/netdb/full/net_netdb_test_016.cpp @@ -1,5 +1,5 @@ /* - * opyright (c) 2021-2021, Huawei Technologies Co., Ltd. All rights reserved. + * Copyright (c) 2021-2021, 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, @@ -29,6 +29,7 @@ */ #include "lt_net_netdb.h" +// 引入头文件,可能包含了网络数据库相关的函数声明和宏定义。 static int GetServByNameTest(void) { @@ -38,43 +39,65 @@ static int GetServByNameTest(void) "discard 9/udp sink null\n" "systat 11/tcp users\n" "ssh 22/tcp\n"; + // 定义一个模拟的services文件内容,包含多个服务的条目。 char *pathList[] = {"/etc/services"}; + // 定义services文件的路径列表,这里只有一个路径指向系统的services文件。 char *streamList[] = {static_cast(serv_file)}; + // 定义模拟的services文件流列表,这里将模拟的services文件内容转换为char*类型。 int streamLen[] = {sizeof(serv_file)}; + // 定义模拟的services文件流长度列表。 const int file_number = 1; + // 定义文件数量。 int flag = PrepareFileEnv(pathList, streamList, streamLen, file_number); + // 调用PrepareFileEnv函数准备文件环境,模拟services文件。 if (flag != 0) { RecoveryFileEnv(pathList, file_number); return -1; } + // 如果准备文件环境失败,则恢复原始文件环境并返回错误码。 struct servent *se1 = nullptr; struct servent *se2 = nullptr; se1 = getservbyname("discard", "tcp"); + // 使用getservbyname函数根据服务名"discard"和协议名"tcp"获取servent结构体指针。 ICUNIT_ASSERT_NOT_EQUAL(se1, NULL, -1); + // 断言se1不为空,即getservbyname成功。 ICUNIT_ASSERT_STRING_EQUAL(se1->s_name, "discard", -1); + // 断言返回的服务名称与"discard"相同。 ICUNIT_ASSERT_STRING_EQUAL(se1->s_proto, "tcp", -1); + // 断言返回的服务协议与"tcp"相同。 ICUNIT_ASSERT_STRING_EQUAL(se1->s_aliases[0], "discard", -1); + // 断言返回的服务别名与"discard"相同。 se1 = getservbyname("ssh", "tcp"); + // 使用getservbyname函数根据服务名"ssh"和协议名"tcp"获取servent结构体指针。 ICUNIT_ASSERT_NOT_EQUAL(se1, nullptr, -1); + // 断言se1不为空,即getservbyname成功。 ICUNIT_ASSERT_STRING_EQUAL(se1->s_name, "ssh", -1); + // 断言返回的服务名称与"ssh"相同。 ICUNIT_ASSERT_STRING_EQUAL(se1->s_proto, "tcp", -1); + // 断言返回的服务协议与"tcp"相同。 ICUNIT_ASSERT_STRING_EQUAL(se1->s_aliases[0], "ssh", -1); + // 断言返回的服务别名与"ssh"相同。 se2 = getservbyname("cho", "udp"); + // 尝试使用getservbyname函数根据错误的服务名"cho"和协议名"udp"获取servent结构体指针,预期失败。 ICUNIT_ASSERT_EQUAL(se2, nullptr, -1); se2 = getservbyname("systat", "udp"); + // 尝试使用getservbyname函数根据服务名"systat"和协议名"udp"获取servent结构体指针,预期失败。 ICUNIT_ASSERT_EQUAL(se2, nullptr, -1); RecoveryFileEnv(pathList, file_number); + // 恢复原始文件环境。 return ICUNIT_SUCCESS; + // 返回测试成功。 } void NetNetDbTest016(void) { TEST_ADD_CASE(__FUNCTION__, GetServByNameTest, TEST_POSIX, TEST_TCP, TEST_LEVEL0, TEST_FUNCTION); } +// 定义测试用例,将GetServByNameTest函数注册为一个测试案例。 \ No newline at end of file diff --git a/kernel_liteos_a-master/testsuites/unittest/net/netdb/full/net_netdb_test_017.cpp b/kernel_liteos_a-master/testsuites/unittest/net/netdb/full/net_netdb_test_017.cpp index a3469ff..633769d 100644 --- a/kernel_liteos_a-master/testsuites/unittest/net/netdb/full/net_netdb_test_017.cpp +++ b/kernel_liteos_a-master/testsuites/unittest/net/netdb/full/net_netdb_test_017.cpp @@ -1,5 +1,5 @@ /* - * opyright (c) 2021-2021, Huawei Technologies Co., Ltd. All rights reserved. + * Copyright (c) 2021-2021, 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, @@ -29,19 +29,27 @@ */ #include "lt_net_netdb.h" +// 引入头文件,可能包含了网络数据库相关的函数声明和宏定义。 static int GetServByNameRTest(void) { char serv_file[] = "ssh 22/tcp\n"; + // 定义一个模拟的services文件内容,包含ssh服务的条目。 char *pathList[] = {"/etc/services"}; + // 定义services文件的路径列表,这里只有一个路径指向系统的services文件。 char *streamList[] = {static_cast(serv_file)}; + // 定义模拟的services文件流列表,这里将模拟的services文件内容转换为char*类型。 int streamLen[] = {sizeof(serv_file)}; + // 定义模拟的services文件流长度列表。 const int file_number = 1; + // 定义文件数量。 int flag = PrepareFileEnv(pathList, streamList, streamLen, file_number); + // 调用PrepareFileEnv函数准备文件环境,模拟services文件。 if (flag != 0) { RecoveryFileEnv(pathList, file_number); return -1; } + // 如果准备文件环境失败,则恢复原始文件环境并返回错误码。 struct servent se; struct servent *result = NULL; @@ -51,29 +59,47 @@ static int GetServByNameRTest(void) errno = 0; ret = getservbyname_r("ssh", "tcp", &se, buf1, sizeof buf1, &result); + // 使用getservbyname_r函数根据服务名"ssh"和协议名"tcp"获取servent结构体指针。 ICUNIT_ASSERT_EQUAL(ret, 0, ret); + // 断言返回值ret为0,表示getservbyname_r函数调用成功。 ICUNIT_ASSERT_NOT_EQUAL(result, NULL, -1); + // 断言result不为空,即getservbyname_r成功。 ICUNIT_ASSERT_STRING_EQUAL(se.s_name, "ssh", -1); + // 断言返回的服务名称与"ssh"相同。 ICUNIT_ASSERT_STRING_EQUAL(se.s_proto, "tcp", -1); + // 断言返回的服务协议与"tcp"相同。 ICUNIT_ASSERT_STRING_EQUAL(se.s_aliases[0], "ssh", -1); + // 断言返回的服务别名与"ssh"相同。 ICUNIT_ASSERT_STRING_EQUAL(result->s_name, "ssh", -1); + // 断言result结构体中的服务名称与"ssh"相同。 ICUNIT_ASSERT_STRING_EQUAL(result->s_proto, "tcp", -1); + // 断言result结构体中的服务协议与"tcp"相同。 ICUNIT_ASSERT_STRING_EQUAL(result->s_aliases[0], "ssh", -1); + // 断言result结构体中的服务别名与"ssh"相同。 ret = getservbyname_r("ssh", "tcp", &se, buf2, sizeof buf2, &result); + // 测试getservbyname_r函数的边界条件,传入的缓冲区太小。 ICUNIT_ASSERT_EQUAL(ret, ERANGE, ret); + // 断言返回值ret为ERANGE,表示缓冲区太小。 ret = getservbyname_r("ssh", "tp", &se, buf1, sizeof buf1, &result); + // 尝试使用getservbyname_r函数根据服务名"ssh"和错误的协议名"tp"获取servent结构体指针,预期失败。 ICUNIT_ASSERT_EQUAL(ret, EINVAL, ret); + // 断言返回值ret为EINVAL,表示提供的协议名不合法。 ret = getservbyname_r("sh", "tcp", &se, buf1, sizeof buf1, &result); + // 尝试使用getservbyname_r函数根据不完整的服务名"sh"和协议名"tcp"获取servent结构体指针,预期失败。 ICUNIT_ASSERT_EQUAL(ret, ENOENT, ret); + // 断言返回值ret为ENOENT,表示未找到对应服务。 RecoveryFileEnv(pathList, file_number); + // 恢复原始文件环境。 return ICUNIT_SUCCESS; + // 返回测试成功。 } void NetNetDbTest017(void) { TEST_ADD_CASE(__FUNCTION__, GetServByNameRTest, TEST_POSIX, TEST_TCP, TEST_LEVEL0, TEST_FUNCTION); } +// 定义测试用例,将GetServByNameRTest函数注册为一个测试案例。 \ No newline at end of file diff --git a/kernel_liteos_a-master/testsuites/unittest/net/netdb/full/net_netdb_test_018.cpp b/kernel_liteos_a-master/testsuites/unittest/net/netdb/full/net_netdb_test_018.cpp index 415fd08..7c88ed4 100644 --- a/kernel_liteos_a-master/testsuites/unittest/net/netdb/full/net_netdb_test_018.cpp +++ b/kernel_liteos_a-master/testsuites/unittest/net/netdb/full/net_netdb_test_018.cpp @@ -1,5 +1,5 @@ /* - * opyright (c) 2021-2021, Huawei Technologies Co., Ltd. All rights reserved. + * Copyright (c) 2021-2021, 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, @@ -29,6 +29,7 @@ */ #include "lt_net_netdb.h" +// 引入头文件,可能包含了网络数据库相关的函数声明和宏定义。 static int GetServEntTest(void) { @@ -39,15 +40,22 @@ static int GetServEntTest(void) "ssh 100000/tcp\n" "ssh /tcp\n" "ssh 22/"; + // 定义一个模拟的services文件内容,包含多个服务的条目。 char *pathList[] = {"/etc/services"}; + // 定义services文件的路径列表,这里只有一个路径指向系统的services文件。 char *streamList[] = {static_cast(serv_file)}; + // 定义模拟的services文件流列表,这里将模拟的services文件内容转换为char*类型。 int streamLen[] = {sizeof(serv_file)}; + // 定义模拟的services文件流长度列表。 const int file_number = 1; + // 定义文件数量。 int flag = PrepareFileEnv(pathList, streamList, streamLen, file_number); + // 调用PrepareFileEnv函数准备文件环境,模拟services文件。 if (flag != 0) { RecoveryFileEnv(pathList, file_number); return -1; } + // 如果准备文件环境失败,则恢复原始文件环境并返回错误码。 /* tcpmux,echo,discard port number is 1,7,9 */ const int tcpmux_port_no = 1; @@ -59,55 +67,96 @@ static int GetServEntTest(void) struct servent *se3 = nullptr; se1 = getservent(); + // 调用getservent函数获取services数据库中的第一个服务条目。 ICUNIT_ASSERT_NOT_EQUAL(se1, nullptr, -1); + // 断言se1不为空,即getservent成功。 ICUNIT_ASSERT_STRING_EQUAL(se1->s_name, "tcpmux", -1); + // 断言返回的服务名称与"tcpmux"相同。 ICUNIT_ASSERT_STRING_EQUAL(se1->s_proto, "tcp", -1); + // 断言返回的服务协议与"tcp"相同。 ICUNIT_ASSERT_EQUAL(se1->s_port, ntohs(tcpmux_port_no), -1); + // 断言返回的服务端口号与转换为网络字节序的1相同。 endservent(); + // 调用endservent函数结束服务数据库的搜索。 se2 = getservent(); + // 再次调用getservent函数获取services数据库中的第一个服务条目。 ICUNIT_ASSERT_NOT_EQUAL(se2, nullptr, -1); + // 断言se2不为空,即getservent成功。 ICUNIT_ASSERT_STRING_EQUAL(se1->s_name, se2->s_name, -1); + // 断言返回的服务名称与之前相同。 ICUNIT_ASSERT_STRING_EQUAL(se1->s_proto, se2->s_proto, -1); + // 断言返回的服务协议与之前相同。 ICUNIT_ASSERT_EQUAL(se1->s_port, se2->s_port, -1); + // 断言返回的服务端口号与之前相同。 setservent(0); + // 调用setservent函数设置服务数据库的搜索位置到开始。 se3 = getservent(); + // 调用getservent函数获取services数据库中的第一个服务条目。 ICUNIT_ASSERT_NOT_EQUAL(se3, nullptr, -1); + // 断言se3不为空,即getservent成功。 ICUNIT_ASSERT_STRING_EQUAL(se1->s_name, se3->s_name, -1); + // 断言返回的服务名称与之前相同。 ICUNIT_ASSERT_STRING_EQUAL(se1->s_proto, se3->s_proto, -1); + // 断言返回的服务协议与之前相同。 ICUNIT_ASSERT_EQUAL(se1->s_port, se3->s_port, -1); + // 断言返回的服务端口号与之前相同。 se3 = getservent(); + // 获取下一个服务条目。 ICUNIT_ASSERT_NOT_EQUAL(se3, nullptr, -1); + // 断言se3不为空,即getservent成功。 ICUNIT_ASSERT_STRING_EQUAL(se3->s_name, "echo", -1); + // 断言返回的服务名称与"echo"相同。 ICUNIT_ASSERT_STRING_EQUAL(se3->s_proto, "tcp", -1); + // 断言返回的服务协议与"tcp"相同。 ICUNIT_ASSERT_EQUAL(se3->s_port, ntohs(echo_port_no), -1); + // 断言返回的服务端口号与转换为网络字节序的7相同。 se3 = getservent(); + // 获取下一个服务条目。 ICUNIT_ASSERT_NOT_EQUAL(se3, nullptr, -1); + // 断言se3不为空,即getservent成功。 ICUNIT_ASSERT_STRING_EQUAL(se3->s_name, "echo", -1); + // 断言返回的服务名称与"echo"相同。 ICUNIT_ASSERT_STRING_EQUAL(se3->s_proto, "udp", -1); + // 断言返回的服务协议与"udp"相同。 ICUNIT_ASSERT_EQUAL(se3->s_port, ntohs(echo_port_no), -1); + // 断言返回的服务端口号与转换为网络字节序的7相同。 se3 = getservent(); + // 获取下一个服务条目。 ICUNIT_ASSERT_NOT_EQUAL(se3, nullptr, -1); + // 断言se3不为空,即getservent成功。 ICUNIT_ASSERT_STRING_EQUAL(se3->s_name, "discard", -1); + // 断言返回的服务名称与"discard"相同。 ICUNIT_ASSERT_STRING_EQUAL(se3->s_proto, "tcp", -1); + // 断言返回的服务协议与"tcp"相同。 ICUNIT_ASSERT_EQUAL(se3->s_port, ntohs(discard_port_no), -1); + // 断言返回的服务端口号与转换为网络字节序的9相同。 ICUNIT_ASSERT_STRING_EQUAL(se3->s_aliases[0], "sink", -1); + // 断言返回的服务别名列表中的第一个别名与"sink"相同。 ICUNIT_ASSERT_STRING_EQUAL(se3->s_aliases[1], "null", -1); + // 断言返回的服务别名列表中的第二个别名与"null"相同。 ICUNIT_ASSERT_EQUAL(se3->s_aliases[2], nullptr, -1); + // 断言返回的服务别名列表中的第三个别名为nullptr,表示别名列表结束。 se3 = getservent(); + // 获取下一个服务条目。 ICUNIT_ASSERT_EQUAL(se3, nullptr, -1); + // 断言se3为空,即已经到达services数据库的末尾。 endservent(); + // 调用endservent函数结束服务数据库的搜索。 RecoveryFileEnv(pathList, file_number); + // 恢复原始文件环境。 return ICUNIT_SUCCESS; + // 返回测试成功。 } void NetNetDbTest018(void) { TEST_ADD_CASE(__FUNCTION__, GetServEntTest, TEST_POSIX, TEST_TCP, TEST_LEVEL0, TEST_FUNCTION); } +// 定义测试用例,将GetServEntTest函数注册为一个测试案例。 \ No newline at end of file diff --git a/kernel_liteos_a-master/testsuites/unittest/net/netdb/full/net_netdb_test_019.cpp b/kernel_liteos_a-master/testsuites/unittest/net/netdb/full/net_netdb_test_019.cpp index 70ad889..40225f4 100644 --- a/kernel_liteos_a-master/testsuites/unittest/net/netdb/full/net_netdb_test_019.cpp +++ b/kernel_liteos_a-master/testsuites/unittest/net/netdb/full/net_netdb_test_019.cpp @@ -1,5 +1,5 @@ /* - * opyright (c) 2021-2021, Huawei Technologies Co., Ltd. All rights reserved. + * Copyright (c) 2021-2021, 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, @@ -29,7 +29,8 @@ */ #include "lt_net_netdb.h" -#include +#include +// 引入头文件,包括网络数据库相关的函数声明和宏定义,以及Nameser.h中定义的与DNS相关的宏和结构。 static int GetHostEntTest(void) { @@ -38,15 +39,22 @@ static int GetHostEntTest(void) "10.0.0.0 example example.com example.cn\n" "10.0.0.0\n" "10.0.0 example.com"; + // 定义一个模拟的hosts文件内容,包含IPv4和IPv6的条目。 char *pathList[] = {"/etc/hosts"}; + // 定义hosts文件的路径列表,这里只有一个路径指向系统的hosts文件。 char *streamList[] = {static_cast(host_file)}; + // 定义模拟的hosts文件流列表,这里将模拟的hosts文件内容转换为char*类型。 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 *se1 = nullptr; struct hostent *se2 = nullptr; @@ -54,52 +62,91 @@ static int GetHostEntTest(void) char addr[INET6_ADDRSTRLEN]; se1 = gethostent(); + // 调用gethostent函数获取hosts数据库中的第一个主机条目。 ICUNIT_ASSERT_NOT_EQUAL(se1, nullptr, -1); + // 断言se1不为空,即gethostent成功。 ICUNIT_ASSERT_STRING_EQUAL(se1->h_name, "localhost", -1); + // 断言返回的主机名与"localhost"相同。 ICUNIT_ASSERT_EQUAL(se1->h_addrtype, AF_INET, -1); + // 断言返回的地址类型为AF_INET(IPv4)。 ICUNIT_ASSERT_EQUAL(se1->h_length, INADDRSZ, -1); + // 断言返回的地址长度为IPv4地址长度。 ICUNIT_ASSERT_STRING_EQUAL("127.0.0.1", inet_ntop(AF_INET, se1->h_addr_list[0], addr, INET_ADDRSTRLEN), -1); + // 断言返回的第一个地址为"127.0.0.1"。 ICUNIT_ASSERT_EQUAL(se1->h_aliases[0], nullptr, -1); + // 断言别名列表中的第一个别名为nullptr,表示别名列表结束。 endhostent(); + // 调用endhostent函数结束主机数据库的搜索。 se2 = gethostent(); + // 再次调用gethostent函数获取hosts数据库中的第一个主机条目。 ICUNIT_ASSERT_NOT_EQUAL(se2, nullptr, -1); + // 断言se2不为空,即gethostent成功。 ICUNIT_ASSERT_STRING_EQUAL(se1->h_name, se2->h_name, -1); + // 断言返回的主机名与之前相同。 ICUNIT_ASSERT_EQUAL(se1->h_addrtype, se2->h_addrtype, -1); + // 断言返回的地址类型与之前相同。 ICUNIT_ASSERT_EQUAL(se1->h_length, se2->h_length, -1); + // 断言返回的地址长度与之前相同。 sethostent(0); + // 调用sethostent函数设置主机数据库的搜索位置到开始。 se3 = gethostent(); + // 调用gethostent函数获取hosts数据库中的第一个主机条目。 ICUNIT_ASSERT_NOT_EQUAL(se3, nullptr, -1); + // 断言se3不为空,即gethostent成功。 ICUNIT_ASSERT_STRING_EQUAL(se1->h_name, se3->h_name, -1); + // 断言返回的主机名与之前相同。 ICUNIT_ASSERT_EQUAL(se1->h_addrtype, se3->h_addrtype, -1); + // 断言返回的地址类型与之前相同。 ICUNIT_ASSERT_EQUAL(se1->h_length, se3->h_length, -1); + // 断言返回的地址长度与之前相同。 se3 = gethostent(); + // 获取下一个主机条目。 ICUNIT_ASSERT_NOT_EQUAL(se3, nullptr, -1); + // 断言se3不为空,即gethostent成功。 ICUNIT_ASSERT_EQUAL(se3->h_addrtype, AF_INET6, -1); + // 断言返回的地址类型为AF_INET6(IPv6)。 ICUNIT_ASSERT_STRING_EQUAL(se3->h_name, "ip6-localhost", -1); + // 断言返回的主机名为"ip6-localhost"。 ICUNIT_ASSERT_EQUAL(se3->h_length, IN6ADDRSZ, -1); + // 断言返回的地址长度为IPv6地址长度。 ICUNIT_ASSERT_STRING_EQUAL("::1", inet_ntop(AF_INET6, se3->h_addr_list[0], addr, INET6_ADDRSTRLEN), -1); + // 断言返回的第一个地址为"::1"。 se3 = gethostent(); + // 获取下一个主机条目。 ICUNIT_ASSERT_NOT_EQUAL(se3, nullptr, -1); + // 断言se3不为空,即gethostent成功。 ICUNIT_ASSERT_EQUAL(se3->h_addrtype, AF_INET, -1); + // 断言返回的地址类型为AF_INET(IPv4)。 ICUNIT_ASSERT_STRING_EQUAL(se3->h_name, "example", -1); + // 断言返回的主机名为"example"。 ICUNIT_ASSERT_STRING_EQUAL("10.0.0.0", inet_ntop(AF_INET, se3->h_addr_list[0], addr, INET_ADDRSTRLEN), -1); + // 断言返回的第一个地址为"10.0.0.0"。 ICUNIT_ASSERT_STRING_EQUAL(se3->h_aliases[0], "example.com", -1); + // 断言别名列表中的第一个别名为"example.com"。 ICUNIT_ASSERT_STRING_EQUAL(se3->h_aliases[1], "example.cn", -1); + // 断言别名列表中的第二个别名为"example.cn"。 ICUNIT_ASSERT_EQUAL(se3->h_aliases[2], nullptr, -1); + // 断言别名列表中的第三个别名为nullptr,表示别名列表结束。 se3 = gethostent(); + // 获取下一个主机条目。 ICUNIT_ASSERT_EQUAL(se3, nullptr, -1); + // 断言se3为空,即已经到达hosts数据库的末尾。 endhostent(); + // 调用endhostent函数结束主机数据库的搜索。 RecoveryFileEnv(pathList, file_number); + // 恢复原始文件环境。 return ICUNIT_SUCCESS; + // 返回测试成功。 } void NetNetDbTest019(void) { TEST_ADD_CASE(__FUNCTION__, GetHostEntTest, TEST_POSIX, TEST_TCP, TEST_LEVEL0, TEST_FUNCTION); } +// 定义测试用例,将GetHostEntTest函数注册为一个测试案例。 \ No newline at end of file diff --git a/kernel_liteos_a-master/testsuites/unittest/net/netdb/full/net_netdb_test_020.cpp b/kernel_liteos_a-master/testsuites/unittest/net/netdb/full/net_netdb_test_020.cpp index 5cad29c..3c0ffcb 100644 --- a/kernel_liteos_a-master/testsuites/unittest/net/netdb/full/net_netdb_test_020.cpp +++ b/kernel_liteos_a-master/testsuites/unittest/net/netdb/full/net_netdb_test_020.cpp @@ -1,5 +1,5 @@ /* - * opyright (c) 2021-2021, Huawei Technologies Co., Ltd. All rights reserved. + * Copyright (c) 2021-2021, 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, @@ -29,6 +29,7 @@ */ #include "lt_net_netdb.h" +// 引入头文件,包含了网络数据库相关的函数声明和宏定义。 static int GetNetEntTest(void) { @@ -36,59 +37,98 @@ static int GetNetEntTest(void) "link-local 169.254.0.0\n" "example 192.168.1.0 network example-network\n" "test1"; + // 定义一个模拟的networks文件内容,包含网络名称和对应的地址。 char *pathList[] = {"/etc/networks"}; + // 定义networks文件的路径列表,这里只有一个路径指向系统的networks文件。 char *streamList[] = {static_cast(network_file)}; + // 定义模拟的networks文件流列表,这里将模拟的networks文件内容转换为char*类型。 int streamLen[] = {sizeof(network_file)}; + // 定义模拟的networks文件流长度列表。 const int file_number = 1; + // 定义文件数量。 int flag = PrepareFileEnv(pathList, streamList, streamLen, file_number); + // 调用PrepareFileEnv函数准备文件环境,模拟networks文件。 if (flag != 0) { RecoveryFileEnv(pathList, file_number); return -1; } + // 如果准备文件环境失败,则恢复原始文件环境并返回错误码。 struct netent *se1 = nullptr; struct netent *se2 = nullptr; struct netent *se3 = nullptr; se1 = getnetent(); + // 调用getnetent函数获取networks数据库中的第一个网络条目。 ICUNIT_ASSERT_NOT_EQUAL(se1, nullptr, -1); + // 断言se1不为空,即getnetent成功。 ICUNIT_ASSERT_STRING_EQUAL(se1->n_name, "link-local", -1); + // 断言返回的网络名称与"link-local"相同。 ICUNIT_ASSERT_EQUAL(se1->n_addrtype, AF_INET, -1); + // 断言返回的地址类型为AF_INET(IPv4)。 ICUNIT_ASSERT_EQUAL(se1->n_net, inet_network("169.254.0.0"), -1); + // 断言返回的网络地址与"169.254.0.0"相同。 ICUNIT_ASSERT_EQUAL(se1->n_aliases[0], nullptr, -1); + // 断言别名列表中的第一个别名为nullptr,表示别名列表结束。 endnetent(); + // 调用endnetent函数结束网络数据库的搜索。 se2 = getnetent(); + // 再次调用getnetent函数获取networks数据库中的第一个网络条目。 ICUNIT_ASSERT_NOT_EQUAL(se2, nullptr, -1); + // 断言se2不为空,即getnetent成功。 ICUNIT_ASSERT_STRING_EQUAL(se1->n_name, se2->n_name, -1); + // 断言返回的网络名称与之前相同。 ICUNIT_ASSERT_EQUAL(se1->n_addrtype, se2->n_addrtype, -1); + // 断言返回的地址类型与之前相同。 ICUNIT_ASSERT_EQUAL(se1->n_net, se2->n_net, -1); + // 断言返回的网络地址与之前相同。 setnetent(0); + // 调用setnetent函数设置网络数据库的搜索位置到开始。 se3 = getnetent(); + // 调用getnetent函数获取networks数据库中的第一个网络条目。 ICUNIT_ASSERT_NOT_EQUAL(se3, nullptr, -1); + // 断言se3不为空,即getnetent成功。 ICUNIT_ASSERT_STRING_EQUAL(se1->n_name, se3->n_name, -1); + // 断言返回的网络名称与之前相同。 ICUNIT_ASSERT_EQUAL(se1->n_addrtype, se3->n_addrtype, -1); + // 断言返回的地址类型与之前相同。 ICUNIT_ASSERT_EQUAL(se1->n_net, se3->n_net, -1); + // 断言返回的网络地址与之前相同。 se1 = getnetent(); + // 获取下一个网络条目。 ICUNIT_ASSERT_NOT_EQUAL(se1, nullptr, -1); + // 断言se1不为空,即getnetent成功。 ICUNIT_ASSERT_STRING_EQUAL(se1->n_name, "example", -1); + // 断言返回的网络名称与"example"相同。 ICUNIT_ASSERT_EQUAL(se1->n_addrtype, AF_INET, -1); + // 断言返回的地址类型为AF_INET(IPv4)。 ICUNIT_ASSERT_EQUAL(se1->n_net, inet_network("192.168.1.0"), -1); + // 断言返回的网络地址与"192.168.1.0"相同。 ICUNIT_ASSERT_STRING_EQUAL(se1->n_aliases[0], "network", -1); + // 断言别名列表中的第一个别名为"network"。 ICUNIT_ASSERT_STRING_EQUAL(se1->n_aliases[1], "example-network", -1); + // 断言别名列表中的第二个别名为"example-network"。 ICUNIT_ASSERT_EQUAL(se1->n_aliases[2], nullptr, -1); + // 断言别名列表中的第三个别名为nullptr,表示别名列表结束。 se1 = getnetent(); + // 获取下一个网络条目。 ICUNIT_ASSERT_EQUAL(se1, nullptr, -1); + // 断言se1为空,即已经到达networks数据库的末尾。 endnetent(); + // 调用endnetent函数结束网络数据库的搜索。 RecoveryFileEnv(pathList, file_number); + // 恢复原始文件环境。 return ICUNIT_SUCCESS; + // 返回测试成功。 } void NetNetDbTest020(void) { TEST_ADD_CASE(__FUNCTION__, GetNetEntTest, TEST_POSIX, TEST_TCP, TEST_LEVEL0, TEST_FUNCTION); } +// 定义测试用例,将GetNetEntTest函数注册为一个测试案例。 \ No newline at end of file diff --git a/kernel_liteos_a-master/testsuites/unittest/net/netdb/full/net_netdb_test_021.cpp b/kernel_liteos_a-master/testsuites/unittest/net/netdb/full/net_netdb_test_021.cpp index 9b784d5..8fd3608 100644 --- a/kernel_liteos_a-master/testsuites/unittest/net/netdb/full/net_netdb_test_021.cpp +++ b/kernel_liteos_a-master/testsuites/unittest/net/netdb/full/net_netdb_test_021.cpp @@ -1,5 +1,5 @@ /* - * opyright (c) 2021-2021, Huawei Technologies Co., Ltd. All rights reserved. + * Copyright (c) 2021-2021, 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, @@ -29,42 +29,60 @@ */ #include "lt_net_netdb.h" +// 引入头文件,包含了网络数据库相关的函数声明和宏定义。 static int GetNetBynametTest(void) { char network_file[] = "# symbolic names for networks, see networks(5) for more information\n" "link-local 169.254.0.0\n"; + // 定义一个模拟的networks文件内容,包含网络名称和对应的地址。 char *pathList[] = {"/etc/networks"}; + // 定义networks文件的路径列表,这里只有一个路径指向系统的networks文件。 char *streamList[] = {static_cast(network_file)}; + // 定义模拟的networks文件流列表,这里将模拟的networks文件内容转换为char*类型。 int streamLen[] = {sizeof(network_file)}; + // 定义模拟的networks文件流长度列表。 const int file_number = 1; + // 定义文件数量。 int flag = PrepareFileEnv(pathList, streamList, streamLen, file_number); + // 调用PrepareFileEnv函数准备文件环境,模拟networks文件。 if (flag != 0) { RecoveryFileEnv(pathList, file_number); return -1; } + // 如果准备文件环境失败,则恢复原始文件环境并返回错误码。 struct netent *se1 = nullptr; struct netent *se2 = nullptr; struct netent *se3 = nullptr; se1 = getnetbyname("link-local"); + // 使用getnetbyname函数根据网络名称"link-local"获取netent结构体指针。 ICUNIT_ASSERT_NOT_EQUAL(se1, nullptr, -1); + // 断言se1不为空,即getnetbyname成功。 ICUNIT_ASSERT_STRING_EQUAL(se1->n_name, "link-local", -1); + // 断言返回的网络名称与"link-local"相同。 ICUNIT_ASSERT_EQUAL(se1->n_addrtype, AF_INET, -1); + // 断言返回的地址类型为AF_INET(IPv4)。 ICUNIT_ASSERT_EQUAL(se1->n_net, inet_network("169.254.0.0"), -1); + // 断言返回的网络地址与"169.254.0.0"相同。 se2 = getnetbyname("link"); + // 尝试使用getnetbyname函数根据不完整的网络名称"link"获取netent结构体指针,预期失败。 ICUNIT_ASSERT_EQUAL(se2, nullptr, -1); se3 = getnetbyname("hs"); + // 尝试使用getnetbyname函数根据不存在的网络名称"hs"获取netent结构体指针,预期失败。 ICUNIT_ASSERT_EQUAL(se3, nullptr, -1); RecoveryFileEnv(pathList, file_number); + // 恢复原始文件环境。 return ICUNIT_SUCCESS; + // 返回测试成功。 } void NetNetDbTest021(void) { TEST_ADD_CASE(__FUNCTION__, GetNetBynametTest, TEST_POSIX, TEST_TCP, TEST_LEVEL0, TEST_FUNCTION); } +// 定义测试用例,将GetNetBynametTest函数注册为一个测试案例。 \ No newline at end of file diff --git a/kernel_liteos_a-master/testsuites/unittest/net/netdb/full/net_netdb_test_022.cpp b/kernel_liteos_a-master/testsuites/unittest/net/netdb/full/net_netdb_test_022.cpp index b551318..6cb19c8 100644 --- a/kernel_liteos_a-master/testsuites/unittest/net/netdb/full/net_netdb_test_022.cpp +++ b/kernel_liteos_a-master/testsuites/unittest/net/netdb/full/net_netdb_test_022.cpp @@ -1,5 +1,5 @@ /* - * opyright (c) 2021-2021, Huawei Technologies Co., Ltd. All rights reserved. + * Copyright (c) 2021-2021, 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, @@ -29,42 +29,60 @@ */ #include "lt_net_netdb.h" +// 引入头文件,包含了网络数据库相关的函数声明和宏定义。 static int GetNetByAddrtTest(void) { char network_file[] = "# symbolic names for networks, see networks(5) for more information\n" "link-local 169.254.0.0\n"; + // 定义一个模拟的networks文件内容,包含网络名称和对应的地址。 char *pathList[] = {"/etc/networks"}; + // 定义networks文件的路径列表,这里只有一个路径指向系统的networks文件。 char *streamList[] = {static_cast(network_file)}; + // 定义模拟的networks文件流列表,这里将模拟的networks文件内容转换为char*类型。 int streamLen[] = {sizeof(network_file)}; + // 定义模拟的networks文件流长度列表。 const int file_number = 1; + // 定义文件数量。 int flag = PrepareFileEnv(pathList, streamList, streamLen, file_number); + // 调用PrepareFileEnv函数准备文件环境,模拟networks文件。 if (flag != 0) { RecoveryFileEnv(pathList, file_number); return -1; } + // 如果准备文件环境失败,则恢复原始文件环境并返回错误码。 struct netent *se1 = nullptr; struct netent *se2 = nullptr; struct netent *se3 = nullptr; se1 = getnetbyaddr(inet_network("169.254.0.0"), AF_INET); + // 使用getnetbyaddr函数根据网络地址"169.254.0.0"和地址族AF_INET获取netent结构体指针。 ICUNIT_ASSERT_NOT_EQUAL(se1, nullptr, -1); + // 断言se1不为空,即getnetbyaddr成功。 ICUNIT_ASSERT_STRING_EQUAL(se1->n_name, "link-local", -1); + // 断言返回的网络名称与"link-local"相同。 ICUNIT_ASSERT_EQUAL(se1->n_addrtype, AF_INET, -1); + // 断言返回的地址类型为AF_INET(IPv4)。 ICUNIT_ASSERT_EQUAL(se1->n_net, inet_network("169.254.0.0"), -1); + // 断言返回的网络地址与"169.254.0.0"相同。 se2 = getnetbyaddr(inet_network("169.254.0.1"), AF_INET); + // 尝试使用getnetbyaddr函数根据网络地址"169.254.0.1"和地址族AF_INET获取netent结构体指针,预期失败。 ICUNIT_ASSERT_EQUAL(se2, nullptr, -1); se3 = getnetbyaddr(inet_network("169.254.0.1"), AF_INET6); + // 尝试使用getnetbyaddr函数根据网络地址"169.254.0.1"和地址族AF_INET6获取netent结构体指针,预期失败。 ICUNIT_ASSERT_EQUAL(se3, nullptr, -1); RecoveryFileEnv(pathList, file_number); + // 恢复原始文件环境。 return ICUNIT_SUCCESS; + // 返回测试成功。 } void NetNetDbTest022(void) { TEST_ADD_CASE(__FUNCTION__, GetNetByAddrtTest, TEST_POSIX, TEST_TCP, TEST_LEVEL0, TEST_FUNCTION); } +// 定义测试用例,将GetNetByAddrtTest函数注册为一个测试案例。 \ No newline at end of file