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

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

Issue 2802015: Massively simplify the NetworkChangeNotifier infrastructure:... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 5 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) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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/message_loop.h" 10 #include "base/message_loop.h"
11 #include "base/ref_counted.h" 11 #include "base/ref_counted.h"
12 #include "base/string_util.h" 12 #include "base/string_util.h"
13 #include "net/base/address_list.h" 13 #include "net/base/address_list.h"
14 #include "net/base/completion_callback.h" 14 #include "net/base/completion_callback.h"
15 #include "net/base/mock_host_resolver.h" 15 #include "net/base/mock_host_resolver.h"
16 #include "net/base/mock_network_change_notifier.h"
17 #include "net/base/net_errors.h" 16 #include "net/base/net_errors.h"
18 #include "net/base/net_log_unittest.h" 17 #include "net/base/net_log_unittest.h"
19 #include "net/base/net_util.h" 18 #include "net/base/net_util.h"
20 #include "net/base/sys_addrinfo.h" 19 #include "net/base/sys_addrinfo.h"
21 #include "net/base/test_completion_callback.h" 20 #include "net/base/test_completion_callback.h"
22 #include "testing/gtest/include/gtest/gtest.h" 21 #include "testing/gtest/include/gtest/gtest.h"
23 22
24 // TODO(eroman): 23 // TODO(eroman):
25 // - Test mixing async with sync (in particular how does sync update the 24 // - Test mixing async with sync (in particular how does sync update the
26 // cache while an async is already pending). 25 // cache while an async is already pending).
27 26
28 namespace net { 27 namespace net {
29 28
30 namespace { 29 namespace {
31 30
32 HostCache* CreateDefaultCache() { 31 HostCache* CreateDefaultCache() {
33 return new HostCache( 32 return new HostCache(
34 100, // max cache entries. 33 100, // max cache entries.
35 base::TimeDelta::FromMinutes(1), 34 base::TimeDelta::FromMinutes(1),
36 base::TimeDelta::FromSeconds(0)); 35 base::TimeDelta::FromSeconds(0));
37 } 36 }
38 37
39 static const size_t kMaxJobs = 10u; 38 static const size_t kMaxJobs = 10u;
40 39
41 HostResolverImpl* CreateHostResolverImpl(HostResolverProc* resolver_proc) { 40 HostResolverImpl* CreateHostResolverImpl(HostResolverProc* resolver_proc) {
42 return new HostResolverImpl( 41 return new HostResolverImpl(resolver_proc, CreateDefaultCache(), kMaxJobs);
43 resolver_proc,
44 CreateDefaultCache(),
45 NULL, // network_change_notifier
46 kMaxJobs);
47 } 42 }
48 43
49 // Helper to create a HostResolver::RequestInfo. 44 // Helper to create a HostResolver::RequestInfo.
50 HostResolver::RequestInfo CreateResolverRequest( 45 HostResolver::RequestInfo CreateResolverRequest(
51 const std::string& hostname, 46 const std::string& hostname,
52 RequestPriority priority) { 47 RequestPriority priority) {
53 HostResolver::RequestInfo info(hostname, 80); 48 HostResolver::RequestInfo info(hostname, 80);
54 info.set_priority(priority); 49 info.set_priority(priority);
55 return info; 50 return info;
56 } 51 }
(...skipping 684 matching lines...) Expand 10 before | Expand all | Expand 10 after
741 736
742 TEST_F(HostResolverImplTest, StartWithinCallback) { 737 TEST_F(HostResolverImplTest, StartWithinCallback) {
743 // Use a capturing resolver_proc, since the verifier needs to know what calls 738 // Use a capturing resolver_proc, since the verifier needs to know what calls
744 // reached Resolver(). Also, the capturing resolver_proc is initially 739 // reached Resolver(). Also, the capturing resolver_proc is initially
745 // blocked. 740 // blocked.
746 scoped_refptr<CapturingHostResolverProc> resolver_proc = 741 scoped_refptr<CapturingHostResolverProc> resolver_proc =
747 new CapturingHostResolverProc(NULL); 742 new CapturingHostResolverProc(NULL);
748 743
749 // Turn off caching for this host resolver. 744 // Turn off caching for this host resolver.
750 scoped_refptr<HostResolver> host_resolver( 745 scoped_refptr<HostResolver> host_resolver(
751 new HostResolverImpl(resolver_proc, NULL, NULL, kMaxJobs)); 746 new HostResolverImpl(resolver_proc, NULL, kMaxJobs));
752 747
753 // The class will receive callbacks for when each resolve completes. It 748 // The class will receive callbacks for when each resolve completes. It
754 // checks that the right things happened. 749 // checks that the right things happened.
755 StartWithinCallbackVerifier verifier; 750 StartWithinCallbackVerifier verifier;
756 751
757 // Start 4 requests, duplicating hosts "a". Since the resolver_proc is 752 // Start 4 requests, duplicating hosts "a". Since the resolver_proc is
758 // blocked, these should all pile up until we signal it. 753 // blocked, these should all pile up until we signal it.
759 754
760 ResolveRequest req1(host_resolver, "a", 80, &verifier); 755 ResolveRequest req1(host_resolver, "a", 80, &verifier);
761 ResolveRequest req2(host_resolver, "a", 81, &verifier); 756 ResolveRequest req2(host_resolver, "a", 81, &verifier);
(...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after
1037 EXPECT_EQ(0U, observer.finish_log.size()); 1032 EXPECT_EQ(0U, observer.finish_log.size());
1038 EXPECT_EQ(2U, observer.cancel_log.size()); 1033 EXPECT_EQ(2U, observer.cancel_log.size());
1039 1034
1040 HostResolver::RequestInfo info("host2", 60); 1035 HostResolver::RequestInfo info("host2", 60);
1041 EXPECT_TRUE(observer.cancel_log[1] == 1036 EXPECT_TRUE(observer.cancel_log[1] ==
1042 CapturingObserver::StartOrCancelEntry(1, info)); 1037 CapturingObserver::StartOrCancelEntry(1, info));
1043 } 1038 }
1044 1039
1045 // Test that IP address changes flush the cache. 1040 // Test that IP address changes flush the cache.
1046 TEST_F(HostResolverImplTest, FlushCacheOnIPAddressChange) { 1041 TEST_F(HostResolverImplTest, FlushCacheOnIPAddressChange) {
1047 MockNetworkChangeNotifier mock_network_change_notifier;
1048 scoped_refptr<HostResolver> host_resolver( 1042 scoped_refptr<HostResolver> host_resolver(
1049 new HostResolverImpl(NULL, CreateDefaultCache(), 1043 new HostResolverImpl(NULL, CreateDefaultCache(), kMaxJobs));
1050 &mock_network_change_notifier,
1051 kMaxJobs));
1052 1044
1053 AddressList addrlist; 1045 AddressList addrlist;
1054 1046
1055 // Resolve "host1". 1047 // Resolve "host1".
1056 HostResolver::RequestInfo info1("host1", 70); 1048 HostResolver::RequestInfo info1("host1", 70);
1057 TestCompletionCallback callback; 1049 TestCompletionCallback callback;
1058 int rv = host_resolver->Resolve(info1, &addrlist, &callback, NULL, 1050 int rv = host_resolver->Resolve(info1, &addrlist, &callback, NULL,
1059 BoundNetLog()); 1051 BoundNetLog());
1060 EXPECT_EQ(ERR_IO_PENDING, rv); 1052 EXPECT_EQ(ERR_IO_PENDING, rv);
1061 EXPECT_EQ(OK, callback.WaitForResult()); 1053 EXPECT_EQ(OK, callback.WaitForResult());
1062 1054
1063 // Resolve "host1" again -- this time it will be served from cache, but it 1055 // Resolve "host1" again -- this time it will be served from cache, but it
1064 // should still notify of completion. 1056 // should still notify of completion.
1065 rv = host_resolver->Resolve(info1, &addrlist, &callback, NULL, BoundNetLog()); 1057 rv = host_resolver->Resolve(info1, &addrlist, &callback, NULL, BoundNetLog());
1066 ASSERT_EQ(OK, rv); // Should complete synchronously. 1058 ASSERT_EQ(OK, rv); // Should complete synchronously.
1067 1059
1068 // Flush cache by triggering an IP address change. 1060 // Flush cache by triggering an IP address change.
1069 mock_network_change_notifier.NotifyIPAddressChange(); 1061 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests();
1062 MessageLoop::current()->RunAllPending(); // Notification happens async.
1070 1063
1071 // Resolve "host1" again -- this time it won't be served from cache, so it 1064 // Resolve "host1" again -- this time it won't be served from cache, so it
1072 // will complete asynchronously. 1065 // will complete asynchronously.
1073 rv = host_resolver->Resolve(info1, &addrlist, &callback, NULL, BoundNetLog()); 1066 rv = host_resolver->Resolve(info1, &addrlist, &callback, NULL, BoundNetLog());
1074 ASSERT_EQ(ERR_IO_PENDING, rv); // Should complete asynchronously. 1067 ASSERT_EQ(ERR_IO_PENDING, rv); // Should complete asynchronously.
1075 EXPECT_EQ(OK, callback.WaitForResult()); 1068 EXPECT_EQ(OK, callback.WaitForResult());
1076 } 1069 }
1077 1070
1078 // Tests that when the maximum threads is set to 1, requests are dequeued 1071 // Tests that when the maximum threads is set to 1, requests are dequeued
1079 // in order of priority. 1072 // in order of priority.
1080 TEST_F(HostResolverImplTest, HigherPriorityRequestsStartedFirst) { 1073 TEST_F(HostResolverImplTest, HigherPriorityRequestsStartedFirst) {
1081 scoped_refptr<CapturingHostResolverProc> resolver_proc = 1074 scoped_refptr<CapturingHostResolverProc> resolver_proc =
1082 new CapturingHostResolverProc(NULL); 1075 new CapturingHostResolverProc(NULL);
1083 1076
1084 // This HostResolverImpl will only allow 1 outstanding resolve at a time. 1077 // This HostResolverImpl will only allow 1 outstanding resolve at a time.
1085 size_t kMaxJobs = 1u; 1078 size_t kMaxJobs = 1u;
1086 scoped_refptr<HostResolver> host_resolver( 1079 scoped_refptr<HostResolver> host_resolver(
1087 new HostResolverImpl(resolver_proc, CreateDefaultCache(), 1080 new HostResolverImpl(resolver_proc, CreateDefaultCache(), kMaxJobs));
1088 NULL, kMaxJobs));
1089 1081
1090 CapturingObserver observer; 1082 CapturingObserver observer;
1091 host_resolver->AddObserver(&observer); 1083 host_resolver->AddObserver(&observer);
1092 1084
1093 // Note that at this point the CapturingHostResolverProc is blocked, so any 1085 // Note that at this point the CapturingHostResolverProc is blocked, so any
1094 // requests we make will not complete. 1086 // requests we make will not complete.
1095 1087
1096 HostResolver::RequestInfo req[] = { 1088 HostResolver::RequestInfo req[] = {
1097 CreateResolverRequest("req0", LOW), 1089 CreateResolverRequest("req0", LOW),
1098 CreateResolverRequest("req1", MEDIUM), 1090 CreateResolverRequest("req1", MEDIUM),
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
1162 } 1154 }
1163 1155
1164 // Try cancelling a request which has not been attached to a job yet. 1156 // Try cancelling a request which has not been attached to a job yet.
1165 TEST_F(HostResolverImplTest, CancelPendingRequest) { 1157 TEST_F(HostResolverImplTest, CancelPendingRequest) {
1166 scoped_refptr<CapturingHostResolverProc> resolver_proc = 1158 scoped_refptr<CapturingHostResolverProc> resolver_proc =
1167 new CapturingHostResolverProc(NULL); 1159 new CapturingHostResolverProc(NULL);
1168 1160
1169 // This HostResolverImpl will only allow 1 outstanding resolve at a time. 1161 // This HostResolverImpl will only allow 1 outstanding resolve at a time.
1170 const size_t kMaxJobs = 1u; 1162 const size_t kMaxJobs = 1u;
1171 scoped_refptr<HostResolver> host_resolver( 1163 scoped_refptr<HostResolver> host_resolver(
1172 new HostResolverImpl(resolver_proc, CreateDefaultCache(), 1164 new HostResolverImpl(resolver_proc, CreateDefaultCache(), kMaxJobs));
1173 NULL, kMaxJobs));
1174 1165
1175 // Note that at this point the CapturingHostResolverProc is blocked, so any 1166 // Note that at this point the CapturingHostResolverProc is blocked, so any
1176 // requests we make will not complete. 1167 // requests we make will not complete.
1177 1168
1178 HostResolver::RequestInfo req[] = { 1169 HostResolver::RequestInfo req[] = {
1179 CreateResolverRequest("req0", LOWEST), 1170 CreateResolverRequest("req0", LOWEST),
1180 CreateResolverRequest("req1", HIGHEST), // Will cancel. 1171 CreateResolverRequest("req1", HIGHEST), // Will cancel.
1181 CreateResolverRequest("req2", MEDIUM), 1172 CreateResolverRequest("req2", MEDIUM),
1182 CreateResolverRequest("req3", LOW), 1173 CreateResolverRequest("req3", LOW),
1183 CreateResolverRequest("req4", HIGHEST), // Will cancel. 1174 CreateResolverRequest("req4", HIGHEST), // Will cancel.
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
1224 EXPECT_EQ("req3", capture_list[3].hostname); 1215 EXPECT_EQ("req3", capture_list[3].hostname);
1225 } 1216 }
1226 1217
1227 // Test that when too many requests are enqueued, old ones start to be aborted. 1218 // Test that when too many requests are enqueued, old ones start to be aborted.
1228 TEST_F(HostResolverImplTest, QueueOverflow) { 1219 TEST_F(HostResolverImplTest, QueueOverflow) {
1229 scoped_refptr<CapturingHostResolverProc> resolver_proc = 1220 scoped_refptr<CapturingHostResolverProc> resolver_proc =
1230 new CapturingHostResolverProc(NULL); 1221 new CapturingHostResolverProc(NULL);
1231 1222
1232 // This HostResolverImpl will only allow 1 outstanding resolve at a time. 1223 // This HostResolverImpl will only allow 1 outstanding resolve at a time.
1233 const size_t kMaxOutstandingJobs = 1u; 1224 const size_t kMaxOutstandingJobs = 1u;
1234 scoped_refptr<HostResolverImpl> host_resolver( 1225 scoped_refptr<HostResolverImpl> host_resolver(new HostResolverImpl(
1235 new HostResolverImpl(resolver_proc, CreateDefaultCache(), 1226 resolver_proc, CreateDefaultCache(), kMaxOutstandingJobs));
1236 NULL, kMaxOutstandingJobs));
1237 1227
1238 // Only allow up to 3 requests to be enqueued at a time. 1228 // Only allow up to 3 requests to be enqueued at a time.
1239 const size_t kMaxPendingRequests = 3u; 1229 const size_t kMaxPendingRequests = 3u;
1240 host_resolver->SetPoolConstraints(HostResolverImpl::POOL_NORMAL, 1230 host_resolver->SetPoolConstraints(HostResolverImpl::POOL_NORMAL,
1241 kMaxOutstandingJobs, 1231 kMaxOutstandingJobs,
1242 kMaxPendingRequests); 1232 kMaxPendingRequests);
1243 1233
1244 // Note that at this point the CapturingHostResolverProc is blocked, so any 1234 // Note that at this point the CapturingHostResolverProc is blocked, so any
1245 // requests we make will not complete. 1235 // requests we make will not complete.
1246 1236
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
1303 } 1293 }
1304 1294
1305 // Tests that after changing the default AddressFamily to IPV4, requests 1295 // Tests that after changing the default AddressFamily to IPV4, requests
1306 // with UNSPECIFIED address family map to IPV4. 1296 // with UNSPECIFIED address family map to IPV4.
1307 TEST_F(HostResolverImplTest, SetDefaultAddressFamily_IPv4) { 1297 TEST_F(HostResolverImplTest, SetDefaultAddressFamily_IPv4) {
1308 scoped_refptr<CapturingHostResolverProc> resolver_proc = 1298 scoped_refptr<CapturingHostResolverProc> resolver_proc =
1309 new CapturingHostResolverProc(new EchoingHostResolverProc); 1299 new CapturingHostResolverProc(new EchoingHostResolverProc);
1310 1300
1311 // This HostResolverImpl will only allow 1 outstanding resolve at a time. 1301 // This HostResolverImpl will only allow 1 outstanding resolve at a time.
1312 const size_t kMaxOutstandingJobs = 1u; 1302 const size_t kMaxOutstandingJobs = 1u;
1313 scoped_refptr<HostResolverImpl> host_resolver( 1303 scoped_refptr<HostResolverImpl> host_resolver(new HostResolverImpl(
1314 new HostResolverImpl(resolver_proc, CreateDefaultCache(), 1304 resolver_proc, CreateDefaultCache(), kMaxOutstandingJobs));
1315 NULL, kMaxOutstandingJobs));
1316 1305
1317 host_resolver->SetDefaultAddressFamily(ADDRESS_FAMILY_IPV4); 1306 host_resolver->SetDefaultAddressFamily(ADDRESS_FAMILY_IPV4);
1318 1307
1319 // Note that at this point the CapturingHostResolverProc is blocked, so any 1308 // Note that at this point the CapturingHostResolverProc is blocked, so any
1320 // requests we make will not complete. 1309 // requests we make will not complete.
1321 1310
1322 HostResolver::RequestInfo req[] = { 1311 HostResolver::RequestInfo req[] = {
1323 CreateResolverRequestForAddressFamily("h1", MEDIUM, 1312 CreateResolverRequestForAddressFamily("h1", MEDIUM,
1324 ADDRESS_FAMILY_UNSPECIFIED), 1313 ADDRESS_FAMILY_UNSPECIFIED),
1325 CreateResolverRequestForAddressFamily("h1", MEDIUM, ADDRESS_FAMILY_IPV4), 1314 CreateResolverRequestForAddressFamily("h1", MEDIUM, ADDRESS_FAMILY_IPV4),
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
1372 1361
1373 // This is the exact same test as SetDefaultAddressFamily_IPv4, except the order 1362 // This is the exact same test as SetDefaultAddressFamily_IPv4, except the order
1374 // of requests 0 and 1 is flipped, and the default is set to IPv6 in place of 1363 // of requests 0 and 1 is flipped, and the default is set to IPv6 in place of
1375 // IPv4. 1364 // IPv4.
1376 TEST_F(HostResolverImplTest, SetDefaultAddressFamily_IPv6) { 1365 TEST_F(HostResolverImplTest, SetDefaultAddressFamily_IPv6) {
1377 scoped_refptr<CapturingHostResolverProc> resolver_proc = 1366 scoped_refptr<CapturingHostResolverProc> resolver_proc =
1378 new CapturingHostResolverProc(new EchoingHostResolverProc); 1367 new CapturingHostResolverProc(new EchoingHostResolverProc);
1379 1368
1380 // This HostResolverImpl will only allow 1 outstanding resolve at a time. 1369 // This HostResolverImpl will only allow 1 outstanding resolve at a time.
1381 const size_t kMaxOutstandingJobs = 1u; 1370 const size_t kMaxOutstandingJobs = 1u;
1382 scoped_refptr<HostResolverImpl> host_resolver( 1371 scoped_refptr<HostResolverImpl> host_resolver(new HostResolverImpl(
1383 new HostResolverImpl(resolver_proc, CreateDefaultCache(), 1372 resolver_proc, CreateDefaultCache(), kMaxOutstandingJobs));
1384 NULL, kMaxOutstandingJobs));
1385 1373
1386 host_resolver->SetDefaultAddressFamily(ADDRESS_FAMILY_IPV6); 1374 host_resolver->SetDefaultAddressFamily(ADDRESS_FAMILY_IPV6);
1387 1375
1388 // Note that at this point the CapturingHostResolverProc is blocked, so any 1376 // Note that at this point the CapturingHostResolverProc is blocked, so any
1389 // requests we make will not complete. 1377 // requests we make will not complete.
1390 1378
1391 HostResolver::RequestInfo req[] = { 1379 HostResolver::RequestInfo req[] = {
1392 CreateResolverRequestForAddressFamily("h1", MEDIUM, ADDRESS_FAMILY_IPV6), 1380 CreateResolverRequestForAddressFamily("h1", MEDIUM, ADDRESS_FAMILY_IPV6),
1393 CreateResolverRequestForAddressFamily("h1", MEDIUM, 1381 CreateResolverRequestForAddressFamily("h1", MEDIUM,
1394 ADDRESS_FAMILY_UNSPECIFIED), 1382 ADDRESS_FAMILY_UNSPECIFIED),
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
1439 EXPECT_EQ("192.2.104.1", NetAddressToString(addrlist[2].head())); 1427 EXPECT_EQ("192.2.104.1", NetAddressToString(addrlist[2].head()));
1440 } 1428 }
1441 1429
1442 // This tests that the default address family is respected for synchronous 1430 // This tests that the default address family is respected for synchronous
1443 // resolutions. 1431 // resolutions.
1444 TEST_F(HostResolverImplTest, SetDefaultAddressFamily_Synchronous) { 1432 TEST_F(HostResolverImplTest, SetDefaultAddressFamily_Synchronous) {
1445 scoped_refptr<CapturingHostResolverProc> resolver_proc = 1433 scoped_refptr<CapturingHostResolverProc> resolver_proc =
1446 new CapturingHostResolverProc(new EchoingHostResolverProc); 1434 new CapturingHostResolverProc(new EchoingHostResolverProc);
1447 1435
1448 const size_t kMaxOutstandingJobs = 10u; 1436 const size_t kMaxOutstandingJobs = 10u;
1449 scoped_refptr<HostResolverImpl> host_resolver( 1437 scoped_refptr<HostResolverImpl> host_resolver(new HostResolverImpl(
1450 new HostResolverImpl(resolver_proc, CreateDefaultCache(), 1438 resolver_proc, CreateDefaultCache(), kMaxOutstandingJobs));
1451 NULL, kMaxOutstandingJobs));
1452 1439
1453 host_resolver->SetDefaultAddressFamily(ADDRESS_FAMILY_IPV4); 1440 host_resolver->SetDefaultAddressFamily(ADDRESS_FAMILY_IPV4);
1454 1441
1455 // Unblock the resolver thread so the requests can run. 1442 // Unblock the resolver thread so the requests can run.
1456 resolver_proc->Signal(); 1443 resolver_proc->Signal();
1457 1444
1458 HostResolver::RequestInfo req[] = { 1445 HostResolver::RequestInfo req[] = {
1459 CreateResolverRequestForAddressFamily("b", MEDIUM, 1446 CreateResolverRequestForAddressFamily("b", MEDIUM,
1460 ADDRESS_FAMILY_UNSPECIFIED), 1447 ADDRESS_FAMILY_UNSPECIFIED),
1461 CreateResolverRequestForAddressFamily("b", MEDIUM, ADDRESS_FAMILY_IPV6), 1448 CreateResolverRequestForAddressFamily("b", MEDIUM, ADDRESS_FAMILY_IPV6),
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
1493 EXPECT_EQ("192.1.98.2", NetAddressToString(addrlist[1].head())); 1480 EXPECT_EQ("192.1.98.2", NetAddressToString(addrlist[1].head()));
1494 EXPECT_EQ("192.1.98.1", NetAddressToString(addrlist[2].head())); 1481 EXPECT_EQ("192.1.98.1", NetAddressToString(addrlist[2].head()));
1495 EXPECT_EQ("192.1.98.1", NetAddressToString(addrlist[3].head())); 1482 EXPECT_EQ("192.1.98.1", NetAddressToString(addrlist[3].head()));
1496 } 1483 }
1497 1484
1498 // TODO(cbentzel): Test a mix of requests with different HostResolverFlags. 1485 // TODO(cbentzel): Test a mix of requests with different HostResolverFlags.
1499 1486
1500 } // namespace 1487 } // namespace
1501 1488
1502 } // namespace net 1489 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698