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

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

Issue 1860823005: Move some net::IPAddressNumber implementations to net::IPAddress. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 months 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
1 // Copyright (c) 2015 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/base/ip_address.h" 5 #include "net/base/ip_address.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/format_macros.h"
9 #include "base/strings/string_number_conversions.h" 10 #include "base/strings/string_number_conversions.h"
11 #include "base/strings/stringprintf.h"
10 #include "testing/gtest/include/gtest/gtest.h" 12 #include "testing/gtest/include/gtest/gtest.h"
11 13
12 namespace net { 14 namespace net {
13 15
14 namespace { 16 namespace {
15 17
16 // Helper to stringize an IP address (used to define expectations). 18 // Helper to stringize an IP address (used to define expectations).
17 std::string DumpIPAddress(const IPAddress& v) { 19 std::string DumpIPAddress(const IPAddress& v) {
18 std::string out; 20 std::string out;
19 for (size_t i = 0; i < v.bytes().size(); ++i) { 21 for (size_t i = 0; i < v.bytes().size(); ++i) {
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
68 uint8_t addr3[5] = {0xFE, 0xDC, 0xBA, 0x98}; 70 uint8_t addr3[5] = {0xFE, 0xDC, 0xBA, 0x98};
69 IPAddress ip_address3(addr3); 71 IPAddress ip_address3(addr3);
70 EXPECT_FALSE(ip_address3.IsValid()); 72 EXPECT_FALSE(ip_address3.IsValid());
71 EXPECT_FALSE(ip_address3.empty()); 73 EXPECT_FALSE(ip_address3.empty());
72 74
73 IPAddress ip_address4; 75 IPAddress ip_address4;
74 EXPECT_FALSE(ip_address4.IsValid()); 76 EXPECT_FALSE(ip_address4.IsValid());
75 EXPECT_TRUE(ip_address4.empty()); 77 EXPECT_TRUE(ip_address4.empty());
76 } 78 }
77 79
80 TEST(IPAddressTest, IsReserved) {
martijnc 2016/04/11 22:02:09 Added these tests, the IPv6 addresses are from [1]
eroman 2016/04/13 01:36:21 Agreed, thanks! I have some suggestions on the IP
81 struct {
82 const char* const address;
83 bool is_reserved;
84 } tests[] = {{"10.10.10.10", true},
85 {"9.9.255.255", false},
86 {"127.0.0.1", true},
87 {"128.0.0.1", false},
88 {"198.18.0.0", true},
89 {"198.18.255.255", true},
90 {"198.17.255.255", false},
91 {"198.19.255.255", true},
92 {"198.20.0.0", false},
93 {"0000::", true},
94 {"FFC0:ba98:7654:3210:FEDC:BA98:7654:3210", false},
95 {"2000:ba98:7654:2301:EFCD:BA98:7654:3210", false},
96 {"::192.9.5.5", true},
97 {"FEED::BEEF", true}};
98
99 IPAddress address;
100 for (const auto& test : tests) {
101 EXPECT_TRUE(address.AssignFromIPLiteral(test.address));
102 EXPECT_EQ(test.is_reserved, address.IsReserved());
103 }
104 }
105
78 TEST(IPAddressTest, IsZero) { 106 TEST(IPAddressTest, IsZero) {
79 uint8_t address1[4] = {}; 107 uint8_t address1[4] = {};
80 IPAddress zero_ipv4_address(address1); 108 IPAddress zero_ipv4_address(address1);
81 EXPECT_TRUE(zero_ipv4_address.IsZero()); 109 EXPECT_TRUE(zero_ipv4_address.IsZero());
82 110
83 uint8_t address2[4] = {10}; 111 uint8_t address2[4] = {10};
84 IPAddress non_zero_ipv4_address(address2); 112 IPAddress non_zero_ipv4_address(address2);
85 EXPECT_FALSE(non_zero_ipv4_address.IsZero()); 113 EXPECT_FALSE(non_zero_ipv4_address.IsZero());
86 114
87 uint8_t address3[16] = {}; 115 uint8_t address3[16] = {};
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
245 IPAddress ipv4mapped_address; 273 IPAddress ipv4mapped_address;
246 EXPECT_TRUE(ipv4mapped_address.AssignFromIPLiteral("::ffff:c0a8:1")); 274 EXPECT_TRUE(ipv4mapped_address.AssignFromIPLiteral("::ffff:c0a8:1"));
247 275
248 IPAddress expected; 276 IPAddress expected;
249 EXPECT_TRUE(expected.AssignFromIPLiteral("192.168.0.1")); 277 EXPECT_TRUE(expected.AssignFromIPLiteral("192.168.0.1"));
250 278
251 IPAddress result = ConvertIPv4MappedIPv6ToIPv4(ipv4mapped_address); 279 IPAddress result = ConvertIPv4MappedIPv6ToIPv4(ipv4mapped_address);
252 EXPECT_EQ(expected, result); 280 EXPECT_EQ(expected, result);
253 } 281 }
254 282
283 TEST(IPAddressTest, IPAddressMatchesPrefix) {
martijnc 2016/04/11 22:02:09 Tests from net/base/ip_address_number_unittest.cc.
284 struct {
285 const char* const cidr_literal;
286 size_t prefix_length_in_bits;
287 const char* const ip_literal;
288 bool expected_to_match;
289 } tests[] = {
290 // IPv4 prefix with IPv4 inputs.
291 {"10.10.1.32", 27, "10.10.1.44", true},
292 {"10.10.1.32", 27, "10.10.1.90", false},
293 {"10.10.1.32", 27, "10.10.1.90", false},
294
295 // IPv6 prefix with IPv6 inputs.
296 {"2001:db8::", 32, "2001:DB8:3:4::5", true},
297 {"2001:db8::", 32, "2001:c8::", false},
298
299 // IPv6 prefix with IPv4 inputs.
300 {"2001:db8::", 33, "192.168.0.1", false},
301 {"::ffff:192.168.0.1", 112, "192.168.33.77", true},
302
303 // IPv4 prefix with IPv6 inputs.
304 {"10.11.33.44", 16, "::ffff:0a0b:89", true},
305 {"10.11.33.44", 16, "::ffff:10.12.33.44", false},
306 };
307 for (size_t i = 0; i < arraysize(tests); ++i) {
308 SCOPED_TRACE(base::StringPrintf("Test[%" PRIuS "]: %s, %s", i,
309 tests[i].cidr_literal,
310 tests[i].ip_literal));
311
312 IPAddress ip_address;
313 EXPECT_TRUE(ip_address.AssignFromIPLiteral(tests[i].ip_literal));
314
315 IPAddress ip_prefix;
316 EXPECT_TRUE(ip_prefix.AssignFromIPLiteral(tests[i].cidr_literal));
317
318 EXPECT_EQ(tests[i].expected_to_match,
319 IPAddressMatchesPrefix(ip_address, ip_prefix,
320 tests[i].prefix_length_in_bits));
321 }
322 }
323
255 // Test parsing invalid CIDR notation literals. 324 // Test parsing invalid CIDR notation literals.
256 TEST(IPAddressTest, ParseCIDRBlock_Invalid) { 325 TEST(IPAddressTest, ParseCIDRBlock_Invalid) {
257 const char* const bad_literals[] = {"foobar", 326 const char* const bad_literals[] = {"foobar",
258 "", 327 "",
259 "192.168.0.1", 328 "192.168.0.1",
260 "::1", 329 "::1",
261 "/", 330 "/",
262 "/1", 331 "/1",
263 "1", 332 "1",
264 "192.168.1.1/-1", 333 "192.168.1.1/-1",
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
360 429
361 // Prefix is longer than the address. 430 // Prefix is longer than the address.
362 uint8_t ipv6_prefix5[] = {42, 0, 20, 80, 64, 12, 12, 9, 0, 431 uint8_t ipv6_prefix5[] = {42, 0, 20, 80, 64, 12, 12, 9, 0,
363 0, 0, 0, 0, 0, 0, 0, 10}; 432 0, 0, 0, 0, 0, 0, 0, 10};
364 EXPECT_FALSE(IPAddressStartsWith(ipv6_address, ipv6_prefix5)); 433 EXPECT_FALSE(IPAddressStartsWith(ipv6_address, ipv6_prefix5));
365 } 434 }
366 435
367 } // anonymous namespace 436 } // anonymous namespace
368 437
369 } // namespace net 438 } // namespace net
OLDNEW
« net/base/ip_address.cc ('K') | « net/base/ip_address_number_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698