OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/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 #include <tuple> | 9 #include <tuple> |
10 #include <vector> | 10 #include <vector> |
11 | 11 |
12 #include "base/bind.h" | 12 #include "base/bind.h" |
13 #include "base/bind_helpers.h" | 13 #include "base/bind_helpers.h" |
14 #include "base/location.h" | 14 #include "base/location.h" |
| 15 #include "base/macros.h" |
15 #include "base/memory/ref_counted.h" | 16 #include "base/memory/ref_counted.h" |
16 #include "base/memory/scoped_ptr.h" | 17 #include "base/memory/scoped_ptr.h" |
17 #include "base/message_loop/message_loop.h" | 18 #include "base/message_loop/message_loop.h" |
18 #include "base/run_loop.h" | 19 #include "base/run_loop.h" |
19 #include "base/single_thread_task_runner.h" | 20 #include "base/single_thread_task_runner.h" |
20 #include "base/strings/string_util.h" | 21 #include "base/strings/string_util.h" |
21 #include "base/strings/stringprintf.h" | 22 #include "base/strings/stringprintf.h" |
22 #include "base/synchronization/condition_variable.h" | 23 #include "base/synchronization/condition_variable.h" |
23 #include "base/synchronization/lock.h" | 24 #include "base/synchronization/lock.h" |
24 #include "base/test/test_timeouts.h" | 25 #include "base/test/test_timeouts.h" |
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
179 std::map<ResolveKey, AddressList> rules_; | 180 std::map<ResolveKey, AddressList> rules_; |
180 CaptureList capture_list_; | 181 CaptureList capture_list_; |
181 unsigned num_requests_waiting_; | 182 unsigned num_requests_waiting_; |
182 unsigned num_slots_available_; | 183 unsigned num_slots_available_; |
183 base::ConditionVariable requests_waiting_; | 184 base::ConditionVariable requests_waiting_; |
184 base::ConditionVariable slots_available_; | 185 base::ConditionVariable slots_available_; |
185 | 186 |
186 DISALLOW_COPY_AND_ASSIGN(MockHostResolverProc); | 187 DISALLOW_COPY_AND_ASSIGN(MockHostResolverProc); |
187 }; | 188 }; |
188 | 189 |
189 bool AddressListContains(const AddressList& list, const std::string& address, | 190 bool AddressListContains(const AddressList& list, |
190 uint16 port) { | 191 const std::string& address, |
| 192 uint16_t port) { |
191 IPAddressNumber ip; | 193 IPAddressNumber ip; |
192 bool rv = ParseIPLiteralToNumber(address, &ip); | 194 bool rv = ParseIPLiteralToNumber(address, &ip); |
193 DCHECK(rv); | 195 DCHECK(rv); |
194 return std::find(list.begin(), | 196 return std::find(list.begin(), |
195 list.end(), | 197 list.end(), |
196 IPEndPoint(ip, port)) != list.end(); | 198 IPEndPoint(ip, port)) != list.end(); |
197 } | 199 } |
198 | 200 |
199 // A wrapper for requests to a HostResolver. | 201 // A wrapper for requests to a HostResolver. |
200 class Request { | 202 class Request { |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
248 handle_ = NULL; | 250 handle_ = NULL; |
249 } | 251 } |
250 | 252 |
251 const HostResolver::RequestInfo& info() const { return info_; } | 253 const HostResolver::RequestInfo& info() const { return info_; } |
252 size_t index() const { return index_; } | 254 size_t index() const { return index_; } |
253 const AddressList& list() const { return list_; } | 255 const AddressList& list() const { return list_; } |
254 int result() const { return result_; } | 256 int result() const { return result_; } |
255 bool completed() const { return result_ != ERR_IO_PENDING; } | 257 bool completed() const { return result_ != ERR_IO_PENDING; } |
256 bool pending() const { return handle_ != NULL; } | 258 bool pending() const { return handle_ != NULL; } |
257 | 259 |
258 bool HasAddress(const std::string& address, uint16 port) const { | 260 bool HasAddress(const std::string& address, uint16_t port) const { |
259 return AddressListContains(list_, address, port); | 261 return AddressListContains(list_, address, port); |
260 } | 262 } |
261 | 263 |
262 // Returns the number of addresses in |list_|. | 264 // Returns the number of addresses in |list_|. |
263 unsigned NumberOfAddresses() const { | 265 unsigned NumberOfAddresses() const { |
264 return list_.size(); | 266 return list_.size(); |
265 } | 267 } |
266 | 268 |
267 bool HasOneAddress(const std::string& address, uint16 port) const { | 269 bool HasOneAddress(const std::string& address, uint16_t port) const { |
268 return HasAddress(address, port) && (NumberOfAddresses() == 1u); | 270 return HasAddress(address, port) && (NumberOfAddresses() == 1u); |
269 } | 271 } |
270 | 272 |
271 // Returns ERR_UNEXPECTED if timed out. | 273 // Returns ERR_UNEXPECTED if timed out. |
272 int WaitForResult() { | 274 int WaitForResult() { |
273 if (completed()) | 275 if (completed()) |
274 return result_; | 276 return result_; |
275 base::CancelableClosure closure(base::MessageLoop::QuitWhenIdleClosure()); | 277 base::CancelableClosure closure(base::MessageLoop::QuitWhenIdleClosure()); |
276 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( | 278 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( |
277 FROM_HERE, closure.callback(), TestTimeouts::action_max_timeout()); | 279 FROM_HERE, closure.callback(), TestTimeouts::action_max_timeout()); |
(...skipping 1189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1467 HostResolverImpl::Options options = DefaultOptions(); | 1469 HostResolverImpl::Options options = DefaultOptions(); |
1468 options.max_concurrent_resolves = max_concurrent_resolves; | 1470 options.max_concurrent_resolves = max_concurrent_resolves; |
1469 resolver_.reset(new TestHostResolverImpl(options, NULL)); | 1471 resolver_.reset(new TestHostResolverImpl(options, NULL)); |
1470 resolver_->set_proc_params_for_test(params); | 1472 resolver_->set_proc_params_for_test(params); |
1471 dns_client_ = new MockDnsClient(DnsConfig(), dns_rules_); | 1473 dns_client_ = new MockDnsClient(DnsConfig(), dns_rules_); |
1472 resolver_->SetDnsClient(scoped_ptr<DnsClient>(dns_client_)); | 1474 resolver_->SetDnsClient(scoped_ptr<DnsClient>(dns_client_)); |
1473 } | 1475 } |
1474 | 1476 |
1475 // Adds a rule to |dns_rules_|. Must be followed by |CreateResolver| to apply. | 1477 // Adds a rule to |dns_rules_|. Must be followed by |CreateResolver| to apply. |
1476 void AddDnsRule(const std::string& prefix, | 1478 void AddDnsRule(const std::string& prefix, |
1477 uint16 qtype, | 1479 uint16_t qtype, |
1478 MockDnsClientRule::Result result, | 1480 MockDnsClientRule::Result result, |
1479 bool delay) { | 1481 bool delay) { |
1480 dns_rules_.push_back(MockDnsClientRule(prefix, qtype, result, delay)); | 1482 dns_rules_.push_back(MockDnsClientRule(prefix, qtype, result, delay)); |
1481 } | 1483 } |
1482 | 1484 |
1483 void ChangeDnsConfig(const DnsConfig& config) { | 1485 void ChangeDnsConfig(const DnsConfig& config) { |
1484 NetworkChangeNotifier::SetDnsConfig(config); | 1486 NetworkChangeNotifier::SetDnsConfig(config); |
1485 // Notification is delivered asynchronously. | 1487 // Notification is delivered asynchronously. |
1486 base::MessageLoop::current()->RunUntilIdle(); | 1488 base::MessageLoop::current()->RunUntilIdle(); |
1487 } | 1489 } |
(...skipping 682 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2170 | 2172 |
2171 EXPECT_EQ(OK, requests_[0]->WaitForResult()); | 2173 EXPECT_EQ(OK, requests_[0]->WaitForResult()); |
2172 EXPECT_TRUE(requests_[0]->HasOneAddress("192.168.0.1", 80)); | 2174 EXPECT_TRUE(requests_[0]->HasOneAddress("192.168.0.1", 80)); |
2173 EXPECT_EQ(OK, requests_[1]->WaitForResult()); | 2175 EXPECT_EQ(OK, requests_[1]->WaitForResult()); |
2174 EXPECT_TRUE(requests_[1]->HasOneAddress("192.168.0.2", 80)); | 2176 EXPECT_TRUE(requests_[1]->HasOneAddress("192.168.0.2", 80)); |
2175 EXPECT_EQ(OK, requests_[2]->WaitForResult()); | 2177 EXPECT_EQ(OK, requests_[2]->WaitForResult()); |
2176 EXPECT_TRUE(requests_[2]->HasOneAddress("192.168.0.3", 80)); | 2178 EXPECT_TRUE(requests_[2]->HasOneAddress("192.168.0.3", 80)); |
2177 } | 2179 } |
2178 | 2180 |
2179 } // namespace net | 2181 } // namespace net |
OLD | NEW |