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

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

Issue 7011044: Add a command line option to turn off retry attempts to resolve host (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 7 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
« no previous file with comments | « net/base/host_resolver_impl.cc ('k') | net/base/mock_host_resolver.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 <string> 7 #include <string>
8 8
9 #include "base/compiler_specific.h" 9 #include "base/compiler_specific.h"
10 #include "base/memory/ref_counted.h" 10 #include "base/memory/ref_counted.h"
(...skipping 23 matching lines...) Expand all
34 using base::TimeTicks; 34 using base::TimeTicks;
35 35
36 HostCache* CreateDefaultCache() { 36 HostCache* CreateDefaultCache() {
37 return new HostCache( 37 return new HostCache(
38 100, // max cache entries. 38 100, // max cache entries.
39 base::TimeDelta::FromMinutes(1), 39 base::TimeDelta::FromMinutes(1),
40 base::TimeDelta::FromSeconds(0)); 40 base::TimeDelta::FromSeconds(0));
41 } 41 }
42 42
43 static const size_t kMaxJobs = 10u; 43 static const size_t kMaxJobs = 10u;
44 static const size_t kMaxRetryAttempts = 4u;
44 45
45 HostResolverImpl* CreateHostResolverImpl(HostResolverProc* resolver_proc) { 46 HostResolverImpl* CreateHostResolverImpl(HostResolverProc* resolver_proc) {
46 return new HostResolverImpl(resolver_proc, CreateDefaultCache(), kMaxJobs, 47 return new HostResolverImpl(resolver_proc, CreateDefaultCache(), kMaxJobs,
47 NULL); 48 kMaxRetryAttempts, NULL);
48 } 49 }
49 50
50 // Helper to create a HostResolver::RequestInfo. 51 // Helper to create a HostResolver::RequestInfo.
51 HostResolver::RequestInfo CreateResolverRequest( 52 HostResolver::RequestInfo CreateResolverRequest(
52 const std::string& hostname, 53 const std::string& hostname,
53 RequestPriority priority) { 54 RequestPriority priority) {
54 HostResolver::RequestInfo info(HostPortPair(hostname, 80)); 55 HostResolver::RequestInfo info(HostPortPair(hostname, 80));
55 info.set_priority(priority); 56 info.set_priority(priority);
56 return info; 57 return info;
57 } 58 }
(...skipping 386 matching lines...) Expand 10 before | Expand all | Expand 10 after
444 scoped_refptr<WaitingHostResolverProc> resolver_proc( 445 scoped_refptr<WaitingHostResolverProc> resolver_proc(
445 new WaitingHostResolverProc(NULL)); 446 new WaitingHostResolverProc(NULL));
446 447
447 CapturingNetLog net_log(CapturingNetLog::kUnbounded); 448 CapturingNetLog net_log(CapturingNetLog::kUnbounded);
448 CapturingBoundNetLog log(CapturingNetLog::kUnbounded); 449 CapturingBoundNetLog log(CapturingNetLog::kUnbounded);
449 { 450 {
450 scoped_ptr<HostResolver> host_resolver( 451 scoped_ptr<HostResolver> host_resolver(
451 new HostResolverImpl(resolver_proc, 452 new HostResolverImpl(resolver_proc,
452 CreateDefaultCache(), 453 CreateDefaultCache(),
453 kMaxJobs, 454 kMaxJobs,
455 kMaxRetryAttempts,
454 &net_log)); 456 &net_log));
455 AddressList addrlist; 457 AddressList addrlist;
456 const int kPortnum = 80; 458 const int kPortnum = 80;
457 459
458 HostResolver::RequestInfo info(HostPortPair("just.testing", kPortnum)); 460 HostResolver::RequestInfo info(HostPortPair("just.testing", kPortnum));
459 int err = host_resolver->Resolve(info, &addrlist, &callback_, NULL, 461 int err = host_resolver->Resolve(info, &addrlist, &callback_, NULL,
460 log.bound()); 462 log.bound());
461 EXPECT_EQ(ERR_IO_PENDING, err); 463 EXPECT_EQ(ERR_IO_PENDING, err);
462 464
463 // Make sure we will exit the queue even when callback is not called. 465 // Make sure we will exit the queue even when callback is not called.
(...skipping 426 matching lines...) Expand 10 before | Expand all | Expand 10 after
890 892
891 TEST_F(HostResolverImplTest, StartWithinCallback) { 893 TEST_F(HostResolverImplTest, StartWithinCallback) {
892 // Use a capturing resolver_proc, since the verifier needs to know what calls 894 // Use a capturing resolver_proc, since the verifier needs to know what calls
893 // reached Resolver(). Also, the capturing resolver_proc is initially 895 // reached Resolver(). Also, the capturing resolver_proc is initially
894 // blocked. 896 // blocked.
895 scoped_refptr<CapturingHostResolverProc> resolver_proc( 897 scoped_refptr<CapturingHostResolverProc> resolver_proc(
896 new CapturingHostResolverProc(NULL)); 898 new CapturingHostResolverProc(NULL));
897 899
898 // Turn off caching for this host resolver. 900 // Turn off caching for this host resolver.
899 scoped_ptr<HostResolver> host_resolver( 901 scoped_ptr<HostResolver> host_resolver(
900 new HostResolverImpl(resolver_proc, NULL, kMaxJobs, NULL)); 902 new HostResolverImpl(resolver_proc, NULL, kMaxJobs, kMaxRetryAttempts,
903 NULL));
901 904
902 // The class will receive callbacks for when each resolve completes. It 905 // The class will receive callbacks for when each resolve completes. It
903 // checks that the right things happened. 906 // checks that the right things happened.
904 StartWithinCallbackVerifier verifier; 907 StartWithinCallbackVerifier verifier;
905 908
906 // Start 4 requests, duplicating hosts "a". Since the resolver_proc is 909 // Start 4 requests, duplicating hosts "a". Since the resolver_proc is
907 // blocked, these should all pile up until we signal it. 910 // blocked, these should all pile up until we signal it.
908 911
909 ResolveRequest req1(host_resolver.get(), "a", 80, &verifier); 912 ResolveRequest req1(host_resolver.get(), "a", 80, &verifier);
910 ResolveRequest req2(host_resolver.get(), "a", 81, &verifier); 913 ResolveRequest req2(host_resolver.get(), "a", 81, &verifier);
(...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after
1190 EXPECT_EQ(2U, observer.cancel_log.size()); 1193 EXPECT_EQ(2U, observer.cancel_log.size());
1191 1194
1192 HostResolver::RequestInfo info(HostPortPair("host2", 60)); 1195 HostResolver::RequestInfo info(HostPortPair("host2", 60));
1193 EXPECT_TRUE(observer.cancel_log[1] == 1196 EXPECT_TRUE(observer.cancel_log[1] ==
1194 CapturingObserver::StartOrCancelEntry(1, info)); 1197 CapturingObserver::StartOrCancelEntry(1, info));
1195 } 1198 }
1196 1199
1197 // Test that IP address changes flush the cache. 1200 // Test that IP address changes flush the cache.
1198 TEST_F(HostResolverImplTest, FlushCacheOnIPAddressChange) { 1201 TEST_F(HostResolverImplTest, FlushCacheOnIPAddressChange) {
1199 scoped_ptr<HostResolver> host_resolver( 1202 scoped_ptr<HostResolver> host_resolver(
1200 new HostResolverImpl(NULL, CreateDefaultCache(), kMaxJobs, NULL)); 1203 new HostResolverImpl(NULL, CreateDefaultCache(), kMaxJobs,
1204 kMaxRetryAttempts, NULL));
1201 1205
1202 AddressList addrlist; 1206 AddressList addrlist;
1203 1207
1204 // Resolve "host1". 1208 // Resolve "host1".
1205 HostResolver::RequestInfo info1(HostPortPair("host1", 70)); 1209 HostResolver::RequestInfo info1(HostPortPair("host1", 70));
1206 TestCompletionCallback callback; 1210 TestCompletionCallback callback;
1207 int rv = host_resolver->Resolve(info1, &addrlist, &callback, NULL, 1211 int rv = host_resolver->Resolve(info1, &addrlist, &callback, NULL,
1208 BoundNetLog()); 1212 BoundNetLog());
1209 EXPECT_EQ(ERR_IO_PENDING, rv); 1213 EXPECT_EQ(ERR_IO_PENDING, rv);
1210 EXPECT_EQ(OK, callback.WaitForResult()); 1214 EXPECT_EQ(OK, callback.WaitForResult());
(...skipping 13 matching lines...) Expand all
1224 ASSERT_EQ(ERR_IO_PENDING, rv); // Should complete asynchronously. 1228 ASSERT_EQ(ERR_IO_PENDING, rv); // Should complete asynchronously.
1225 EXPECT_EQ(OK, callback.WaitForResult()); 1229 EXPECT_EQ(OK, callback.WaitForResult());
1226 } 1230 }
1227 1231
1228 // Test that IP address changes send ERR_ABORTED to pending requests. 1232 // Test that IP address changes send ERR_ABORTED to pending requests.
1229 TEST_F(HostResolverImplTest, AbortOnIPAddressChanged) { 1233 TEST_F(HostResolverImplTest, AbortOnIPAddressChanged) {
1230 scoped_refptr<WaitingHostResolverProc> resolver_proc( 1234 scoped_refptr<WaitingHostResolverProc> resolver_proc(
1231 new WaitingHostResolverProc(NULL)); 1235 new WaitingHostResolverProc(NULL));
1232 HostCache* cache = CreateDefaultCache(); 1236 HostCache* cache = CreateDefaultCache();
1233 scoped_ptr<HostResolver> host_resolver( 1237 scoped_ptr<HostResolver> host_resolver(
1234 new HostResolverImpl(resolver_proc, cache, kMaxJobs, NULL)); 1238 new HostResolverImpl(resolver_proc, cache, kMaxJobs, kMaxRetryAttempts,
1239 NULL));
1235 1240
1236 // Resolve "host1". 1241 // Resolve "host1".
1237 HostResolver::RequestInfo info(HostPortPair("host1", 70)); 1242 HostResolver::RequestInfo info(HostPortPair("host1", 70));
1238 TestCompletionCallback callback; 1243 TestCompletionCallback callback;
1239 AddressList addrlist; 1244 AddressList addrlist;
1240 int rv = host_resolver->Resolve(info, &addrlist, &callback, NULL, 1245 int rv = host_resolver->Resolve(info, &addrlist, &callback, NULL,
1241 BoundNetLog()); 1246 BoundNetLog());
1242 EXPECT_EQ(ERR_IO_PENDING, rv); 1247 EXPECT_EQ(ERR_IO_PENDING, rv);
1243 1248
1244 // Triggering an IP address change. 1249 // Triggering an IP address change.
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
1347 } 1352 }
1348 1353
1349 // Tests that when the maximum threads is set to 1, requests are dequeued 1354 // Tests that when the maximum threads is set to 1, requests are dequeued
1350 // in order of priority. 1355 // in order of priority.
1351 TEST_F(HostResolverImplTest, HigherPriorityRequestsStartedFirst) { 1356 TEST_F(HostResolverImplTest, HigherPriorityRequestsStartedFirst) {
1352 scoped_refptr<CapturingHostResolverProc> resolver_proc( 1357 scoped_refptr<CapturingHostResolverProc> resolver_proc(
1353 new CapturingHostResolverProc(NULL)); 1358 new CapturingHostResolverProc(NULL));
1354 1359
1355 // This HostResolverImpl will only allow 1 outstanding resolve at a time. 1360 // This HostResolverImpl will only allow 1 outstanding resolve at a time.
1356 size_t kMaxJobs = 1u; 1361 size_t kMaxJobs = 1u;
1362 const size_t kRetryAttempts = 0u;
1357 scoped_ptr<HostResolver> host_resolver( 1363 scoped_ptr<HostResolver> host_resolver(
1358 new HostResolverImpl(resolver_proc, CreateDefaultCache(), kMaxJobs, 1364 new HostResolverImpl(resolver_proc, CreateDefaultCache(), kMaxJobs,
1359 NULL)); 1365 kRetryAttempts, NULL));
1360 1366
1361 CapturingObserver observer; 1367 CapturingObserver observer;
1362 host_resolver->AddObserver(&observer); 1368 host_resolver->AddObserver(&observer);
1363 1369
1364 // Note that at this point the CapturingHostResolverProc is blocked, so any 1370 // Note that at this point the CapturingHostResolverProc is blocked, so any
1365 // requests we make will not complete. 1371 // requests we make will not complete.
1366 1372
1367 HostResolver::RequestInfo req[] = { 1373 HostResolver::RequestInfo req[] = {
1368 CreateResolverRequest("req0", LOW), 1374 CreateResolverRequest("req0", LOW),
1369 CreateResolverRequest("req1", MEDIUM), 1375 CreateResolverRequest("req1", MEDIUM),
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
1432 EXPECT_EQ("req6", observer.finish_log[7].info.hostname()); 1438 EXPECT_EQ("req6", observer.finish_log[7].info.hostname());
1433 } 1439 }
1434 1440
1435 // Try cancelling a request which has not been attached to a job yet. 1441 // Try cancelling a request which has not been attached to a job yet.
1436 TEST_F(HostResolverImplTest, CancelPendingRequest) { 1442 TEST_F(HostResolverImplTest, CancelPendingRequest) {
1437 scoped_refptr<CapturingHostResolverProc> resolver_proc( 1443 scoped_refptr<CapturingHostResolverProc> resolver_proc(
1438 new CapturingHostResolverProc(NULL)); 1444 new CapturingHostResolverProc(NULL));
1439 1445
1440 // This HostResolverImpl will only allow 1 outstanding resolve at a time. 1446 // This HostResolverImpl will only allow 1 outstanding resolve at a time.
1441 const size_t kMaxJobs = 1u; 1447 const size_t kMaxJobs = 1u;
1448 const size_t kRetryAttempts = 0u;
1442 scoped_ptr<HostResolver> host_resolver( 1449 scoped_ptr<HostResolver> host_resolver(
1443 new HostResolverImpl(resolver_proc, CreateDefaultCache(), kMaxJobs, 1450 new HostResolverImpl(resolver_proc, CreateDefaultCache(), kMaxJobs,
1444 NULL)); 1451 kRetryAttempts, NULL));
1445 1452
1446 // Note that at this point the CapturingHostResolverProc is blocked, so any 1453 // Note that at this point the CapturingHostResolverProc is blocked, so any
1447 // requests we make will not complete. 1454 // requests we make will not complete.
1448 1455
1449 HostResolver::RequestInfo req[] = { 1456 HostResolver::RequestInfo req[] = {
1450 CreateResolverRequest("req0", LOWEST), 1457 CreateResolverRequest("req0", LOWEST),
1451 CreateResolverRequest("req1", HIGHEST), // Will cancel. 1458 CreateResolverRequest("req1", HIGHEST), // Will cancel.
1452 CreateResolverRequest("req2", MEDIUM), 1459 CreateResolverRequest("req2", MEDIUM),
1453 CreateResolverRequest("req3", LOW), 1460 CreateResolverRequest("req3", LOW),
1454 CreateResolverRequest("req4", HIGHEST), // Will cancel. 1461 CreateResolverRequest("req4", HIGHEST), // Will cancel.
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
1495 EXPECT_EQ("req3", capture_list[3].hostname); 1502 EXPECT_EQ("req3", capture_list[3].hostname);
1496 } 1503 }
1497 1504
1498 // Test that when too many requests are enqueued, old ones start to be aborted. 1505 // Test that when too many requests are enqueued, old ones start to be aborted.
1499 TEST_F(HostResolverImplTest, QueueOverflow) { 1506 TEST_F(HostResolverImplTest, QueueOverflow) {
1500 scoped_refptr<CapturingHostResolverProc> resolver_proc( 1507 scoped_refptr<CapturingHostResolverProc> resolver_proc(
1501 new CapturingHostResolverProc(NULL)); 1508 new CapturingHostResolverProc(NULL));
1502 1509
1503 // This HostResolverImpl will only allow 1 outstanding resolve at a time. 1510 // This HostResolverImpl will only allow 1 outstanding resolve at a time.
1504 const size_t kMaxOutstandingJobs = 1u; 1511 const size_t kMaxOutstandingJobs = 1u;
1512 const size_t kRetryAttempts = 0u;
1505 scoped_ptr<HostResolverImpl> host_resolver(new HostResolverImpl( 1513 scoped_ptr<HostResolverImpl> host_resolver(new HostResolverImpl(
1506 resolver_proc, CreateDefaultCache(), kMaxOutstandingJobs, NULL)); 1514 resolver_proc, CreateDefaultCache(), kMaxOutstandingJobs, kRetryAttempts,
1515 NULL));
1507 1516
1508 // Only allow up to 3 requests to be enqueued at a time. 1517 // Only allow up to 3 requests to be enqueued at a time.
1509 const size_t kMaxPendingRequests = 3u; 1518 const size_t kMaxPendingRequests = 3u;
1510 host_resolver->SetPoolConstraints(HostResolverImpl::POOL_NORMAL, 1519 host_resolver->SetPoolConstraints(HostResolverImpl::POOL_NORMAL,
1511 kMaxOutstandingJobs, 1520 kMaxOutstandingJobs,
1512 kMaxPendingRequests); 1521 kMaxPendingRequests);
1513 1522
1514 // Note that at this point the CapturingHostResolverProc is blocked, so any 1523 // Note that at this point the CapturingHostResolverProc is blocked, so any
1515 // requests we make will not complete. 1524 // requests we make will not complete.
1516 1525
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
1573 } 1582 }
1574 1583
1575 // Tests that after changing the default AddressFamily to IPV4, requests 1584 // Tests that after changing the default AddressFamily to IPV4, requests
1576 // with UNSPECIFIED address family map to IPV4. 1585 // with UNSPECIFIED address family map to IPV4.
1577 TEST_F(HostResolverImplTest, SetDefaultAddressFamily_IPv4) { 1586 TEST_F(HostResolverImplTest, SetDefaultAddressFamily_IPv4) {
1578 scoped_refptr<CapturingHostResolverProc> resolver_proc( 1587 scoped_refptr<CapturingHostResolverProc> resolver_proc(
1579 new CapturingHostResolverProc(new EchoingHostResolverProc)); 1588 new CapturingHostResolverProc(new EchoingHostResolverProc));
1580 1589
1581 // This HostResolverImpl will only allow 1 outstanding resolve at a time. 1590 // This HostResolverImpl will only allow 1 outstanding resolve at a time.
1582 const size_t kMaxOutstandingJobs = 1u; 1591 const size_t kMaxOutstandingJobs = 1u;
1592 const size_t kRetryAttempts = 0u;
1583 scoped_ptr<HostResolverImpl> host_resolver(new HostResolverImpl( 1593 scoped_ptr<HostResolverImpl> host_resolver(new HostResolverImpl(
1584 resolver_proc, CreateDefaultCache(), kMaxOutstandingJobs, NULL)); 1594 resolver_proc, CreateDefaultCache(), kMaxOutstandingJobs, kRetryAttempts,
1595 NULL));
1585 1596
1586 host_resolver->SetDefaultAddressFamily(ADDRESS_FAMILY_IPV4); 1597 host_resolver->SetDefaultAddressFamily(ADDRESS_FAMILY_IPV4);
1587 1598
1588 // Note that at this point the CapturingHostResolverProc is blocked, so any 1599 // Note that at this point the CapturingHostResolverProc is blocked, so any
1589 // requests we make will not complete. 1600 // requests we make will not complete.
1590 1601
1591 HostResolver::RequestInfo req[] = { 1602 HostResolver::RequestInfo req[] = {
1592 CreateResolverRequestForAddressFamily("h1", MEDIUM, 1603 CreateResolverRequestForAddressFamily("h1", MEDIUM,
1593 ADDRESS_FAMILY_UNSPECIFIED), 1604 ADDRESS_FAMILY_UNSPECIFIED),
1594 CreateResolverRequestForAddressFamily("h1", MEDIUM, ADDRESS_FAMILY_IPV4), 1605 CreateResolverRequestForAddressFamily("h1", MEDIUM, ADDRESS_FAMILY_IPV4),
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
1641 1652
1642 // This is the exact same test as SetDefaultAddressFamily_IPv4, except the order 1653 // This is the exact same test as SetDefaultAddressFamily_IPv4, except the order
1643 // of requests 0 and 1 is flipped, and the default is set to IPv6 in place of 1654 // of requests 0 and 1 is flipped, and the default is set to IPv6 in place of
1644 // IPv4. 1655 // IPv4.
1645 TEST_F(HostResolverImplTest, SetDefaultAddressFamily_IPv6) { 1656 TEST_F(HostResolverImplTest, SetDefaultAddressFamily_IPv6) {
1646 scoped_refptr<CapturingHostResolverProc> resolver_proc( 1657 scoped_refptr<CapturingHostResolverProc> resolver_proc(
1647 new CapturingHostResolverProc(new EchoingHostResolverProc)); 1658 new CapturingHostResolverProc(new EchoingHostResolverProc));
1648 1659
1649 // This HostResolverImpl will only allow 1 outstanding resolve at a time. 1660 // This HostResolverImpl will only allow 1 outstanding resolve at a time.
1650 const size_t kMaxOutstandingJobs = 1u; 1661 const size_t kMaxOutstandingJobs = 1u;
1662 const size_t kRetryAttempts = 0u;
1651 scoped_ptr<HostResolverImpl> host_resolver(new HostResolverImpl( 1663 scoped_ptr<HostResolverImpl> host_resolver(new HostResolverImpl(
1652 resolver_proc, CreateDefaultCache(), kMaxOutstandingJobs, NULL)); 1664 resolver_proc, CreateDefaultCache(), kMaxOutstandingJobs, kRetryAttempts,
1665 NULL));
1653 1666
1654 host_resolver->SetDefaultAddressFamily(ADDRESS_FAMILY_IPV6); 1667 host_resolver->SetDefaultAddressFamily(ADDRESS_FAMILY_IPV6);
1655 1668
1656 // Note that at this point the CapturingHostResolverProc is blocked, so any 1669 // Note that at this point the CapturingHostResolverProc is blocked, so any
1657 // requests we make will not complete. 1670 // requests we make will not complete.
1658 1671
1659 HostResolver::RequestInfo req[] = { 1672 HostResolver::RequestInfo req[] = {
1660 CreateResolverRequestForAddressFamily("h1", MEDIUM, ADDRESS_FAMILY_IPV6), 1673 CreateResolverRequestForAddressFamily("h1", MEDIUM, ADDRESS_FAMILY_IPV6),
1661 CreateResolverRequestForAddressFamily("h1", MEDIUM, 1674 CreateResolverRequestForAddressFamily("h1", MEDIUM,
1662 ADDRESS_FAMILY_UNSPECIFIED), 1675 ADDRESS_FAMILY_UNSPECIFIED),
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
1706 EXPECT_EQ("192.2.104.2", NetAddressToString(addrlist[1].head())); 1719 EXPECT_EQ("192.2.104.2", NetAddressToString(addrlist[1].head()));
1707 EXPECT_EQ("192.2.104.1", NetAddressToString(addrlist[2].head())); 1720 EXPECT_EQ("192.2.104.1", NetAddressToString(addrlist[2].head()));
1708 } 1721 }
1709 1722
1710 // This tests that the default address family is respected for synchronous 1723 // This tests that the default address family is respected for synchronous
1711 // resolutions. 1724 // resolutions.
1712 TEST_F(HostResolverImplTest, SetDefaultAddressFamily_Synchronous) { 1725 TEST_F(HostResolverImplTest, SetDefaultAddressFamily_Synchronous) {
1713 scoped_refptr<CapturingHostResolverProc> resolver_proc( 1726 scoped_refptr<CapturingHostResolverProc> resolver_proc(
1714 new CapturingHostResolverProc(new EchoingHostResolverProc)); 1727 new CapturingHostResolverProc(new EchoingHostResolverProc));
1715 1728
1716 const size_t kMaxOutstandingJobs = 10u;
1717 scoped_ptr<HostResolverImpl> host_resolver(new HostResolverImpl( 1729 scoped_ptr<HostResolverImpl> host_resolver(new HostResolverImpl(
1718 resolver_proc, CreateDefaultCache(), kMaxOutstandingJobs, NULL)); 1730 resolver_proc, CreateDefaultCache(), kMaxJobs, kMaxRetryAttempts, NULL));
1719 1731
1720 host_resolver->SetDefaultAddressFamily(ADDRESS_FAMILY_IPV4); 1732 host_resolver->SetDefaultAddressFamily(ADDRESS_FAMILY_IPV4);
1721 1733
1722 // Unblock the resolver thread so the requests can run. 1734 // Unblock the resolver thread so the requests can run.
1723 resolver_proc->Signal(); 1735 resolver_proc->Signal();
1724 1736
1725 HostResolver::RequestInfo req[] = { 1737 HostResolver::RequestInfo req[] = {
1726 CreateResolverRequestForAddressFamily("b", MEDIUM, 1738 CreateResolverRequestForAddressFamily("b", MEDIUM,
1727 ADDRESS_FAMILY_UNSPECIFIED), 1739 ADDRESS_FAMILY_UNSPECIFIED),
1728 CreateResolverRequestForAddressFamily("b", MEDIUM, ADDRESS_FAMILY_IPV6), 1740 CreateResolverRequestForAddressFamily("b", MEDIUM, ADDRESS_FAMILY_IPV6),
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
1807 // word that a resolution has completed. The 3rd resolution attempt will try 1819 // word that a resolution has completed. The 3rd resolution attempt will try
1808 // to get done ASAP, and won't sleep.. 1820 // to get done ASAP, and won't sleep..
1809 int kAttemptNumberToResolve = 3; 1821 int kAttemptNumberToResolve = 3;
1810 int kTotalAttempts = 3; 1822 int kTotalAttempts = 3;
1811 1823
1812 scoped_refptr<LookupAttemptHostResolverProc> resolver_proc( 1824 scoped_refptr<LookupAttemptHostResolverProc> resolver_proc(
1813 new LookupAttemptHostResolverProc( 1825 new LookupAttemptHostResolverProc(
1814 NULL, kAttemptNumberToResolve, kTotalAttempts)); 1826 NULL, kAttemptNumberToResolve, kTotalAttempts));
1815 HostCache* cache = CreateDefaultCache(); 1827 HostCache* cache = CreateDefaultCache();
1816 scoped_ptr<HostResolverImpl> host_resolver( 1828 scoped_ptr<HostResolverImpl> host_resolver(
1817 new HostResolverImpl(resolver_proc, cache, kMaxJobs, NULL)); 1829 new HostResolverImpl(resolver_proc, cache, kMaxJobs, kMaxRetryAttempts,
1830 NULL));
1818 1831
1819 // Specify smaller interval for unresponsive_delay_ and 1832 // Specify smaller interval for unresponsive_delay_ for HostResolverImpl so
1820 // maximum_unresponsive_delay_ for HostResolverImpl so that unit test 1833 // that unit test runs faster. For example, this test finishes in 1.5 secs
1821 // runs faster. For example, this test finishes in 1.5 secs (500ms * 3). 1834 // (500ms * 3).
1822 TimeDelta kUnresponsiveTime = TimeDelta::FromMilliseconds(500); 1835 TimeDelta kUnresponsiveTime = TimeDelta::FromMilliseconds(500);
1823 TimeDelta kMaximumUnresponsiveTime = TimeDelta::FromMilliseconds(2500);
1824
1825 host_resolver->set_unresponsive_delay(kUnresponsiveTime); 1836 host_resolver->set_unresponsive_delay(kUnresponsiveTime);
1826 host_resolver->set_maximum_unresponsive_delay(kMaximumUnresponsiveTime);
1827 1837
1828 // Resolve "host1". 1838 // Resolve "host1".
1829 HostResolver::RequestInfo info(HostPortPair("host1", 70)); 1839 HostResolver::RequestInfo info(HostPortPair("host1", 70));
1830 TestCompletionCallback callback; 1840 TestCompletionCallback callback;
1831 AddressList addrlist; 1841 AddressList addrlist;
1832 int rv = host_resolver->Resolve(info, &addrlist, &callback, NULL, 1842 int rv = host_resolver->Resolve(info, &addrlist, &callback, NULL,
1833 BoundNetLog()); 1843 BoundNetLog());
1834 EXPECT_EQ(ERR_IO_PENDING, rv); 1844 EXPECT_EQ(ERR_IO_PENDING, rv);
1835 1845
1836 // Resolve returns -4 to indicate that 3rd attempt has resolved the host. 1846 // Resolve returns -4 to indicate that 3rd attempt has resolved the host.
1837 EXPECT_EQ(-4, callback.WaitForResult()); 1847 EXPECT_EQ(-4, callback.WaitForResult());
1838 1848
1839 resolver_proc->WaitForAllAttemptsToFinish(TimeDelta::FromMilliseconds(60000)); 1849 resolver_proc->WaitForAllAttemptsToFinish(TimeDelta::FromMilliseconds(60000));
1840 MessageLoop::current()->RunAllPending(); 1850 MessageLoop::current()->RunAllPending();
1841 1851
1842 EXPECT_EQ(resolver_proc->total_attempts_resolved(), kTotalAttempts); 1852 EXPECT_EQ(resolver_proc->total_attempts_resolved(), kTotalAttempts);
1843 EXPECT_EQ(resolver_proc->resolved_attempt_number(), kAttemptNumberToResolve); 1853 EXPECT_EQ(resolver_proc->resolved_attempt_number(), kAttemptNumberToResolve);
1844 } 1854 }
1845 1855
1846 // TODO(cbentzel): Test a mix of requests with different HostResolverFlags. 1856 // TODO(cbentzel): Test a mix of requests with different HostResolverFlags.
1847 1857
1848 } // namespace net 1858 } // namespace net
OLDNEW
« no previous file with comments | « net/base/host_resolver_impl.cc ('k') | net/base/mock_host_resolver.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698