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

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

Issue 10442098: [net/dns] Resolve AF_UNSPEC on dual-stacked systems. Sort addresses according to RFC3484. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Working AddressSorterWin + measurements. Created 8 years, 6 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 | Annotate | Revision Log
OLDNEW
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/host_resolver_impl.h" 5 #include "net/base/host_resolver_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <string> 8 #include <string>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 25 matching lines...) Expand all
36 PrioritizedDispatcher::Limits DefaultLimits() { 36 PrioritizedDispatcher::Limits DefaultLimits() {
37 PrioritizedDispatcher::Limits limits(NUM_PRIORITIES, kMaxJobs); 37 PrioritizedDispatcher::Limits limits(NUM_PRIORITIES, kMaxJobs);
38 return limits; 38 return limits;
39 } 39 }
40 40
41 HostResolverImpl::ProcTaskParams DefaultParams( 41 HostResolverImpl::ProcTaskParams DefaultParams(
42 HostResolverProc* resolver_proc) { 42 HostResolverProc* resolver_proc) {
43 return HostResolverImpl::ProcTaskParams(resolver_proc, kMaxRetryAttempts); 43 return HostResolverImpl::ProcTaskParams(resolver_proc, kMaxRetryAttempts);
44 } 44 }
45 45
46 HostResolverImpl* CreateHostResolverImpl(HostResolverProc* resolver_proc) {
47 return new HostResolverImpl(
48 HostCache::CreateDefaultCache(),
49 DefaultLimits(),
50 DefaultParams(resolver_proc),
51 scoped_ptr<DnsConfigService>(NULL),
52 scoped_ptr<DnsClient>(NULL),
53 NULL);
54 }
55
56 HostResolverImpl* CreateHostResolverImplWithDnsClient(
57 HostResolverProc* resolver_proc,
58 scoped_ptr<DnsConfigService> dns_config_service) {
59 // Initially with empty DnsConfig. Use |dns_config_service| to update it.
60 return new HostResolverImpl(
61 HostCache::CreateDefaultCache(),
62 DefaultLimits(),
63 DefaultParams(resolver_proc),
64 dns_config_service.Pass(),
65 CreateMockDnsClient(DnsConfig()),
66 NULL);
67 }
68
69 // This HostResolverImpl will only allow 1 outstanding resolve at a time.
70 HostResolverImpl* CreateSerialHostResolverImpl(
71 HostResolverProc* resolver_proc) {
72 HostResolverImpl::ProcTaskParams params = DefaultParams(resolver_proc);
73 params.max_retry_attempts = 0u;
74
75 PrioritizedDispatcher::Limits limits(NUM_PRIORITIES, 1);
76
77 return new HostResolverImpl(
78 HostCache::CreateDefaultCache(),
79 limits,
80 params,
81 scoped_ptr<DnsConfigService>(NULL),
82 scoped_ptr<DnsClient>(NULL),
83 NULL);
84 }
85
86 // A HostResolverProc that pushes each host mapped into a list and allows 46 // A HostResolverProc that pushes each host mapped into a list and allows
87 // waiting for a specific number of requests. Unlike RuleBasedHostResolverProc 47 // waiting for a specific number of requests. Unlike RuleBasedHostResolverProc
88 // it never calls SystemHostResolverProc. By default resolves all hostnames to 48 // it never calls SystemHostResolverProc. By default resolves all hostnames to
89 // "127.0.0.1". After AddRule(), it resolves only names explicitly specified. 49 // "127.0.0.1". After AddRule(), it resolves only names explicitly specified.
90 class MockHostResolverProc : public HostResolverProc { 50 class MockHostResolverProc : public HostResolverProc {
91 public: 51 public:
92 struct ResolveKey { 52 struct ResolveKey {
93 ResolveKey(const std::string& hostname, AddressFamily address_family) 53 ResolveKey(const std::string& hostname, AddressFamily address_family)
94 : hostname(hostname), address_family(address_family) {} 54 : hostname(hostname), address_family(address_family) {}
95 bool operator<(const ResolveKey& other) const { 55 bool operator<(const ResolveKey& other) const {
(...skipping 344 matching lines...) Expand 10 before | Expand all | Expand 10 after
440 base::ConditionVariable all_done_; 400 base::ConditionVariable all_done_;
441 }; 401 };
442 402
443 } // namespace 403 } // namespace
444 404
445 class HostResolverImplTest : public testing::Test { 405 class HostResolverImplTest : public testing::Test {
446 public: 406 public:
447 static const int kDefaultPort = 80; 407 static const int kDefaultPort = 80;
448 408
449 HostResolverImplTest() 409 HostResolverImplTest()
450 : proc_(new MockHostResolverProc()), 410 : proc_(new MockHostResolverProc()) {
mmenke 2012/06/07 18:32:34 nit: Think this can all fit on one line now.
451 resolver_(CreateHostResolverImpl(proc_)) {
452 } 411 }
453 412
454 protected: 413 protected:
455 // A Request::Handler which is a proxy to the HostResolverImplTest fixture. 414 // A Request::Handler which is a proxy to the HostResolverImplTest fixture.
456 struct Handler : public Request::Handler { 415 struct Handler : public Request::Handler {
457 virtual ~Handler() {} 416 virtual ~Handler() {}
458 417
459 // Proxy functions so that classes derived from Handler can access them. 418 // Proxy functions so that classes derived from Handler can access them.
460 Request* CreateRequest(const HostResolver::RequestInfo& info) { 419 Request* CreateRequest(const HostResolver::RequestInfo& info) {
461 return test->CreateRequest(info); 420 return test->CreateRequest(info);
462 } 421 }
463 Request* CreateRequest(const std::string& hostname, int port) { 422 Request* CreateRequest(const std::string& hostname, int port) {
464 return test->CreateRequest(hostname, port); 423 return test->CreateRequest(hostname, port);
465 } 424 }
466 Request* CreateRequest(const std::string& hostname) { 425 Request* CreateRequest(const std::string& hostname) {
467 return test->CreateRequest(hostname); 426 return test->CreateRequest(hostname);
468 } 427 }
469 ScopedVector<Request>& requests() { return test->requests_; } 428 ScopedVector<Request>& requests() { return test->requests_; }
470 429
471 void DeleteResolver() { test->resolver_.reset(); } 430 void DeleteResolver() { test->resolver_.reset(); }
472 431
473 HostResolverImplTest* test; 432 HostResolverImplTest* test;
474 }; 433 };
475 434
435 void CreateResolver() {
436 resolver_.reset(new HostResolverImpl(
437 HostCache::CreateDefaultCache(),
438 DefaultLimits(),
439 DefaultParams(proc_),
440 scoped_ptr<DnsConfigService>(NULL),
441 scoped_ptr<DnsClient>(NULL),
442 NULL));
443 }
444
445 // This HostResolverImpl will only allow 1 outstanding resolve at a time and
446 // perform no retries.
476 void CreateSerialResolver() { 447 void CreateSerialResolver() {
477 resolver_.reset(CreateSerialHostResolverImpl(proc_)); 448 HostResolverImpl::ProcTaskParams params = DefaultParams(proc_);
449 params.max_retry_attempts = 0u;
450 PrioritizedDispatcher::Limits limits(NUM_PRIORITIES, 1);
451 resolver_.reset(new HostResolverImpl(
452 HostCache::CreateDefaultCache(),
453 limits,
454 params,
455 scoped_ptr<DnsConfigService>(NULL),
456 scoped_ptr<DnsClient>(NULL),
457 NULL));
478 } 458 }
479 459
480 // The Request will not be made until a call to |Resolve()|, and the Job will 460 // The Request will not be made until a call to |Resolve()|, and the Job will
481 // not start until released by |proc_->SignalXXX|. 461 // not start until released by |proc_->SignalXXX|.
482 Request* CreateRequest(const HostResolver::RequestInfo& info) { 462 Request* CreateRequest(const HostResolver::RequestInfo& info) {
483 Request* req = new Request(info, requests_.size(), resolver_.get(), 463 Request* req = new Request(info, requests_.size(), resolver_.get(),
484 handler_.get()); 464 handler_.get());
485 requests_.push_back(req); 465 requests_.push_back(req);
486 return req; 466 return req;
487 } 467 }
(...skipping 15 matching lines...) Expand all
503 } 483 }
504 484
505 Request* CreateRequest(const std::string& hostname, int port) { 485 Request* CreateRequest(const std::string& hostname, int port) {
506 return CreateRequest(hostname, port, MEDIUM); 486 return CreateRequest(hostname, port, MEDIUM);
507 } 487 }
508 488
509 Request* CreateRequest(const std::string& hostname) { 489 Request* CreateRequest(const std::string& hostname) {
510 return CreateRequest(hostname, kDefaultPort); 490 return CreateRequest(hostname, kDefaultPort);
511 } 491 }
512 492
513 void TearDown() OVERRIDE { 493 virtual void SetUp() OVERRIDE {
494 CreateResolver();
495 }
496
497 virtual void TearDown() OVERRIDE {
514 if (resolver_.get()) 498 if (resolver_.get())
515 EXPECT_EQ(0u, resolver_->num_running_jobs_for_tests()); 499 EXPECT_EQ(0u, resolver_->num_running_jobs_for_tests());
516 EXPECT_FALSE(proc_->HasBlockedRequests()); 500 EXPECT_FALSE(proc_->HasBlockedRequests());
517 } 501 }
518 502
519 void set_handler(Handler* handler) { 503 void set_handler(Handler* handler) {
520 handler_.reset(handler); 504 handler_.reset(handler);
521 handler_->test = this; 505 handler_->test = this;
522 } 506 }
523 507
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
566 EXPECT_EQ(ERR_IO_PENDING, req0->Resolve()); 550 EXPECT_EQ(ERR_IO_PENDING, req0->Resolve());
567 551
568 EXPECT_TRUE(proc_->WaitFor(1u)); 552 EXPECT_TRUE(proc_->WaitFor(1u));
569 553
570 // Resolver is destroyed while job is running on WorkerPool. 554 // Resolver is destroyed while job is running on WorkerPool.
571 resolver_.reset(); 555 resolver_.reset();
572 556
573 proc_->SignalAll(); 557 proc_->SignalAll();
574 558
575 // To ensure there was no spurious callback, complete with a new resolver. 559 // To ensure there was no spurious callback, complete with a new resolver.
576 resolver_.reset(CreateHostResolverImpl(proc_)); 560 CreateResolver();
577 Request* req1 = CreateRequest("just.testing", 80); 561 Request* req1 = CreateRequest("just.testing", 80);
578 EXPECT_EQ(ERR_IO_PENDING, req1->Resolve()); 562 EXPECT_EQ(ERR_IO_PENDING, req1->Resolve());
579 563
580 proc_->SignalMultiple(2u); 564 proc_->SignalMultiple(2u);
581 565
582 EXPECT_EQ(OK, req1->WaitForResult()); 566 EXPECT_EQ(OK, req1->WaitForResult());
583 567
584 // This request was canceled. 568 // This request was canceled.
585 EXPECT_FALSE(req0->completed()); 569 EXPECT_FALSE(req0->completed());
586 } 570 }
(...skipping 656 matching lines...) Expand 10 before | Expand all | Expand 10 after
1243 IPAddressNumber dns_ip; 1227 IPAddressNumber dns_ip;
1244 bool rv = ParseIPLiteralToNumber("192.168.1.0", &dns_ip); 1228 bool rv = ParseIPLiteralToNumber("192.168.1.0", &dns_ip);
1245 EXPECT_TRUE(rv); 1229 EXPECT_TRUE(rv);
1246 1230
1247 DnsConfig config; 1231 DnsConfig config;
1248 config.nameservers.push_back(IPEndPoint(dns_ip, dns_protocol::kDefaultPort)); 1232 config.nameservers.push_back(IPEndPoint(dns_ip, dns_protocol::kDefaultPort));
1249 EXPECT_TRUE(config.IsValid()); 1233 EXPECT_TRUE(config.IsValid());
1250 return config; 1234 return config;
1251 } 1235 }
1252 1236
1237 // Specialized fixture for tests of DnsTask.
1238 class HostResolverImplDnsTest : public HostResolverImplTest {
1239 protected:
1240 virtual void SetUp() OVERRIDE {
1241 config_service_ = new MockDnsConfigService();
1242 resolver_.reset(new HostResolverImpl(
1243 HostCache::CreateDefaultCache(),
1244 DefaultLimits(),
1245 DefaultParams(proc_),
1246 scoped_ptr<DnsConfigService>(config_service_),
1247 CreateMockDnsClient(DnsConfig()),
1248 NULL));
1249 }
1250
1251 void ChangeDnsConfig(const DnsConfig& config) {
1252 config_service_->ChangeConfig(config);
1253 config_service_->ChangeHosts(config.hosts);
1254 }
1255
1256 // Owned by |resolver_|.
1257 MockDnsConfigService* config_service_;
1258 };
1259
1253 // TODO(szym): Test AbortAllInProgressJobs due to DnsConfig change. 1260 // TODO(szym): Test AbortAllInProgressJobs due to DnsConfig change.
1254 1261
1255 // TODO(cbentzel): Test a mix of requests with different HostResolverFlags. 1262 // TODO(cbentzel): Test a mix of requests with different HostResolverFlags.
1256 1263
1257 // Test successful and fallback resolutions in HostResolverImpl::DnsTask. 1264 // Test successful and fallback resolutions in HostResolverImpl::DnsTask.
1258 TEST_F(HostResolverImplTest, DnsTask) { 1265 TEST_F(HostResolverImplDnsTest, DnsTask) {
1259 // Initially, there's DnsConfigService, but no DnsConfig. 1266 resolver_->SetDefaultAddressFamily(ADDRESS_FAMILY_IPV4);
1260 // Note, |config_service| will be owned by |resolver_|.
1261 MockDnsConfigService* config_service = new MockDnsConfigService();
1262 resolver_.reset(
1263 CreateHostResolverImplWithDnsClient(
1264 proc_,
1265 scoped_ptr<DnsConfigService>(config_service)));
1266 1267
1267 proc_->AddRuleForAllFamilies("er_succeed", "192.168.1.101"); 1268 proc_->AddRuleForAllFamilies("er_succeed", "192.168.1.101");
1268 proc_->AddRuleForAllFamilies("nx_succeed", "192.168.1.102"); 1269 proc_->AddRuleForAllFamilies("nx_succeed", "192.168.1.102");
1269 // All other hostnames will fail in proc_. 1270 // All other hostnames will fail in proc_.
1270 1271
1271 // Initially there is no config, so client should not be invoked. 1272 // Initially there is no config, so client should not be invoked.
1272 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("ok_fail", 80)->Resolve()); 1273 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("ok_fail", 80)->Resolve());
1273 proc_->SignalMultiple(requests_->size()); 1274 proc_->SignalMultiple(requests_->size());
1274 1275
1275 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, requests_[0]->WaitForResult()); 1276 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, requests_[0]->WaitForResult());
1276 1277
1277 DnsConfig config = CreateValidDnsConfig(); 1278 ChangeDnsConfig(CreateValidDnsConfig());
1278 config_service->ChangeHosts(config.hosts);
1279 config_service->ChangeConfig(config);
1280 1279
1281 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("ok_fail", 80)->Resolve()); 1280 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("ok_fail", 80)->Resolve());
1282 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("er_fail", 80)->Resolve()); 1281 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("er_fail", 80)->Resolve());
1283 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("nx_fail", 80)->Resolve()); 1282 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("nx_fail", 80)->Resolve());
1284 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("er_succeed", 80)->Resolve()); 1283 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("er_succeed", 80)->Resolve());
1285 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("nx_succeed", 80)->Resolve()); 1284 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("nx_succeed", 80)->Resolve());
1286 1285
1287 proc_->SignalMultiple(requests_.size()); 1286 proc_->SignalMultiple(requests_.size());
1288 1287
1289 for (size_t i = 0; i < requests_.size(); ++i) { 1288 for (size_t i = 0; i < requests_.size(); ++i) {
1290 EXPECT_NE(ERR_UNEXPECTED, requests_[i]->WaitForResult()) << 1; 1289 EXPECT_NE(ERR_UNEXPECTED, requests_[i]->WaitForResult()) << 1;
1291 } 1290 }
1292 1291
1293 EXPECT_EQ(OK, requests_[1]->result()); 1292 EXPECT_EQ(OK, requests_[1]->result());
1294 // Resolved by MockDnsClient. 1293 // Resolved by MockDnsClient.
1295 EXPECT_TRUE(requests_[1]->HasOneAddress("127.0.0.1", 80)); 1294 EXPECT_TRUE(requests_[1]->HasOneAddress("127.0.0.1", 80));
1296 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, requests_[2]->result()); 1295 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, requests_[2]->result());
1297 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, requests_[3]->result()); 1296 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, requests_[3]->result());
1298 EXPECT_EQ(OK, requests_[4]->result()); 1297 EXPECT_EQ(OK, requests_[4]->result());
1299 EXPECT_TRUE(requests_[4]->HasOneAddress("192.168.1.101", 80)); 1298 EXPECT_TRUE(requests_[4]->HasOneAddress("192.168.1.101", 80));
1300 EXPECT_EQ(OK, requests_[5]->result()); 1299 EXPECT_EQ(OK, requests_[5]->result());
1301 EXPECT_TRUE(requests_[5]->HasOneAddress("192.168.1.102", 80)); 1300 EXPECT_TRUE(requests_[5]->HasOneAddress("192.168.1.102", 80));
1302 } 1301 }
1303 1302
1304 TEST_F(HostResolverImplTest, ServeFromHosts) { 1303 TEST_F(HostResolverImplDnsTest, DnsTaskDual) {
1305 // Note, |config_service| will be owned by |resolver_|. 1304 ChangeDnsConfig(CreateValidDnsConfig());
1306 MockDnsConfigService* config_service = new MockDnsConfigService(); 1305 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("ok_fail", 80)->Resolve());
mmenke 2012/06/07 18:32:34 I think "ok_fail" is a somewhat strange name for a
1307 resolver_.reset(
1308 CreateHostResolverImplWithDnsClient(
1309 proc_,
1310 scoped_ptr<DnsConfigService>(config_service)));
1311 1306
1307 EXPECT_EQ(OK, requests_[0]->WaitForResult());
1308 EXPECT_TRUE(requests_[0]->HasAddress("127.0.0.1", 80));
1309 EXPECT_TRUE(requests_[0]->HasAddress("::1", 80));
1310 EXPECT_EQ(2u, requests_[0]->NumberOfAddresses());
1311 }
mmenke 2012/06/07 18:32:34 I'd like to see test where the MockDnsTransaction
1312
1313 TEST_F(HostResolverImplDnsTest, ServeFromHosts) {
1312 // Initially, use empty HOSTS file. 1314 // Initially, use empty HOSTS file.
1313 DnsConfig config = CreateValidDnsConfig(); 1315 ChangeDnsConfig(CreateValidDnsConfig());
1314 config_service->ChangeHosts(DnsHosts());
1315 config_service->ChangeConfig(config);
1316 1316
1317 proc_->AddRuleForAllFamilies("", "0.0.0.0"); // Default to failures. 1317 proc_->AddRuleForAllFamilies("", "0.0.0.0"); // Default to failures.
1318 proc_->SignalMultiple(1u); // For the first request which misses. 1318 proc_->SignalMultiple(1u); // For the first request which misses.
1319 1319
1320 Request* req0 = CreateRequest("er_ipv4", 80); 1320 Request* req0 = CreateRequest("er_ipv4", 80);
1321 EXPECT_EQ(ERR_IO_PENDING, req0->Resolve()); 1321 EXPECT_EQ(ERR_IO_PENDING, req0->Resolve());
1322 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, req0->WaitForResult()); 1322 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, req0->WaitForResult());
1323 1323
1324 IPAddressNumber local_ipv4, local_ipv6; 1324 IPAddressNumber local_ipv4, local_ipv6;
1325 ASSERT_TRUE(ParseIPLiteralToNumber("127.0.0.1", &local_ipv4)); 1325 ASSERT_TRUE(ParseIPLiteralToNumber("127.0.0.1", &local_ipv4));
1326 ASSERT_TRUE(ParseIPLiteralToNumber("::1", &local_ipv6)); 1326 ASSERT_TRUE(ParseIPLiteralToNumber("::1", &local_ipv6));
1327 1327
1328 DnsHosts hosts; 1328 DnsHosts hosts;
1329 hosts[DnsHostsKey("er_ipv4", ADDRESS_FAMILY_IPV4)] = local_ipv4; 1329 hosts[DnsHostsKey("er_ipv4", ADDRESS_FAMILY_IPV4)] = local_ipv4;
1330 hosts[DnsHostsKey("er_ipv6", ADDRESS_FAMILY_IPV6)] = local_ipv6; 1330 hosts[DnsHostsKey("er_ipv6", ADDRESS_FAMILY_IPV6)] = local_ipv6;
1331 hosts[DnsHostsKey("er_both", ADDRESS_FAMILY_IPV4)] = local_ipv4; 1331 hosts[DnsHostsKey("er_both", ADDRESS_FAMILY_IPV4)] = local_ipv4;
1332 hosts[DnsHostsKey("er_both", ADDRESS_FAMILY_IPV6)] = local_ipv6; 1332 hosts[DnsHostsKey("er_both", ADDRESS_FAMILY_IPV6)] = local_ipv6;
1333 1333
1334 // Update HOSTS file. 1334 // Update HOSTS file.
1335 config_service->ChangeConfig(config); 1335 config_service_->ChangeHosts(hosts);
1336 config_service->ChangeHosts(hosts);
1337 1336
1338 Request* req1 = CreateRequest("er_ipv4", 80); 1337 Request* req1 = CreateRequest("er_ipv4", 80);
1339 EXPECT_EQ(OK, req1->Resolve()); 1338 EXPECT_EQ(OK, req1->Resolve());
1340 EXPECT_TRUE(req1->HasOneAddress("127.0.0.1", 80)); 1339 EXPECT_TRUE(req1->HasOneAddress("127.0.0.1", 80));
1341 1340
1342 Request* req2 = CreateRequest("er_ipv6", 80); 1341 Request* req2 = CreateRequest("er_ipv6", 80);
1343 EXPECT_EQ(OK, req2->Resolve()); 1342 EXPECT_EQ(OK, req2->Resolve());
1344 EXPECT_TRUE(req2->HasOneAddress("::1", 80)); 1343 EXPECT_TRUE(req2->HasOneAddress("::1", 80));
1345 1344
1346 Request* req3 = CreateRequest("er_both", 80); 1345 Request* req3 = CreateRequest("er_both", 80);
(...skipping 10 matching lines...) Expand all
1357 EXPECT_EQ(OK, req5->Resolve()); 1356 EXPECT_EQ(OK, req5->Resolve());
1358 EXPECT_TRUE(req5->HasOneAddress("::1", 80)); 1357 EXPECT_TRUE(req5->HasOneAddress("::1", 80));
1359 1358
1360 // Request with upper case. 1359 // Request with upper case.
1361 Request* req6 = CreateRequest("er_IPV4", 80); 1360 Request* req6 = CreateRequest("er_IPV4", 80);
1362 EXPECT_EQ(OK, req6->Resolve()); 1361 EXPECT_EQ(OK, req6->Resolve());
1363 EXPECT_TRUE(req6->HasOneAddress("127.0.0.1", 80)); 1362 EXPECT_TRUE(req6->HasOneAddress("127.0.0.1", 80));
1364 } 1363 }
1365 1364
1366 } // namespace net 1365 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698