diff options
Diffstat (limited to 'tests/netdb_test.cpp')
-rw-r--r-- | tests/netdb_test.cpp | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/tests/netdb_test.cpp b/tests/netdb_test.cpp index 168f7c148..33f6c01d8 100644 --- a/tests/netdb_test.cpp +++ b/tests/netdb_test.cpp @@ -19,10 +19,39 @@ #include <sys/types.h> #include <sys/socket.h> #include <netdb.h> - +#include <netinet/in.h> TEST(netdb, getaddrinfo_NULL_hints) { addrinfo* ai = NULL; ASSERT_EQ(0, getaddrinfo("localhost", "9999", NULL, &ai)); freeaddrinfo(ai); } + +TEST(netdb, getnameinfo_salen) { + sockaddr_storage ss; + memset(&ss, 0, sizeof(ss)); + sockaddr* sa = reinterpret_cast<sockaddr*>(&ss); + char tmp[16]; + + ss.ss_family = AF_INET; + socklen_t too_much = sizeof(ss); + socklen_t just_right = sizeof(sockaddr_in); + socklen_t too_little = sizeof(sockaddr_in) - 1; + + ASSERT_EQ(0, getnameinfo(sa, too_much, tmp, sizeof(tmp), NULL, 0, NI_NUMERICHOST)); + ASSERT_STREQ("0.0.0.0", tmp); + ASSERT_EQ(0, getnameinfo(sa, just_right, tmp, sizeof(tmp), NULL, 0, NI_NUMERICHOST)); + ASSERT_STREQ("0.0.0.0", tmp); + ASSERT_EQ(EAI_FAMILY, getnameinfo(sa, too_little, tmp, sizeof(tmp), NULL, 0, NI_NUMERICHOST)); + + ss.ss_family = AF_INET6; + just_right = sizeof(sockaddr_in6); + too_little = sizeof(sockaddr_in6) - 1; + too_much = just_right + 1; + + ASSERT_EQ(0, getnameinfo(sa, too_much, tmp, sizeof(tmp), NULL, 0, NI_NUMERICHOST)); + ASSERT_STREQ("::", tmp); + ASSERT_EQ(0, getnameinfo(sa, just_right, tmp, sizeof(tmp), NULL, 0, NI_NUMERICHOST)); + ASSERT_STREQ("::", tmp); + ASSERT_EQ(EAI_FAMILY, getnameinfo(sa, too_little, tmp, sizeof(tmp), NULL, 0, NI_NUMERICHOST)); +} |