147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org/* 247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org * Copyright 2004 The WebRTC Project Authors. All rights reserved. 347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org * 447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org * Use of this source code is governed by a BSD-style license 547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org * that can be found in the LICENSE file in the root of the source 647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org * tree. An additional intellectual property rights grant can be found 747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org * in the file PATENTS. All contributing project authors may 847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org * be found in the AUTHORS file in the root of the source tree. 947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org */ 1047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 1147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#if defined(WEBRTC_POSIX) 1247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include <netinet/in.h> // for sockaddr_in 1347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#endif 1447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 1547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include "webrtc/base/gunit.h" 1647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include "webrtc/base/socketaddress.h" 1747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include "webrtc/base/ipaddress.h" 1847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 1947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgnamespace rtc { 2047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 2147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgconst in6_addr kTestV6Addr = { { {0x20, 0x01, 0x0d, 0xb8, 2247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 0x10, 0x20, 0x30, 0x40, 2347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 0x50, 0x60, 0x70, 0x80, 2447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 0x90, 0xA0, 0xB0, 0xC0} } }; 2547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgconst in6_addr kMappedV4Addr = { { {0x00, 0x00, 0x00, 0x00, 2647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 0x00, 0x00, 0x00, 0x00, 2747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 0x00, 0x00, 0xFF, 0xFF, 2847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 0x01, 0x02, 0x03, 0x04} } }; 2947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgconst std::string kTestV6AddrString = "2001:db8:1020:3040:5060:7080:90a0:b0c0"; 3047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgconst std::string kTestV6AddrAnonymizedString = "2001:db8:1020::"; 3147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgconst std::string kTestV6AddrFullString = 3247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org "[2001:db8:1020:3040:5060:7080:90a0:b0c0]:5678"; 3347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgconst std::string kTestV6AddrFullAnonymizedString = "[2001:db8:1020::]:5678"; 3447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 3547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST(SocketAddressTest, TestDefaultCtor) { 3647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org SocketAddress addr; 3747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_FALSE(addr.IsUnresolvedIP()); 3847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(IPAddress(), addr.ipaddr()); 3947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(0, addr.port()); 4047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ("", addr.hostname()); 4147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 4247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 4347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST(SocketAddressTest, TestIPPortCtor) { 4447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org SocketAddress addr(IPAddress(0x01020304), 5678); 4547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_FALSE(addr.IsUnresolvedIP()); 4647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(IPAddress(0x01020304U), addr.ipaddr()); 4747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(5678, addr.port()); 4847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ("", addr.hostname()); 4947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ("1.2.3.4:5678", addr.ToString()); 5047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 5147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 5247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST(SocketAddressTest, TestIPv4StringPortCtor) { 5347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org SocketAddress addr("1.2.3.4", 5678); 5447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_FALSE(addr.IsUnresolvedIP()); 5547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(IPAddress(0x01020304U), addr.ipaddr()); 5647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(5678, addr.port()); 5747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ("1.2.3.4", addr.hostname()); 5847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ("1.2.3.4:5678", addr.ToString()); 5947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 6047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 6147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST(SocketAddressTest, TestIPv6StringPortCtor) { 6247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org SocketAddress addr2(kTestV6AddrString, 1234); 6347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org IPAddress tocheck(kTestV6Addr); 6447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 6547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_FALSE(addr2.IsUnresolvedIP()); 6647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(tocheck, addr2.ipaddr()); 6747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(1234, addr2.port()); 6847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(kTestV6AddrString, addr2.hostname()); 6947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ("[" + kTestV6AddrString + "]:1234", addr2.ToString()); 7047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 7147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 7247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST(SocketAddressTest, TestSpecialStringPortCtor) { 7347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // inet_addr doesn't handle this address properly. 7447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org SocketAddress addr("255.255.255.255", 5678); 7547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_FALSE(addr.IsUnresolvedIP()); 7647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(IPAddress(0xFFFFFFFFU), addr.ipaddr()); 7747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(5678, addr.port()); 7847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ("255.255.255.255", addr.hostname()); 7947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ("255.255.255.255:5678", addr.ToString()); 8047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 8147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 8247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST(SocketAddressTest, TestHostnamePortCtor) { 8347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org SocketAddress addr("a.b.com", 5678); 8447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(addr.IsUnresolvedIP()); 8547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(IPAddress(), addr.ipaddr()); 8647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(5678, addr.port()); 8747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ("a.b.com", addr.hostname()); 8847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ("a.b.com:5678", addr.ToString()); 8947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 9047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 9147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST(SocketAddressTest, TestCopyCtor) { 9247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org SocketAddress from("1.2.3.4", 5678); 9347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org SocketAddress addr(from); 9447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_FALSE(addr.IsUnresolvedIP()); 9547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(IPAddress(0x01020304U), addr.ipaddr()); 9647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(5678, addr.port()); 9747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ("1.2.3.4", addr.hostname()); 9847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ("1.2.3.4:5678", addr.ToString()); 9947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 10047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 10147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST(SocketAddressTest, TestAssign) { 10247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org SocketAddress from("1.2.3.4", 5678); 10347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org SocketAddress addr(IPAddress(0x88888888), 9999); 10447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org addr = from; 10547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_FALSE(addr.IsUnresolvedIP()); 10647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(IPAddress(0x01020304U), addr.ipaddr()); 10747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(5678, addr.port()); 10847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ("1.2.3.4", addr.hostname()); 10947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ("1.2.3.4:5678", addr.ToString()); 11047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 11147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 11247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST(SocketAddressTest, TestSetIPPort) { 11347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org SocketAddress addr(IPAddress(0x88888888), 9999); 11447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org addr.SetIP(IPAddress(0x01020304)); 11547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org addr.SetPort(5678); 11647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_FALSE(addr.IsUnresolvedIP()); 11747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(IPAddress(0x01020304U), addr.ipaddr()); 11847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(5678, addr.port()); 11947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ("", addr.hostname()); 12047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ("1.2.3.4:5678", addr.ToString()); 12147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 12247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 12347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST(SocketAddressTest, TestSetIPFromString) { 12447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org SocketAddress addr(IPAddress(0x88888888), 9999); 12547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org addr.SetIP("1.2.3.4"); 12647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org addr.SetPort(5678); 12747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_FALSE(addr.IsUnresolvedIP()); 12847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(IPAddress(0x01020304U), addr.ipaddr()); 12947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(5678, addr.port()); 13047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ("1.2.3.4", addr.hostname()); 13147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ("1.2.3.4:5678", addr.ToString()); 13247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 13347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 13447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST(SocketAddressTest, TestSetIPFromHostname) { 13547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org SocketAddress addr(IPAddress(0x88888888), 9999); 13647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org addr.SetIP("a.b.com"); 13747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org addr.SetPort(5678); 13847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(addr.IsUnresolvedIP()); 13947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(IPAddress(), addr.ipaddr()); 14047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(5678, addr.port()); 14147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ("a.b.com", addr.hostname()); 14247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ("a.b.com:5678", addr.ToString()); 14347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org addr.SetResolvedIP(IPAddress(0x01020304)); 14447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_FALSE(addr.IsUnresolvedIP()); 14547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(IPAddress(0x01020304U), addr.ipaddr()); 14647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ("a.b.com", addr.hostname()); 14747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ("a.b.com:5678", addr.ToString()); 14847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 14947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 15047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST(SocketAddressTest, TestFromIPv4String) { 15147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org SocketAddress addr; 15247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(addr.FromString("1.2.3.4:5678")); 15347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_FALSE(addr.IsUnresolvedIP()); 15447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(IPAddress(0x01020304U), addr.ipaddr()); 15547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(5678, addr.port()); 15647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ("1.2.3.4", addr.hostname()); 15747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ("1.2.3.4:5678", addr.ToString()); 15847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 15947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 16047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST(SocketAddressTest, TestFromIPv6String) { 16147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org SocketAddress addr; 16247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(addr.FromString(kTestV6AddrFullString)); 16347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_FALSE(addr.IsUnresolvedIP()); 16447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(5678, addr.port()); 16547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(kTestV6AddrString, addr.hostname()); 16647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(kTestV6AddrFullString, addr.ToString()); 16747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 16847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 16947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST(SocketAddressTest, TestFromHostname) { 17047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org SocketAddress addr; 17147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(addr.FromString("a.b.com:5678")); 17247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(addr.IsUnresolvedIP()); 17347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(IPAddress(), addr.ipaddr()); 17447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(5678, addr.port()); 17547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ("a.b.com", addr.hostname()); 17647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ("a.b.com:5678", addr.ToString()); 17747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 17847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 17947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST(SocketAddressTest, TestToFromSockAddr) { 18047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org SocketAddress from("1.2.3.4", 5678), addr; 18147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org sockaddr_in addr_in; 18247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org from.ToSockAddr(&addr_in); 18347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(addr.FromSockAddr(addr_in)); 18447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_FALSE(addr.IsUnresolvedIP()); 18547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(IPAddress(0x01020304U), addr.ipaddr()); 18647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(5678, addr.port()); 18747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ("", addr.hostname()); 18847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ("1.2.3.4:5678", addr.ToString()); 18947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 19047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 19147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST(SocketAddressTest, TestToFromSockAddrStorage) { 19247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org SocketAddress from("1.2.3.4", 5678), addr; 19347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org sockaddr_storage addr_storage; 19447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org from.ToSockAddrStorage(&addr_storage); 19547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(SocketAddressFromSockAddrStorage(addr_storage, &addr)); 19647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_FALSE(addr.IsUnresolvedIP()); 19747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(IPAddress(0x01020304U), addr.ipaddr()); 19847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(5678, addr.port()); 19947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ("", addr.hostname()); 20047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ("1.2.3.4:5678", addr.ToString()); 20147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 20247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org addr.Clear(); 20347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org from.ToDualStackSockAddrStorage(&addr_storage); 20447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(SocketAddressFromSockAddrStorage(addr_storage, &addr)); 20547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_FALSE(addr.IsUnresolvedIP()); 20647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(IPAddress(kMappedV4Addr), addr.ipaddr()); 20747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(5678, addr.port()); 20847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ("", addr.hostname()); 20947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ("[::ffff:1.2.3.4]:5678", addr.ToString()); 21047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 21147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org addr.Clear(); 21247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org memset(&addr_storage, 0, sizeof(sockaddr_storage)); 21347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org from = SocketAddress(kTestV6AddrString, 5678); 21447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org from.SetScopeID(6); 21547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org from.ToSockAddrStorage(&addr_storage); 21647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(SocketAddressFromSockAddrStorage(addr_storage, &addr)); 21747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_FALSE(addr.IsUnresolvedIP()); 21847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(IPAddress(kTestV6Addr), addr.ipaddr()); 21947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(5678, addr.port()); 22047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ("", addr.hostname()); 22147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(kTestV6AddrFullString, addr.ToString()); 22247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(6, addr.scope_id()); 22347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 22447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org addr.Clear(); 22547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org from.ToDualStackSockAddrStorage(&addr_storage); 22647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(SocketAddressFromSockAddrStorage(addr_storage, &addr)); 22747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_FALSE(addr.IsUnresolvedIP()); 22847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(IPAddress(kTestV6Addr), addr.ipaddr()); 22947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(5678, addr.port()); 23047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ("", addr.hostname()); 23147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(kTestV6AddrFullString, addr.ToString()); 23247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(6, addr.scope_id()); 23347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 23447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org addr = from; 23547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org addr_storage.ss_family = AF_UNSPEC; 23647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_FALSE(SocketAddressFromSockAddrStorage(addr_storage, &addr)); 23747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(from, addr); 23847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 23947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_FALSE(SocketAddressFromSockAddrStorage(addr_storage, NULL)); 24047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 24147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 24247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgbool AreEqual(const SocketAddress& addr1, 24347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org const SocketAddress& addr2) { 24447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return addr1 == addr2 && addr2 == addr1 && 24547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org !(addr1 != addr2) && !(addr2 != addr1); 24647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 24747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 24847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgbool AreUnequal(const SocketAddress& addr1, 24947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org const SocketAddress& addr2) { 25047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return !(addr1 == addr2) && !(addr2 == addr1) && 25147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org addr1 != addr2 && addr2 != addr1; 25247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 25347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 25447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST(SocketAddressTest, TestEqualityOperators) { 25547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org SocketAddress addr1("1.2.3.4", 5678); 25647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org SocketAddress addr2("1.2.3.4", 5678); 25747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_PRED2(AreEqual, addr1, addr2); 25847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 25947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org addr2 = SocketAddress("0.0.0.1", 5678); 26047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_PRED2(AreUnequal, addr1, addr2); 26147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 26247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org addr2 = SocketAddress("1.2.3.4", 1234); 26347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_PRED2(AreUnequal, addr1, addr2); 26447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 26547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org addr2 = SocketAddress(kTestV6AddrString, 5678); 26647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_PRED2(AreUnequal, addr1, addr2); 26747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 26847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org addr1 = SocketAddress(kTestV6AddrString, 5678); 26947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_PRED2(AreEqual, addr1, addr2); 27047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 27147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org addr2 = SocketAddress(kTestV6AddrString, 1234); 27247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_PRED2(AreUnequal, addr1, addr2); 27347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 27447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org addr2 = SocketAddress("fe80::1", 5678); 27547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_PRED2(AreUnequal, addr1, addr2); 276c4b828d1b37c297978031b1a6871a03cc2522c3ahenrike@webrtc.org 277c4b828d1b37c297978031b1a6871a03cc2522c3ahenrike@webrtc.org SocketAddress addr3("a.b.c.d", 1); 278c4b828d1b37c297978031b1a6871a03cc2522c3ahenrike@webrtc.org SocketAddress addr4("b.b.c.d", 1); 279c4b828d1b37c297978031b1a6871a03cc2522c3ahenrike@webrtc.org EXPECT_PRED2(AreUnequal, addr3, addr4); 280c4b828d1b37c297978031b1a6871a03cc2522c3ahenrike@webrtc.org EXPECT_PRED2(AreEqual, addr3, addr3); 281c4b828d1b37c297978031b1a6871a03cc2522c3ahenrike@webrtc.org 282c4b828d1b37c297978031b1a6871a03cc2522c3ahenrike@webrtc.org addr3.SetIP(addr1.ip()); 283c4b828d1b37c297978031b1a6871a03cc2522c3ahenrike@webrtc.org addr4.SetIP(addr1.ip()); 284c4b828d1b37c297978031b1a6871a03cc2522c3ahenrike@webrtc.org EXPECT_PRED2(AreEqual,addr3, addr4); 28547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 28647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 287c4b828d1b37c297978031b1a6871a03cc2522c3ahenrike@webrtc.orgbool IsLessThan(const SocketAddress& addr1, const SocketAddress& addr2) { 28847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return addr1 < addr2 && 28947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org !(addr2 < addr1) && 29047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org !(addr1 == addr2); 29147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 29247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 29347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST(SocketAddressTest, TestComparisonOperator) { 29447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org SocketAddress addr1("1.2.3.4", 5678); 29547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org SocketAddress addr2("1.2.3.4", 5678); 29647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 29747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_FALSE(addr1 < addr2); 29847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_FALSE(addr2 < addr1); 29947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 30047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org addr2 = SocketAddress("1.2.3.4", 5679); 30147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_PRED2(IsLessThan, addr1, addr2); 30247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 30347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org addr2 = SocketAddress("2.2.3.4", 49152); 30447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_PRED2(IsLessThan, addr1, addr2); 30547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 30647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org addr2 = SocketAddress(kTestV6AddrString, 5678); 30747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_PRED2(IsLessThan, addr1, addr2); 30847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 30947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org addr1 = SocketAddress("fe80::1", 5678); 31047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_PRED2(IsLessThan, addr2, addr1); 31147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 31247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org addr2 = SocketAddress("fe80::1", 5679); 31347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_PRED2(IsLessThan, addr1, addr2); 31447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 31547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org addr2 = SocketAddress("fe80::1", 5678); 31647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_FALSE(addr1 < addr2); 31747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_FALSE(addr2 < addr1); 318c4b828d1b37c297978031b1a6871a03cc2522c3ahenrike@webrtc.org 319c4b828d1b37c297978031b1a6871a03cc2522c3ahenrike@webrtc.org SocketAddress addr3("a.b.c.d", 1); 320c4b828d1b37c297978031b1a6871a03cc2522c3ahenrike@webrtc.org SocketAddress addr4("b.b.c.d", 1); 321c4b828d1b37c297978031b1a6871a03cc2522c3ahenrike@webrtc.org EXPECT_PRED2(IsLessThan, addr3, addr4); 32247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 32347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 32447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST(SocketAddressTest, TestToSensitiveString) { 32547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org SocketAddress addr_v4("1.2.3.4", 5678); 32647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ("1.2.3.4", addr_v4.HostAsURIString()); 32747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ("1.2.3.4:5678", addr_v4.ToString()); 32847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ("1.2.3.4", addr_v4.HostAsSensitiveURIString()); 32947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ("1.2.3.4:5678", addr_v4.ToSensitiveString()); 33047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org IPAddress::set_strip_sensitive(true); 33147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ("1.2.3.x", addr_v4.HostAsSensitiveURIString()); 33247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ("1.2.3.x:5678", addr_v4.ToSensitiveString()); 33347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org IPAddress::set_strip_sensitive(false); 33447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 33547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org SocketAddress addr_v6(kTestV6AddrString, 5678); 33647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ("[" + kTestV6AddrString + "]", addr_v6.HostAsURIString()); 33747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(kTestV6AddrFullString, addr_v6.ToString()); 33847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ("[" + kTestV6AddrString + "]", addr_v6.HostAsSensitiveURIString()); 33947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(kTestV6AddrFullString, addr_v6.ToSensitiveString()); 34047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org IPAddress::set_strip_sensitive(true); 34147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ("[" + kTestV6AddrAnonymizedString + "]", 34247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org addr_v6.HostAsSensitiveURIString()); 34347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(kTestV6AddrFullAnonymizedString, addr_v6.ToSensitiveString()); 34447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org IPAddress::set_strip_sensitive(false); 34547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 34647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 34747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} // namespace rtc 348