1/* 2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11#include "webrtc/base/gunit.h" 12#include "webrtc/base/ipaddress.h" 13 14namespace rtc { 15 16static const unsigned int kIPv4AddrSize = 4; 17static const unsigned int kIPv6AddrSize = 16; 18static const unsigned int kIPv4RFC1918Addr = 0xC0A80701; 19static const unsigned int kIPv4PublicAddr = 0x01020304; 20static const in6_addr kIPv6LinkLocalAddr = {{{0xfe, 0x80, 0x00, 0x00, 21 0x00, 0x00, 0x00, 0x00, 22 0xbe, 0x30, 0x5b, 0xff, 23 0xfe, 0xe5, 0x00, 0xc3}}}; 24static const in6_addr kIPv6PublicAddr = {{{0x24, 0x01, 0xfa, 0x00, 25 0x00, 0x04, 0x10, 0x00, 26 0xbe, 0x30, 0x5b, 0xff, 27 0xfe, 0xe5, 0x00, 0xc3}}}; 28static const in6_addr kIPv6PublicAddr2 = {{{0x24, 0x01, 0x00, 0x00, 29 0x00, 0x00, 0x10, 0x00, 30 0xbe, 0x30, 0x5b, 0xff, 31 0xfe, 0xe5, 0x00, 0xc3}}}; 32static const in6_addr kIPv4MappedAnyAddr = {{{0x00, 0x00, 0x00, 0x00, 33 0x00, 0x00, 0x00, 0x00, 34 0x00, 0x00, 0xff, 0xff, 35 0x00, 0x00, 0x00, 0x00}}}; 36static const in6_addr kIPv4MappedRFC1918Addr = {{{0x00, 0x00, 0x00, 0x00, 37 0x00, 0x00, 0x00, 0x00, 38 0x00, 0x00, 0xff, 0xff, 39 0xc0, 0xa8, 0x07, 0x01}}}; 40static const in6_addr kIPv4MappedPublicAddr = {{{0x00, 0x00, 0x00, 0x00, 41 0x00, 0x00, 0x00, 0x00, 42 0x00, 0x00, 0xff, 0xff, 43 0x01, 0x02, 0x03, 0x04}}}; 44 45static const std::string kIPv4AnyAddrString = "0.0.0.0"; 46static const std::string kIPv4LoopbackAddrString = "127.0.0.1"; 47static const std::string kIPv4RFC1918AddrString = "192.168.7.1"; 48static const std::string kIPv4PublicAddrString = "1.2.3.4"; 49static const std::string kIPv4PublicAddrAnonymizedString = "1.2.3.x"; 50static const std::string kIPv6AnyAddrString = "::"; 51static const std::string kIPv6LoopbackAddrString = "::1"; 52static const std::string kIPv6LinkLocalAddrString = "fe80::be30:5bff:fee5:c3"; 53static const std::string kIPv6EuiAddrString = 54 "2620:0:1008:1201:a248:1cff:fe98:360"; 55static const std::string kIPv6TemporaryAddrString = 56 "2620:0:1008:1201:2089:6dda:385e:80c0"; 57static const std::string kIPv6PublicAddrString = 58 "2401:fa00:4:1000:be30:5bff:fee5:c3"; 59static const std::string kIPv6PublicAddr2String = 60 "2401::1000:be30:5bff:fee5:c3"; 61static const std::string kIPv6PublicAddrAnonymizedString = 62 "2401:fa00:4:x:x:x:x:x"; 63static const std::string kIPv6PublicAddr2AnonymizedString = 64 "2401:0:0:x:x:x:x:x"; 65static const std::string kIPv4MappedAnyAddrString = "::ffff:0:0"; 66static const std::string kIPv4MappedRFC1918AddrString = "::ffff:c0a8:701"; 67static const std::string kIPv4MappedLoopbackAddrString = "::ffff:7f00:1"; 68static const std::string kIPv4MappedPublicAddrString = "::ffff:102:0304"; 69static const std::string kIPv4MappedV4StyleAddrString = "::ffff:192.168.7.1"; 70 71static const std::string kIPv4BrokenString1 = "192.168.7."; 72static const std::string kIPv4BrokenString2 = "192.168.7.1.1"; 73static const std::string kIPv4BrokenString3 = "192.168.7.1:80"; 74static const std::string kIPv4BrokenString4 = "192.168.7.ONE"; 75static const std::string kIPv4BrokenString5 = "-192.168.7.1"; 76static const std::string kIPv4BrokenString6 = "256.168.7.1"; 77static const std::string kIPv6BrokenString1 = "2401:fa00:4:1000:be30"; 78static const std::string kIPv6BrokenString2 = 79 "2401:fa00:4:1000:be30:5bff:fee5:c3:1"; 80static const std::string kIPv6BrokenString3 = 81 "[2401:fa00:4:1000:be30:5bff:fee5:c3]:1"; 82static const std::string kIPv6BrokenString4 = 83 "2401::4::be30"; 84static const std::string kIPv6BrokenString5 = 85 "2401:::4:fee5:be30"; 86static const std::string kIPv6BrokenString6 = 87 "2401f:fa00:4:1000:be30:5bff:fee5:c3"; 88static const std::string kIPv6BrokenString7 = 89 "2401:ga00:4:1000:be30:5bff:fee5:c3"; 90static const std::string kIPv6BrokenString8 = 91 "2401:fa000:4:1000:be30:5bff:fee5:c3"; 92static const std::string kIPv6BrokenString9 = 93 "2401:fal0:4:1000:be30:5bff:fee5:c3"; 94static const std::string kIPv6BrokenString10 = 95 "::ffff:192.168.7."; 96static const std::string kIPv6BrokenString11 = 97 "::ffff:192.168.7.1.1.1"; 98static const std::string kIPv6BrokenString12 = 99 "::fffe:192.168.7.1"; 100static const std::string kIPv6BrokenString13 = 101 "::ffff:192.168.7.ff"; 102static const std::string kIPv6BrokenString14 = 103 "0x2401:fa00:4:1000:be30:5bff:fee5:c3"; 104 105bool AreEqual(const IPAddress& addr, 106 const IPAddress& addr2) { 107 if ((IPIsAny(addr) != IPIsAny(addr2)) || 108 (IPIsLoopback(addr) != IPIsLoopback(addr2)) || 109 (IPIsPrivate(addr) != IPIsPrivate(addr2)) || 110 (HashIP(addr) != HashIP(addr2)) || 111 (addr.Size() != addr2.Size()) || 112 (addr.family() != addr2.family()) || 113 (addr.ToString() != addr2.ToString())) { 114 return false; 115 } 116 in_addr v4addr, v4addr2; 117 v4addr = addr.ipv4_address(); 118 v4addr2 = addr2.ipv4_address(); 119 if (0 != memcmp(&v4addr, &v4addr2, sizeof(v4addr))) { 120 return false; 121 } 122 in6_addr v6addr, v6addr2; 123 v6addr = addr.ipv6_address(); 124 v6addr2 = addr2.ipv6_address(); 125 if (0 != memcmp(&v6addr, &v6addr2, sizeof(v6addr))) { 126 return false; 127 } 128 return true; 129} 130 131bool BrokenIPStringFails(const std::string& broken) { 132 IPAddress addr(0); // Intentionally make it v4. 133 if (IPFromString(kIPv4BrokenString1, &addr)) { 134 return false; 135 } 136 return addr.family() == AF_UNSPEC; 137} 138 139bool CheckMaskCount(const std::string& mask, int expected_length) { 140 IPAddress addr; 141 return IPFromString(mask, &addr) && 142 (expected_length == CountIPMaskBits(addr)); 143} 144 145bool TryInvalidMaskCount(const std::string& mask) { 146 // We don't care about the result at all, but we do want to know if 147 // CountIPMaskBits is going to crash or infinite loop or something. 148 IPAddress addr; 149 if (!IPFromString(mask, &addr)) { 150 return false; 151 } 152 CountIPMaskBits(addr); 153 return true; 154} 155 156bool CheckTruncateIP(const std::string& initial, int truncate_length, 157 const std::string& expected_result) { 158 IPAddress addr, expected; 159 IPFromString(initial, &addr); 160 IPFromString(expected_result, &expected); 161 IPAddress truncated = TruncateIP(addr, truncate_length); 162 return truncated == expected; 163} 164 165TEST(IPAddressTest, TestDefaultCtor) { 166 IPAddress addr; 167 EXPECT_FALSE(IPIsAny(addr)); 168 EXPECT_FALSE(IPIsLoopback(addr)); 169 EXPECT_FALSE(IPIsPrivate(addr)); 170 171 EXPECT_EQ(0U, addr.Size()); 172 EXPECT_EQ(AF_UNSPEC, addr.family()); 173 EXPECT_EQ("", addr.ToString()); 174} 175 176TEST(IPAddressTest, TestInAddrCtor) { 177 in_addr v4addr; 178 179 // Test V4 Any address. 180 v4addr.s_addr = INADDR_ANY; 181 IPAddress addr(v4addr); 182 EXPECT_TRUE(IPIsAny(addr)); 183 EXPECT_FALSE(IPIsLoopback(addr)); 184 EXPECT_FALSE(IPIsPrivate(addr)); 185 EXPECT_EQ(kIPv4AddrSize, addr.Size()); 186 EXPECT_EQ(kIPv4AnyAddrString, addr.ToString()); 187 188 // Test a V4 loopback address. 189 v4addr.s_addr = htonl(INADDR_LOOPBACK); 190 addr = IPAddress(v4addr); 191 EXPECT_FALSE(IPIsAny(addr)); 192 EXPECT_TRUE(IPIsLoopback(addr)); 193 EXPECT_TRUE(IPIsPrivate(addr)); 194 EXPECT_EQ(kIPv4AddrSize, addr.Size()); 195 EXPECT_EQ(kIPv4LoopbackAddrString, addr.ToString()); 196 197 // Test an RFC1918 address. 198 v4addr.s_addr = htonl(kIPv4RFC1918Addr); 199 addr = IPAddress(v4addr); 200 EXPECT_FALSE(IPIsAny(addr)); 201 EXPECT_FALSE(IPIsLoopback(addr)); 202 EXPECT_TRUE(IPIsPrivate(addr)); 203 EXPECT_EQ(kIPv4AddrSize, addr.Size()); 204 EXPECT_EQ(kIPv4RFC1918AddrString, addr.ToString()); 205 206 // Test a 'normal' v4 address. 207 v4addr.s_addr = htonl(kIPv4PublicAddr); 208 addr = IPAddress(v4addr); 209 EXPECT_FALSE(IPIsAny(addr)); 210 EXPECT_FALSE(IPIsLoopback(addr)); 211 EXPECT_FALSE(IPIsPrivate(addr)); 212 EXPECT_EQ(kIPv4AddrSize, addr.Size()); 213 EXPECT_EQ(kIPv4PublicAddrString, addr.ToString()); 214} 215 216TEST(IPAddressTest, TestInAddr6Ctor) { 217 // Test v6 empty. 218 IPAddress addr(in6addr_any); 219 EXPECT_TRUE(IPIsAny(addr)); 220 EXPECT_FALSE(IPIsLoopback(addr)); 221 EXPECT_FALSE(IPIsPrivate(addr)); 222 EXPECT_EQ(kIPv6AddrSize, addr.Size()); 223 EXPECT_EQ(kIPv6AnyAddrString, addr.ToString()); 224 225 // Test v6 loopback. 226 addr = IPAddress(in6addr_loopback); 227 EXPECT_FALSE(IPIsAny(addr)); 228 EXPECT_TRUE(IPIsLoopback(addr)); 229 EXPECT_TRUE(IPIsPrivate(addr)); 230 EXPECT_EQ(kIPv6AddrSize, addr.Size()); 231 EXPECT_EQ(kIPv6LoopbackAddrString, addr.ToString()); 232 233 // Test v6 link-local. 234 addr = IPAddress(kIPv6LinkLocalAddr); 235 EXPECT_FALSE(IPIsAny(addr)); 236 EXPECT_FALSE(IPIsLoopback(addr)); 237 EXPECT_TRUE(IPIsPrivate(addr)); 238 EXPECT_EQ(kIPv6AddrSize, addr.Size()); 239 EXPECT_EQ(kIPv6LinkLocalAddrString, addr.ToString()); 240 241 // Test v6 global address. 242 addr = IPAddress(kIPv6PublicAddr); 243 EXPECT_FALSE(IPIsAny(addr)); 244 EXPECT_FALSE(IPIsLoopback(addr)); 245 EXPECT_FALSE(IPIsPrivate(addr)); 246 EXPECT_EQ(kIPv6AddrSize, addr.Size()); 247 EXPECT_EQ(kIPv6PublicAddrString, addr.ToString()); 248} 249 250TEST(IPAddressTest, TestUint32Ctor) { 251 // Test V4 Any address. 252 IPAddress addr(0); 253 EXPECT_TRUE(IPIsAny(addr)); 254 EXPECT_FALSE(IPIsLoopback(addr)); 255 EXPECT_FALSE(IPIsPrivate(addr)); 256 EXPECT_EQ(kIPv4AddrSize, addr.Size()); 257 EXPECT_EQ(kIPv4AnyAddrString, addr.ToString()); 258 259 // Test a V4 loopback address. 260 addr = IPAddress(INADDR_LOOPBACK); 261 EXPECT_FALSE(IPIsAny(addr)); 262 EXPECT_TRUE(IPIsLoopback(addr)); 263 EXPECT_TRUE(IPIsPrivate(addr)); 264 EXPECT_EQ(kIPv4AddrSize, addr.Size()); 265 EXPECT_EQ(kIPv4LoopbackAddrString, addr.ToString()); 266 267 // Test an RFC1918 address. 268 addr = IPAddress(kIPv4RFC1918Addr); 269 EXPECT_FALSE(IPIsAny(addr)); 270 EXPECT_FALSE(IPIsLoopback(addr)); 271 EXPECT_TRUE(IPIsPrivate(addr)); 272 EXPECT_EQ(kIPv4AddrSize, addr.Size()); 273 EXPECT_EQ(kIPv4RFC1918AddrString, addr.ToString()); 274 275 // Test a 'normal' v4 address. 276 addr = IPAddress(kIPv4PublicAddr); 277 EXPECT_FALSE(IPIsAny(addr)); 278 EXPECT_FALSE(IPIsLoopback(addr)); 279 EXPECT_FALSE(IPIsPrivate(addr)); 280 EXPECT_EQ(kIPv4AddrSize, addr.Size()); 281 EXPECT_EQ(kIPv4PublicAddrString, addr.ToString()); 282} 283 284TEST(IPAddressTest, TestCopyCtor) { 285 in_addr v4addr; 286 v4addr.s_addr = htonl(kIPv4PublicAddr); 287 IPAddress addr(v4addr); 288 IPAddress addr2(addr); 289 290 EXPECT_PRED2(AreEqual, addr, addr2); 291 292 addr = IPAddress(INADDR_ANY); 293 addr2 = IPAddress(addr); 294 EXPECT_PRED2(AreEqual, addr, addr2); 295 296 addr = IPAddress(INADDR_LOOPBACK); 297 addr2 = IPAddress(addr); 298 EXPECT_PRED2(AreEqual, addr, addr2); 299 300 addr = IPAddress(kIPv4PublicAddr); 301 addr2 = IPAddress(addr); 302 EXPECT_PRED2(AreEqual, addr, addr2); 303 304 addr = IPAddress(kIPv4RFC1918Addr); 305 addr2 = IPAddress(addr); 306 EXPECT_PRED2(AreEqual, addr, addr2); 307 308 addr = IPAddress(in6addr_any); 309 addr2 = IPAddress(addr); 310 EXPECT_PRED2(AreEqual, addr, addr2); 311 312 addr = IPAddress(in6addr_loopback); 313 addr2 = IPAddress(addr); 314 EXPECT_PRED2(AreEqual, addr, addr2); 315 316 addr = IPAddress(kIPv6LinkLocalAddr); 317 addr2 = IPAddress(addr); 318 EXPECT_PRED2(AreEqual, addr, addr2); 319 320 addr = IPAddress(kIPv6PublicAddr); 321 addr2 = IPAddress(addr); 322 EXPECT_PRED2(AreEqual, addr, addr2); 323} 324 325TEST(IPAddressTest, TestEquality) { 326 // Check v4 equality 327 in_addr v4addr, v4addr2; 328 v4addr.s_addr = htonl(kIPv4PublicAddr); 329 v4addr2.s_addr = htonl(kIPv4PublicAddr + 1); 330 IPAddress addr(v4addr); 331 IPAddress addr2(v4addr2); 332 IPAddress addr3(v4addr); 333 334 EXPECT_TRUE(addr == addr); 335 EXPECT_TRUE(addr2 == addr2); 336 EXPECT_TRUE(addr3 == addr3); 337 EXPECT_TRUE(addr == addr3); 338 EXPECT_TRUE(addr3 == addr); 339 EXPECT_FALSE(addr2 == addr); 340 EXPECT_FALSE(addr2 == addr3); 341 EXPECT_FALSE(addr == addr2); 342 EXPECT_FALSE(addr3 == addr2); 343 344 // Check v6 equality 345 IPAddress addr4(kIPv6PublicAddr); 346 IPAddress addr5(kIPv6LinkLocalAddr); 347 IPAddress addr6(kIPv6PublicAddr); 348 349 EXPECT_TRUE(addr4 == addr4); 350 EXPECT_TRUE(addr5 == addr5); 351 EXPECT_TRUE(addr4 == addr6); 352 EXPECT_TRUE(addr6 == addr4); 353 EXPECT_FALSE(addr4 == addr5); 354 EXPECT_FALSE(addr5 == addr4); 355 EXPECT_FALSE(addr6 == addr5); 356 EXPECT_FALSE(addr5 == addr6); 357 358 // Check v4/v6 cross-equality 359 EXPECT_FALSE(addr == addr4); 360 EXPECT_FALSE(addr == addr5); 361 EXPECT_FALSE(addr == addr6); 362 EXPECT_FALSE(addr4 == addr); 363 EXPECT_FALSE(addr5 == addr); 364 EXPECT_FALSE(addr6 == addr); 365 EXPECT_FALSE(addr2 == addr4); 366 EXPECT_FALSE(addr2 == addr5); 367 EXPECT_FALSE(addr2 == addr6); 368 EXPECT_FALSE(addr4 == addr2); 369 EXPECT_FALSE(addr5 == addr2); 370 EXPECT_FALSE(addr6 == addr2); 371 EXPECT_FALSE(addr3 == addr4); 372 EXPECT_FALSE(addr3 == addr5); 373 EXPECT_FALSE(addr3 == addr6); 374 EXPECT_FALSE(addr4 == addr3); 375 EXPECT_FALSE(addr5 == addr3); 376 EXPECT_FALSE(addr6 == addr3); 377 378 // Special cases: loopback and any. 379 // They're special but they're still not equal. 380 IPAddress v4loopback(htonl(INADDR_LOOPBACK)); 381 IPAddress v6loopback(in6addr_loopback); 382 EXPECT_FALSE(v4loopback == v6loopback); 383 384 IPAddress v4any(0); 385 IPAddress v6any(in6addr_any); 386 EXPECT_FALSE(v4any == v6any); 387} 388 389TEST(IPAddressTest, TestComparison) { 390 // Defined in 'ascending' order. 391 // v6 > v4, and intra-family sorting is purely numerical 392 IPAddress addr0; // AF_UNSPEC 393 IPAddress addr1(INADDR_ANY); // 0.0.0.0 394 IPAddress addr2(kIPv4PublicAddr); // 1.2.3.4 395 IPAddress addr3(INADDR_LOOPBACK); // 127.0.0.1 396 IPAddress addr4(kIPv4RFC1918Addr); // 192.168.7.1. 397 IPAddress addr5(in6addr_any); // :: 398 IPAddress addr6(in6addr_loopback); // ::1 399 IPAddress addr7(kIPv6PublicAddr); // 2401.... 400 IPAddress addr8(kIPv6LinkLocalAddr); // fe80.... 401 402 EXPECT_TRUE(addr0 < addr1); 403 EXPECT_TRUE(addr1 < addr2); 404 EXPECT_TRUE(addr2 < addr3); 405 EXPECT_TRUE(addr3 < addr4); 406 EXPECT_TRUE(addr4 < addr5); 407 EXPECT_TRUE(addr5 < addr6); 408 EXPECT_TRUE(addr6 < addr7); 409 EXPECT_TRUE(addr7 < addr8); 410 411 EXPECT_FALSE(addr0 > addr1); 412 EXPECT_FALSE(addr1 > addr2); 413 EXPECT_FALSE(addr2 > addr3); 414 EXPECT_FALSE(addr3 > addr4); 415 EXPECT_FALSE(addr4 > addr5); 416 EXPECT_FALSE(addr5 > addr6); 417 EXPECT_FALSE(addr6 > addr7); 418 EXPECT_FALSE(addr7 > addr8); 419 420 EXPECT_FALSE(addr0 > addr0); 421 EXPECT_FALSE(addr1 > addr1); 422 EXPECT_FALSE(addr2 > addr2); 423 EXPECT_FALSE(addr3 > addr3); 424 EXPECT_FALSE(addr4 > addr4); 425 EXPECT_FALSE(addr5 > addr5); 426 EXPECT_FALSE(addr6 > addr6); 427 EXPECT_FALSE(addr7 > addr7); 428 EXPECT_FALSE(addr8 > addr8); 429 430 EXPECT_FALSE(addr0 < addr0); 431 EXPECT_FALSE(addr1 < addr1); 432 EXPECT_FALSE(addr2 < addr2); 433 EXPECT_FALSE(addr3 < addr3); 434 EXPECT_FALSE(addr4 < addr4); 435 EXPECT_FALSE(addr5 < addr5); 436 EXPECT_FALSE(addr6 < addr6); 437 EXPECT_FALSE(addr7 < addr7); 438 EXPECT_FALSE(addr8 < addr8); 439} 440 441TEST(IPAddressTest, TestFromString) { 442 IPAddress addr; 443 IPAddress addr2; 444 addr2 = IPAddress(INADDR_ANY); 445 446 EXPECT_TRUE(IPFromString(kIPv4AnyAddrString, &addr)); 447 EXPECT_EQ(addr.ToString(), kIPv4AnyAddrString); 448 EXPECT_PRED2(AreEqual, addr, addr2); 449 450 addr2 = IPAddress(INADDR_LOOPBACK); 451 EXPECT_TRUE(IPFromString(kIPv4LoopbackAddrString, &addr)); 452 EXPECT_EQ(addr.ToString(), kIPv4LoopbackAddrString); 453 EXPECT_PRED2(AreEqual, addr, addr2); 454 455 addr2 = IPAddress(kIPv4RFC1918Addr); 456 EXPECT_TRUE(IPFromString(kIPv4RFC1918AddrString, &addr)); 457 EXPECT_EQ(addr.ToString(), kIPv4RFC1918AddrString); 458 EXPECT_PRED2(AreEqual, addr, addr2); 459 460 addr2 = IPAddress(kIPv4PublicAddr); 461 EXPECT_TRUE(IPFromString(kIPv4PublicAddrString, &addr)); 462 EXPECT_EQ(addr.ToString(), kIPv4PublicAddrString); 463 EXPECT_PRED2(AreEqual, addr, addr2); 464 465 addr2 = IPAddress(in6addr_any); 466 EXPECT_TRUE(IPFromString(kIPv6AnyAddrString, &addr)); 467 EXPECT_EQ(addr.ToString(), kIPv6AnyAddrString); 468 EXPECT_PRED2(AreEqual, addr, addr2); 469 470 addr2 = IPAddress(in6addr_loopback); 471 EXPECT_TRUE(IPFromString(kIPv6LoopbackAddrString, &addr)); 472 EXPECT_EQ(addr.ToString(), kIPv6LoopbackAddrString); 473 EXPECT_PRED2(AreEqual, addr, addr2); 474 475 addr2 = IPAddress(kIPv6LinkLocalAddr); 476 EXPECT_TRUE(IPFromString(kIPv6LinkLocalAddrString, &addr)); 477 EXPECT_EQ(addr.ToString(), kIPv6LinkLocalAddrString); 478 EXPECT_PRED2(AreEqual, addr, addr2); 479 480 addr2 = IPAddress(kIPv6PublicAddr); 481 EXPECT_TRUE(IPFromString(kIPv6PublicAddrString, &addr)); 482 EXPECT_EQ(addr.ToString(), kIPv6PublicAddrString); 483 EXPECT_PRED2(AreEqual, addr, addr2); 484 485 addr2 = IPAddress(kIPv4MappedRFC1918Addr); 486 EXPECT_TRUE(IPFromString(kIPv4MappedV4StyleAddrString, &addr)); 487 EXPECT_PRED2(AreEqual, addr, addr2); 488 489 // Broken cases, should set addr to AF_UNSPEC. 490 EXPECT_PRED1(BrokenIPStringFails, kIPv4BrokenString1); 491 EXPECT_PRED1(BrokenIPStringFails, kIPv4BrokenString2); 492 EXPECT_PRED1(BrokenIPStringFails, kIPv4BrokenString3); 493 EXPECT_PRED1(BrokenIPStringFails, kIPv4BrokenString4); 494 EXPECT_PRED1(BrokenIPStringFails, kIPv4BrokenString5); 495 EXPECT_PRED1(BrokenIPStringFails, kIPv4BrokenString6); 496 EXPECT_PRED1(BrokenIPStringFails, kIPv6BrokenString1); 497 EXPECT_PRED1(BrokenIPStringFails, kIPv6BrokenString2); 498 EXPECT_PRED1(BrokenIPStringFails, kIPv6BrokenString3); 499 EXPECT_PRED1(BrokenIPStringFails, kIPv6BrokenString4); 500 EXPECT_PRED1(BrokenIPStringFails, kIPv6BrokenString5); 501 EXPECT_PRED1(BrokenIPStringFails, kIPv6BrokenString6); 502 EXPECT_PRED1(BrokenIPStringFails, kIPv6BrokenString7); 503 EXPECT_PRED1(BrokenIPStringFails, kIPv6BrokenString8); 504 EXPECT_PRED1(BrokenIPStringFails, kIPv6BrokenString9); 505 EXPECT_PRED1(BrokenIPStringFails, kIPv6BrokenString10); 506 EXPECT_PRED1(BrokenIPStringFails, kIPv6BrokenString11); 507 EXPECT_PRED1(BrokenIPStringFails, kIPv6BrokenString12); 508 EXPECT_PRED1(BrokenIPStringFails, kIPv6BrokenString13); 509 EXPECT_PRED1(BrokenIPStringFails, kIPv6BrokenString14); 510} 511 512TEST(IPAddressTest, TestIPFromAddrInfo) { 513 struct sockaddr_in expected4; 514 struct sockaddr_in6 expected6; 515 struct addrinfo test_info; 516 struct addrinfo next_info; 517 memset(&next_info, 'A', sizeof(next_info)); 518 test_info.ai_next = &next_info; 519 // Check that we can get an IPv4 address out. 520 test_info.ai_addr = reinterpret_cast<struct sockaddr*>(&expected4); 521 expected4.sin_addr.s_addr = HostToNetwork32(kIPv4PublicAddr); 522 expected4.sin_family = AF_INET; 523 IPAddress expected(kIPv4PublicAddr); 524 IPAddress addr; 525 EXPECT_TRUE(IPFromAddrInfo(&test_info, &addr)); 526 EXPECT_EQ(expected, addr); 527 // Check that we can get an IPv6 address out. 528 expected6.sin6_addr = kIPv6PublicAddr; 529 expected6.sin6_family = AF_INET6; 530 expected = IPAddress(kIPv6PublicAddr); 531 test_info.ai_addr = reinterpret_cast<struct sockaddr*>(&expected6); 532 EXPECT_TRUE(IPFromAddrInfo(&test_info, &addr)); 533 EXPECT_EQ(expected, addr); 534 // Check that unspec fails. 535 expected6.sin6_family = AF_UNSPEC; 536 EXPECT_FALSE(IPFromAddrInfo(&test_info, &addr)); 537 // Check a zeroed out addrinfo doesn't crash us. 538 memset(&next_info, 0, sizeof(next_info)); 539 EXPECT_FALSE(IPFromAddrInfo(&next_info, &addr)); 540} 541 542TEST(IPAddressTest, TestIsPrivate) { 543 EXPECT_FALSE(IPIsPrivate(IPAddress(INADDR_ANY))); 544 EXPECT_FALSE(IPIsPrivate(IPAddress(kIPv4PublicAddr))); 545 EXPECT_FALSE(IPIsPrivate(IPAddress(in6addr_any))); 546 EXPECT_FALSE(IPIsPrivate(IPAddress(kIPv6PublicAddr))); 547 EXPECT_FALSE(IPIsPrivate(IPAddress(kIPv4MappedAnyAddr))); 548 EXPECT_FALSE(IPIsPrivate(IPAddress(kIPv4MappedPublicAddr))); 549 550 EXPECT_TRUE(IPIsPrivate(IPAddress(kIPv4RFC1918Addr))); 551 EXPECT_TRUE(IPIsPrivate(IPAddress(INADDR_LOOPBACK))); 552 EXPECT_TRUE(IPIsPrivate(IPAddress(in6addr_loopback))); 553 EXPECT_TRUE(IPIsPrivate(IPAddress(kIPv6LinkLocalAddr))); 554} 555 556TEST(IPAddressTest, TestIsNil) { 557 IPAddress addr; 558 EXPECT_TRUE(IPAddress().IsNil()); 559 560 EXPECT_TRUE(IPFromString(kIPv6AnyAddrString, &addr)); 561 EXPECT_FALSE(addr.IsNil()); 562 563 EXPECT_TRUE(IPFromString(kIPv4AnyAddrString, &addr)); 564 EXPECT_FALSE(addr.IsNil()); 565 566 EXPECT_FALSE(IPAddress(kIPv4PublicAddr).IsNil()); 567} 568 569TEST(IPAddressTest, TestIsLoopback) { 570 EXPECT_FALSE(IPIsLoopback(IPAddress(INADDR_ANY))); 571 EXPECT_FALSE(IPIsLoopback(IPAddress(kIPv4PublicAddr))); 572 EXPECT_FALSE(IPIsLoopback(IPAddress(in6addr_any))); 573 EXPECT_FALSE(IPIsLoopback(IPAddress(kIPv6PublicAddr))); 574 EXPECT_FALSE(IPIsLoopback(IPAddress(kIPv4MappedAnyAddr))); 575 EXPECT_FALSE(IPIsLoopback(IPAddress(kIPv4MappedPublicAddr))); 576 577 EXPECT_TRUE(IPIsLoopback(IPAddress(INADDR_LOOPBACK))); 578 EXPECT_TRUE(IPIsLoopback(IPAddress(in6addr_loopback))); 579} 580 581// Verify that IPIsAny catches all cases of "any" address. 582TEST(IPAddressTest, TestIsAny) { 583 IPAddress addr; 584 585 EXPECT_TRUE(IPFromString(kIPv6AnyAddrString, &addr)); 586 EXPECT_TRUE(IPIsAny(addr)); 587 588 EXPECT_TRUE(IPFromString(kIPv4AnyAddrString, &addr)); 589 EXPECT_TRUE(IPIsAny(addr)); 590 591 EXPECT_TRUE(IPIsAny(IPAddress(kIPv4MappedAnyAddr))); 592} 593 594TEST(IPAddressTest, TestIsEui64) { 595 IPAddress addr; 596 EXPECT_TRUE(IPFromString(kIPv6EuiAddrString, &addr)); 597 EXPECT_TRUE(IPIsMacBased(addr)); 598 599 EXPECT_TRUE(IPFromString(kIPv6TemporaryAddrString, &addr)); 600 EXPECT_FALSE(IPIsMacBased(addr)); 601 602 EXPECT_TRUE(IPFromString(kIPv6LinkLocalAddrString, &addr)); 603 EXPECT_TRUE(IPIsMacBased(addr)); 604 605 EXPECT_TRUE(IPFromString(kIPv6AnyAddrString, &addr)); 606 EXPECT_FALSE(IPIsMacBased(addr)); 607 608 EXPECT_TRUE(IPFromString(kIPv6LoopbackAddrString, &addr)); 609 EXPECT_FALSE(IPIsMacBased(addr)); 610} 611 612TEST(IPAddressTest, TestNormalized) { 613 // Check normalizing a ::ffff:a.b.c.d address. 614 IPAddress addr; 615 EXPECT_TRUE(IPFromString(kIPv4MappedV4StyleAddrString, &addr)); 616 IPAddress addr2(kIPv4RFC1918Addr); 617 addr = addr.Normalized(); 618 EXPECT_EQ(addr2, addr); 619 620 // Check normalizing a ::ffff:aabb:ccdd address. 621 addr = IPAddress(kIPv4MappedPublicAddr); 622 addr2 = IPAddress(kIPv4PublicAddr); 623 addr = addr.Normalized(); 624 EXPECT_EQ(addr, addr2); 625 626 // Check that a non-mapped v6 addresses isn't altered. 627 addr = IPAddress(kIPv6PublicAddr); 628 addr2 = IPAddress(kIPv6PublicAddr); 629 addr = addr.Normalized(); 630 EXPECT_EQ(addr, addr2); 631 632 // Check that addresses that look a bit like mapped addresses aren't altered 633 EXPECT_TRUE(IPFromString("fe80::ffff:0102:0304", &addr)); 634 addr2 = addr; 635 addr = addr.Normalized(); 636 EXPECT_EQ(addr, addr2); 637 EXPECT_TRUE(IPFromString("::0102:0304", &addr)); 638 addr2 = addr; 639 addr = addr.Normalized(); 640 EXPECT_EQ(addr, addr2); 641 // This string should 'work' as an IP address but is not a mapped address, 642 // so it shouldn't change on normalization. 643 EXPECT_TRUE(IPFromString("::192.168.7.1", &addr)); 644 addr2 = addr; 645 addr = addr.Normalized(); 646 EXPECT_EQ(addr, addr2); 647 648 // Check that v4 addresses aren't altered. 649 addr = IPAddress(htonl(kIPv4PublicAddr)); 650 addr2 = IPAddress(htonl(kIPv4PublicAddr)); 651 addr = addr.Normalized(); 652 EXPECT_EQ(addr, addr2); 653} 654 655TEST(IPAddressTest, TestAsIPv6Address) { 656 IPAddress addr(kIPv4PublicAddr); 657 IPAddress addr2(kIPv4MappedPublicAddr); 658 addr = addr.AsIPv6Address(); 659 EXPECT_EQ(addr, addr2); 660 661 addr = IPAddress(kIPv4MappedPublicAddr); 662 addr2 = IPAddress(kIPv4MappedPublicAddr); 663 addr = addr.AsIPv6Address(); 664 EXPECT_EQ(addr, addr2); 665 666 addr = IPAddress(kIPv6PublicAddr); 667 addr2 = IPAddress(kIPv6PublicAddr); 668 addr = addr.AsIPv6Address(); 669 EXPECT_EQ(addr, addr2); 670} 671 672TEST(IPAddressTest, TestCountIPMaskBits) { 673 IPAddress mask; 674 // IPv4 on byte boundaries 675 EXPECT_PRED2(CheckMaskCount, "255.255.255.255", 32); 676 EXPECT_PRED2(CheckMaskCount, "255.255.255.0", 24); 677 EXPECT_PRED2(CheckMaskCount, "255.255.0.0", 16); 678 EXPECT_PRED2(CheckMaskCount, "255.0.0.0", 8); 679 EXPECT_PRED2(CheckMaskCount, "0.0.0.0", 0); 680 681 // IPv4 not on byte boundaries 682 EXPECT_PRED2(CheckMaskCount, "128.0.0.0", 1); 683 EXPECT_PRED2(CheckMaskCount, "224.0.0.0", 3); 684 EXPECT_PRED2(CheckMaskCount, "255.248.0.0", 13); 685 EXPECT_PRED2(CheckMaskCount, "255.255.224.0", 19); 686 EXPECT_PRED2(CheckMaskCount, "255.255.255.252", 30); 687 688 // V6 on byte boundaries 689 EXPECT_PRED2(CheckMaskCount, "::", 0); 690 EXPECT_PRED2(CheckMaskCount, "ff00::", 8); 691 EXPECT_PRED2(CheckMaskCount, "ffff::", 16); 692 EXPECT_PRED2(CheckMaskCount, "ffff:ff00::", 24); 693 EXPECT_PRED2(CheckMaskCount, "ffff:ffff::", 32); 694 EXPECT_PRED2(CheckMaskCount, "ffff:ffff:ff00::", 40); 695 EXPECT_PRED2(CheckMaskCount, "ffff:ffff:ffff::", 48); 696 EXPECT_PRED2(CheckMaskCount, "ffff:ffff:ffff:ff00::", 56); 697 EXPECT_PRED2(CheckMaskCount, "ffff:ffff:ffff:ffff::", 64); 698 EXPECT_PRED2(CheckMaskCount, "ffff:ffff:ffff:ffff:ff00::", 72); 699 EXPECT_PRED2(CheckMaskCount, "ffff:ffff:ffff:ffff:ffff::", 80); 700 EXPECT_PRED2(CheckMaskCount, "ffff:ffff:ffff:ffff:ffff:ff00::", 88); 701 EXPECT_PRED2(CheckMaskCount, "ffff:ffff:ffff:ffff:ffff:ffff::", 96); 702 EXPECT_PRED2(CheckMaskCount, "ffff:ffff:ffff:ffff:ffff:ffff:ff00:0000", 104); 703 EXPECT_PRED2(CheckMaskCount, "ffff:ffff:ffff:ffff:ffff:ffff:ffff:0000", 112); 704 EXPECT_PRED2(CheckMaskCount, "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ff00", 120); 705 EXPECT_PRED2(CheckMaskCount, "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", 128); 706 707 // V6 not on byte boundaries. 708 EXPECT_PRED2(CheckMaskCount, "8000::", 1); 709 EXPECT_PRED2(CheckMaskCount, "ff80::", 9); 710 EXPECT_PRED2(CheckMaskCount, "ffff:fe00::", 23); 711 EXPECT_PRED2(CheckMaskCount, "ffff:fffe::", 31); 712 EXPECT_PRED2(CheckMaskCount, "ffff:ffff:e000::", 35); 713 EXPECT_PRED2(CheckMaskCount, "ffff:ffff:ffe0::", 43); 714 EXPECT_PRED2(CheckMaskCount, "ffff:ffff:ffff:f800::", 53); 715 EXPECT_PRED2(CheckMaskCount, "ffff:ffff:ffff:fff8::", 61); 716 EXPECT_PRED2(CheckMaskCount, "ffff:ffff:ffff:ffff:fc00::", 70); 717 EXPECT_PRED2(CheckMaskCount, "ffff:ffff:ffff:ffff:fffc::", 78); 718 EXPECT_PRED2(CheckMaskCount, "ffff:ffff:ffff:ffff:ffff:8000::", 81); 719 EXPECT_PRED2(CheckMaskCount, "ffff:ffff:ffff:ffff:ffff:ff80::", 89); 720 EXPECT_PRED2(CheckMaskCount, "ffff:ffff:ffff:ffff:ffff:ffff:fe00::", 103); 721 EXPECT_PRED2(CheckMaskCount, "ffff:ffff:ffff:ffff:ffff:ffff:fffe:0000", 111); 722 EXPECT_PRED2(CheckMaskCount, "ffff:ffff:ffff:ffff:ffff:ffff:ffff:fc00", 118); 723 EXPECT_PRED2(CheckMaskCount, "ffff:ffff:ffff:ffff:ffff:ffff:ffff:fffc", 126); 724 725 // Non-contiguous ranges. These are invalid but lets test them 726 // to make sure they don't crash anything or infinite loop or something. 727 EXPECT_PRED1(TryInvalidMaskCount, "217.0.0.0"); 728 EXPECT_PRED1(TryInvalidMaskCount, "255.185.0.0"); 729 EXPECT_PRED1(TryInvalidMaskCount, "255.255.251.0"); 730 EXPECT_PRED1(TryInvalidMaskCount, "255.255.251.255"); 731 EXPECT_PRED1(TryInvalidMaskCount, "255.255.254.201"); 732 EXPECT_PRED1(TryInvalidMaskCount, "::1"); 733 EXPECT_PRED1(TryInvalidMaskCount, "fe80::1"); 734 EXPECT_PRED1(TryInvalidMaskCount, "ff80::1"); 735 EXPECT_PRED1(TryInvalidMaskCount, "ffff::1"); 736 EXPECT_PRED1(TryInvalidMaskCount, "ffff:ff00:1::1"); 737 EXPECT_PRED1(TryInvalidMaskCount, "ffff:ffff::ffff:1"); 738 EXPECT_PRED1(TryInvalidMaskCount, "ffff:ffff:ff00:1::"); 739 EXPECT_PRED1(TryInvalidMaskCount, "ffff:ffff:ffff::ff00"); 740 EXPECT_PRED1(TryInvalidMaskCount, "ffff:ffff:ffff:ff00:1234::"); 741 EXPECT_PRED1(TryInvalidMaskCount, "ffff:ffff:ffff:ffff:0012::ffff"); 742 EXPECT_PRED1(TryInvalidMaskCount, "ffff:ffff:ffff:ffff:ff01::"); 743 EXPECT_PRED1(TryInvalidMaskCount, "ffff:ffff:ffff:ffff:ffff:7f00::"); 744 EXPECT_PRED1(TryInvalidMaskCount, "ffff:ffff:ffff:ffff:ffff:ff7a::"); 745 EXPECT_PRED1(TryInvalidMaskCount, "ffff:ffff:ffff:ffff:ffff:ffff:7f00:0000"); 746 EXPECT_PRED1(TryInvalidMaskCount, "ffff:ffff:ffff:ffff:ffff:ffff:ff70:0000"); 747 EXPECT_PRED1(TryInvalidMaskCount, "ffff:ffff:ffff:ffff:ffff:ffff:ffff:0211"); 748 EXPECT_PRED1(TryInvalidMaskCount, "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ff7f"); 749} 750 751TEST(IPAddressTest, TestTruncateIP) { 752 EXPECT_PRED3(CheckTruncateIP, "255.255.255.255", 24, "255.255.255.0"); 753 EXPECT_PRED3(CheckTruncateIP, "255.255.255.255", 16, "255.255.0.0"); 754 EXPECT_PRED3(CheckTruncateIP, "255.255.255.255", 8, "255.0.0.0"); 755 EXPECT_PRED3(CheckTruncateIP, "202.67.7.255", 24, "202.67.7.0"); 756 EXPECT_PRED3(CheckTruncateIP, "202.129.65.205", 16, "202.129.0.0"); 757 EXPECT_PRED3(CheckTruncateIP, "55.25.2.77", 8, "55.0.0.0"); 758 EXPECT_PRED3(CheckTruncateIP, "74.128.99.254", 1, "0.0.0.0"); 759 EXPECT_PRED3(CheckTruncateIP, "106.55.99.254", 3, "96.0.0.0"); 760 EXPECT_PRED3(CheckTruncateIP, "172.167.53.222", 13, "172.160.0.0"); 761 EXPECT_PRED3(CheckTruncateIP, "255.255.224.0", 18, "255.255.192.0"); 762 EXPECT_PRED3(CheckTruncateIP, "255.255.255.252", 28, "255.255.255.240"); 763 764 EXPECT_PRED3(CheckTruncateIP, "fe80:1111:2222:3333:4444:5555:6666:7777", 1, 765 "8000::"); 766 EXPECT_PRED3(CheckTruncateIP, "fff0:1111:2222:3333:4444:5555:6666:7777", 9, 767 "ff80::"); 768 EXPECT_PRED3(CheckTruncateIP, "ffff:ff80:1111:2222:3333:4444:5555:6666", 23, 769 "ffff:fe00::"); 770 EXPECT_PRED3(CheckTruncateIP, "ffff:ff80:1111:2222:3333:4444:5555:6666", 32, 771 "ffff:ff80::"); 772 EXPECT_PRED3(CheckTruncateIP, "2400:f9af:e456:1111:2222:3333:4444:5555", 35, 773 "2400:f9af:e000::"); 774 EXPECT_PRED3(CheckTruncateIP, "9999:1111:2233:4444:5555:6666:7777:8888", 53, 775 "9999:1111:2233:4000::"); 776 EXPECT_PRED3(CheckTruncateIP, "9999:1111:2233:4567:5555:6666:7777:8888", 64, 777 "9999:1111:2233:4567::"); 778 EXPECT_PRED3(CheckTruncateIP, "1111:2222:3333:4444:5555:6666:7777:8888", 68, 779 "1111:2222:3333:4444:5000::"); 780 EXPECT_PRED3(CheckTruncateIP, "1111:2222:3333:4444:5555:6666:7777:8888", 92, 781 "1111:2222:3333:4444:5555:6660::"); 782 EXPECT_PRED3(CheckTruncateIP, "1111:2222:3333:4444:5555:6666:7777:8888", 96, 783 "1111:2222:3333:4444:5555:6666::"); 784 EXPECT_PRED3(CheckTruncateIP, "1111:2222:3333:4444:5555:6666:7777:8888", 105, 785 "1111:2222:3333:4444:5555:6666:7700::"); 786 EXPECT_PRED3(CheckTruncateIP, "1111:2222:3333:4444:5555:6666:7777:8888", 124, 787 "1111:2222:3333:4444:5555:6666:7777:8880"); 788 789 // Slightly degenerate cases 790 EXPECT_PRED3(CheckTruncateIP, "202.165.33.127", 32, "202.165.33.127"); 791 EXPECT_PRED3(CheckTruncateIP, "235.105.77.12", 0, "0.0.0.0"); 792 EXPECT_PRED3(CheckTruncateIP, "1111:2222:3333:4444:5555:6666:7777:8888", 128, 793 "1111:2222:3333:4444:5555:6666:7777:8888"); 794 EXPECT_PRED3(CheckTruncateIP, "1111:2222:3333:4444:5555:6666:7777:8888", 0, 795 "::"); 796} 797 798TEST(IPAddressTest, TestCategorizeIPv6) { 799 // Test determining if an IPAddress is 6Bone/6To4/Teredo/etc. 800 // IPv4 address, should be none of these (not even v4compat/v4mapped). 801 IPAddress v4_addr(kIPv4PublicAddr); 802 EXPECT_FALSE(IPIs6Bone(v4_addr)); 803 EXPECT_FALSE(IPIs6To4(v4_addr)); 804 EXPECT_FALSE(IPIsSiteLocal(v4_addr)); 805 EXPECT_FALSE(IPIsTeredo(v4_addr)); 806 EXPECT_FALSE(IPIsULA(v4_addr)); 807 EXPECT_FALSE(IPIsV4Compatibility(v4_addr)); 808 EXPECT_FALSE(IPIsV4Mapped(v4_addr)); 809 // Linklocal (fe80::/16) adddress; should be none of these. 810 IPAddress linklocal_addr(kIPv6LinkLocalAddr); 811 EXPECT_FALSE(IPIs6Bone(linklocal_addr)); 812 EXPECT_FALSE(IPIs6To4(linklocal_addr)); 813 EXPECT_FALSE(IPIsSiteLocal(linklocal_addr)); 814 EXPECT_FALSE(IPIsTeredo(linklocal_addr)); 815 EXPECT_FALSE(IPIsULA(linklocal_addr)); 816 EXPECT_FALSE(IPIsV4Compatibility(linklocal_addr)); 817 EXPECT_FALSE(IPIsV4Mapped(linklocal_addr)); 818 // 'Normal' IPv6 address, should also be none of these. 819 IPAddress normal_addr(kIPv6PublicAddr); 820 EXPECT_FALSE(IPIs6Bone(normal_addr)); 821 EXPECT_FALSE(IPIs6To4(normal_addr)); 822 EXPECT_FALSE(IPIsSiteLocal(normal_addr)); 823 EXPECT_FALSE(IPIsTeredo(normal_addr)); 824 EXPECT_FALSE(IPIsULA(normal_addr)); 825 EXPECT_FALSE(IPIsV4Compatibility(normal_addr)); 826 EXPECT_FALSE(IPIsV4Mapped(normal_addr)); 827 // IPv4 mapped address (::ffff:123.123.123.123) 828 IPAddress v4mapped_addr(kIPv4MappedPublicAddr); 829 EXPECT_TRUE(IPIsV4Mapped(v4mapped_addr)); 830 EXPECT_FALSE(IPIsV4Compatibility(v4mapped_addr)); 831 EXPECT_FALSE(IPIs6Bone(v4mapped_addr)); 832 EXPECT_FALSE(IPIs6To4(v4mapped_addr)); 833 EXPECT_FALSE(IPIsSiteLocal(v4mapped_addr)); 834 EXPECT_FALSE(IPIsTeredo(v4mapped_addr)); 835 EXPECT_FALSE(IPIsULA(v4mapped_addr)); 836 // IPv4 compatibility address (::123.123.123.123) 837 IPAddress v4compat_addr; 838 IPFromString("::192.168.7.1", &v4compat_addr); 839 EXPECT_TRUE(IPIsV4Compatibility(v4compat_addr)); 840 EXPECT_FALSE(IPIs6Bone(v4compat_addr)); 841 EXPECT_FALSE(IPIs6To4(v4compat_addr)); 842 EXPECT_FALSE(IPIsSiteLocal(v4compat_addr)); 843 EXPECT_FALSE(IPIsTeredo(v4compat_addr)); 844 EXPECT_FALSE(IPIsULA(v4compat_addr)); 845 EXPECT_FALSE(IPIsV4Mapped(v4compat_addr)); 846 // 6Bone address (3FFE::/16) 847 IPAddress sixbone_addr; 848 IPFromString("3FFE:123:456::789:123", &sixbone_addr); 849 EXPECT_TRUE(IPIs6Bone(sixbone_addr)); 850 EXPECT_FALSE(IPIs6To4(sixbone_addr)); 851 EXPECT_FALSE(IPIsSiteLocal(sixbone_addr)); 852 EXPECT_FALSE(IPIsTeredo(sixbone_addr)); 853 EXPECT_FALSE(IPIsULA(sixbone_addr)); 854 EXPECT_FALSE(IPIsV4Mapped(sixbone_addr)); 855 EXPECT_FALSE(IPIsV4Compatibility(sixbone_addr)); 856 // Unique Local Address (FC::/7) 857 IPAddress ula_addr; 858 IPFromString("FC00:123:456::789:123", &ula_addr); 859 EXPECT_TRUE(IPIsULA(ula_addr)); 860 EXPECT_FALSE(IPIs6Bone(ula_addr)); 861 EXPECT_FALSE(IPIs6To4(ula_addr)); 862 EXPECT_FALSE(IPIsSiteLocal(ula_addr)); 863 EXPECT_FALSE(IPIsTeredo(ula_addr)); 864 EXPECT_FALSE(IPIsV4Mapped(ula_addr)); 865 EXPECT_FALSE(IPIsV4Compatibility(ula_addr)); 866 // 6To4 Address (2002::/16) 867 IPAddress sixtofour_addr; 868 IPFromString("2002:123:456::789:123", &sixtofour_addr); 869 EXPECT_TRUE(IPIs6To4(sixtofour_addr)); 870 EXPECT_FALSE(IPIs6Bone(sixtofour_addr)); 871 EXPECT_FALSE(IPIsSiteLocal(sixtofour_addr)); 872 EXPECT_FALSE(IPIsTeredo(sixtofour_addr)); 873 EXPECT_FALSE(IPIsULA(sixtofour_addr)); 874 EXPECT_FALSE(IPIsV4Compatibility(sixtofour_addr)); 875 EXPECT_FALSE(IPIsV4Mapped(sixtofour_addr)); 876 // Site Local address (FEC0::/10) 877 IPAddress sitelocal_addr; 878 IPFromString("FEC0:123:456::789:123", &sitelocal_addr); 879 EXPECT_TRUE(IPIsSiteLocal(sitelocal_addr)); 880 EXPECT_FALSE(IPIs6Bone(sitelocal_addr)); 881 EXPECT_FALSE(IPIs6To4(sitelocal_addr)); 882 EXPECT_FALSE(IPIsTeredo(sitelocal_addr)); 883 EXPECT_FALSE(IPIsULA(sitelocal_addr)); 884 EXPECT_FALSE(IPIsV4Compatibility(sitelocal_addr)); 885 EXPECT_FALSE(IPIsV4Mapped(sitelocal_addr)); 886 // Teredo Address (2001:0000::/32) 887 IPAddress teredo_addr; 888 IPFromString("2001:0000:123:456::789:123", &teredo_addr); 889 EXPECT_TRUE(IPIsTeredo(teredo_addr)); 890 EXPECT_FALSE(IPIsSiteLocal(teredo_addr)); 891 EXPECT_FALSE(IPIs6Bone(teredo_addr)); 892 EXPECT_FALSE(IPIs6To4(teredo_addr)); 893 EXPECT_FALSE(IPIsULA(teredo_addr)); 894 EXPECT_FALSE(IPIsV4Compatibility(teredo_addr)); 895 EXPECT_FALSE(IPIsV4Mapped(teredo_addr)); 896} 897 898TEST(IPAddressTest, TestToSensitiveString) { 899 IPAddress addr_v4 = IPAddress(kIPv4PublicAddr); 900 IPAddress addr_v6 = IPAddress(kIPv6PublicAddr); 901 IPAddress addr_v6_2 = IPAddress(kIPv6PublicAddr2); 902 EXPECT_EQ(kIPv4PublicAddrString, addr_v4.ToString()); 903 EXPECT_EQ(kIPv6PublicAddrString, addr_v6.ToString()); 904 EXPECT_EQ(kIPv6PublicAddr2String, addr_v6_2.ToString()); 905#if defined(NDEBUG) 906 EXPECT_EQ(kIPv4PublicAddrAnonymizedString, addr_v4.ToSensitiveString()); 907 EXPECT_EQ(kIPv6PublicAddrAnonymizedString, addr_v6.ToSensitiveString()); 908 EXPECT_EQ(kIPv6PublicAddr2AnonymizedString, addr_v6_2.ToSensitiveString()); 909#else 910 EXPECT_EQ(kIPv4PublicAddrString, addr_v4.ToSensitiveString()); 911 EXPECT_EQ(kIPv6PublicAddrString, addr_v6.ToSensitiveString()); 912 EXPECT_EQ(kIPv6PublicAddr2String, addr_v6_2.ToSensitiveString()); 913#endif // defined(NDEBUG) 914} 915 916TEST(IPAddressTest, TestInterfaceAddress) { 917 in6_addr addr; 918 InterfaceAddress addr1(kIPv6PublicAddr, 919 IPV6_ADDRESS_FLAG_TEMPORARY); 920 EXPECT_EQ(addr1.ipv6_flags(), IPV6_ADDRESS_FLAG_TEMPORARY); 921 EXPECT_EQ(addr1.family(), AF_INET6); 922 923 addr = addr1.ipv6_address(); 924 EXPECT_TRUE(IN6_ARE_ADDR_EQUAL(&addr, &kIPv6PublicAddr)); 925 926 InterfaceAddress addr2 = addr1; 927 EXPECT_EQ(addr1, addr2); 928 EXPECT_EQ(addr2.ipv6_flags(), IPV6_ADDRESS_FLAG_TEMPORARY); 929 addr = addr2.ipv6_address(); 930 EXPECT_TRUE(IN6_ARE_ADDR_EQUAL(&addr, &kIPv6PublicAddr)); 931 932 InterfaceAddress addr3(addr1); 933 EXPECT_EQ(addr1, addr3); 934 EXPECT_EQ(addr3.ipv6_flags(), IPV6_ADDRESS_FLAG_TEMPORARY); 935 addr = addr3.ipv6_address(); 936 EXPECT_TRUE(IN6_ARE_ADDR_EQUAL(&addr, &kIPv6PublicAddr)); 937 938 InterfaceAddress addr4(kIPv6PublicAddr, 939 IPV6_ADDRESS_FLAG_DEPRECATED); 940 EXPECT_NE(addr1, addr4); 941 942 // When you compare them as IPAddress, since operator== 943 // is not virtual, it'll be equal. 944 IPAddress *paddr1 = &addr1; 945 IPAddress *paddr4 = &addr4; 946 EXPECT_EQ(*paddr1, *paddr4); 947 948 InterfaceAddress addr5(kIPv6LinkLocalAddr, 949 IPV6_ADDRESS_FLAG_TEMPORARY); 950 EXPECT_NE(addr1, addr5); 951} 952 953} // namespace rtc 954