xref: /aosp_15_r20/external/webrtc/rtc_base/socket_address_unittest.cc (revision d9f758449e529ab9291ac668be2861e7a55c2422)
1*d9f75844SAndroid Build Coastguard Worker /*
2*d9f75844SAndroid Build Coastguard Worker  *  Copyright 2004 The WebRTC Project Authors. All rights reserved.
3*d9f75844SAndroid Build Coastguard Worker  *
4*d9f75844SAndroid Build Coastguard Worker  *  Use of this source code is governed by a BSD-style license
5*d9f75844SAndroid Build Coastguard Worker  *  that can be found in the LICENSE file in the root of the source
6*d9f75844SAndroid Build Coastguard Worker  *  tree. An additional intellectual property rights grant can be found
7*d9f75844SAndroid Build Coastguard Worker  *  in the file PATENTS.  All contributing project authors may
8*d9f75844SAndroid Build Coastguard Worker  *  be found in the AUTHORS file in the root of the source tree.
9*d9f75844SAndroid Build Coastguard Worker  */
10*d9f75844SAndroid Build Coastguard Worker 
11*d9f75844SAndroid Build Coastguard Worker #if defined(WEBRTC_POSIX)
12*d9f75844SAndroid Build Coastguard Worker #include <netinet/in.h>  // for sockaddr_in
13*d9f75844SAndroid Build Coastguard Worker #endif
14*d9f75844SAndroid Build Coastguard Worker 
15*d9f75844SAndroid Build Coastguard Worker #include <string.h>
16*d9f75844SAndroid Build Coastguard Worker 
17*d9f75844SAndroid Build Coastguard Worker #include "rtc_base/ip_address.h"
18*d9f75844SAndroid Build Coastguard Worker #include "rtc_base/socket_address.h"
19*d9f75844SAndroid Build Coastguard Worker #include "test/gtest.h"
20*d9f75844SAndroid Build Coastguard Worker 
21*d9f75844SAndroid Build Coastguard Worker namespace rtc {
22*d9f75844SAndroid Build Coastguard Worker 
23*d9f75844SAndroid Build Coastguard Worker const in6_addr kTestV6Addr = {
24*d9f75844SAndroid Build Coastguard Worker     {{0x20, 0x01, 0x0d, 0xb8, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80,
25*d9f75844SAndroid Build Coastguard Worker       0x90, 0xA0, 0xB0, 0xC0}}};
26*d9f75844SAndroid Build Coastguard Worker const in6_addr kMappedV4Addr = {
27*d9f75844SAndroid Build Coastguard Worker     {{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF,
28*d9f75844SAndroid Build Coastguard Worker       0x01, 0x02, 0x03, 0x04}}};
29*d9f75844SAndroid Build Coastguard Worker const std::string kTestV6AddrString = "2001:db8:1020:3040:5060:7080:90a0:b0c0";
30*d9f75844SAndroid Build Coastguard Worker const std::string kTestV6AddrAnonymizedString = "2001:db8:1020:x:x:x:x:x";
31*d9f75844SAndroid Build Coastguard Worker const std::string kTestV6AddrFullString =
32*d9f75844SAndroid Build Coastguard Worker     "[2001:db8:1020:3040:5060:7080:90a0:b0c0]:5678";
33*d9f75844SAndroid Build Coastguard Worker const std::string kTestV6AddrFullAnonymizedString =
34*d9f75844SAndroid Build Coastguard Worker     "[2001:db8:1020:x:x:x:x:x]:5678";
35*d9f75844SAndroid Build Coastguard Worker 
TEST(SocketAddressTest,TestDefaultCtor)36*d9f75844SAndroid Build Coastguard Worker TEST(SocketAddressTest, TestDefaultCtor) {
37*d9f75844SAndroid Build Coastguard Worker   SocketAddress addr;
38*d9f75844SAndroid Build Coastguard Worker   EXPECT_FALSE(addr.IsUnresolvedIP());
39*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(IPAddress(), addr.ipaddr());
40*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(0, addr.port());
41*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ("", addr.hostname());
42*d9f75844SAndroid Build Coastguard Worker }
43*d9f75844SAndroid Build Coastguard Worker 
TEST(SocketAddressTest,TestIPPortCtor)44*d9f75844SAndroid Build Coastguard Worker TEST(SocketAddressTest, TestIPPortCtor) {
45*d9f75844SAndroid Build Coastguard Worker   SocketAddress addr(IPAddress(0x01020304), 5678);
46*d9f75844SAndroid Build Coastguard Worker   EXPECT_FALSE(addr.IsUnresolvedIP());
47*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(IPAddress(0x01020304U), addr.ipaddr());
48*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(5678, addr.port());
49*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ("", addr.hostname());
50*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ("1.2.3.4:5678", addr.ToString());
51*d9f75844SAndroid Build Coastguard Worker }
52*d9f75844SAndroid Build Coastguard Worker 
TEST(SocketAddressTest,TestIPv4StringPortCtor)53*d9f75844SAndroid Build Coastguard Worker TEST(SocketAddressTest, TestIPv4StringPortCtor) {
54*d9f75844SAndroid Build Coastguard Worker   SocketAddress addr("1.2.3.4", 5678);
55*d9f75844SAndroid Build Coastguard Worker   EXPECT_FALSE(addr.IsUnresolvedIP());
56*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(IPAddress(0x01020304U), addr.ipaddr());
57*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(5678, addr.port());
58*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ("1.2.3.4", addr.hostname());
59*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ("1.2.3.4:5678", addr.ToString());
60*d9f75844SAndroid Build Coastguard Worker }
61*d9f75844SAndroid Build Coastguard Worker 
TEST(SocketAddressTest,TestIPv6StringPortCtor)62*d9f75844SAndroid Build Coastguard Worker TEST(SocketAddressTest, TestIPv6StringPortCtor) {
63*d9f75844SAndroid Build Coastguard Worker   SocketAddress addr2(kTestV6AddrString, 1234);
64*d9f75844SAndroid Build Coastguard Worker   IPAddress tocheck(kTestV6Addr);
65*d9f75844SAndroid Build Coastguard Worker 
66*d9f75844SAndroid Build Coastguard Worker   EXPECT_FALSE(addr2.IsUnresolvedIP());
67*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(tocheck, addr2.ipaddr());
68*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(1234, addr2.port());
69*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(kTestV6AddrString, addr2.hostname());
70*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ("[" + kTestV6AddrString + "]:1234", addr2.ToString());
71*d9f75844SAndroid Build Coastguard Worker }
72*d9f75844SAndroid Build Coastguard Worker 
TEST(SocketAddressTest,TestSpecialStringPortCtor)73*d9f75844SAndroid Build Coastguard Worker TEST(SocketAddressTest, TestSpecialStringPortCtor) {
74*d9f75844SAndroid Build Coastguard Worker   // inet_addr doesn't handle this address properly.
75*d9f75844SAndroid Build Coastguard Worker   SocketAddress addr("255.255.255.255", 5678);
76*d9f75844SAndroid Build Coastguard Worker   EXPECT_FALSE(addr.IsUnresolvedIP());
77*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(IPAddress(0xFFFFFFFFU), addr.ipaddr());
78*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(5678, addr.port());
79*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ("255.255.255.255", addr.hostname());
80*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ("255.255.255.255:5678", addr.ToString());
81*d9f75844SAndroid Build Coastguard Worker }
82*d9f75844SAndroid Build Coastguard Worker 
TEST(SocketAddressTest,TestHostnamePortCtor)83*d9f75844SAndroid Build Coastguard Worker TEST(SocketAddressTest, TestHostnamePortCtor) {
84*d9f75844SAndroid Build Coastguard Worker   SocketAddress addr("a.b.com", 5678);
85*d9f75844SAndroid Build Coastguard Worker   EXPECT_TRUE(addr.IsUnresolvedIP());
86*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(IPAddress(), addr.ipaddr());
87*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(5678, addr.port());
88*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ("a.b.com", addr.hostname());
89*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ("a.b.com:5678", addr.ToString());
90*d9f75844SAndroid Build Coastguard Worker }
91*d9f75844SAndroid Build Coastguard Worker 
TEST(SocketAddressTest,TestCopyCtor)92*d9f75844SAndroid Build Coastguard Worker TEST(SocketAddressTest, TestCopyCtor) {
93*d9f75844SAndroid Build Coastguard Worker   SocketAddress from("1.2.3.4", 5678);
94*d9f75844SAndroid Build Coastguard Worker   SocketAddress addr(from);
95*d9f75844SAndroid Build Coastguard Worker   EXPECT_FALSE(addr.IsUnresolvedIP());
96*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(IPAddress(0x01020304U), addr.ipaddr());
97*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(5678, addr.port());
98*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ("1.2.3.4", addr.hostname());
99*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ("1.2.3.4:5678", addr.ToString());
100*d9f75844SAndroid Build Coastguard Worker }
101*d9f75844SAndroid Build Coastguard Worker 
TEST(SocketAddressTest,TestAssign)102*d9f75844SAndroid Build Coastguard Worker TEST(SocketAddressTest, TestAssign) {
103*d9f75844SAndroid Build Coastguard Worker   SocketAddress from("1.2.3.4", 5678);
104*d9f75844SAndroid Build Coastguard Worker   SocketAddress addr(IPAddress(0x88888888), 9999);
105*d9f75844SAndroid Build Coastguard Worker   addr = from;
106*d9f75844SAndroid Build Coastguard Worker   EXPECT_FALSE(addr.IsUnresolvedIP());
107*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(IPAddress(0x01020304U), addr.ipaddr());
108*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(5678, addr.port());
109*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ("1.2.3.4", addr.hostname());
110*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ("1.2.3.4:5678", addr.ToString());
111*d9f75844SAndroid Build Coastguard Worker }
112*d9f75844SAndroid Build Coastguard Worker 
TEST(SocketAddressTest,TestSetIPPort)113*d9f75844SAndroid Build Coastguard Worker TEST(SocketAddressTest, TestSetIPPort) {
114*d9f75844SAndroid Build Coastguard Worker   SocketAddress addr(IPAddress(0x88888888), 9999);
115*d9f75844SAndroid Build Coastguard Worker   addr.SetIP(IPAddress(0x01020304));
116*d9f75844SAndroid Build Coastguard Worker   addr.SetPort(5678);
117*d9f75844SAndroid Build Coastguard Worker   EXPECT_FALSE(addr.IsUnresolvedIP());
118*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(IPAddress(0x01020304U), addr.ipaddr());
119*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(5678, addr.port());
120*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ("", addr.hostname());
121*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ("1.2.3.4:5678", addr.ToString());
122*d9f75844SAndroid Build Coastguard Worker }
123*d9f75844SAndroid Build Coastguard Worker 
TEST(SocketAddressTest,TestSetIPFromString)124*d9f75844SAndroid Build Coastguard Worker TEST(SocketAddressTest, TestSetIPFromString) {
125*d9f75844SAndroid Build Coastguard Worker   SocketAddress addr(IPAddress(0x88888888), 9999);
126*d9f75844SAndroid Build Coastguard Worker   addr.SetIP("1.2.3.4");
127*d9f75844SAndroid Build Coastguard Worker   addr.SetPort(5678);
128*d9f75844SAndroid Build Coastguard Worker   EXPECT_FALSE(addr.IsUnresolvedIP());
129*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(IPAddress(0x01020304U), addr.ipaddr());
130*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(5678, addr.port());
131*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ("1.2.3.4", addr.hostname());
132*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ("1.2.3.4:5678", addr.ToString());
133*d9f75844SAndroid Build Coastguard Worker }
134*d9f75844SAndroid Build Coastguard Worker 
TEST(SocketAddressTest,TestSetIPFromHostname)135*d9f75844SAndroid Build Coastguard Worker TEST(SocketAddressTest, TestSetIPFromHostname) {
136*d9f75844SAndroid Build Coastguard Worker   SocketAddress addr(IPAddress(0x88888888), 9999);
137*d9f75844SAndroid Build Coastguard Worker   addr.SetIP("a.b.com");
138*d9f75844SAndroid Build Coastguard Worker   addr.SetPort(5678);
139*d9f75844SAndroid Build Coastguard Worker   EXPECT_TRUE(addr.IsUnresolvedIP());
140*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(IPAddress(), addr.ipaddr());
141*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(5678, addr.port());
142*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ("a.b.com", addr.hostname());
143*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ("a.b.com:5678", addr.ToString());
144*d9f75844SAndroid Build Coastguard Worker   addr.SetResolvedIP(IPAddress(0x01020304));
145*d9f75844SAndroid Build Coastguard Worker   EXPECT_FALSE(addr.IsUnresolvedIP());
146*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(IPAddress(0x01020304U), addr.ipaddr());
147*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ("a.b.com", addr.hostname());
148*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ("a.b.com:5678", addr.ToString());
149*d9f75844SAndroid Build Coastguard Worker }
150*d9f75844SAndroid Build Coastguard Worker 
TEST(SocketAddressTest,TestFromIPv4String)151*d9f75844SAndroid Build Coastguard Worker TEST(SocketAddressTest, TestFromIPv4String) {
152*d9f75844SAndroid Build Coastguard Worker   SocketAddress addr;
153*d9f75844SAndroid Build Coastguard Worker   EXPECT_TRUE(addr.FromString("1.2.3.4:5678"));
154*d9f75844SAndroid Build Coastguard Worker   EXPECT_FALSE(addr.IsUnresolvedIP());
155*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(IPAddress(0x01020304U), addr.ipaddr());
156*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(5678, addr.port());
157*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ("1.2.3.4", addr.hostname());
158*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ("1.2.3.4:5678", addr.ToString());
159*d9f75844SAndroid Build Coastguard Worker }
160*d9f75844SAndroid Build Coastguard Worker 
TEST(SocketAddressTest,TestFromIPv6String)161*d9f75844SAndroid Build Coastguard Worker TEST(SocketAddressTest, TestFromIPv6String) {
162*d9f75844SAndroid Build Coastguard Worker   SocketAddress addr;
163*d9f75844SAndroid Build Coastguard Worker   EXPECT_TRUE(addr.FromString(kTestV6AddrFullString));
164*d9f75844SAndroid Build Coastguard Worker   EXPECT_FALSE(addr.IsUnresolvedIP());
165*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(5678, addr.port());
166*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(kTestV6AddrString, addr.hostname());
167*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(kTestV6AddrFullString, addr.ToString());
168*d9f75844SAndroid Build Coastguard Worker }
169*d9f75844SAndroid Build Coastguard Worker 
TEST(SocketAddressTest,TestFromHostname)170*d9f75844SAndroid Build Coastguard Worker TEST(SocketAddressTest, TestFromHostname) {
171*d9f75844SAndroid Build Coastguard Worker   SocketAddress addr;
172*d9f75844SAndroid Build Coastguard Worker   EXPECT_TRUE(addr.FromString("a.b.com:5678"));
173*d9f75844SAndroid Build Coastguard Worker   EXPECT_TRUE(addr.IsUnresolvedIP());
174*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(IPAddress(), addr.ipaddr());
175*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(5678, addr.port());
176*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ("a.b.com", addr.hostname());
177*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ("a.b.com:5678", addr.ToString());
178*d9f75844SAndroid Build Coastguard Worker }
179*d9f75844SAndroid Build Coastguard Worker 
TEST(SocketAddressTest,TestToFromSockAddr)180*d9f75844SAndroid Build Coastguard Worker TEST(SocketAddressTest, TestToFromSockAddr) {
181*d9f75844SAndroid Build Coastguard Worker   SocketAddress from("1.2.3.4", 5678), addr;
182*d9f75844SAndroid Build Coastguard Worker   sockaddr_in addr_in;
183*d9f75844SAndroid Build Coastguard Worker   from.ToSockAddr(&addr_in);
184*d9f75844SAndroid Build Coastguard Worker   EXPECT_TRUE(addr.FromSockAddr(addr_in));
185*d9f75844SAndroid Build Coastguard Worker   EXPECT_FALSE(addr.IsUnresolvedIP());
186*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(IPAddress(0x01020304U), addr.ipaddr());
187*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(5678, addr.port());
188*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ("", addr.hostname());
189*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ("1.2.3.4:5678", addr.ToString());
190*d9f75844SAndroid Build Coastguard Worker }
191*d9f75844SAndroid Build Coastguard Worker 
TEST(SocketAddressTest,TestToFromSockAddrStorage)192*d9f75844SAndroid Build Coastguard Worker TEST(SocketAddressTest, TestToFromSockAddrStorage) {
193*d9f75844SAndroid Build Coastguard Worker   SocketAddress from("1.2.3.4", 5678), addr;
194*d9f75844SAndroid Build Coastguard Worker   sockaddr_storage addr_storage;
195*d9f75844SAndroid Build Coastguard Worker   from.ToSockAddrStorage(&addr_storage);
196*d9f75844SAndroid Build Coastguard Worker   EXPECT_TRUE(SocketAddressFromSockAddrStorage(addr_storage, &addr));
197*d9f75844SAndroid Build Coastguard Worker   EXPECT_FALSE(addr.IsUnresolvedIP());
198*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(IPAddress(0x01020304U), addr.ipaddr());
199*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(5678, addr.port());
200*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ("", addr.hostname());
201*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ("1.2.3.4:5678", addr.ToString());
202*d9f75844SAndroid Build Coastguard Worker 
203*d9f75844SAndroid Build Coastguard Worker   addr.Clear();
204*d9f75844SAndroid Build Coastguard Worker   from.ToDualStackSockAddrStorage(&addr_storage);
205*d9f75844SAndroid Build Coastguard Worker   EXPECT_TRUE(SocketAddressFromSockAddrStorage(addr_storage, &addr));
206*d9f75844SAndroid Build Coastguard Worker   EXPECT_FALSE(addr.IsUnresolvedIP());
207*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(IPAddress(kMappedV4Addr), addr.ipaddr());
208*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(5678, addr.port());
209*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ("", addr.hostname());
210*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ("[::ffff:1.2.3.4]:5678", addr.ToString());
211*d9f75844SAndroid Build Coastguard Worker 
212*d9f75844SAndroid Build Coastguard Worker   addr.Clear();
213*d9f75844SAndroid Build Coastguard Worker   memset(&addr_storage, 0, sizeof(sockaddr_storage));
214*d9f75844SAndroid Build Coastguard Worker   from = SocketAddress(kTestV6AddrString, 5678);
215*d9f75844SAndroid Build Coastguard Worker   from.SetScopeID(6);
216*d9f75844SAndroid Build Coastguard Worker   from.ToSockAddrStorage(&addr_storage);
217*d9f75844SAndroid Build Coastguard Worker   EXPECT_TRUE(SocketAddressFromSockAddrStorage(addr_storage, &addr));
218*d9f75844SAndroid Build Coastguard Worker   EXPECT_FALSE(addr.IsUnresolvedIP());
219*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(IPAddress(kTestV6Addr), addr.ipaddr());
220*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(5678, addr.port());
221*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ("", addr.hostname());
222*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(kTestV6AddrFullString, addr.ToString());
223*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(6, addr.scope_id());
224*d9f75844SAndroid Build Coastguard Worker 
225*d9f75844SAndroid Build Coastguard Worker   addr.Clear();
226*d9f75844SAndroid Build Coastguard Worker   from.ToDualStackSockAddrStorage(&addr_storage);
227*d9f75844SAndroid Build Coastguard Worker   EXPECT_TRUE(SocketAddressFromSockAddrStorage(addr_storage, &addr));
228*d9f75844SAndroid Build Coastguard Worker   EXPECT_FALSE(addr.IsUnresolvedIP());
229*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(IPAddress(kTestV6Addr), addr.ipaddr());
230*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(5678, addr.port());
231*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ("", addr.hostname());
232*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(kTestV6AddrFullString, addr.ToString());
233*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(6, addr.scope_id());
234*d9f75844SAndroid Build Coastguard Worker 
235*d9f75844SAndroid Build Coastguard Worker   addr = from;
236*d9f75844SAndroid Build Coastguard Worker   addr_storage.ss_family = AF_UNSPEC;
237*d9f75844SAndroid Build Coastguard Worker   EXPECT_FALSE(SocketAddressFromSockAddrStorage(addr_storage, &addr));
238*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(from, addr);
239*d9f75844SAndroid Build Coastguard Worker 
240*d9f75844SAndroid Build Coastguard Worker   EXPECT_FALSE(SocketAddressFromSockAddrStorage(addr_storage, nullptr));
241*d9f75844SAndroid Build Coastguard Worker }
242*d9f75844SAndroid Build Coastguard Worker 
AreEqual(const SocketAddress & addr1,const SocketAddress & addr2)243*d9f75844SAndroid Build Coastguard Worker bool AreEqual(const SocketAddress& addr1, const SocketAddress& addr2) {
244*d9f75844SAndroid Build Coastguard Worker   return addr1 == addr2 && addr2 == addr1 && !(addr1 != addr2) &&
245*d9f75844SAndroid Build Coastguard Worker          !(addr2 != addr1);
246*d9f75844SAndroid Build Coastguard Worker }
247*d9f75844SAndroid Build Coastguard Worker 
AreUnequal(const SocketAddress & addr1,const SocketAddress & addr2)248*d9f75844SAndroid Build Coastguard Worker bool AreUnequal(const SocketAddress& addr1, const SocketAddress& addr2) {
249*d9f75844SAndroid Build Coastguard Worker   return !(addr1 == addr2) && !(addr2 == addr1) && addr1 != addr2 &&
250*d9f75844SAndroid Build Coastguard Worker          addr2 != addr1;
251*d9f75844SAndroid Build Coastguard Worker }
252*d9f75844SAndroid Build Coastguard Worker 
TEST(SocketAddressTest,TestEqualityOperators)253*d9f75844SAndroid Build Coastguard Worker TEST(SocketAddressTest, TestEqualityOperators) {
254*d9f75844SAndroid Build Coastguard Worker   SocketAddress addr1("1.2.3.4", 5678);
255*d9f75844SAndroid Build Coastguard Worker   SocketAddress addr2("1.2.3.4", 5678);
256*d9f75844SAndroid Build Coastguard Worker   EXPECT_TRUE(AreEqual(addr1, addr2));
257*d9f75844SAndroid Build Coastguard Worker 
258*d9f75844SAndroid Build Coastguard Worker   addr2 = SocketAddress("0.0.0.1", 5678);
259*d9f75844SAndroid Build Coastguard Worker   EXPECT_TRUE(AreUnequal(addr1, addr2));
260*d9f75844SAndroid Build Coastguard Worker 
261*d9f75844SAndroid Build Coastguard Worker   addr2 = SocketAddress("1.2.3.4", 1234);
262*d9f75844SAndroid Build Coastguard Worker   EXPECT_TRUE(AreUnequal(addr1, addr2));
263*d9f75844SAndroid Build Coastguard Worker 
264*d9f75844SAndroid Build Coastguard Worker   addr2 = SocketAddress(kTestV6AddrString, 5678);
265*d9f75844SAndroid Build Coastguard Worker   EXPECT_TRUE(AreUnequal(addr1, addr2));
266*d9f75844SAndroid Build Coastguard Worker 
267*d9f75844SAndroid Build Coastguard Worker   addr1 = SocketAddress(kTestV6AddrString, 5678);
268*d9f75844SAndroid Build Coastguard Worker   EXPECT_TRUE(AreEqual(addr1, addr2));
269*d9f75844SAndroid Build Coastguard Worker 
270*d9f75844SAndroid Build Coastguard Worker   addr2 = SocketAddress(kTestV6AddrString, 1234);
271*d9f75844SAndroid Build Coastguard Worker   EXPECT_TRUE(AreUnequal(addr1, addr2));
272*d9f75844SAndroid Build Coastguard Worker 
273*d9f75844SAndroid Build Coastguard Worker   addr2 = SocketAddress("fe80::1", 5678);
274*d9f75844SAndroid Build Coastguard Worker   EXPECT_TRUE(AreUnequal(addr1, addr2));
275*d9f75844SAndroid Build Coastguard Worker 
276*d9f75844SAndroid Build Coastguard Worker   SocketAddress addr3("a.b.c.d", 1);
277*d9f75844SAndroid Build Coastguard Worker   SocketAddress addr4("b.b.c.d", 1);
278*d9f75844SAndroid Build Coastguard Worker   EXPECT_TRUE(AreUnequal(addr3, addr4));
279*d9f75844SAndroid Build Coastguard Worker   EXPECT_TRUE(AreEqual(addr3, addr3));
280*d9f75844SAndroid Build Coastguard Worker 
281*d9f75844SAndroid Build Coastguard Worker   addr3.SetIP(addr1.ip());
282*d9f75844SAndroid Build Coastguard Worker   addr4.SetIP(addr1.ip());
283*d9f75844SAndroid Build Coastguard Worker   EXPECT_TRUE(AreEqual(addr3, addr4));
284*d9f75844SAndroid Build Coastguard Worker }
285*d9f75844SAndroid Build Coastguard Worker 
IsLessThan(const SocketAddress & addr1,const SocketAddress & addr2)286*d9f75844SAndroid Build Coastguard Worker bool IsLessThan(const SocketAddress& addr1, const SocketAddress& addr2) {
287*d9f75844SAndroid Build Coastguard Worker   return addr1 < addr2 && !(addr2 < addr1) && !(addr1 == addr2);
288*d9f75844SAndroid Build Coastguard Worker }
289*d9f75844SAndroid Build Coastguard Worker 
TEST(SocketAddressTest,TestComparisonOperator)290*d9f75844SAndroid Build Coastguard Worker TEST(SocketAddressTest, TestComparisonOperator) {
291*d9f75844SAndroid Build Coastguard Worker   SocketAddress addr1("1.2.3.4", 5678);
292*d9f75844SAndroid Build Coastguard Worker   SocketAddress addr2("1.2.3.4", 5678);
293*d9f75844SAndroid Build Coastguard Worker 
294*d9f75844SAndroid Build Coastguard Worker   EXPECT_FALSE(addr1 < addr2);
295*d9f75844SAndroid Build Coastguard Worker   EXPECT_FALSE(addr2 < addr1);
296*d9f75844SAndroid Build Coastguard Worker 
297*d9f75844SAndroid Build Coastguard Worker   addr2 = SocketAddress("1.2.3.4", 5679);
298*d9f75844SAndroid Build Coastguard Worker   EXPECT_TRUE(IsLessThan(addr1, addr2));
299*d9f75844SAndroid Build Coastguard Worker 
300*d9f75844SAndroid Build Coastguard Worker   addr2 = SocketAddress("2.2.3.4", 49152);
301*d9f75844SAndroid Build Coastguard Worker   EXPECT_TRUE(IsLessThan(addr1, addr2));
302*d9f75844SAndroid Build Coastguard Worker 
303*d9f75844SAndroid Build Coastguard Worker   addr2 = SocketAddress(kTestV6AddrString, 5678);
304*d9f75844SAndroid Build Coastguard Worker   EXPECT_TRUE(IsLessThan(addr1, addr2));
305*d9f75844SAndroid Build Coastguard Worker 
306*d9f75844SAndroid Build Coastguard Worker   addr1 = SocketAddress("fe80::1", 5678);
307*d9f75844SAndroid Build Coastguard Worker   EXPECT_TRUE(IsLessThan(addr2, addr1));
308*d9f75844SAndroid Build Coastguard Worker 
309*d9f75844SAndroid Build Coastguard Worker   addr2 = SocketAddress("fe80::1", 5679);
310*d9f75844SAndroid Build Coastguard Worker   EXPECT_TRUE(IsLessThan(addr1, addr2));
311*d9f75844SAndroid Build Coastguard Worker 
312*d9f75844SAndroid Build Coastguard Worker   addr2 = SocketAddress("fe80::1", 5678);
313*d9f75844SAndroid Build Coastguard Worker   EXPECT_FALSE(addr1 < addr2);
314*d9f75844SAndroid Build Coastguard Worker   EXPECT_FALSE(addr2 < addr1);
315*d9f75844SAndroid Build Coastguard Worker 
316*d9f75844SAndroid Build Coastguard Worker   SocketAddress addr3("a.b.c.d", 1);
317*d9f75844SAndroid Build Coastguard Worker   SocketAddress addr4("b.b.c.d", 1);
318*d9f75844SAndroid Build Coastguard Worker   EXPECT_TRUE(IsLessThan(addr3, addr4));
319*d9f75844SAndroid Build Coastguard Worker }
320*d9f75844SAndroid Build Coastguard Worker 
TEST(SocketAddressTest,TestToSensitiveString)321*d9f75844SAndroid Build Coastguard Worker TEST(SocketAddressTest, TestToSensitiveString) {
322*d9f75844SAndroid Build Coastguard Worker   SocketAddress addr_v4("1.2.3.4", 5678);
323*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ("1.2.3.4", addr_v4.HostAsURIString());
324*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ("1.2.3.4:5678", addr_v4.ToString());
325*d9f75844SAndroid Build Coastguard Worker 
326*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ("1.2.3.x", addr_v4.HostAsSensitiveURIString());
327*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ("1.2.3.x:5678", addr_v4.ToSensitiveString());
328*d9f75844SAndroid Build Coastguard Worker 
329*d9f75844SAndroid Build Coastguard Worker   SocketAddress addr_v6(kTestV6AddrString, 5678);
330*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ("[" + kTestV6AddrString + "]", addr_v6.HostAsURIString());
331*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(kTestV6AddrFullString, addr_v6.ToString());
332*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ("[" + kTestV6AddrAnonymizedString + "]",
333*d9f75844SAndroid Build Coastguard Worker             addr_v6.HostAsSensitiveURIString());
334*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(kTestV6AddrFullAnonymizedString, addr_v6.ToSensitiveString());
335*d9f75844SAndroid Build Coastguard Worker }
336*d9f75844SAndroid Build Coastguard Worker 
337*d9f75844SAndroid Build Coastguard Worker }  // namespace rtc
338