xref: /llvm-project/lldb/unittests/Host/SocketAddressTest.cpp (revision 808142876c10b52e7ee57cdc6dcf0acc5c97c1b7)
1 //===-- SocketAddressTest.cpp ---------------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #include "lldb/Host/SocketAddress.h"
10 #include "TestingSupport/SubsystemRAII.h"
11 #include "lldb/Host/Socket.h"
12 #include "llvm/Testing/Support/Error.h"
13 
14 #include "gtest/gtest.h"
15 
16 using namespace lldb_private;
17 
18 namespace {
19 class SocketAddressTest : public testing::Test {
20 public:
21   SubsystemRAII<Socket> subsystems;
22 };
23 } // namespace
24 
TEST_F(SocketAddressTest,Set)25 TEST_F(SocketAddressTest, Set) {
26   SocketAddress sa;
27   ASSERT_TRUE(sa.SetToLocalhost(AF_INET, 1138));
28   ASSERT_STREQ("127.0.0.1", sa.GetIPAddress().c_str());
29   ASSERT_EQ(1138, sa.GetPort());
30 
31   ASSERT_TRUE(sa.SetToAnyAddress(AF_INET, 0));
32   ASSERT_STREQ("0.0.0.0", sa.GetIPAddress().c_str());
33   ASSERT_EQ(0, sa.GetPort());
34 
35   ASSERT_TRUE(sa.SetToLocalhost(AF_INET6, 1139));
36   ASSERT_TRUE(sa.GetIPAddress() == "::1" ||
37               sa.GetIPAddress() == "0:0:0:0:0:0:0:1")
38       << "Address was: " << sa.GetIPAddress();
39   ASSERT_EQ(1139, sa.GetPort());
40 }
41 
TEST_F(SocketAddressTest,GetAddressInfo)42 TEST_F(SocketAddressTest, GetAddressInfo) {
43   auto addr = SocketAddress::GetAddressInfo("127.0.0.1", nullptr, AF_UNSPEC,
44                                             SOCK_STREAM, IPPROTO_TCP);
45   ASSERT_EQ(1u, addr.size());
46   EXPECT_EQ(AF_INET, addr[0].GetFamily());
47   EXPECT_EQ("127.0.0.1", addr[0].GetIPAddress());
48 }
49 
50 #ifdef _WIN32
51 
52 // we need to test our inet_ntop implementation for Windows XP
53 const char *inet_ntop(int af, const void *src, char *dst, socklen_t size);
54 
TEST_F(SocketAddressTest,inet_ntop)55 TEST_F(SocketAddressTest, inet_ntop) {
56   const uint8_t address4[4] = {255, 0, 1, 100};
57   const uint8_t address6[16] = {0, 1, 2,  3,  4,  5,  6,   7,
58                                 8, 9, 10, 11, 12, 13, 255, 0};
59 
60   char buffer[INET6_ADDRSTRLEN];
61   memset(buffer, 'x', sizeof(buffer));
62   EXPECT_STREQ("1:203:405:607:809:a0b:c0d:ff00",
63                inet_ntop(AF_INET6, address6, buffer, sizeof(buffer)));
64   memset(buffer, 'x', sizeof(buffer));
65   EXPECT_STREQ("1:203:405:607:809:a0b:c0d:ff00",
66                inet_ntop(AF_INET6, address6, buffer, 31));
67   memset(buffer, 'x', sizeof(buffer));
68   EXPECT_STREQ(nullptr, inet_ntop(AF_INET6, address6, buffer, 0));
69   memset(buffer, 'x', sizeof(buffer));
70   EXPECT_STREQ(nullptr, inet_ntop(AF_INET6, address6, buffer, 30));
71 
72   memset(buffer, 'x', sizeof(buffer));
73   EXPECT_STREQ("255.0.1.100",
74                inet_ntop(AF_INET, address4, buffer, sizeof(buffer)));
75   memset(buffer, 'x', sizeof(buffer));
76   EXPECT_STREQ("255.0.1.100", inet_ntop(AF_INET, address4, buffer, 12));
77   memset(buffer, 'x', sizeof(buffer));
78   EXPECT_STREQ(nullptr, inet_ntop(AF_INET, address4, buffer, 0));
79   memset(buffer, 'x', sizeof(buffer));
80   EXPECT_STREQ(nullptr, inet_ntop(AF_INET, address4, buffer, 11));
81 }
82 
83 #endif
84