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); +}