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

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

Issue 266243004: Clang format slam. Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 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
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/dns/host_resolver_impl.h" 5 #include "net/dns/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 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
49 // waiting for a specific number of requests. Unlike RuleBasedHostResolverProc 49 // waiting for a specific number of requests. Unlike RuleBasedHostResolverProc
50 // it never calls SystemHostResolverCall. By default resolves all hostnames to 50 // it never calls SystemHostResolverCall. By default resolves all hostnames to
51 // "127.0.0.1". After AddRule(), it resolves only names explicitly specified. 51 // "127.0.0.1". After AddRule(), it resolves only names explicitly specified.
52 class MockHostResolverProc : public HostResolverProc { 52 class MockHostResolverProc : public HostResolverProc {
53 public: 53 public:
54 struct ResolveKey { 54 struct ResolveKey {
55 ResolveKey(const std::string& hostname, AddressFamily address_family) 55 ResolveKey(const std::string& hostname, AddressFamily address_family)
56 : hostname(hostname), address_family(address_family) {} 56 : hostname(hostname), address_family(address_family) {}
57 bool operator<(const ResolveKey& other) const { 57 bool operator<(const ResolveKey& other) const {
58 return address_family < other.address_family || 58 return address_family < other.address_family ||
59 (address_family == other.address_family && hostname < other.hostname); 59 (address_family == other.address_family &&
60 hostname < other.hostname);
60 } 61 }
61 std::string hostname; 62 std::string hostname;
62 AddressFamily address_family; 63 AddressFamily address_family;
63 }; 64 };
64 65
65 typedef std::vector<ResolveKey> CaptureList; 66 typedef std::vector<ResolveKey> CaptureList;
66 67
67 MockHostResolverProc() 68 MockHostResolverProc()
68 : HostResolverProc(NULL), 69 : HostResolverProc(NULL),
69 num_requests_waiting_(0), 70 num_requests_waiting_(0),
70 num_slots_available_(0), 71 num_slots_available_(0),
71 requests_waiting_(&lock_), 72 requests_waiting_(&lock_),
72 slots_available_(&lock_) { 73 slots_available_(&lock_) {}
73 }
74 74
75 // Waits until |count| calls to |Resolve| are blocked. Returns false when 75 // Waits until |count| calls to |Resolve| are blocked. Returns false when
76 // timed out. 76 // timed out.
77 bool WaitFor(unsigned count) { 77 bool WaitFor(unsigned count) {
78 base::AutoLock lock(lock_); 78 base::AutoLock lock(lock_);
79 base::Time start_time = base::Time::Now(); 79 base::Time start_time = base::Time::Now();
80 while (num_requests_waiting_ < count) { 80 while (num_requests_waiting_ < count) {
81 requests_waiting_.TimedWait(TestTimeouts::action_timeout()); 81 requests_waiting_.TimedWait(TestTimeouts::action_timeout());
82 if (base::Time::Now() > start_time + TestTimeouts::action_timeout()) 82 if (base::Time::Now() > start_time + TestTimeouts::action_timeout())
83 return false; 83 return false;
84 } 84 }
85 return true; 85 return true;
86 } 86 }
87 87
88 // Signals |count| waiting calls to |Resolve|. First come first served. 88 // Signals |count| waiting calls to |Resolve|. First come first served.
89 void SignalMultiple(unsigned count) { 89 void SignalMultiple(unsigned count) {
90 base::AutoLock lock(lock_); 90 base::AutoLock lock(lock_);
91 num_slots_available_ += count; 91 num_slots_available_ += count;
92 slots_available_.Broadcast(); 92 slots_available_.Broadcast();
93 } 93 }
94 94
95 // Signals all waiting calls to |Resolve|. Beware of races. 95 // Signals all waiting calls to |Resolve|. Beware of races.
96 void SignalAll() { 96 void SignalAll() {
97 base::AutoLock lock(lock_); 97 base::AutoLock lock(lock_);
98 num_slots_available_ = num_requests_waiting_; 98 num_slots_available_ = num_requests_waiting_;
99 slots_available_.Broadcast(); 99 slots_available_.Broadcast();
100 } 100 }
101 101
102 void AddRule(const std::string& hostname, AddressFamily family, 102 void AddRule(const std::string& hostname,
103 AddressFamily family,
103 const AddressList& result) { 104 const AddressList& result) {
104 base::AutoLock lock(lock_); 105 base::AutoLock lock(lock_);
105 rules_[ResolveKey(hostname, family)] = result; 106 rules_[ResolveKey(hostname, family)] = result;
106 } 107 }
107 108
108 void AddRule(const std::string& hostname, AddressFamily family, 109 void AddRule(const std::string& hostname,
110 AddressFamily family,
109 const std::string& ip_list) { 111 const std::string& ip_list) {
110 AddressList result; 112 AddressList result;
111 int rv = ParseAddressList(ip_list, std::string(), &result); 113 int rv = ParseAddressList(ip_list, std::string(), &result);
112 DCHECK_EQ(OK, rv); 114 DCHECK_EQ(OK, rv);
113 AddRule(hostname, family, result); 115 AddRule(hostname, family, result);
114 } 116 }
115 117
116 void AddRuleForAllFamilies(const std::string& hostname, 118 void AddRuleForAllFamilies(const std::string& hostname,
117 const std::string& ip_list) { 119 const std::string& ip_list) {
118 AddressList result; 120 AddressList result;
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
171 std::map<ResolveKey, AddressList> rules_; 173 std::map<ResolveKey, AddressList> rules_;
172 CaptureList capture_list_; 174 CaptureList capture_list_;
173 unsigned num_requests_waiting_; 175 unsigned num_requests_waiting_;
174 unsigned num_slots_available_; 176 unsigned num_slots_available_;
175 base::ConditionVariable requests_waiting_; 177 base::ConditionVariable requests_waiting_;
176 base::ConditionVariable slots_available_; 178 base::ConditionVariable slots_available_;
177 179
178 DISALLOW_COPY_AND_ASSIGN(MockHostResolverProc); 180 DISALLOW_COPY_AND_ASSIGN(MockHostResolverProc);
179 }; 181 };
180 182
181 bool AddressListContains(const AddressList& list, const std::string& address, 183 bool AddressListContains(const AddressList& list,
184 const std::string& address,
182 int port) { 185 int port) {
183 IPAddressNumber ip; 186 IPAddressNumber ip;
184 bool rv = ParseIPLiteralToNumber(address, &ip); 187 bool rv = ParseIPLiteralToNumber(address, &ip);
185 DCHECK(rv); 188 DCHECK(rv);
186 return std::find(list.begin(), 189 return std::find(list.begin(), list.end(), IPEndPoint(ip, port)) !=
187 list.end(), 190 list.end();
188 IPEndPoint(ip, port)) != list.end();
189 } 191 }
190 192
191 // A wrapper for requests to a HostResolver. 193 // A wrapper for requests to a HostResolver.
192 class Request { 194 class Request {
193 public: 195 public:
194 // Base class of handlers to be executed on completion of requests. 196 // Base class of handlers to be executed on completion of requests.
195 struct Handler { 197 struct Handler {
196 virtual ~Handler() {} 198 virtual ~Handler() {}
197 virtual void Handle(Request* request) = 0; 199 virtual void Handle(Request* request) = 0;
198 }; 200 };
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
245 const AddressList& list() const { return list_; } 247 const AddressList& list() const { return list_; }
246 int result() const { return result_; } 248 int result() const { return result_; }
247 bool completed() const { return result_ != ERR_IO_PENDING; } 249 bool completed() const { return result_ != ERR_IO_PENDING; }
248 bool pending() const { return handle_ != NULL; } 250 bool pending() const { return handle_ != NULL; }
249 251
250 bool HasAddress(const std::string& address, int port) const { 252 bool HasAddress(const std::string& address, int port) const {
251 return AddressListContains(list_, address, port); 253 return AddressListContains(list_, address, port);
252 } 254 }
253 255
254 // Returns the number of addresses in |list_|. 256 // Returns the number of addresses in |list_|.
255 unsigned NumberOfAddresses() const { 257 unsigned NumberOfAddresses() const { return list_.size(); }
256 return list_.size();
257 }
258 258
259 bool HasOneAddress(const std::string& address, int port) const { 259 bool HasOneAddress(const std::string& address, int port) const {
260 return HasAddress(address, port) && (NumberOfAddresses() == 1u); 260 return HasAddress(address, port) && (NumberOfAddresses() == 1u);
261 } 261 }
262 262
263 // Returns ERR_UNEXPECTED if timed out. 263 // Returns ERR_UNEXPECTED if timed out.
264 int WaitForResult() { 264 int WaitForResult() {
265 if (completed()) 265 if (completed())
266 return result_; 266 return result_;
267 base::CancelableClosure closure(base::MessageLoop::QuitClosure()); 267 base::CancelableClosure closure(base::MessageLoop::QuitClosure());
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
317 public: 317 public:
318 LookupAttemptHostResolverProc(HostResolverProc* previous, 318 LookupAttemptHostResolverProc(HostResolverProc* previous,
319 int attempt_number_to_resolve, 319 int attempt_number_to_resolve,
320 int total_attempts) 320 int total_attempts)
321 : HostResolverProc(previous), 321 : HostResolverProc(previous),
322 attempt_number_to_resolve_(attempt_number_to_resolve), 322 attempt_number_to_resolve_(attempt_number_to_resolve),
323 current_attempt_number_(0), 323 current_attempt_number_(0),
324 total_attempts_(total_attempts), 324 total_attempts_(total_attempts),
325 total_attempts_resolved_(0), 325 total_attempts_resolved_(0),
326 resolved_attempt_number_(0), 326 resolved_attempt_number_(0),
327 all_done_(&lock_) { 327 all_done_(&lock_) {}
328 }
329 328
330 // Test harness will wait for all attempts to finish before checking the 329 // Test harness will wait for all attempts to finish before checking the
331 // results. 330 // results.
332 void WaitForAllAttemptsToFinish(const base::TimeDelta& wait_time) { 331 void WaitForAllAttemptsToFinish(const base::TimeDelta& wait_time) {
333 base::TimeTicks end_time = base::TimeTicks::Now() + wait_time; 332 base::TimeTicks end_time = base::TimeTicks::Now() + wait_time;
334 { 333 {
335 base::AutoLock auto_lock(lock_); 334 base::AutoLock auto_lock(lock_);
336 while (total_attempts_resolved_ != total_attempts_ && 335 while (total_attempts_resolved_ != total_attempts_ &&
337 base::TimeTicks::Now() < end_time) { 336 base::TimeTicks::Now() < end_time) {
338 all_done_.TimedWait(end_time - base::TimeTicks::Now()); 337 all_done_.TimedWait(end_time - base::TimeTicks::Now());
339 } 338 }
340 } 339 }
341 } 340 }
342 341
343 // All attempts will wait for an attempt to resolve the host. 342 // All attempts will wait for an attempt to resolve the host.
344 void WaitForAnAttemptToComplete() { 343 void WaitForAnAttemptToComplete() {
345 base::TimeDelta wait_time = base::TimeDelta::FromSeconds(60); 344 base::TimeDelta wait_time = base::TimeDelta::FromSeconds(60);
346 base::TimeTicks end_time = base::TimeTicks::Now() + wait_time; 345 base::TimeTicks end_time = base::TimeTicks::Now() + wait_time;
347 { 346 {
(...skipping 23 matching lines...) Expand all
371 if (current_attempt_number_ == attempt_number_to_resolve_) { 370 if (current_attempt_number_ == attempt_number_to_resolve_) {
372 resolved_attempt_number_ = current_attempt_number_; 371 resolved_attempt_number_ = current_attempt_number_;
373 wait_for_right_attempt_to_complete = false; 372 wait_for_right_attempt_to_complete = false;
374 } 373 }
375 } 374 }
376 375
377 if (wait_for_right_attempt_to_complete) 376 if (wait_for_right_attempt_to_complete)
378 // Wait for the attempt_number_to_resolve_ attempt to resolve. 377 // Wait for the attempt_number_to_resolve_ attempt to resolve.
379 WaitForAnAttemptToComplete(); 378 WaitForAnAttemptToComplete();
380 379
381 int result = ResolveUsingPrevious(host, address_family, host_resolver_flags, 380 int result = ResolveUsingPrevious(
382 addrlist, os_error); 381 host, address_family, host_resolver_flags, addrlist, os_error);
383 382
384 { 383 {
385 base::AutoLock auto_lock(lock_); 384 base::AutoLock auto_lock(lock_);
386 ++total_attempts_resolved_; 385 ++total_attempts_resolved_;
387 } 386 }
388 387
389 all_done_.Broadcast(); // Tell all attempts to proceed. 388 all_done_.Broadcast(); // Tell all attempts to proceed.
390 389
391 // Since any negative number is considered a network error, with -1 having 390 // Since any negative number is considered a network error, with -1 having
392 // special meaning (ERR_IO_PENDING). We could return the attempt that has 391 // special meaning (ERR_IO_PENDING). We could return the attempt that has
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
452 return test->CreateRequest(hostname); 451 return test->CreateRequest(hostname);
453 } 452 }
454 ScopedVector<Request>& requests() { return test->requests_; } 453 ScopedVector<Request>& requests() { return test->requests_; }
455 454
456 void DeleteResolver() { test->resolver_.reset(); } 455 void DeleteResolver() { test->resolver_.reset(); }
457 456
458 HostResolverImplTest* test; 457 HostResolverImplTest* test;
459 }; 458 };
460 459
461 // testing::Test implementation: 460 // testing::Test implementation:
462 virtual void SetUp() OVERRIDE { 461 virtual void SetUp() OVERRIDE { CreateResolver(); }
463 CreateResolver();
464 }
465 462
466 virtual void TearDown() OVERRIDE { 463 virtual void TearDown() OVERRIDE {
467 if (resolver_.get()) 464 if (resolver_.get())
468 EXPECT_EQ(0u, resolver_->num_running_dispatcher_jobs_for_tests()); 465 EXPECT_EQ(0u, resolver_->num_running_dispatcher_jobs_for_tests());
469 EXPECT_FALSE(proc_->HasBlockedRequests()); 466 EXPECT_FALSE(proc_->HasBlockedRequests());
470 } 467 }
471 468
472 virtual void CreateResolverWithLimitsAndParams( 469 virtual void CreateResolverWithLimitsAndParams(
473 const PrioritizedDispatcher::Limits& limits, 470 const PrioritizedDispatcher::Limits& limits,
474 const HostResolverImpl::ProcTaskParams& params) { 471 const HostResolverImpl::ProcTaskParams& params) {
475 resolver_.reset(new HostResolverImpl(HostCache::CreateDefaultCache(), 472 resolver_.reset(new HostResolverImpl(
476 limits, params, NULL)); 473 HostCache::CreateDefaultCache(), limits, params, NULL));
477 } 474 }
478 475
479 // The Request will not be made until a call to |Resolve()|, and the Job will 476 // The Request will not be made until a call to |Resolve()|, and the Job will
480 // not start until released by |proc_->SignalXXX|. 477 // not start until released by |proc_->SignalXXX|.
481 Request* CreateRequest(const HostResolver::RequestInfo& info, 478 Request* CreateRequest(const HostResolver::RequestInfo& info,
482 RequestPriority priority) { 479 RequestPriority priority) {
483 Request* req = new Request( 480 Request* req = new Request(
484 info, priority, requests_.size(), resolver_.get(), handler_.get()); 481 info, priority, requests_.size(), resolver_.get(), handler_.get());
485 requests_.push_back(req); 482 requests_.push_back(req);
486 return req; 483 return req;
(...skipping 778 matching lines...) Expand 10 before | Expand all | Expand 10 after
1265 new LookupAttemptHostResolverProc( 1262 new LookupAttemptHostResolverProc(
1266 NULL, kAttemptNumberToResolve, kTotalAttempts)); 1263 NULL, kAttemptNumberToResolve, kTotalAttempts));
1267 1264
1268 HostResolverImpl::ProcTaskParams params = DefaultParams(resolver_proc.get()); 1265 HostResolverImpl::ProcTaskParams params = DefaultParams(resolver_proc.get());
1269 1266
1270 // Specify smaller interval for unresponsive_delay_ for HostResolverImpl so 1267 // Specify smaller interval for unresponsive_delay_ for HostResolverImpl so
1271 // that unit test runs faster. For example, this test finishes in 1.5 secs 1268 // that unit test runs faster. For example, this test finishes in 1.5 secs
1272 // (500ms * 3). 1269 // (500ms * 3).
1273 params.unresponsive_delay = base::TimeDelta::FromMilliseconds(500); 1270 params.unresponsive_delay = base::TimeDelta::FromMilliseconds(500);
1274 1271
1275 resolver_.reset( 1272 resolver_.reset(new HostResolverImpl(
1276 new HostResolverImpl(HostCache::CreateDefaultCache(), 1273 HostCache::CreateDefaultCache(), DefaultLimits(), params, NULL));
1277 DefaultLimits(),
1278 params,
1279 NULL));
1280 1274
1281 // Resolve "host1". 1275 // Resolve "host1".
1282 HostResolver::RequestInfo info(HostPortPair("host1", 70)); 1276 HostResolver::RequestInfo info(HostPortPair("host1", 70));
1283 Request* req = CreateRequest(info, DEFAULT_PRIORITY); 1277 Request* req = CreateRequest(info, DEFAULT_PRIORITY);
1284 EXPECT_EQ(ERR_IO_PENDING, req->Resolve()); 1278 EXPECT_EQ(ERR_IO_PENDING, req->Resolve());
1285 1279
1286 // Resolve returns -4 to indicate that 3rd attempt has resolved the host. 1280 // Resolve returns -4 to indicate that 3rd attempt has resolved the host.
1287 EXPECT_EQ(-4, req->WaitForResult()); 1281 EXPECT_EQ(-4, req->WaitForResult());
1288 1282
1289 resolver_proc->WaitForAllAttemptsToFinish( 1283 resolver_proc->WaitForAllAttemptsToFinish(
(...skipping 27 matching lines...) Expand all
1317 AddDnsRule("nx", dns_protocol::kTypeAAAA, MockDnsClientRule::FAIL, false); 1311 AddDnsRule("nx", dns_protocol::kTypeAAAA, MockDnsClientRule::FAIL, false);
1318 AddDnsRule("ok", dns_protocol::kTypeA, MockDnsClientRule::OK, false); 1312 AddDnsRule("ok", dns_protocol::kTypeA, MockDnsClientRule::OK, false);
1319 AddDnsRule("ok", dns_protocol::kTypeAAAA, MockDnsClientRule::OK, false); 1313 AddDnsRule("ok", dns_protocol::kTypeAAAA, MockDnsClientRule::OK, false);
1320 AddDnsRule("4ok", dns_protocol::kTypeA, MockDnsClientRule::OK, false); 1314 AddDnsRule("4ok", dns_protocol::kTypeA, MockDnsClientRule::OK, false);
1321 AddDnsRule("4ok", dns_protocol::kTypeAAAA, MockDnsClientRule::EMPTY, false); 1315 AddDnsRule("4ok", dns_protocol::kTypeAAAA, MockDnsClientRule::EMPTY, false);
1322 AddDnsRule("6ok", dns_protocol::kTypeA, MockDnsClientRule::EMPTY, false); 1316 AddDnsRule("6ok", dns_protocol::kTypeA, MockDnsClientRule::EMPTY, false);
1323 AddDnsRule("6ok", dns_protocol::kTypeAAAA, MockDnsClientRule::OK, false); 1317 AddDnsRule("6ok", dns_protocol::kTypeAAAA, MockDnsClientRule::OK, false);
1324 AddDnsRule("4nx", dns_protocol::kTypeA, MockDnsClientRule::OK, false); 1318 AddDnsRule("4nx", dns_protocol::kTypeA, MockDnsClientRule::OK, false);
1325 AddDnsRule("4nx", dns_protocol::kTypeAAAA, MockDnsClientRule::FAIL, false); 1319 AddDnsRule("4nx", dns_protocol::kTypeAAAA, MockDnsClientRule::FAIL, false);
1326 AddDnsRule("empty", dns_protocol::kTypeA, MockDnsClientRule::EMPTY, false); 1320 AddDnsRule("empty", dns_protocol::kTypeA, MockDnsClientRule::EMPTY, false);
1327 AddDnsRule("empty", dns_protocol::kTypeAAAA, MockDnsClientRule::EMPTY, 1321 AddDnsRule(
1328 false); 1322 "empty", dns_protocol::kTypeAAAA, MockDnsClientRule::EMPTY, false);
1329 1323
1330 AddDnsRule("slow_nx", dns_protocol::kTypeA, MockDnsClientRule::FAIL, true); 1324 AddDnsRule("slow_nx", dns_protocol::kTypeA, MockDnsClientRule::FAIL, true);
1331 AddDnsRule("slow_nx", dns_protocol::kTypeAAAA, MockDnsClientRule::FAIL, 1325 AddDnsRule(
1332 true); 1326 "slow_nx", dns_protocol::kTypeAAAA, MockDnsClientRule::FAIL, true);
1333 1327
1334 AddDnsRule("4slow_ok", dns_protocol::kTypeA, MockDnsClientRule::OK, true); 1328 AddDnsRule("4slow_ok", dns_protocol::kTypeA, MockDnsClientRule::OK, true);
1335 AddDnsRule("4slow_ok", dns_protocol::kTypeAAAA, MockDnsClientRule::OK, 1329 AddDnsRule(
1330 "4slow_ok", dns_protocol::kTypeAAAA, MockDnsClientRule::OK, false);
1331 AddDnsRule("6slow_ok", dns_protocol::kTypeA, MockDnsClientRule::OK, false);
1332 AddDnsRule(
1333 "6slow_ok", dns_protocol::kTypeAAAA, MockDnsClientRule::OK, true);
1334 AddDnsRule("4slow_4ok", dns_protocol::kTypeA, MockDnsClientRule::OK, true);
1335 AddDnsRule(
1336 "4slow_4ok", dns_protocol::kTypeAAAA, MockDnsClientRule::EMPTY, false);
1337 AddDnsRule("4slow_4timeout",
1338 dns_protocol::kTypeA,
1339 MockDnsClientRule::TIMEOUT,
1340 true);
1341 AddDnsRule("4slow_4timeout",
1342 dns_protocol::kTypeAAAA,
1343 MockDnsClientRule::OK,
1336 false); 1344 false);
1337 AddDnsRule("6slow_ok", dns_protocol::kTypeA, MockDnsClientRule::OK, false); 1345 AddDnsRule(
1338 AddDnsRule("6slow_ok", dns_protocol::kTypeAAAA, MockDnsClientRule::OK, 1346 "4slow_6timeout", dns_protocol::kTypeA, MockDnsClientRule::OK, true);
1339 true); 1347 AddDnsRule("4slow_6timeout",
1340 AddDnsRule("4slow_4ok", dns_protocol::kTypeA, MockDnsClientRule::OK, true); 1348 dns_protocol::kTypeAAAA,
1341 AddDnsRule("4slow_4ok", dns_protocol::kTypeAAAA, MockDnsClientRule::EMPTY, 1349 MockDnsClientRule::TIMEOUT,
1342 false); 1350 false);
1343 AddDnsRule("4slow_4timeout", dns_protocol::kTypeA,
1344 MockDnsClientRule::TIMEOUT, true);
1345 AddDnsRule("4slow_4timeout", dns_protocol::kTypeAAAA, MockDnsClientRule::OK,
1346 false);
1347 AddDnsRule("4slow_6timeout", dns_protocol::kTypeA,
1348 MockDnsClientRule::OK, true);
1349 AddDnsRule("4slow_6timeout", dns_protocol::kTypeAAAA,
1350 MockDnsClientRule::TIMEOUT, false);
1351 CreateResolver(); 1351 CreateResolver();
1352 } 1352 }
1353 1353
1354 // HostResolverImplTest implementation: 1354 // HostResolverImplTest implementation:
1355 virtual void CreateResolverWithLimitsAndParams( 1355 virtual void CreateResolverWithLimitsAndParams(
1356 const PrioritizedDispatcher::Limits& limits, 1356 const PrioritizedDispatcher::Limits& limits,
1357 const HostResolverImpl::ProcTaskParams& params) OVERRIDE { 1357 const HostResolverImpl::ProcTaskParams& params) OVERRIDE {
1358 resolver_.reset(new HostResolverImpl(HostCache::CreateDefaultCache(), 1358 resolver_.reset(new HostResolverImpl(
1359 limits, 1359 HostCache::CreateDefaultCache(), limits, params, NULL));
1360 params,
1361 NULL));
1362 // Disable IPv6 support probing. 1360 // Disable IPv6 support probing.
1363 resolver_->SetDefaultAddressFamily(ADDRESS_FAMILY_UNSPECIFIED); 1361 resolver_->SetDefaultAddressFamily(ADDRESS_FAMILY_UNSPECIFIED);
1364 dns_client_ = new MockDnsClient(DnsConfig(), dns_rules_); 1362 dns_client_ = new MockDnsClient(DnsConfig(), dns_rules_);
1365 resolver_->SetDnsClient(scoped_ptr<DnsClient>(dns_client_)); 1363 resolver_->SetDnsClient(scoped_ptr<DnsClient>(dns_client_));
1366 } 1364 }
1367 1365
1368 // Adds a rule to |dns_rules_|. Must be followed by |CreateResolver| to apply. 1366 // Adds a rule to |dns_rules_|. Must be followed by |CreateResolver| to apply.
1369 void AddDnsRule(const std::string& prefix, 1367 void AddDnsRule(const std::string& prefix,
1370 uint16 qtype, 1368 uint16 qtype,
1371 MockDnsClientRule::Result result, 1369 MockDnsClientRule::Result result,
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
1552 Request* req1 = CreateRequest("nx_ipv4", 80); 1550 Request* req1 = CreateRequest("nx_ipv4", 80);
1553 EXPECT_EQ(OK, req1->Resolve()); 1551 EXPECT_EQ(OK, req1->Resolve());
1554 EXPECT_TRUE(req1->HasOneAddress("127.0.0.1", 80)); 1552 EXPECT_TRUE(req1->HasOneAddress("127.0.0.1", 80));
1555 1553
1556 Request* req2 = CreateRequest("nx_ipv6", 80); 1554 Request* req2 = CreateRequest("nx_ipv6", 80);
1557 EXPECT_EQ(OK, req2->Resolve()); 1555 EXPECT_EQ(OK, req2->Resolve());
1558 EXPECT_TRUE(req2->HasOneAddress("::1", 80)); 1556 EXPECT_TRUE(req2->HasOneAddress("::1", 80));
1559 1557
1560 Request* req3 = CreateRequest("nx_both", 80); 1558 Request* req3 = CreateRequest("nx_both", 80);
1561 EXPECT_EQ(OK, req3->Resolve()); 1559 EXPECT_EQ(OK, req3->Resolve());
1562 EXPECT_TRUE(req3->HasAddress("127.0.0.1", 80) && 1560 EXPECT_TRUE(req3->HasAddress("127.0.0.1", 80) && req3->HasAddress("::1", 80));
1563 req3->HasAddress("::1", 80));
1564 1561
1565 // Requests with specified AddressFamily. 1562 // Requests with specified AddressFamily.
1566 Request* req4 = CreateRequest("nx_ipv4", 80, MEDIUM, ADDRESS_FAMILY_IPV4); 1563 Request* req4 = CreateRequest("nx_ipv4", 80, MEDIUM, ADDRESS_FAMILY_IPV4);
1567 EXPECT_EQ(OK, req4->Resolve()); 1564 EXPECT_EQ(OK, req4->Resolve());
1568 EXPECT_TRUE(req4->HasOneAddress("127.0.0.1", 80)); 1565 EXPECT_TRUE(req4->HasOneAddress("127.0.0.1", 80));
1569 1566
1570 Request* req5 = CreateRequest("nx_ipv6", 80, MEDIUM, ADDRESS_FAMILY_IPV6); 1567 Request* req5 = CreateRequest("nx_ipv6", 80, MEDIUM, ADDRESS_FAMILY_IPV6);
1571 EXPECT_EQ(OK, req5->Resolve()); 1568 EXPECT_EQ(OK, req5->Resolve());
1572 EXPECT_TRUE(req5->HasOneAddress("::1", 80)); 1569 EXPECT_TRUE(req5->HasOneAddress("::1", 80));
1573 1570
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
1691 resolver_.reset(new HostResolverImpl(HostCache::CreateDefaultCache(), 1688 resolver_.reset(new HostResolverImpl(HostCache::CreateDefaultCache(),
1692 DefaultLimits(), 1689 DefaultLimits(),
1693 DefaultParams(proc.get()), 1690 DefaultParams(proc.get()),
1694 NULL)); 1691 NULL));
1695 resolver_->SetDnsClient( 1692 resolver_->SetDnsClient(
1696 scoped_ptr<DnsClient>(new MockDnsClient(DnsConfig(), dns_rules_))); 1693 scoped_ptr<DnsClient>(new MockDnsClient(DnsConfig(), dns_rules_)));
1697 resolver_->SetDefaultAddressFamily(ADDRESS_FAMILY_IPV4); 1694 resolver_->SetDefaultAddressFamily(ADDRESS_FAMILY_IPV4);
1698 1695
1699 // Get the expected output. 1696 // Get the expected output.
1700 AddressList addrlist; 1697 AddressList addrlist;
1701 int rv = proc->Resolve("localhost", ADDRESS_FAMILY_UNSPECIFIED, 0, &addrlist, 1698 int rv = proc->Resolve(
1702 NULL); 1699 "localhost", ADDRESS_FAMILY_UNSPECIFIED, 0, &addrlist, NULL);
1703 if (rv != OK) 1700 if (rv != OK)
1704 return; 1701 return;
1705 1702
1706 for (unsigned i = 0; i < addrlist.size(); ++i) 1703 for (unsigned i = 0; i < addrlist.size(); ++i)
1707 LOG(WARNING) << addrlist[i].ToString(); 1704 LOG(WARNING) << addrlist[i].ToString();
1708 1705
1709 bool saw_ipv4 = AddressListContains(addrlist, "127.0.0.1", 0); 1706 bool saw_ipv4 = AddressListContains(addrlist, "127.0.0.1", 0);
1710 bool saw_ipv6 = AddressListContains(addrlist, "::1", 0); 1707 bool saw_ipv6 = AddressListContains(addrlist, "::1", 0);
1711 if (!saw_ipv4 && !saw_ipv6) 1708 if (!saw_ipv4 && !saw_ipv6)
1712 return; 1709 return;
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
1787 TEST_F(HostResolverImplDnsTest, DeleteWithActiveTransactions) { 1784 TEST_F(HostResolverImplDnsTest, DeleteWithActiveTransactions) {
1788 // At most 10 Jobs active at once. 1785 // At most 10 Jobs active at once.
1789 CreateResolverWithLimitsAndParams( 1786 CreateResolverWithLimitsAndParams(
1790 PrioritizedDispatcher::Limits(NUM_PRIORITIES, 10u), 1787 PrioritizedDispatcher::Limits(NUM_PRIORITIES, 10u),
1791 DefaultParams(proc_.get())); 1788 DefaultParams(proc_.get()));
1792 1789
1793 resolver_->SetDefaultAddressFamily(ADDRESS_FAMILY_UNSPECIFIED); 1790 resolver_->SetDefaultAddressFamily(ADDRESS_FAMILY_UNSPECIFIED);
1794 ChangeDnsConfig(CreateValidDnsConfig()); 1791 ChangeDnsConfig(CreateValidDnsConfig());
1795 1792
1796 // First active job is an IPv4 request. 1793 // First active job is an IPv4 request.
1797 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("ok", 80, MEDIUM, 1794 EXPECT_EQ(ERR_IO_PENDING,
1798 ADDRESS_FAMILY_IPV4)->Resolve()); 1795 CreateRequest("ok", 80, MEDIUM, ADDRESS_FAMILY_IPV4)->Resolve());
1799 1796
1800 // Add 10 more DNS lookups for different hostnames. First 4 should have two 1797 // Add 10 more DNS lookups for different hostnames. First 4 should have two
1801 // active jobs, next one has a single active job, and one pending. Others 1798 // active jobs, next one has a single active job, and one pending. Others
1802 // should all be queued. 1799 // should all be queued.
1803 for (int i = 0; i < 10; ++i) { 1800 for (int i = 0; i < 10; ++i) {
1804 EXPECT_EQ(ERR_IO_PENDING, CreateRequest( 1801 EXPECT_EQ(ERR_IO_PENDING,
1805 base::StringPrintf("ok%i", i))->Resolve()); 1802 CreateRequest(base::StringPrintf("ok%i", i))->Resolve());
1806 } 1803 }
1807 EXPECT_EQ(10u, num_running_dispatcher_jobs()); 1804 EXPECT_EQ(10u, num_running_dispatcher_jobs());
1808 1805
1809 resolver_.reset(); 1806 resolver_.reset();
1810 } 1807 }
1811 1808
1812 // Cancel a request with only the IPv6 transaction active. 1809 // Cancel a request with only the IPv6 transaction active.
1813 TEST_F(HostResolverImplDnsTest, CancelWithIPv6TransactionActive) { 1810 TEST_F(HostResolverImplDnsTest, CancelWithIPv6TransactionActive) {
1814 resolver_->SetDefaultAddressFamily(ADDRESS_FAMILY_UNSPECIFIED); 1811 resolver_->SetDefaultAddressFamily(ADDRESS_FAMILY_UNSPECIFIED);
1815 ChangeDnsConfig(CreateValidDnsConfig()); 1812 ChangeDnsConfig(CreateValidDnsConfig());
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
1899 // Test the case where the AAAA query is started when another transaction 1896 // Test the case where the AAAA query is started when another transaction
1900 // completes. 1897 // completes.
1901 TEST_F(HostResolverImplDnsTest, AAAAStartsAfterOtherJobFinishes) { 1898 TEST_F(HostResolverImplDnsTest, AAAAStartsAfterOtherJobFinishes) {
1902 CreateResolverWithLimitsAndParams( 1899 CreateResolverWithLimitsAndParams(
1903 PrioritizedDispatcher::Limits(NUM_PRIORITIES, 2), 1900 PrioritizedDispatcher::Limits(NUM_PRIORITIES, 2),
1904 DefaultParams(proc_.get())); 1901 DefaultParams(proc_.get()));
1905 set_fallback_to_proctask(false); 1902 set_fallback_to_proctask(false);
1906 resolver_->SetDefaultAddressFamily(ADDRESS_FAMILY_UNSPECIFIED); 1903 resolver_->SetDefaultAddressFamily(ADDRESS_FAMILY_UNSPECIFIED);
1907 ChangeDnsConfig(CreateValidDnsConfig()); 1904 ChangeDnsConfig(CreateValidDnsConfig());
1908 1905
1909 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("ok", 80, MEDIUM,
1910 ADDRESS_FAMILY_IPV4)->Resolve());
1911 EXPECT_EQ(ERR_IO_PENDING, 1906 EXPECT_EQ(ERR_IO_PENDING,
1912 CreateRequest("4slow_ok", 80, MEDIUM)->Resolve()); 1907 CreateRequest("ok", 80, MEDIUM, ADDRESS_FAMILY_IPV4)->Resolve());
1908 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("4slow_ok", 80, MEDIUM)->Resolve());
1913 // An IPv4 request should have been started pending for each job. 1909 // An IPv4 request should have been started pending for each job.
1914 EXPECT_EQ(2u, num_running_dispatcher_jobs()); 1910 EXPECT_EQ(2u, num_running_dispatcher_jobs());
1915 1911
1916 // Request 0's IPv4 request should complete, starting Request 1's IPv6 1912 // Request 0's IPv4 request should complete, starting Request 1's IPv6
1917 // request, which should also complete. 1913 // request, which should also complete.
1918 base::RunLoop().RunUntilIdle(); 1914 base::RunLoop().RunUntilIdle();
1919 EXPECT_EQ(1u, num_running_dispatcher_jobs()); 1915 EXPECT_EQ(1u, num_running_dispatcher_jobs());
1920 EXPECT_TRUE(requests_[0]->completed()); 1916 EXPECT_TRUE(requests_[0]->completed());
1921 EXPECT_FALSE(requests_[1]->completed()); 1917 EXPECT_FALSE(requests_[1]->completed());
1922 1918
1923 dns_client_->CompleteDelayedTransactions(); 1919 dns_client_->CompleteDelayedTransactions();
1924 EXPECT_TRUE(requests_[1]->completed()); 1920 EXPECT_TRUE(requests_[1]->completed());
1925 EXPECT_EQ(OK, requests_[1]->result()); 1921 EXPECT_EQ(OK, requests_[1]->result());
1926 EXPECT_EQ(2u, requests_[1]->NumberOfAddresses()); 1922 EXPECT_EQ(2u, requests_[1]->NumberOfAddresses());
1927 EXPECT_TRUE(requests_[1]->HasAddress("127.0.0.1", 80)); 1923 EXPECT_TRUE(requests_[1]->HasAddress("127.0.0.1", 80));
1928 EXPECT_TRUE(requests_[1]->HasAddress("::1", 80)); 1924 EXPECT_TRUE(requests_[1]->HasAddress("::1", 80));
1929 } 1925 }
1930 1926
1931 // Tests the case that a Job with a single transaction receives an empty address 1927 // Tests the case that a Job with a single transaction receives an empty address
1932 // list, triggering fallback to ProcTask. 1928 // list, triggering fallback to ProcTask.
1933 TEST_F(HostResolverImplDnsTest, IPv4EmptyFallback) { 1929 TEST_F(HostResolverImplDnsTest, IPv4EmptyFallback) {
1934 ChangeDnsConfig(CreateValidDnsConfig()); 1930 ChangeDnsConfig(CreateValidDnsConfig());
1935 proc_->AddRuleForAllFamilies("empty_fallback", "192.168.0.1"); 1931 proc_->AddRuleForAllFamilies("empty_fallback", "192.168.0.1");
1936 proc_->SignalMultiple(1u); 1932 proc_->SignalMultiple(1u);
1937 EXPECT_EQ(ERR_IO_PENDING, 1933 EXPECT_EQ(ERR_IO_PENDING,
1938 CreateRequest("empty_fallback", 80, MEDIUM, 1934 CreateRequest("empty_fallback", 80, MEDIUM, ADDRESS_FAMILY_IPV4)
1939 ADDRESS_FAMILY_IPV4)->Resolve()); 1935 ->Resolve());
1940 EXPECT_EQ(OK, requests_[0]->WaitForResult()); 1936 EXPECT_EQ(OK, requests_[0]->WaitForResult());
1941 EXPECT_TRUE(requests_[0]->HasOneAddress("192.168.0.1", 80)); 1937 EXPECT_TRUE(requests_[0]->HasOneAddress("192.168.0.1", 80));
1942 } 1938 }
1943 1939
1944 // Tests the case that a Job with two transactions receives two empty address 1940 // Tests the case that a Job with two transactions receives two empty address
1945 // lists, triggering fallback to ProcTask. 1941 // lists, triggering fallback to ProcTask.
1946 TEST_F(HostResolverImplDnsTest, UnspecEmptyFallback) { 1942 TEST_F(HostResolverImplDnsTest, UnspecEmptyFallback) {
1947 ChangeDnsConfig(CreateValidDnsConfig()); 1943 ChangeDnsConfig(CreateValidDnsConfig());
1948 proc_->AddRuleForAllFamilies("empty_fallback", "192.168.0.1"); 1944 proc_->AddRuleForAllFamilies("empty_fallback", "192.168.0.1");
1949 proc_->SignalMultiple(1u); 1945 proc_->SignalMultiple(1u);
1950 EXPECT_EQ(ERR_IO_PENDING, 1946 EXPECT_EQ(
1951 CreateRequest("empty_fallback", 80, MEDIUM, 1947 ERR_IO_PENDING,
1952 ADDRESS_FAMILY_UNSPECIFIED)->Resolve()); 1948 CreateRequest("empty_fallback", 80, MEDIUM, ADDRESS_FAMILY_UNSPECIFIED)
1949 ->Resolve());
1953 EXPECT_EQ(OK, requests_[0]->WaitForResult()); 1950 EXPECT_EQ(OK, requests_[0]->WaitForResult());
1954 EXPECT_TRUE(requests_[0]->HasOneAddress("192.168.0.1", 80)); 1951 EXPECT_TRUE(requests_[0]->HasOneAddress("192.168.0.1", 80));
1955 } 1952 }
1956 1953
1957 // Tests getting a new invalid DnsConfig while there are active DnsTasks. 1954 // Tests getting a new invalid DnsConfig while there are active DnsTasks.
1958 TEST_F(HostResolverImplDnsTest, InvalidDnsConfigWithPendingRequests) { 1955 TEST_F(HostResolverImplDnsTest, InvalidDnsConfigWithPendingRequests) {
1959 // At most 3 jobs active at once. This number is important, since we want to 1956 // At most 3 jobs active at once. This number is important, since we want to
1960 // make sure that aborting the first HostResolverImpl::Job does not trigger 1957 // make sure that aborting the first HostResolverImpl::Job does not trigger
1961 // another DnsTransaction on the second Job when it releases its second 1958 // another DnsTransaction on the second Job when it releases its second
1962 // prioritized dispatcher slot. 1959 // prioritized dispatcher slot.
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
2027 proc_->AddRuleForAllFamilies("slow_ok3", "192.168.0.4"); 2024 proc_->AddRuleForAllFamilies("slow_ok3", "192.168.0.4");
2028 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("slow_ok3")->Resolve()); 2025 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("slow_ok3")->Resolve());
2029 proc_->SignalMultiple(maximum_dns_failures() + 3); 2026 proc_->SignalMultiple(maximum_dns_failures() + 3);
2030 2027
2031 for (size_t i = 0u; i < maximum_dns_failures(); ++i) { 2028 for (size_t i = 0u; i < maximum_dns_failures(); ++i) {
2032 EXPECT_EQ(OK, requests_[i]->WaitForResult()); 2029 EXPECT_EQ(OK, requests_[i]->WaitForResult());
2033 EXPECT_TRUE(requests_[i]->HasOneAddress("192.168.0.1", 80)); 2030 EXPECT_TRUE(requests_[i]->HasOneAddress("192.168.0.1", 80));
2034 } 2031 }
2035 2032
2036 EXPECT_EQ(OK, requests_[maximum_dns_failures()]->WaitForResult()); 2033 EXPECT_EQ(OK, requests_[maximum_dns_failures()]->WaitForResult());
2037 EXPECT_TRUE(requests_[maximum_dns_failures()]->HasOneAddress( 2034 EXPECT_TRUE(
2038 "192.168.0.2", 80)); 2035 requests_[maximum_dns_failures()]->HasOneAddress("192.168.0.2", 80));
2039 EXPECT_EQ(OK, requests_[maximum_dns_failures() + 1]->WaitForResult()); 2036 EXPECT_EQ(OK, requests_[maximum_dns_failures() + 1]->WaitForResult());
2040 EXPECT_TRUE(requests_[maximum_dns_failures() + 1]->HasOneAddress( 2037 EXPECT_TRUE(requests_[maximum_dns_failures() + 1]->HasOneAddress(
2041 "192.168.0.3", 80)); 2038 "192.168.0.3", 80));
2042 EXPECT_EQ(OK, requests_[maximum_dns_failures() + 2]->WaitForResult()); 2039 EXPECT_EQ(OK, requests_[maximum_dns_failures() + 2]->WaitForResult());
2043 EXPECT_TRUE(requests_[maximum_dns_failures() + 2]->HasOneAddress( 2040 EXPECT_TRUE(requests_[maximum_dns_failures() + 2]->HasOneAddress(
2044 "192.168.0.4", 80)); 2041 "192.168.0.4", 80));
2045 requests_.clear(); 2042 requests_.clear();
2046 } 2043 }
2047 } 2044 }
2048 2045
2049 // Tests a call to SetDnsClient while there are active DnsTasks. 2046 // Tests a call to SetDnsClient while there are active DnsTasks.
2050 TEST_F(HostResolverImplDnsTest, ManuallyDisableDnsClientWithPendingRequests) { 2047 TEST_F(HostResolverImplDnsTest, ManuallyDisableDnsClientWithPendingRequests) {
2051 // At most 3 jobs active at once. This number is important, since we want to 2048 // At most 3 jobs active at once. This number is important, since we want to
2052 // make sure that aborting the first HostResolverImpl::Job does not trigger 2049 // make sure that aborting the first HostResolverImpl::Job does not trigger
2053 // another DnsTransaction on the second Job when it releases its second 2050 // another DnsTransaction on the second Job when it releases its second
2054 // prioritized dispatcher slot. 2051 // prioritized dispatcher slot.
(...skipping 27 matching lines...) Expand all
2082 2079
2083 EXPECT_EQ(OK, requests_[0]->WaitForResult()); 2080 EXPECT_EQ(OK, requests_[0]->WaitForResult());
2084 EXPECT_TRUE(requests_[0]->HasOneAddress("192.168.0.1", 80)); 2081 EXPECT_TRUE(requests_[0]->HasOneAddress("192.168.0.1", 80));
2085 EXPECT_EQ(OK, requests_[1]->WaitForResult()); 2082 EXPECT_EQ(OK, requests_[1]->WaitForResult());
2086 EXPECT_TRUE(requests_[1]->HasOneAddress("192.168.0.2", 80)); 2083 EXPECT_TRUE(requests_[1]->HasOneAddress("192.168.0.2", 80));
2087 EXPECT_EQ(OK, requests_[2]->WaitForResult()); 2084 EXPECT_EQ(OK, requests_[2]->WaitForResult());
2088 EXPECT_TRUE(requests_[2]->HasOneAddress("192.168.0.3", 80)); 2085 EXPECT_TRUE(requests_[2]->HasOneAddress("192.168.0.3", 80));
2089 } 2086 }
2090 2087
2091 } // namespace net 2088 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698