| OLD | NEW |
| 1 // Copyright (c) 2015 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/base/ip_address.h" | 5 #include "net/base/ip_address.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/format_macros.h" | 9 #include "base/format_macros.h" |
| 10 #include "base/strings/string_number_conversions.h" | 10 #include "base/strings/string_number_conversions.h" |
| 11 #include "base/strings/stringprintf.h" | 11 #include "base/strings/stringprintf.h" |
| 12 #include "testing/gtest/include/gtest/gtest.h" | 12 #include "testing/gtest/include/gtest/gtest.h" |
| 13 | 13 |
| 14 namespace net { | 14 namespace net { |
| 15 | 15 |
| 16 namespace { | 16 namespace { |
| 17 | 17 |
| 18 // Helper to stringize an IP address (used to define expectations). | 18 // Helper to stringize an IP address (used to define expectations). |
| 19 std::string DumpIPAddress(const IPAddress& v) { | 19 std::string DumpIPAddress(const IPAddress& v) { |
| 20 std::string out; | 20 std::string out; |
| 21 for (size_t i = 0; i < v.bytes().size(); ++i) { | 21 for (size_t i = 0; i < v.bytes().size(); ++i) { |
| 22 if (i != 0) | 22 if (i != 0) |
| 23 out.append(","); | 23 out.append(","); |
| 24 out.append(base::UintToString(v.bytes()[i])); | 24 out.append(base::UintToString(v.bytes()[i])); |
| 25 } | 25 } |
| 26 return out; | 26 return out; |
| 27 } | 27 } |
| 28 | 28 |
| 29 TEST(IPAddressBytesTest, ConstructEmpty) { |
| 30 IPAddressBytes bytes; |
| 31 ASSERT_EQ(0u, bytes.size()); |
| 32 } |
| 33 |
| 34 TEST(IPAddressBytesTest, ConstructIPv4) { |
| 35 uint8_t data[] = {192, 168, 1, 1}; |
| 36 IPAddressBytes bytes(data, arraysize(data)); |
| 37 ASSERT_EQ(arraysize(data), bytes.size()); |
| 38 size_t i = 0; |
| 39 for (uint8_t byte : bytes) |
| 40 EXPECT_EQ(data[i++], byte); |
| 41 ASSERT_EQ(arraysize(data), i); |
| 42 } |
| 43 |
| 44 TEST(IPAddressBytesTest, ConstructIPv6) { |
| 45 uint8_t data[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}; |
| 46 IPAddressBytes bytes(data, arraysize(data)); |
| 47 ASSERT_EQ(arraysize(data), bytes.size()); |
| 48 size_t i = 0; |
| 49 for (uint8_t byte : bytes) |
| 50 EXPECT_EQ(data[i++], byte); |
| 51 ASSERT_EQ(arraysize(data), i); |
| 52 } |
| 53 |
| 54 TEST(IPAddressBytesTest, Assign) { |
| 55 uint8_t data[] = {192, 168, 1, 1}; |
| 56 IPAddressBytes copy; |
| 57 copy.Assign(data, arraysize(data)); |
| 58 EXPECT_EQ(IPAddressBytes(data, arraysize(data)), copy); |
| 59 } |
| 60 |
| 29 TEST(IPAddressTest, ConstructIPv4) { | 61 TEST(IPAddressTest, ConstructIPv4) { |
| 30 EXPECT_EQ("127.0.0.1", IPAddress::IPv4Localhost().ToString()); | 62 EXPECT_EQ("127.0.0.1", IPAddress::IPv4Localhost().ToString()); |
| 31 | 63 |
| 32 IPAddress ipv4_ctor(192, 168, 1, 1); | 64 IPAddress ipv4_ctor(192, 168, 1, 1); |
| 33 EXPECT_EQ("192.168.1.1", ipv4_ctor.ToString()); | 65 EXPECT_EQ("192.168.1.1", ipv4_ctor.ToString()); |
| 34 } | 66 } |
| 35 | 67 |
| 36 TEST(IPAddressTest, ConstructIPv6) { | |
| 37 EXPECT_EQ("::1", IPAddress::IPv6Localhost().ToString()); | |
| 38 | |
| 39 IPAddress ipv6_ctor(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16); | |
| 40 EXPECT_EQ("102:304:506:708:90a:b0c:d0e:f10", ipv6_ctor.ToString()); | |
| 41 } | |
| 42 | |
| 43 TEST(IPAddressTest, IsIPVersion) { | 68 TEST(IPAddressTest, IsIPVersion) { |
| 44 uint8_t addr1[4] = {192, 168, 0, 1}; | 69 uint8_t addr1[4] = {192, 168, 0, 1}; |
| 45 IPAddress ip_address1(addr1); | 70 IPAddress ip_address1(addr1); |
| 46 EXPECT_TRUE(ip_address1.IsIPv4()); | 71 EXPECT_TRUE(ip_address1.IsIPv4()); |
| 47 EXPECT_FALSE(ip_address1.IsIPv6()); | 72 EXPECT_FALSE(ip_address1.IsIPv6()); |
| 48 | 73 |
| 49 uint8_t addr2[16] = {0xFE, 0xDC, 0xBA, 0x98}; | 74 uint8_t addr2[16] = {0xFE, 0xDC, 0xBA, 0x98}; |
| 50 IPAddress ip_address2(addr2); | 75 IPAddress ip_address2(addr2); |
| 51 EXPECT_TRUE(ip_address2.IsIPv6()); | 76 EXPECT_TRUE(ip_address2.IsIPv6()); |
| 52 EXPECT_FALSE(ip_address2.IsIPv4()); | 77 EXPECT_FALSE(ip_address2.IsIPv4()); |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 183 // Unreserved block(s) | 208 // Unreserved block(s) |
| 184 {"203.0.114.0", NOT_RESERVED}, | 209 {"203.0.114.0", NOT_RESERVED}, |
| 185 {"223.255.255.255", NOT_RESERVED}, | 210 {"223.255.255.255", NOT_RESERVED}, |
| 186 // 224.0.0.0/8 - 255.0.0.0/8 | 211 // 224.0.0.0/8 - 255.0.0.0/8 |
| 187 {"224.0.0.0", RESERVED}, | 212 {"224.0.0.0", RESERVED}, |
| 188 {"255.255.255.255", RESERVED}}; | 213 {"255.255.255.255", RESERVED}}; |
| 189 | 214 |
| 190 IPAddress address; | 215 IPAddress address; |
| 191 for (const auto& test : tests) { | 216 for (const auto& test : tests) { |
| 192 EXPECT_TRUE(address.AssignFromIPLiteral(test.address)); | 217 EXPECT_TRUE(address.AssignFromIPLiteral(test.address)); |
| 218 ASSERT_TRUE(address.IsValid()); |
| 193 EXPECT_EQ(!!test.is_reserved, address.IsReserved()); | 219 EXPECT_EQ(!!test.is_reserved, address.IsReserved()); |
| 194 } | 220 } |
| 195 } | 221 } |
| 196 | 222 |
| 197 // Tests for the reserved IPv6 ranges and the (unreserved) blocks in between. | 223 // Tests for the reserved IPv6 ranges and the (unreserved) blocks in between. |
| 198 // The reserved ranges are tested by checking the first and last address of each | 224 // The reserved ranges are tested by checking the first and last address of each |
| 199 // range. The unreserved blocks are tested similarly. These tests cover the | 225 // range. The unreserved blocks are tested similarly. These tests cover the |
| 200 // entire IPv6 address range. | 226 // entire IPv6 address range. |
| 201 TEST(IPAddressTest, IsReservedIPv6) { | 227 TEST(IPAddressTest, IsReservedIPv6) { |
| 202 struct { | 228 struct { |
| (...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 413 IPAddress ip_address2; | 439 IPAddress ip_address2; |
| 414 EXPECT_TRUE(ip_address2.AssignFromIPLiteral("2001:db8:0::42")); | 440 EXPECT_TRUE(ip_address2.AssignFromIPLiteral("2001:db8:0::42")); |
| 415 EXPECT_TRUE(ip_address1 < ip_address2); | 441 EXPECT_TRUE(ip_address1 < ip_address2); |
| 416 EXPECT_FALSE(ip_address2 < ip_address1); | 442 EXPECT_FALSE(ip_address2 < ip_address1); |
| 417 | 443 |
| 418 // Compare equivalent addresses. | 444 // Compare equivalent addresses. |
| 419 IPAddress ip_address3; | 445 IPAddress ip_address3; |
| 420 EXPECT_TRUE(ip_address3.AssignFromIPLiteral("127.0.0.1")); | 446 EXPECT_TRUE(ip_address3.AssignFromIPLiteral("127.0.0.1")); |
| 421 EXPECT_FALSE(ip_address1 < ip_address3); | 447 EXPECT_FALSE(ip_address1 < ip_address3); |
| 422 EXPECT_FALSE(ip_address3 < ip_address1); | 448 EXPECT_FALSE(ip_address3 < ip_address1); |
| 449 |
| 450 IPAddress ip_address4; |
| 451 EXPECT_TRUE(ip_address4.AssignFromIPLiteral("128.0.0.0")); |
| 452 EXPECT_TRUE(ip_address1 < ip_address4); |
| 453 EXPECT_FALSE(ip_address4 < ip_address1); |
| 423 } | 454 } |
| 424 | 455 |
| 425 // Test mapping an IPv4 address to an IPv6 address. | 456 // Test mapping an IPv4 address to an IPv6 address. |
| 426 TEST(IPAddressTest, ConvertIPv4ToIPv4MappedIPv6) { | 457 TEST(IPAddressTest, ConvertIPv4ToIPv4MappedIPv6) { |
| 427 IPAddress ipv4_address(192, 168, 0, 1); | 458 IPAddress ipv4_address(192, 168, 0, 1); |
| 428 IPAddress ipv6_address = ConvertIPv4ToIPv4MappedIPv6(ipv4_address); | 459 IPAddress ipv6_address = ConvertIPv4ToIPv4MappedIPv6(ipv4_address); |
| 429 | 460 |
| 430 // ::ffff:192.168.0.1 | 461 // ::ffff:192.168.0.1 |
| 431 EXPECT_EQ("0,0,0,0,0,0,0,0,0,0,255,255,192,168,0,1", | 462 EXPECT_EQ("0,0,0,0,0,0,0,0,0,0,255,255,192,168,0,1", |
| 432 DumpIPAddress(ipv6_address)); | 463 DumpIPAddress(ipv6_address)); |
| (...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 593 | 624 |
| 594 // Prefix is longer than the address. | 625 // Prefix is longer than the address. |
| 595 uint8_t ipv6_prefix5[] = {42, 0, 20, 80, 64, 12, 12, 9, 0, | 626 uint8_t ipv6_prefix5[] = {42, 0, 20, 80, 64, 12, 12, 9, 0, |
| 596 0, 0, 0, 0, 0, 0, 0, 10}; | 627 0, 0, 0, 0, 0, 0, 0, 10}; |
| 597 EXPECT_FALSE(IPAddressStartsWith(ipv6_address, ipv6_prefix5)); | 628 EXPECT_FALSE(IPAddressStartsWith(ipv6_address, ipv6_prefix5)); |
| 598 } | 629 } |
| 599 | 630 |
| 600 } // anonymous namespace | 631 } // anonymous namespace |
| 601 | 632 |
| 602 } // namespace net | 633 } // namespace net |
| OLD | NEW |