|
|
|
@ -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_INET(IPv4)。
|
|
|
|
|
ICUNIT_ASSERT_STRING_EQUAL(result->h_name, "localhost", -1);
|
|
|
|
|
// 断言查询到的主机名应为"localhost"。
|
|
|
|
|
ICUNIT_ASSERT_EQUAL(result->h_length, length, -1);
|
|
|
|
|
// 断言查询到的主机地址长度应为4(IPv4地址长度)。
|
|
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
// 将当前测试函数添加到测试用例中,指定测试类型、协议、级别和函数。
|
|
|
|
|
}
|