1719ec93aSZachary Turner //===-- SocketAddressTest.cpp -----------------------------------*- C++ -*-===// 2719ec93aSZachary Turner // 3719ec93aSZachary Turner // The LLVM Compiler Infrastructure 4719ec93aSZachary Turner // 5719ec93aSZachary Turner // This file is distributed under the University of Illinois Open Source 6719ec93aSZachary Turner // License. See LICENSE.TXT for details. 7719ec93aSZachary Turner // 8719ec93aSZachary Turner //===----------------------------------------------------------------------===// 9719ec93aSZachary Turner 10719ec93aSZachary Turner #include "gtest/gtest.h" 11719ec93aSZachary Turner 12719ec93aSZachary Turner #include "lldb/Host/SocketAddress.h" 13719ec93aSZachary Turner 14*b9c1b51eSKate Stone namespace { 15*b9c1b51eSKate Stone class SocketAddressTest : public ::testing::Test {}; 16719ec93aSZachary Turner } 17719ec93aSZachary Turner 18719ec93aSZachary Turner using namespace lldb_private; 19719ec93aSZachary Turner 20*b9c1b51eSKate Stone TEST_F(SocketAddressTest, Set) { 21719ec93aSZachary Turner SocketAddress sa; 22719ec93aSZachary Turner ASSERT_TRUE(sa.SetToLocalhost(AF_INET, 1138)); 23719ec93aSZachary Turner ASSERT_STREQ("127.0.0.1", sa.GetIPAddress().c_str()); 24719ec93aSZachary Turner ASSERT_EQ(1138, sa.GetPort()); 25719ec93aSZachary Turner 26719ec93aSZachary Turner ASSERT_TRUE(sa.SetToAnyAddress(AF_INET, 0)); 27719ec93aSZachary Turner ASSERT_STREQ("0.0.0.0", sa.GetIPAddress().c_str()); 28719ec93aSZachary Turner ASSERT_EQ(0, sa.GetPort()); 29719ec93aSZachary Turner 30719ec93aSZachary Turner ASSERT_TRUE(sa.SetToLocalhost(AF_INET6, 1139)); 31*b9c1b51eSKate Stone ASSERT_TRUE(sa.GetIPAddress() == "::1" || 32*b9c1b51eSKate Stone sa.GetIPAddress() == "0:0:0:0:0:0:0:1") 33*b9c1b51eSKate Stone << "Address was: " << sa.GetIPAddress(); 34719ec93aSZachary Turner ASSERT_EQ(1139, sa.GetPort()); 35719ec93aSZachary Turner } 36719ec93aSZachary Turner 37719ec93aSZachary Turner #ifdef _WIN32 38719ec93aSZachary Turner 39719ec93aSZachary Turner // we need to test our inet_ntop implementation for Windows XP 40*b9c1b51eSKate Stone const char *inet_ntop(int af, const void *src, char *dst, socklen_t size); 41719ec93aSZachary Turner 42*b9c1b51eSKate Stone TEST_F(SocketAddressTest, inet_ntop) { 43719ec93aSZachary Turner const uint8_t address4[4] = {255, 0, 1, 100}; 44*b9c1b51eSKate Stone const uint8_t address6[16] = {0, 1, 2, 3, 4, 5, 6, 7, 45*b9c1b51eSKate Stone 8, 9, 10, 11, 12, 13, 255, 0}; 46719ec93aSZachary Turner 47719ec93aSZachary Turner char buffer[INET6_ADDRSTRLEN]; 48719ec93aSZachary Turner memset(buffer, 'x', sizeof(buffer)); 49*b9c1b51eSKate Stone EXPECT_STREQ("1:203:405:607:809:a0b:c0d:ff00", 50*b9c1b51eSKate Stone inet_ntop(AF_INET6, address6, buffer, sizeof(buffer))); 51719ec93aSZachary Turner memset(buffer, 'x', sizeof(buffer)); 52*b9c1b51eSKate Stone EXPECT_STREQ("1:203:405:607:809:a0b:c0d:ff00", 53*b9c1b51eSKate Stone inet_ntop(AF_INET6, address6, buffer, 31)); 54719ec93aSZachary Turner memset(buffer, 'x', sizeof(buffer)); 55719ec93aSZachary Turner EXPECT_STREQ(nullptr, inet_ntop(AF_INET6, address6, buffer, 0)); 56719ec93aSZachary Turner memset(buffer, 'x', sizeof(buffer)); 57719ec93aSZachary Turner EXPECT_STREQ(nullptr, inet_ntop(AF_INET6, address6, buffer, 30)); 58719ec93aSZachary Turner 59719ec93aSZachary Turner memset(buffer, 'x', sizeof(buffer)); 60*b9c1b51eSKate Stone EXPECT_STREQ("255.0.1.100", 61*b9c1b51eSKate Stone inet_ntop(AF_INET, address4, buffer, sizeof(buffer))); 62719ec93aSZachary Turner memset(buffer, 'x', sizeof(buffer)); 63719ec93aSZachary Turner EXPECT_STREQ("255.0.1.100", inet_ntop(AF_INET, address4, buffer, 12)); 64719ec93aSZachary Turner memset(buffer, 'x', sizeof(buffer)); 65719ec93aSZachary Turner EXPECT_STREQ(nullptr, inet_ntop(AF_INET, address4, buffer, 0)); 66719ec93aSZachary Turner memset(buffer, 'x', sizeof(buffer)); 67719ec93aSZachary Turner EXPECT_STREQ(nullptr, inet_ntop(AF_INET, address4, buffer, 11)); 68719ec93aSZachary Turner } 69719ec93aSZachary Turner 70719ec93aSZachary Turner #endif 71