From 5c4b71ac67832efe917ee2cdd8b9c17d2b2d3965 Mon Sep 17 00:00:00 2001 From: Marcus Nilsson Date: Sat, 12 Aug 2023 21:30:31 +0200 Subject: [PATCH] Tests: Add tests for gethostbyname_r() --- Tests/LibC/CMakeLists.txt | 1 + Tests/LibC/TestLibCNetdb.cpp | 52 ++++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 Tests/LibC/TestLibCNetdb.cpp diff --git a/Tests/LibC/CMakeLists.txt b/Tests/LibC/CMakeLists.txt index 5163d05254..25719f945b 100644 --- a/Tests/LibC/CMakeLists.txt +++ b/Tests/LibC/CMakeLists.txt @@ -8,6 +8,7 @@ set(TEST_SOURCES TestLibCDirEnt.cpp TestLibCInodeWatcher.cpp TestLibCMkTemp.cpp + TestLibCNetdb.cpp TestLibCSetjmp.cpp TestLibCString.cpp TestLibCTime.cpp diff --git a/Tests/LibC/TestLibCNetdb.cpp b/Tests/LibC/TestLibCNetdb.cpp new file mode 100644 index 0000000000..2bd9ba425b --- /dev/null +++ b/Tests/LibC/TestLibCNetdb.cpp @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2023, Marcus Nilsson + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include +#include +#include +#include + +TEST_CASE(gethostbyname_r_should_return_erange_when_buffer_is_to_small) +{ + constexpr size_t buffer_size = 2; + char buffer[buffer_size] = { 0 }; + int h_errnop; + struct hostent ret; + struct hostent* result; + + int rc = gethostbyname_r("127.0.0.1", &ret, buffer, buffer_size, &result, &h_errnop); + EXPECT_EQ(rc, ERANGE); +} + +TEST_CASE(gethostbyname_r_should_return_host_not_found) +{ + constexpr size_t buffer_size = 1024; + char buffer[buffer_size] = { 0 }; + int h_errnop; + struct hostent ret; + struct hostent* result; + + int rc = gethostbyname_r("unknownhostthatdoesntexistandhopefullyneverwill.com", &ret, buffer, buffer_size, &result, &h_errnop); + EXPECT(rc < 0); + EXPECT_EQ(h_errnop, HOST_NOT_FOUND); +} + +TEST_CASE(gethostbyname_r) +{ + constexpr size_t buffer_size = 1024; + char buffer[buffer_size] = { 0 }; + int h_errnop; + struct hostent ret; + struct hostent* result; + + int rc = gethostbyname_r("google.com", &ret, buffer, buffer_size, &result, &h_errnop); + EXPECT_EQ(rc, 0); + EXPECT_EQ(h_errnop, 0); + EXPECT_NE(result, nullptr); + EXPECT_EQ(result->h_aliases[0], nullptr); + EXPECT_EQ(result->h_addr_list[1], nullptr); + EXPECT_EQ(result->h_addrtype, AF_INET); +}