Chromium Code Reviews| 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 class IPAddressTest : public testing::Test { | |
|
eroman
2015/11/30 22:12:33
Note that this class is a test fixture, however it
martijnc
2015/12/01 22:09:34
Done.
| |
| 15 public: | |
| 16 // Helper to strignize an IP number (used to define expectations). | |
|
eroman
2015/11/30 22:12:33
typo: stringize
martijnc
2015/12/01 22:09:34
Done.
| |
| 17 static std::string DumpIPAddress(const IPAddress& v) { | |
| 18 std::string out; | |
| 19 for (size_t i = 0; i < v.ip_address_.size(); ++i) { | |
| 20 if (i != 0) | |
| 21 out.append(","); | |
| 22 out.append(base::IntToString(static_cast<int>(v.ip_address_[i]))); | |
|
eroman
2015/11/30 22:12:33
I realize this is moving existing code, however ca
martijnc
2015/12/01 22:09:34
Done.
| |
| 23 } | |
| 24 return out; | |
| 25 } | |
| 26 | |
| 27 static IPAddress ArrayToIPAdress(uint8_t address[], size_t length) { | |
|
eroman
2015/11/30 22:12:33
How about instead using some template magic:
temp
martijnc
2015/12/01 22:09:34
Done.
| |
| 28 IPAddress ip_address(address, length); | |
| 29 return ip_address; | |
| 30 } | |
| 31 }; | |
| 32 | |
| 33 namespace { | |
|
eroman
2015/11/30 22:12:33
Move this up to contain the helper functions above
martijnc
2015/12/01 22:09:34
Done.
| |
| 34 | |
| 35 TEST(IPAddressTest, IsIPVersion) { | |
| 36 uint8_t addr1[4] = {192, 168, 0, 1}; | |
| 37 IPAddress ip_address1 = IPAddressTest::ArrayToIPAdress(addr1, sizeof(addr1)); | |
| 38 EXPECT_TRUE(ip_address1.IsIPv4()); | |
| 39 EXPECT_FALSE(ip_address1.IsIPv6()); | |
| 40 | |
| 41 uint8_t addr2[16] = {0xFE, 0xDC, 0xBA, 0x98}; | |
| 42 IPAddress ip_address2 = IPAddressTest::ArrayToIPAdress(addr2, sizeof(addr2)); | |
| 43 EXPECT_TRUE(ip_address2.IsIPv6()); | |
| 44 EXPECT_FALSE(ip_address2.IsIPv4()); | |
| 45 | |
| 46 IPAddress ip_address3 = IPAddress(); | |
| 47 EXPECT_FALSE(ip_address3.IsIPv6()); | |
| 48 EXPECT_FALSE(ip_address3.IsIPv4()); | |
| 49 } | |
| 50 | |
| 51 TEST(IPAddressTest, ToString) { | |
| 52 uint8_t addr1[4] = {0, 0, 0, 0}; | |
| 53 IPAddress ip_address1 = IPAddressTest::ArrayToIPAdress(addr1, sizeof(addr1)); | |
| 54 EXPECT_EQ("0.0.0.0", ip_address1.ToString()); | |
| 55 | |
| 56 uint8_t addr2[4] = {192, 168, 0, 1}; | |
| 57 IPAddress ip_address2 = IPAddressTest::ArrayToIPAdress(addr2, sizeof(addr2)); | |
| 58 EXPECT_EQ("192.168.0.1", ip_address2.ToString()); | |
| 59 | |
| 60 uint8_t addr3[16] = {0xFE, 0xDC, 0xBA, 0x98}; | |
| 61 IPAddress ip_address3 = IPAddressTest::ArrayToIPAdress(addr3, sizeof(addr3)); | |
| 62 EXPECT_EQ("fedc:ba98::", ip_address3.ToString()); | |
| 63 } | |
| 64 | |
| 65 // Test that invalid IP literals fail to parse. | |
| 66 TEST(IPAddressTest, FromIPLiteral_FailParse) { | |
| 67 IPAddress address; | |
| 68 | |
| 69 EXPECT_FALSE(IPAddress::FromIPLiteral("bad value", &address)); | |
| 70 EXPECT_FALSE(IPAddress::FromIPLiteral("bad:value", &address)); | |
| 71 EXPECT_FALSE(IPAddress::FromIPLiteral(std::string(), &address)); | |
| 72 EXPECT_FALSE(IPAddress::FromIPLiteral("192.168.0.1:30", &address)); | |
| 73 EXPECT_FALSE(IPAddress::FromIPLiteral(" 192.168.0.1 ", &address)); | |
| 74 EXPECT_FALSE(IPAddress::FromIPLiteral("[::1]", &address)); | |
| 75 } | |
| 76 | |
| 77 // Test parsing an IPv4 literal. | |
| 78 TEST(IPAddressTest, FromIPLiteral_IPv4) { | |
| 79 IPAddress address; | |
| 80 EXPECT_TRUE(IPAddress::FromIPLiteral("192.168.0.1", &address)); | |
| 81 EXPECT_EQ("192,168,0,1", IPAddressTest::DumpIPAddress(address)); | |
| 82 EXPECT_EQ("192.168.0.1", address.ToString()); | |
| 83 } | |
| 84 | |
| 85 // Test parsing an IPv6 literal. | |
| 86 TEST(IPAddressTest, FromIPLiteral_IPv6) { | |
| 87 IPAddress address; | |
| 88 EXPECT_TRUE(IPAddress::FromIPLiteral("1:abcd::3:4:ff", &address)); | |
| 89 EXPECT_EQ("0,1,171,205,0,0,0,0,0,0,0,3,0,4,0,255", | |
| 90 IPAddressTest::DumpIPAddress(address)); | |
| 91 EXPECT_EQ("1:abcd::3:4:ff", address.ToString()); | |
| 92 } | |
| 93 | |
| 94 TEST(IPAddressTest, IsIPv4Mapped) { | |
| 95 IPAddress ipv4_address; | |
| 96 EXPECT_TRUE(IPAddress::FromIPLiteral("192.168.0.1", &ipv4_address)); | |
| 97 EXPECT_FALSE(ipv4_address.IsIPv4Mapped()); | |
| 98 | |
| 99 IPAddress ipv6_address; | |
| 100 EXPECT_TRUE(IPAddress::FromIPLiteral("::1", &ipv4_address)); | |
| 101 EXPECT_FALSE(ipv6_address.IsIPv4Mapped()); | |
| 102 | |
| 103 IPAddress ipv4mapped_address; | |
| 104 EXPECT_TRUE(IPAddress::FromIPLiteral("::ffff:0101:1", &ipv4mapped_address)); | |
| 105 EXPECT_TRUE(ipv4mapped_address.IsIPv4Mapped()); | |
| 106 } | |
| 107 | |
| 108 TEST(IPAddressTest, IsEqual) { | |
| 109 IPAddress ip_address1; | |
| 110 EXPECT_TRUE(IPAddress::FromIPLiteral("127.0.0.1", &ip_address1)); | |
| 111 IPAddress ip_address2; | |
| 112 EXPECT_TRUE(IPAddress::FromIPLiteral("2001:db8:0::42", &ip_address2)); | |
| 113 IPAddress ip_address3; | |
| 114 EXPECT_TRUE(IPAddress::FromIPLiteral("127.0.0.1", &ip_address3)); | |
| 115 | |
| 116 EXPECT_FALSE(ip_address1 == ip_address2); | |
| 117 EXPECT_TRUE(ip_address1 == ip_address3); | |
| 118 } | |
| 119 | |
| 120 TEST(IPAddressTest, LessThan) { | |
| 121 // IPv4 vs IPv6 | |
| 122 IPAddress ip_address1; | |
| 123 EXPECT_TRUE(IPAddress::FromIPLiteral("127.0.0.1", &ip_address1)); | |
| 124 IPAddress ip_address2; | |
| 125 EXPECT_TRUE(IPAddress::FromIPLiteral("2001:db8:0::42", &ip_address2)); | |
| 126 EXPECT_TRUE(ip_address1 < ip_address2); | |
| 127 EXPECT_FALSE(ip_address2 < ip_address1); | |
| 128 | |
| 129 // Compare equivalent addresses. | |
| 130 IPAddress ip_address3; | |
| 131 EXPECT_TRUE(IPAddress::FromIPLiteral("127.0.0.1", &ip_address3)); | |
| 132 EXPECT_FALSE(ip_address1 < ip_address3); | |
| 133 EXPECT_FALSE(ip_address3 < ip_address1); | |
| 134 } | |
| 135 | |
| 136 } // anonymous namespace | |
| 137 | |
| 138 } // namespace net | |
| OLD | NEW |