Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(12)

Side by Side Diff: net/base/ip_address_unittest.cc

Issue 1408803010: Add IPAddress class as a replacement for the IPAddressNumber typedef. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove duplicated implementations Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(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
OLDNEW
« net/base/ip_address.h ('K') | « net/base/ip_address_number.h ('k') | net/net.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698