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

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: Comments eroman 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 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
OLDNEW
« net/base/ip_address.cc ('K') | « net/base/ip_address.cc ('k') | net/net.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698