xref: /llvm-project/lldb/unittests/Host/SocketAddressTest.cpp (revision b9c1b51e45b845debb76d8658edabca70ca56079)
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