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 |