OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/net_util.h" | 5 #include "net/base/net_util.h" |
6 | 6 |
7 #include <string.h> | 7 #include <string.h> |
8 | 8 |
9 #include <ostream> | 9 #include <ostream> |
10 | 10 |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
54 #endif // OS_WIN | 54 #endif // OS_WIN |
55 | 55 |
56 using base::ASCIIToUTF16; | 56 using base::ASCIIToUTF16; |
57 using base::WideToUTF16; | 57 using base::WideToUTF16; |
58 | 58 |
59 namespace net { | 59 namespace net { |
60 | 60 |
61 namespace { | 61 namespace { |
62 | 62 |
63 struct HeaderCase { | 63 struct HeaderCase { |
64 const char* header_name; | 64 const char* const header_name; |
65 const char* expected; | 65 const char* const expected; |
66 }; | 66 }; |
67 | 67 |
68 // Fills in sockaddr for the given 32-bit address (IPv4.) | 68 // Fills in sockaddr for the given 32-bit address (IPv4.) |
69 // |bytes| should be an array of length 4. | 69 // |bytes| should be an array of length 4. |
70 void MakeIPv4Address(const uint8* bytes, int port, SockaddrStorage* storage) { | 70 void MakeIPv4Address(const uint8* bytes, int port, SockaddrStorage* storage) { |
71 memset(&storage->addr_storage, 0, sizeof(storage->addr_storage)); | 71 memset(&storage->addr_storage, 0, sizeof(storage->addr_storage)); |
72 storage->addr_len = sizeof(struct sockaddr_in); | 72 storage->addr_len = sizeof(struct sockaddr_in); |
73 struct sockaddr_in* addr4 = reinterpret_cast<sockaddr_in*>(storage->addr); | 73 struct sockaddr_in* addr4 = reinterpret_cast<sockaddr_in*>(storage->addr); |
74 addr4->sin_port = base::HostToNet16(port); | 74 addr4->sin_port = base::HostToNet16(port); |
75 addr4->sin_family = AF_INET; | 75 addr4->sin_family = AF_INET; |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
147 interfaces->ifa_netmask = reinterpret_cast<sockaddr*>(&sock_addrs[1]); | 147 interfaces->ifa_netmask = reinterpret_cast<sockaddr*>(&sock_addrs[1]); |
148 | 148 |
149 return true; | 149 return true; |
150 } | 150 } |
151 #endif // OS_MACOSX | 151 #endif // OS_MACOSX |
152 | 152 |
153 } // anonymous namespace | 153 } // anonymous namespace |
154 | 154 |
155 TEST(NetUtilTest, GetIdentityFromURL) { | 155 TEST(NetUtilTest, GetIdentityFromURL) { |
156 struct { | 156 struct { |
157 const char* input_url; | 157 const char* const input_url; |
158 const char* expected_username; | 158 const char* const expected_username; |
159 const char* expected_password; | 159 const char* const expected_password; |
160 } tests[] = { | 160 } tests[] = { |
161 { | 161 { |
162 "http://username:password@google.com", | 162 "http://username:password@google.com", |
163 "username", | 163 "username", |
164 "password", | 164 "password", |
165 }, | 165 }, |
166 { // Test for http://crbug.com/19200 | 166 { // Test for http://crbug.com/19200 |
167 "http://username:p@ssword@google.com", | 167 "http://username:p@ssword@google.com", |
168 "username", | 168 "username", |
169 "p@ssword", | 169 "p@ssword", |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
217 // Extract the unescaped identity. | 217 // Extract the unescaped identity. |
218 base::string16 username, password; | 218 base::string16 username, password; |
219 GetIdentityFromURL(url, &username, &password); | 219 GetIdentityFromURL(url, &username, &password); |
220 | 220 |
221 // Verify that it was decoded as UTF8. | 221 // Verify that it was decoded as UTF8. |
222 EXPECT_EQ(ASCIIToUTF16("foo"), username); | 222 EXPECT_EQ(ASCIIToUTF16("foo"), username); |
223 EXPECT_EQ(WideToUTF16(L"\x4f60\x597d"), password); | 223 EXPECT_EQ(WideToUTF16(L"\x4f60\x597d"), password); |
224 } | 224 } |
225 | 225 |
226 // Just a bunch of fake headers. | 226 // Just a bunch of fake headers. |
227 const char* google_headers = | 227 const char google_headers[] = |
228 "HTTP/1.1 200 OK\n" | 228 "HTTP/1.1 200 OK\n" |
229 "Content-TYPE: text/html; charset=utf-8\n" | 229 "Content-TYPE: text/html; charset=utf-8\n" |
230 "Content-disposition: attachment; filename=\"download.pdf\"\n" | 230 "Content-disposition: attachment; filename=\"download.pdf\"\n" |
231 "Content-Length: 378557\n" | 231 "Content-Length: 378557\n" |
232 "X-Google-Google1: 314159265\n" | 232 "X-Google-Google1: 314159265\n" |
233 "X-Google-Google2: aaaa2:7783,bbb21:9441\n" | 233 "X-Google-Google2: aaaa2:7783,bbb21:9441\n" |
234 "X-Google-Google4: home\n" | 234 "X-Google-Google4: home\n" |
235 "Transfer-Encoding: chunked\n" | 235 "Transfer-Encoding: chunked\n" |
236 "Set-Cookie: HEHE_AT=6666x66beef666x6-66xx6666x66; Path=/mail\n" | 236 "Set-Cookie: HEHE_AT=6666x66beef666x6-66xx6666x66; Path=/mail\n" |
237 "Set-Cookie: HEHE_HELP=owned:0;Path=/\n" | 237 "Set-Cookie: HEHE_HELP=owned:0;Path=/\n" |
(...skipping 26 matching lines...) Expand all Loading... |
264 | 264 |
265 // Test again with empty headers. | 265 // Test again with empty headers. |
266 for (size_t i = 0; i < arraysize(tests); ++i) { | 266 for (size_t i = 0; i < arraysize(tests); ++i) { |
267 std::string result = GetSpecificHeader(std::string(), tests[i].header_name); | 267 std::string result = GetSpecificHeader(std::string(), tests[i].header_name); |
268 EXPECT_EQ(result, std::string()); | 268 EXPECT_EQ(result, std::string()); |
269 } | 269 } |
270 } | 270 } |
271 | 271 |
272 TEST(NetUtilTest, CompliantHost) { | 272 TEST(NetUtilTest, CompliantHost) { |
273 struct CompliantHostCase { | 273 struct CompliantHostCase { |
274 const char* host; | 274 const char* const host; |
275 bool expected_output; | 275 bool expected_output; |
276 }; | 276 }; |
277 | 277 |
278 const CompliantHostCase compliant_host_cases[] = { | 278 const CompliantHostCase compliant_host_cases[] = { |
279 {"", false}, | 279 {"", false}, |
280 {"a", true}, | 280 {"a", true}, |
281 {"-", false}, | 281 {"-", false}, |
282 {".", false}, | 282 {".", false}, |
283 {"9", true}, | 283 {"9", true}, |
284 {"9a", true}, | 284 {"9a", true}, |
(...skipping 16 matching lines...) Expand all Loading... |
301 }; | 301 }; |
302 | 302 |
303 for (size_t i = 0; i < arraysize(compliant_host_cases); ++i) { | 303 for (size_t i = 0; i < arraysize(compliant_host_cases); ++i) { |
304 EXPECT_EQ(compliant_host_cases[i].expected_output, | 304 EXPECT_EQ(compliant_host_cases[i].expected_output, |
305 IsCanonicalizedHostCompliant(compliant_host_cases[i].host)); | 305 IsCanonicalizedHostCompliant(compliant_host_cases[i].host)); |
306 } | 306 } |
307 } | 307 } |
308 | 308 |
309 TEST(NetUtilTest, ParseHostAndPort) { | 309 TEST(NetUtilTest, ParseHostAndPort) { |
310 const struct { | 310 const struct { |
311 const char* input; | 311 const char* const input; |
312 bool success; | 312 bool success; |
313 const char* expected_host; | 313 const char* const expected_host; |
314 int expected_port; | 314 int expected_port; |
315 } tests[] = { | 315 } tests[] = { |
316 // Valid inputs: | 316 // Valid inputs: |
317 {"foo:10", true, "foo", 10}, | 317 {"foo:10", true, "foo", 10}, |
318 {"foo", true, "foo", -1}, | 318 {"foo", true, "foo", -1}, |
319 { | 319 { |
320 "[1080:0:0:0:8:800:200C:4171]:11", | 320 "[1080:0:0:0:8:800:200C:4171]:11", |
321 true, | 321 true, |
322 "1080:0:0:0:8:800:200C:4171", | 322 "1080:0:0:0:8:800:200C:4171", |
323 11 | 323 11 |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
360 if (tests[i].success) { | 360 if (tests[i].success) { |
361 EXPECT_EQ(tests[i].expected_host, host); | 361 EXPECT_EQ(tests[i].expected_host, host); |
362 EXPECT_EQ(tests[i].expected_port, port); | 362 EXPECT_EQ(tests[i].expected_port, port); |
363 } | 363 } |
364 } | 364 } |
365 } | 365 } |
366 | 366 |
367 TEST(NetUtilTest, GetHostAndPort) { | 367 TEST(NetUtilTest, GetHostAndPort) { |
368 const struct { | 368 const struct { |
369 GURL url; | 369 GURL url; |
370 const char* expected_host_and_port; | 370 const char* const expected_host_and_port; |
371 } tests[] = { | 371 } tests[] = { |
372 { GURL("http://www.foo.com/x"), "www.foo.com:80"}, | 372 { GURL("http://www.foo.com/x"), "www.foo.com:80"}, |
373 { GURL("http://www.foo.com:21/x"), "www.foo.com:21"}, | 373 { GURL("http://www.foo.com:21/x"), "www.foo.com:21"}, |
374 | 374 |
375 // For IPv6 literals should always include the brackets. | 375 // For IPv6 literals should always include the brackets. |
376 { GURL("http://[1::2]/x"), "[1::2]:80"}, | 376 { GURL("http://[1::2]/x"), "[1::2]:80"}, |
377 { GURL("http://[::a]:33/x"), "[::a]:33"}, | 377 { GURL("http://[::a]:33/x"), "[::a]:33"}, |
378 }; | 378 }; |
379 for (size_t i = 0; i < arraysize(tests); ++i) { | 379 for (size_t i = 0; i < arraysize(tests); ++i) { |
380 std::string host_and_port = GetHostAndPort(tests[i].url); | 380 std::string host_and_port = GetHostAndPort(tests[i].url); |
381 EXPECT_EQ(std::string(tests[i].expected_host_and_port), host_and_port); | 381 EXPECT_EQ(std::string(tests[i].expected_host_and_port), host_and_port); |
382 } | 382 } |
383 } | 383 } |
384 | 384 |
385 TEST(NetUtilTest, GetHostAndOptionalPort) { | 385 TEST(NetUtilTest, GetHostAndOptionalPort) { |
386 const struct { | 386 const struct { |
387 GURL url; | 387 GURL url; |
388 const char* expected_host_and_port; | 388 const char* const expected_host_and_port; |
389 } tests[] = { | 389 } tests[] = { |
390 { GURL("http://www.foo.com/x"), "www.foo.com"}, | 390 { GURL("http://www.foo.com/x"), "www.foo.com"}, |
391 { GURL("http://www.foo.com:21/x"), "www.foo.com:21"}, | 391 { GURL("http://www.foo.com:21/x"), "www.foo.com:21"}, |
392 | 392 |
393 // For IPv6 literals should always include the brackets. | 393 // For IPv6 literals should always include the brackets. |
394 { GURL("http://[1::2]/x"), "[1::2]"}, | 394 { GURL("http://[1::2]/x"), "[1::2]"}, |
395 { GURL("http://[::a]:33/x"), "[::a]:33"}, | 395 { GURL("http://[::a]:33/x"), "[::a]:33"}, |
396 }; | 396 }; |
397 for (size_t i = 0; i < arraysize(tests); ++i) { | 397 for (size_t i = 0; i < arraysize(tests); ++i) { |
398 std::string host_and_port = GetHostAndOptionalPort(tests[i].url); | 398 std::string host_and_port = GetHostAndOptionalPort(tests[i].url); |
(...skipping 21 matching lines...) Expand all Loading... |
420 IPAddressToStringWithPort(addr2, sizeof(addr2), 99)); | 420 IPAddressToStringWithPort(addr2, sizeof(addr2), 99)); |
421 | 421 |
422 uint8 addr3[16] = {0xFE, 0xDC, 0xBA, 0x98}; | 422 uint8 addr3[16] = {0xFE, 0xDC, 0xBA, 0x98}; |
423 EXPECT_EQ("[fedc:ba98::]:8080", | 423 EXPECT_EQ("[fedc:ba98::]:8080", |
424 IPAddressToStringWithPort(addr3, sizeof(addr3), 8080)); | 424 IPAddressToStringWithPort(addr3, sizeof(addr3), 8080)); |
425 } | 425 } |
426 | 426 |
427 TEST(NetUtilTest, NetAddressToString_IPv4) { | 427 TEST(NetUtilTest, NetAddressToString_IPv4) { |
428 const struct { | 428 const struct { |
429 uint8 addr[4]; | 429 uint8 addr[4]; |
430 const char* result; | 430 const char* const result; |
431 } tests[] = { | 431 } tests[] = { |
432 {{0, 0, 0, 0}, "0.0.0.0"}, | 432 {{0, 0, 0, 0}, "0.0.0.0"}, |
433 {{127, 0, 0, 1}, "127.0.0.1"}, | 433 {{127, 0, 0, 1}, "127.0.0.1"}, |
434 {{192, 168, 0, 1}, "192.168.0.1"}, | 434 {{192, 168, 0, 1}, "192.168.0.1"}, |
435 }; | 435 }; |
436 | 436 |
437 for (size_t i = 0; i < arraysize(tests); ++i) { | 437 for (size_t i = 0; i < arraysize(tests); ++i) { |
438 SockaddrStorage storage; | 438 SockaddrStorage storage; |
439 MakeIPv4Address(tests[i].addr, 80, &storage); | 439 MakeIPv4Address(tests[i].addr, 80, &storage); |
440 std::string result = NetAddressToString(storage.addr, storage.addr_len); | 440 std::string result = NetAddressToString(storage.addr, storage.addr_len); |
441 EXPECT_EQ(std::string(tests[i].result), result); | 441 EXPECT_EQ(std::string(tests[i].result), result); |
442 } | 442 } |
443 } | 443 } |
444 | 444 |
445 TEST(NetUtilTest, NetAddressToString_IPv6) { | 445 TEST(NetUtilTest, NetAddressToString_IPv6) { |
446 const struct { | 446 const struct { |
447 uint8 addr[16]; | 447 uint8 addr[16]; |
448 const char* result; | 448 const char* const result; |
449 } tests[] = { | 449 } tests[] = { |
450 {{0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, 0xFE, 0xDC, 0xBA, | 450 {{0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, 0xFE, 0xDC, 0xBA, |
451 0x98, 0x76, 0x54, 0x32, 0x10}, | 451 0x98, 0x76, 0x54, 0x32, 0x10}, |
452 "fedc:ba98:7654:3210:fedc:ba98:7654:3210"}, | 452 "fedc:ba98:7654:3210:fedc:ba98:7654:3210"}, |
453 }; | 453 }; |
454 | 454 |
455 for (size_t i = 0; i < arraysize(tests); ++i) { | 455 for (size_t i = 0; i < arraysize(tests); ++i) { |
456 SockaddrStorage storage; | 456 SockaddrStorage storage; |
457 MakeIPv6Address(tests[i].addr, 80, &storage); | 457 MakeIPv6Address(tests[i].addr, 80, &storage); |
458 EXPECT_EQ(std::string(tests[i].result), | 458 EXPECT_EQ(std::string(tests[i].result), |
(...skipping 28 matching lines...) Expand all Loading... |
487 TEST(NetUtilTest, GetHostName) { | 487 TEST(NetUtilTest, GetHostName) { |
488 // We can't check the result of GetHostName() directly, since the result | 488 // We can't check the result of GetHostName() directly, since the result |
489 // will differ across machines. Our goal here is to simply exercise the | 489 // will differ across machines. Our goal here is to simply exercise the |
490 // code path, and check that things "look about right". | 490 // code path, and check that things "look about right". |
491 std::string hostname = GetHostName(); | 491 std::string hostname = GetHostName(); |
492 EXPECT_FALSE(hostname.empty()); | 492 EXPECT_FALSE(hostname.empty()); |
493 } | 493 } |
494 | 494 |
495 TEST(NetUtilTest, SimplifyUrlForRequest) { | 495 TEST(NetUtilTest, SimplifyUrlForRequest) { |
496 struct { | 496 struct { |
497 const char* input_url; | 497 const char* const input_url; |
498 const char* expected_simplified_url; | 498 const char* const expected_simplified_url; |
499 } tests[] = { | 499 } tests[] = { |
500 { | 500 { |
501 // Reference section should be stripped. | 501 // Reference section should be stripped. |
502 "http://www.google.com:78/foobar?query=1#hash", | 502 "http://www.google.com:78/foobar?query=1#hash", |
503 "http://www.google.com:78/foobar?query=1", | 503 "http://www.google.com:78/foobar?query=1", |
504 }, | 504 }, |
505 { | 505 { |
506 // Reference section can itself contain #. | 506 // Reference section can itself contain #. |
507 "http://192.168.0.1?query=1#hash#10#11#13#14", | 507 "http://192.168.0.1?query=1#hash#10#11#13#14", |
508 "http://192.168.0.1?query=1", | 508 "http://192.168.0.1?query=1", |
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
654 IPAddressNumber ipv4mapped_number; | 654 IPAddressNumber ipv4mapped_number; |
655 EXPECT_TRUE(ParseIPLiteralToNumber("::ffff:0101:1", &ipv4mapped_number)); | 655 EXPECT_TRUE(ParseIPLiteralToNumber("::ffff:0101:1", &ipv4mapped_number)); |
656 IPAddressNumber expected; | 656 IPAddressNumber expected; |
657 EXPECT_TRUE(ParseIPLiteralToNumber("1.1.0.1", &expected)); | 657 EXPECT_TRUE(ParseIPLiteralToNumber("1.1.0.1", &expected)); |
658 IPAddressNumber result = ConvertIPv4MappedToIPv4(ipv4mapped_number); | 658 IPAddressNumber result = ConvertIPv4MappedToIPv4(ipv4mapped_number); |
659 EXPECT_EQ(expected, result); | 659 EXPECT_EQ(expected, result); |
660 } | 660 } |
661 | 661 |
662 // Test parsing invalid CIDR notation literals. | 662 // Test parsing invalid CIDR notation literals. |
663 TEST(NetUtilTest, ParseCIDRBlock_Invalid) { | 663 TEST(NetUtilTest, ParseCIDRBlock_Invalid) { |
664 const char* bad_literals[] = { | 664 const char* const bad_literals[] = { |
665 "foobar", | 665 "foobar", |
666 "", | 666 "", |
667 "192.168.0.1", | 667 "192.168.0.1", |
668 "::1", | 668 "::1", |
669 "/", | 669 "/", |
670 "/1", | 670 "/1", |
671 "1", | 671 "1", |
672 "192.168.1.1/-1", | 672 "192.168.1.1/-1", |
673 "192.168.1.1/33", | 673 "192.168.1.1/33", |
674 "::1/-3", | 674 "::1/-3", |
(...skipping 20 matching lines...) Expand all Loading... |
695 EXPECT_TRUE(ParseCIDRBlock("192.168.0.1/11", | 695 EXPECT_TRUE(ParseCIDRBlock("192.168.0.1/11", |
696 &ip_number, | 696 &ip_number, |
697 &prefix_length_in_bits)); | 697 &prefix_length_in_bits)); |
698 | 698 |
699 EXPECT_EQ("192,168,0,1", DumpIPNumber(ip_number)); | 699 EXPECT_EQ("192,168,0,1", DumpIPNumber(ip_number)); |
700 EXPECT_EQ(11u, prefix_length_in_bits); | 700 EXPECT_EQ(11u, prefix_length_in_bits); |
701 } | 701 } |
702 | 702 |
703 TEST(NetUtilTest, IPNumberMatchesPrefix) { | 703 TEST(NetUtilTest, IPNumberMatchesPrefix) { |
704 struct { | 704 struct { |
705 const char* cidr_literal; | 705 const char* const cidr_literal; |
706 const char* ip_literal; | 706 const char* const ip_literal; |
707 bool expected_to_match; | 707 bool expected_to_match; |
708 } tests[] = { | 708 } tests[] = { |
709 // IPv4 prefix with IPv4 inputs. | 709 // IPv4 prefix with IPv4 inputs. |
710 { | 710 { |
711 "10.10.1.32/27", | 711 "10.10.1.32/27", |
712 "10.10.1.44", | 712 "10.10.1.44", |
713 true | 713 true |
714 }, | 714 }, |
715 { | 715 { |
716 "10.10.1.32/27", | 716 "10.10.1.32/27", |
(...skipping 693 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1410 TEST(NetUtilTest, SetWifiOptionsTest) { | 1410 TEST(NetUtilTest, SetWifiOptionsTest) { |
1411 TryChangeWifiOptions(0); | 1411 TryChangeWifiOptions(0); |
1412 TryChangeWifiOptions(WIFI_OPTIONS_DISABLE_SCAN); | 1412 TryChangeWifiOptions(WIFI_OPTIONS_DISABLE_SCAN); |
1413 TryChangeWifiOptions(WIFI_OPTIONS_MEDIA_STREAMING_MODE); | 1413 TryChangeWifiOptions(WIFI_OPTIONS_MEDIA_STREAMING_MODE); |
1414 TryChangeWifiOptions(WIFI_OPTIONS_DISABLE_SCAN | | 1414 TryChangeWifiOptions(WIFI_OPTIONS_DISABLE_SCAN | |
1415 WIFI_OPTIONS_MEDIA_STREAMING_MODE); | 1415 WIFI_OPTIONS_MEDIA_STREAMING_MODE); |
1416 } | 1416 } |
1417 | 1417 |
1418 struct NonUniqueNameTestData { | 1418 struct NonUniqueNameTestData { |
1419 bool is_unique; | 1419 bool is_unique; |
1420 const char* hostname; | 1420 const char* const hostname; |
1421 }; | 1421 }; |
1422 | 1422 |
1423 // Google Test pretty-printer. | 1423 // Google Test pretty-printer. |
1424 void PrintTo(const NonUniqueNameTestData& data, std::ostream* os) { | 1424 void PrintTo(const NonUniqueNameTestData& data, std::ostream* os) { |
1425 ASSERT_TRUE(data.hostname); | 1425 ASSERT_TRUE(data.hostname); |
1426 *os << " hostname: " << testing::PrintToString(data.hostname) | 1426 *os << " hostname: " << testing::PrintToString(data.hostname) |
1427 << "; is_unique: " << testing::PrintToString(data.is_unique); | 1427 << "; is_unique: " << testing::PrintToString(data.is_unique); |
1428 } | 1428 } |
1429 | 1429 |
1430 const NonUniqueNameTestData kNonUniqueNameTestData[] = { | 1430 const NonUniqueNameTestData kNonUniqueNameTestData[] = { |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1489 TEST_P(NetUtilNonUniqueNameTest, IsHostnameNonUnique) { | 1489 TEST_P(NetUtilNonUniqueNameTest, IsHostnameNonUnique) { |
1490 const NonUniqueNameTestData& test_data = GetParam(); | 1490 const NonUniqueNameTestData& test_data = GetParam(); |
1491 | 1491 |
1492 EXPECT_EQ(test_data.is_unique, IsUnique(test_data.hostname)); | 1492 EXPECT_EQ(test_data.is_unique, IsUnique(test_data.hostname)); |
1493 } | 1493 } |
1494 | 1494 |
1495 INSTANTIATE_TEST_CASE_P(, NetUtilNonUniqueNameTest, | 1495 INSTANTIATE_TEST_CASE_P(, NetUtilNonUniqueNameTest, |
1496 testing::ValuesIn(kNonUniqueNameTestData)); | 1496 testing::ValuesIn(kNonUniqueNameTestData)); |
1497 | 1497 |
1498 } // namespace net | 1498 } // namespace net |
OLD | NEW |