OLD | NEW |
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" |
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
264 resolver_proc->AddRule("just.testing", "192.168.1.42"); | 264 resolver_proc->AddRule("just.testing", "192.168.1.42"); |
265 | 265 |
266 scoped_ptr<HostResolver> host_resolver( | 266 scoped_ptr<HostResolver> host_resolver( |
267 CreateHostResolverImpl(resolver_proc)); | 267 CreateHostResolverImpl(resolver_proc)); |
268 | 268 |
269 HostResolver::RequestInfo info(HostPortPair("just.testing", kPortnum)); | 269 HostResolver::RequestInfo info(HostPortPair("just.testing", kPortnum)); |
270 CapturingBoundNetLog log(CapturingNetLog::kUnbounded); | 270 CapturingBoundNetLog log(CapturingNetLog::kUnbounded); |
271 int err = host_resolver->Resolve(info, &addrlist, NULL, NULL, log.bound()); | 271 int err = host_resolver->Resolve(info, &addrlist, NULL, NULL, log.bound()); |
272 EXPECT_EQ(OK, err); | 272 EXPECT_EQ(OK, err); |
273 | 273 |
274 EXPECT_EQ(2u, log.entries().size()); | 274 net::CapturingNetLog::EntryList entries; |
| 275 log.GetEntries(&entries); |
| 276 |
| 277 EXPECT_EQ(2u, entries.size()); |
275 EXPECT_TRUE(LogContainsBeginEvent( | 278 EXPECT_TRUE(LogContainsBeginEvent( |
276 log.entries(), 0, NetLog::TYPE_HOST_RESOLVER_IMPL)); | 279 entries, 0, NetLog::TYPE_HOST_RESOLVER_IMPL)); |
277 EXPECT_TRUE(LogContainsEndEvent( | 280 EXPECT_TRUE(LogContainsEndEvent( |
278 log.entries(), 1, NetLog::TYPE_HOST_RESOLVER_IMPL)); | 281 entries, 1, NetLog::TYPE_HOST_RESOLVER_IMPL)); |
279 | 282 |
280 const struct addrinfo* ainfo = addrlist.head(); | 283 const struct addrinfo* ainfo = addrlist.head(); |
281 EXPECT_EQ(static_cast<addrinfo*>(NULL), ainfo->ai_next); | 284 EXPECT_EQ(static_cast<addrinfo*>(NULL), ainfo->ai_next); |
282 EXPECT_EQ(sizeof(struct sockaddr_in), ainfo->ai_addrlen); | 285 EXPECT_EQ(sizeof(struct sockaddr_in), ainfo->ai_addrlen); |
283 | 286 |
284 const struct sockaddr* sa = ainfo->ai_addr; | 287 const struct sockaddr* sa = ainfo->ai_addr; |
285 const struct sockaddr_in* sa_in = (const struct sockaddr_in*) sa; | 288 const struct sockaddr_in* sa_in = (const struct sockaddr_in*) sa; |
286 EXPECT_TRUE(htons(kPortnum) == sa_in->sin_port); | 289 EXPECT_TRUE(htons(kPortnum) == sa_in->sin_port); |
287 EXPECT_TRUE(htonl(0xc0a8012a) == sa_in->sin_addr.s_addr); | 290 EXPECT_TRUE(htonl(0xc0a8012a) == sa_in->sin_addr.s_addr); |
288 } | 291 } |
289 | 292 |
290 TEST_F(HostResolverImplTest, AsynchronousLookup) { | 293 TEST_F(HostResolverImplTest, AsynchronousLookup) { |
291 AddressList addrlist; | 294 AddressList addrlist; |
292 const int kPortnum = 80; | 295 const int kPortnum = 80; |
293 | 296 |
294 scoped_refptr<RuleBasedHostResolverProc> resolver_proc( | 297 scoped_refptr<RuleBasedHostResolverProc> resolver_proc( |
295 new RuleBasedHostResolverProc(NULL)); | 298 new RuleBasedHostResolverProc(NULL)); |
296 resolver_proc->AddRule("just.testing", "192.168.1.42"); | 299 resolver_proc->AddRule("just.testing", "192.168.1.42"); |
297 | 300 |
298 scoped_ptr<HostResolver> host_resolver( | 301 scoped_ptr<HostResolver> host_resolver( |
299 CreateHostResolverImpl(resolver_proc)); | 302 CreateHostResolverImpl(resolver_proc)); |
300 | 303 |
301 HostResolver::RequestInfo info(HostPortPair("just.testing", kPortnum)); | 304 HostResolver::RequestInfo info(HostPortPair("just.testing", kPortnum)); |
302 CapturingBoundNetLog log(CapturingNetLog::kUnbounded); | 305 CapturingBoundNetLog log(CapturingNetLog::kUnbounded); |
303 int err = host_resolver->Resolve(info, &addrlist, &callback_, NULL, | 306 int err = host_resolver->Resolve(info, &addrlist, &callback_, NULL, |
304 log.bound()); | 307 log.bound()); |
305 EXPECT_EQ(ERR_IO_PENDING, err); | 308 EXPECT_EQ(ERR_IO_PENDING, err); |
306 | 309 |
307 EXPECT_EQ(1u, log.entries().size()); | 310 net::CapturingNetLog::EntryList entries; |
| 311 log.GetEntries(&entries); |
| 312 |
| 313 EXPECT_EQ(1u, entries.size()); |
308 EXPECT_TRUE(LogContainsBeginEvent( | 314 EXPECT_TRUE(LogContainsBeginEvent( |
309 log.entries(), 0, NetLog::TYPE_HOST_RESOLVER_IMPL)); | 315 entries, 0, NetLog::TYPE_HOST_RESOLVER_IMPL)); |
310 | 316 |
311 MessageLoop::current()->Run(); | 317 MessageLoop::current()->Run(); |
312 | 318 |
313 ASSERT_TRUE(callback_called_); | 319 ASSERT_TRUE(callback_called_); |
314 ASSERT_EQ(OK, callback_result_); | 320 ASSERT_EQ(OK, callback_result_); |
315 | 321 |
316 EXPECT_EQ(2u, log.entries().size()); | 322 log.GetEntries(&entries); |
| 323 |
| 324 EXPECT_EQ(2u, entries.size()); |
317 EXPECT_TRUE(LogContainsEndEvent( | 325 EXPECT_TRUE(LogContainsEndEvent( |
318 log.entries(), 1, NetLog::TYPE_HOST_RESOLVER_IMPL)); | 326 entries, 1, NetLog::TYPE_HOST_RESOLVER_IMPL)); |
319 | 327 |
320 const struct addrinfo* ainfo = addrlist.head(); | 328 const struct addrinfo* ainfo = addrlist.head(); |
321 EXPECT_EQ(static_cast<addrinfo*>(NULL), ainfo->ai_next); | 329 EXPECT_EQ(static_cast<addrinfo*>(NULL), ainfo->ai_next); |
322 EXPECT_EQ(sizeof(struct sockaddr_in), ainfo->ai_addrlen); | 330 EXPECT_EQ(sizeof(struct sockaddr_in), ainfo->ai_addrlen); |
323 | 331 |
324 const struct sockaddr* sa = ainfo->ai_addr; | 332 const struct sockaddr* sa = ainfo->ai_addr; |
325 const struct sockaddr_in* sa_in = (const struct sockaddr_in*) sa; | 333 const struct sockaddr_in* sa_in = (const struct sockaddr_in*) sa; |
326 EXPECT_TRUE(htons(kPortnum) == sa_in->sin_port); | 334 EXPECT_TRUE(htons(kPortnum) == sa_in->sin_port); |
327 EXPECT_TRUE(htonl(0xc0a8012a) == sa_in->sin_addr.s_addr); | 335 EXPECT_TRUE(htonl(0xc0a8012a) == sa_in->sin_addr.s_addr); |
328 } | 336 } |
(...skipping 20 matching lines...) Expand all Loading... |
349 | 357 |
350 // Make sure we will exit the queue even when callback is not called. | 358 // Make sure we will exit the queue even when callback is not called. |
351 MessageLoop::current()->PostDelayedTask(FROM_HERE, | 359 MessageLoop::current()->PostDelayedTask(FROM_HERE, |
352 new MessageLoop::QuitTask(), | 360 new MessageLoop::QuitTask(), |
353 1000); | 361 1000); |
354 MessageLoop::current()->Run(); | 362 MessageLoop::current()->Run(); |
355 } | 363 } |
356 | 364 |
357 resolver_proc->Signal(); | 365 resolver_proc->Signal(); |
358 | 366 |
359 EXPECT_EQ(2u, log.entries().size()); | 367 net::CapturingNetLog::EntryList entries; |
| 368 log.GetEntries(&entries); |
| 369 |
| 370 EXPECT_EQ(2u, entries.size()); |
360 EXPECT_TRUE(LogContainsBeginEvent( | 371 EXPECT_TRUE(LogContainsBeginEvent( |
361 log.entries(), 0, NetLog::TYPE_HOST_RESOLVER_IMPL)); | 372 entries, 0, NetLog::TYPE_HOST_RESOLVER_IMPL)); |
362 EXPECT_TRUE(LogContainsEndEvent( | 373 EXPECT_TRUE(LogContainsEndEvent( |
363 log.entries(), 1, NetLog::TYPE_HOST_RESOLVER_IMPL)); | 374 entries, 1, NetLog::TYPE_HOST_RESOLVER_IMPL)); |
364 | 375 |
365 int pos = net::ExpectLogContainsSomewhereAfter(net_log.entries(), 0, | 376 net::CapturingNetLog::EntryList net_log_entries; |
| 377 net_log.GetEntries(&net_log_entries); |
| 378 |
| 379 int pos = net::ExpectLogContainsSomewhereAfter(net_log_entries, 0, |
366 net::NetLog::TYPE_HOST_RESOLVER_IMPL_REQUEST, | 380 net::NetLog::TYPE_HOST_RESOLVER_IMPL_REQUEST, |
367 net::NetLog::PHASE_BEGIN); | 381 net::NetLog::PHASE_BEGIN); |
368 pos = net::ExpectLogContainsSomewhereAfter(net_log.entries(), pos + 1, | 382 pos = net::ExpectLogContainsSomewhereAfter(net_log_entries, pos + 1, |
369 net::NetLog::TYPE_HOST_RESOLVER_IMPL_JOB, | 383 net::NetLog::TYPE_HOST_RESOLVER_IMPL_JOB, |
370 net::NetLog::PHASE_BEGIN); | 384 net::NetLog::PHASE_BEGIN); |
371 // Both Job and Request need to be cancelled. | 385 // Both Job and Request need to be cancelled. |
372 pos = net::ExpectLogContainsSomewhereAfter(net_log.entries(), pos + 1, | 386 pos = net::ExpectLogContainsSomewhereAfter(net_log_entries, pos + 1, |
373 net::NetLog::TYPE_CANCELLED, | 387 net::NetLog::TYPE_CANCELLED, |
374 net::NetLog::PHASE_NONE); | 388 net::NetLog::PHASE_NONE); |
375 // Don't care about order in which they end, or when the other one is | 389 // Don't care about order in which they end, or when the other one is |
376 // cancelled. | 390 // cancelled. |
377 net::ExpectLogContainsSomewhereAfter(net_log.entries(), pos + 1, | 391 net::ExpectLogContainsSomewhereAfter(net_log_entries, pos + 1, |
378 net::NetLog::TYPE_CANCELLED, | 392 net::NetLog::TYPE_CANCELLED, |
379 net::NetLog::PHASE_NONE); | 393 net::NetLog::PHASE_NONE); |
380 net::ExpectLogContainsSomewhereAfter(net_log.entries(), pos + 1, | 394 net::ExpectLogContainsSomewhereAfter(net_log_entries, pos + 1, |
381 net::NetLog::TYPE_HOST_RESOLVER_IMPL_REQUEST, | 395 net::NetLog::TYPE_HOST_RESOLVER_IMPL_REQUEST, |
382 net::NetLog::PHASE_END); | 396 net::NetLog::PHASE_END); |
383 net::ExpectLogContainsSomewhereAfter(net_log.entries(), pos + 1, | 397 net::ExpectLogContainsSomewhereAfter(net_log_entries, pos + 1, |
384 net::NetLog::TYPE_HOST_RESOLVER_IMPL_JOB, | 398 net::NetLog::TYPE_HOST_RESOLVER_IMPL_JOB, |
385 net::NetLog::PHASE_END); | 399 net::NetLog::PHASE_END); |
386 | 400 |
387 EXPECT_FALSE(callback_called_); | 401 EXPECT_FALSE(callback_called_); |
388 } | 402 } |
389 | 403 |
390 TEST_F(HostResolverImplTest, NumericIPv4Address) { | 404 TEST_F(HostResolverImplTest, NumericIPv4Address) { |
391 // Stevens says dotted quads with AI_UNSPEC resolve to a single sockaddr_in. | 405 // Stevens says dotted quads with AI_UNSPEC resolve to a single sockaddr_in. |
392 | 406 |
393 scoped_refptr<RuleBasedHostResolverProc> resolver_proc( | 407 scoped_refptr<RuleBasedHostResolverProc> resolver_proc( |
(...skipping 542 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
936 host_resolver->AddObserver(&observer); | 950 host_resolver->AddObserver(&observer); |
937 | 951 |
938 AddressList addrlist; | 952 AddressList addrlist; |
939 | 953 |
940 // Resolve "host1". | 954 // Resolve "host1". |
941 HostResolver::RequestInfo info1(HostPortPair("host1", 70)); | 955 HostResolver::RequestInfo info1(HostPortPair("host1", 70)); |
942 CapturingBoundNetLog log(CapturingNetLog::kUnbounded); | 956 CapturingBoundNetLog log(CapturingNetLog::kUnbounded); |
943 int rv = host_resolver->Resolve(info1, &addrlist, NULL, NULL, log.bound()); | 957 int rv = host_resolver->Resolve(info1, &addrlist, NULL, NULL, log.bound()); |
944 EXPECT_EQ(OK, rv); | 958 EXPECT_EQ(OK, rv); |
945 | 959 |
946 EXPECT_EQ(2u, log.entries().size()); | 960 net::CapturingNetLog::EntryList entries; |
| 961 log.GetEntries(&entries); |
| 962 |
| 963 EXPECT_EQ(2u, entries.size()); |
947 EXPECT_TRUE(LogContainsBeginEvent( | 964 EXPECT_TRUE(LogContainsBeginEvent( |
948 log.entries(), 0, NetLog::TYPE_HOST_RESOLVER_IMPL)); | 965 entries, 0, NetLog::TYPE_HOST_RESOLVER_IMPL)); |
949 EXPECT_TRUE(LogContainsEndEvent( | 966 EXPECT_TRUE(LogContainsEndEvent( |
950 log.entries(), 1, NetLog::TYPE_HOST_RESOLVER_IMPL)); | 967 entries, 1, NetLog::TYPE_HOST_RESOLVER_IMPL)); |
951 | 968 |
952 EXPECT_EQ(1U, observer.start_log.size()); | 969 EXPECT_EQ(1U, observer.start_log.size()); |
953 EXPECT_EQ(1U, observer.finish_log.size()); | 970 EXPECT_EQ(1U, observer.finish_log.size()); |
954 EXPECT_EQ(0U, observer.cancel_log.size()); | 971 EXPECT_EQ(0U, observer.cancel_log.size()); |
955 EXPECT_TRUE(observer.start_log[0] == | 972 EXPECT_TRUE(observer.start_log[0] == |
956 CapturingObserver::StartOrCancelEntry(0, info1)); | 973 CapturingObserver::StartOrCancelEntry(0, info1)); |
957 EXPECT_TRUE(observer.finish_log[0] == | 974 EXPECT_TRUE(observer.finish_log[0] == |
958 CapturingObserver::FinishEntry(0, true, info1)); | 975 CapturingObserver::FinishEntry(0, true, info1)); |
959 | 976 |
960 // Resolve "host1" again -- this time it will be served from cache, but it | 977 // Resolve "host1" again -- this time it will be served from cache, but it |
(...skipping 677 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1638 EXPECT_EQ("192.1.98.2", NetAddressToString(addrlist[1].head())); | 1655 EXPECT_EQ("192.1.98.2", NetAddressToString(addrlist[1].head())); |
1639 EXPECT_EQ("192.1.98.1", NetAddressToString(addrlist[2].head())); | 1656 EXPECT_EQ("192.1.98.1", NetAddressToString(addrlist[2].head())); |
1640 EXPECT_EQ("192.1.98.1", NetAddressToString(addrlist[3].head())); | 1657 EXPECT_EQ("192.1.98.1", NetAddressToString(addrlist[3].head())); |
1641 } | 1658 } |
1642 | 1659 |
1643 // TODO(cbentzel): Test a mix of requests with different HostResolverFlags. | 1660 // TODO(cbentzel): Test a mix of requests with different HostResolverFlags. |
1644 | 1661 |
1645 } // namespace | 1662 } // namespace |
1646 | 1663 |
1647 } // namespace net | 1664 } // namespace net |
OLD | NEW |