OLD | NEW |
(Empty) | |
| 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 |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include "net/base/ip_address.h" |
| 6 |
| 7 #include <vector> |
| 8 |
| 9 #include "base/strings/string_number_conversions.h" |
| 10 #include "testing/gtest/include/gtest/gtest.h" |
| 11 |
| 12 namespace net { |
| 13 |
| 14 namespace { |
| 15 |
| 16 // Helper to stringize an IP number (used to define expectations). |
| 17 std::string DumpIPAddress(const IPAddress& v) { |
| 18 std::string out; |
| 19 for (size_t i = 0; i < v.bytes().size(); ++i) { |
| 20 if (i != 0) |
| 21 out.append(","); |
| 22 out.append(base::UintToString(v.bytes()[i])); |
| 23 } |
| 24 return out; |
| 25 } |
| 26 |
| 27 template <size_t N> |
| 28 IPAddress ArrayToIPAdress(const uint8_t(&address)[N]) { |
| 29 return IPAddress(address, N); |
| 30 } |
| 31 |
| 32 TEST(IPAddressTest, IsIPVersion) { |
| 33 uint8_t addr1[4] = {192, 168, 0, 1}; |
| 34 IPAddress ip_address1 = ArrayToIPAdress(addr1); |
| 35 EXPECT_TRUE(ip_address1.IsIPv4()); |
| 36 EXPECT_FALSE(ip_address1.IsIPv6()); |
| 37 |
| 38 uint8_t addr2[16] = {0xFE, 0xDC, 0xBA, 0x98}; |
| 39 IPAddress ip_address2 = ArrayToIPAdress(addr2); |
| 40 EXPECT_TRUE(ip_address2.IsIPv6()); |
| 41 EXPECT_FALSE(ip_address2.IsIPv4()); |
| 42 |
| 43 IPAddress ip_address3 = IPAddress(); |
| 44 EXPECT_FALSE(ip_address3.IsIPv6()); |
| 45 EXPECT_FALSE(ip_address3.IsIPv4()); |
| 46 } |
| 47 |
| 48 TEST(IPAddressTest, ToString) { |
| 49 uint8_t addr1[4] = {0, 0, 0, 0}; |
| 50 IPAddress ip_address1 = ArrayToIPAdress(addr1); |
| 51 EXPECT_EQ("0.0.0.0", ip_address1.ToString()); |
| 52 |
| 53 uint8_t addr2[4] = {192, 168, 0, 1}; |
| 54 IPAddress ip_address2 = ArrayToIPAdress(addr2); |
| 55 EXPECT_EQ("192.168.0.1", ip_address2.ToString()); |
| 56 |
| 57 uint8_t addr3[16] = {0xFE, 0xDC, 0xBA, 0x98}; |
| 58 IPAddress ip_address3 = ArrayToIPAdress(addr3); |
| 59 EXPECT_EQ("fedc:ba98::", ip_address3.ToString()); |
| 60 } |
| 61 |
| 62 // Test that invalid IP literals fail to parse. |
| 63 TEST(IPAddressTest, FromIPLiteral_FailParse) { |
| 64 IPAddress address; |
| 65 |
| 66 EXPECT_FALSE(IPAddress::FromIPLiteral("bad value", &address)); |
| 67 EXPECT_FALSE(IPAddress::FromIPLiteral("bad:value", &address)); |
| 68 EXPECT_FALSE(IPAddress::FromIPLiteral(std::string(), &address)); |
| 69 EXPECT_FALSE(IPAddress::FromIPLiteral("192.168.0.1:30", &address)); |
| 70 EXPECT_FALSE(IPAddress::FromIPLiteral(" 192.168.0.1 ", &address)); |
| 71 EXPECT_FALSE(IPAddress::FromIPLiteral("[::1]", &address)); |
| 72 } |
| 73 |
| 74 // Test parsing an IPv4 literal. |
| 75 TEST(IPAddressTest, FromIPLiteral_IPv4) { |
| 76 IPAddress address; |
| 77 EXPECT_TRUE(IPAddress::FromIPLiteral("192.168.0.1", &address)); |
| 78 EXPECT_EQ("192,168,0,1", DumpIPAddress(address)); |
| 79 EXPECT_EQ("192.168.0.1", address.ToString()); |
| 80 } |
| 81 |
| 82 // Test parsing an IPv6 literal. |
| 83 TEST(IPAddressTest, FromIPLiteral_IPv6) { |
| 84 IPAddress address; |
| 85 EXPECT_TRUE(IPAddress::FromIPLiteral("1:abcd::3:4:ff", &address)); |
| 86 EXPECT_EQ("0,1,171,205,0,0,0,0,0,0,0,3,0,4,0,255", DumpIPAddress(address)); |
| 87 EXPECT_EQ("1:abcd::3:4:ff", address.ToString()); |
| 88 } |
| 89 |
| 90 TEST(IPAddressTest, IsIPv4Mapped) { |
| 91 IPAddress ipv4_address; |
| 92 EXPECT_TRUE(IPAddress::FromIPLiteral("192.168.0.1", &ipv4_address)); |
| 93 EXPECT_FALSE(ipv4_address.IsIPv4Mapped()); |
| 94 |
| 95 IPAddress ipv6_address; |
| 96 EXPECT_TRUE(IPAddress::FromIPLiteral("::1", &ipv4_address)); |
| 97 EXPECT_FALSE(ipv6_address.IsIPv4Mapped()); |
| 98 |
| 99 IPAddress ipv4mapped_address; |
| 100 EXPECT_TRUE(IPAddress::FromIPLiteral("::ffff:0101:1", &ipv4mapped_address)); |
| 101 EXPECT_TRUE(ipv4mapped_address.IsIPv4Mapped()); |
| 102 } |
| 103 |
| 104 TEST(IPAddressTest, IsEqual) { |
| 105 IPAddress ip_address1; |
| 106 EXPECT_TRUE(IPAddress::FromIPLiteral("127.0.0.1", &ip_address1)); |
| 107 IPAddress ip_address2; |
| 108 EXPECT_TRUE(IPAddress::FromIPLiteral("2001:db8:0::42", &ip_address2)); |
| 109 IPAddress ip_address3; |
| 110 EXPECT_TRUE(IPAddress::FromIPLiteral("127.0.0.1", &ip_address3)); |
| 111 |
| 112 EXPECT_FALSE(ip_address1 == ip_address2); |
| 113 EXPECT_TRUE(ip_address1 == ip_address3); |
| 114 } |
| 115 |
| 116 TEST(IPAddressTest, LessThan) { |
| 117 // IPv4 vs IPv6 |
| 118 IPAddress ip_address1; |
| 119 EXPECT_TRUE(IPAddress::FromIPLiteral("127.0.0.1", &ip_address1)); |
| 120 IPAddress ip_address2; |
| 121 EXPECT_TRUE(IPAddress::FromIPLiteral("2001:db8:0::42", &ip_address2)); |
| 122 EXPECT_TRUE(ip_address1 < ip_address2); |
| 123 EXPECT_FALSE(ip_address2 < ip_address1); |
| 124 |
| 125 // Compare equivalent addresses. |
| 126 IPAddress ip_address3; |
| 127 EXPECT_TRUE(IPAddress::FromIPLiteral("127.0.0.1", &ip_address3)); |
| 128 EXPECT_FALSE(ip_address1 < ip_address3); |
| 129 EXPECT_FALSE(ip_address3 < ip_address1); |
| 130 } |
| 131 |
| 132 } // anonymous namespace |
| 133 |
| 134 } // namespace net |
OLD | NEW |