| OLD | NEW |
| 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 187 | 187 |
| 188 scoped_refptr<HostResolver> host_resolver( | 188 scoped_refptr<HostResolver> host_resolver( |
| 189 new HostResolverImpl(resolver_proc, CreateDefaultCache(), NULL)); | 189 new HostResolverImpl(resolver_proc, CreateDefaultCache(), NULL)); |
| 190 | 190 |
| 191 HostResolver::RequestInfo info("just.testing", kPortnum); | 191 HostResolver::RequestInfo info("just.testing", kPortnum); |
| 192 scoped_refptr<LoadLog> log(new LoadLog(LoadLog::kUnbounded)); | 192 scoped_refptr<LoadLog> log(new LoadLog(LoadLog::kUnbounded)); |
| 193 int err = host_resolver->Resolve(info, &adrlist, NULL, NULL, log); | 193 int err = host_resolver->Resolve(info, &adrlist, NULL, NULL, log); |
| 194 EXPECT_EQ(OK, err); | 194 EXPECT_EQ(OK, err); |
| 195 | 195 |
| 196 EXPECT_EQ(2u, log->entries().size()); | 196 EXPECT_EQ(2u, log->entries().size()); |
| 197 ExpectLogContains(log, 0, LoadLog::TYPE_HOST_RESOLVER_IMPL, | 197 EXPECT_TRUE(LogContainsBeginEvent(*log, 0, LoadLog::TYPE_HOST_RESOLVER_IMPL)); |
| 198 LoadLog::PHASE_BEGIN); | 198 EXPECT_TRUE(LogContainsEndEvent(*log, 1, LoadLog::TYPE_HOST_RESOLVER_IMPL)); |
| 199 ExpectLogContains(log, 1, LoadLog::TYPE_HOST_RESOLVER_IMPL, | |
| 200 LoadLog::PHASE_END); | |
| 201 | 199 |
| 202 const struct addrinfo* ainfo = adrlist.head(); | 200 const struct addrinfo* ainfo = adrlist.head(); |
| 203 EXPECT_EQ(static_cast<addrinfo*>(NULL), ainfo->ai_next); | 201 EXPECT_EQ(static_cast<addrinfo*>(NULL), ainfo->ai_next); |
| 204 EXPECT_EQ(sizeof(struct sockaddr_in), ainfo->ai_addrlen); | 202 EXPECT_EQ(sizeof(struct sockaddr_in), ainfo->ai_addrlen); |
| 205 | 203 |
| 206 const struct sockaddr* sa = ainfo->ai_addr; | 204 const struct sockaddr* sa = ainfo->ai_addr; |
| 207 const struct sockaddr_in* sa_in = (const struct sockaddr_in*) sa; | 205 const struct sockaddr_in* sa_in = (const struct sockaddr_in*) sa; |
| 208 EXPECT_TRUE(htons(kPortnum) == sa_in->sin_port); | 206 EXPECT_TRUE(htons(kPortnum) == sa_in->sin_port); |
| 209 EXPECT_TRUE(htonl(0xc0a8012a) == sa_in->sin_addr.s_addr); | 207 EXPECT_TRUE(htonl(0xc0a8012a) == sa_in->sin_addr.s_addr); |
| 210 } | 208 } |
| 211 | 209 |
| 212 TEST_F(HostResolverImplTest, AsynchronousLookup) { | 210 TEST_F(HostResolverImplTest, AsynchronousLookup) { |
| 213 AddressList adrlist; | 211 AddressList adrlist; |
| 214 const int kPortnum = 80; | 212 const int kPortnum = 80; |
| 215 | 213 |
| 216 scoped_refptr<RuleBasedHostResolverProc> resolver_proc = | 214 scoped_refptr<RuleBasedHostResolverProc> resolver_proc = |
| 217 new RuleBasedHostResolverProc(NULL); | 215 new RuleBasedHostResolverProc(NULL); |
| 218 resolver_proc->AddRule("just.testing", "192.168.1.42"); | 216 resolver_proc->AddRule("just.testing", "192.168.1.42"); |
| 219 | 217 |
| 220 scoped_refptr<HostResolver> host_resolver( | 218 scoped_refptr<HostResolver> host_resolver( |
| 221 new HostResolverImpl(resolver_proc, CreateDefaultCache(), NULL)); | 219 new HostResolverImpl(resolver_proc, CreateDefaultCache(), NULL)); |
| 222 | 220 |
| 223 HostResolver::RequestInfo info("just.testing", kPortnum); | 221 HostResolver::RequestInfo info("just.testing", kPortnum); |
| 224 scoped_refptr<LoadLog> log(new LoadLog(LoadLog::kUnbounded)); | 222 scoped_refptr<LoadLog> log(new LoadLog(LoadLog::kUnbounded)); |
| 225 int err = host_resolver->Resolve(info, &adrlist, &callback_, NULL, log); | 223 int err = host_resolver->Resolve(info, &adrlist, &callback_, NULL, log); |
| 226 EXPECT_EQ(ERR_IO_PENDING, err); | 224 EXPECT_EQ(ERR_IO_PENDING, err); |
| 227 | 225 |
| 228 EXPECT_EQ(1u, log->entries().size()); | 226 EXPECT_EQ(1u, log->entries().size()); |
| 229 ExpectLogContains(log, 0, LoadLog::TYPE_HOST_RESOLVER_IMPL, | 227 EXPECT_TRUE(LogContainsBeginEvent(*log, 0, LoadLog::TYPE_HOST_RESOLVER_IMPL)); |
| 230 LoadLog::PHASE_BEGIN); | |
| 231 | 228 |
| 232 MessageLoop::current()->Run(); | 229 MessageLoop::current()->Run(); |
| 233 | 230 |
| 234 ASSERT_TRUE(callback_called_); | 231 ASSERT_TRUE(callback_called_); |
| 235 ASSERT_EQ(OK, callback_result_); | 232 ASSERT_EQ(OK, callback_result_); |
| 236 | 233 |
| 237 EXPECT_EQ(2u, log->entries().size()); | 234 EXPECT_EQ(2u, log->entries().size()); |
| 238 ExpectLogContains(log, 1, LoadLog::TYPE_HOST_RESOLVER_IMPL, | 235 EXPECT_TRUE(LogContainsEndEvent(*log, 1, LoadLog::TYPE_HOST_RESOLVER_IMPL)); |
| 239 LoadLog::PHASE_END); | |
| 240 | 236 |
| 241 const struct addrinfo* ainfo = adrlist.head(); | 237 const struct addrinfo* ainfo = adrlist.head(); |
| 242 EXPECT_EQ(static_cast<addrinfo*>(NULL), ainfo->ai_next); | 238 EXPECT_EQ(static_cast<addrinfo*>(NULL), ainfo->ai_next); |
| 243 EXPECT_EQ(sizeof(struct sockaddr_in), ainfo->ai_addrlen); | 239 EXPECT_EQ(sizeof(struct sockaddr_in), ainfo->ai_addrlen); |
| 244 | 240 |
| 245 const struct sockaddr* sa = ainfo->ai_addr; | 241 const struct sockaddr* sa = ainfo->ai_addr; |
| 246 const struct sockaddr_in* sa_in = (const struct sockaddr_in*) sa; | 242 const struct sockaddr_in* sa_in = (const struct sockaddr_in*) sa; |
| 247 EXPECT_TRUE(htons(kPortnum) == sa_in->sin_port); | 243 EXPECT_TRUE(htons(kPortnum) == sa_in->sin_port); |
| 248 EXPECT_TRUE(htonl(0xc0a8012a) == sa_in->sin_addr.s_addr); | 244 EXPECT_TRUE(htonl(0xc0a8012a) == sa_in->sin_addr.s_addr); |
| 249 } | 245 } |
| (...skipping 16 matching lines...) Expand all Loading... |
| 266 // Make sure we will exit the queue even when callback is not called. | 262 // Make sure we will exit the queue even when callback is not called. |
| 267 MessageLoop::current()->PostDelayedTask(FROM_HERE, | 263 MessageLoop::current()->PostDelayedTask(FROM_HERE, |
| 268 new MessageLoop::QuitTask(), | 264 new MessageLoop::QuitTask(), |
| 269 1000); | 265 1000); |
| 270 MessageLoop::current()->Run(); | 266 MessageLoop::current()->Run(); |
| 271 } | 267 } |
| 272 | 268 |
| 273 resolver_proc->Signal(); | 269 resolver_proc->Signal(); |
| 274 | 270 |
| 275 EXPECT_EQ(3u, log->entries().size()); | 271 EXPECT_EQ(3u, log->entries().size()); |
| 276 ExpectLogContains(log, 0, LoadLog::TYPE_HOST_RESOLVER_IMPL, | 272 EXPECT_TRUE(LogContainsBeginEvent(*log, 0, LoadLog::TYPE_HOST_RESOLVER_IMPL)); |
| 277 LoadLog::PHASE_BEGIN); | 273 EXPECT_TRUE(LogContainsEvent( |
| 278 ExpectLogContains(log, 1, LoadLog::TYPE_CANCELLED, LoadLog::PHASE_NONE); | 274 *log, 1, LoadLog::TYPE_CANCELLED, LoadLog::PHASE_NONE)); |
| 279 ExpectLogContains(log, 2, LoadLog::TYPE_HOST_RESOLVER_IMPL, | 275 EXPECT_TRUE(LogContainsEndEvent(*log, 2, LoadLog::TYPE_HOST_RESOLVER_IMPL)); |
| 280 LoadLog::PHASE_END); | |
| 281 | 276 |
| 282 EXPECT_FALSE(callback_called_); | 277 EXPECT_FALSE(callback_called_); |
| 283 } | 278 } |
| 284 | 279 |
| 285 TEST_F(HostResolverImplTest, NumericIPv4Address) { | 280 TEST_F(HostResolverImplTest, NumericIPv4Address) { |
| 286 // Stevens says dotted quads with AI_UNSPEC resolve to a single sockaddr_in. | 281 // Stevens says dotted quads with AI_UNSPEC resolve to a single sockaddr_in. |
| 287 | 282 |
| 288 scoped_refptr<RuleBasedHostResolverProc> resolver_proc = | 283 scoped_refptr<RuleBasedHostResolverProc> resolver_proc = |
| 289 new RuleBasedHostResolverProc(NULL); | 284 new RuleBasedHostResolverProc(NULL); |
| 290 resolver_proc->AllowDirectLookup("*"); | 285 resolver_proc->AllowDirectLookup("*"); |
| (...skipping 529 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 820 | 815 |
| 821 AddressList addrlist; | 816 AddressList addrlist; |
| 822 | 817 |
| 823 // Resolve "host1". | 818 // Resolve "host1". |
| 824 HostResolver::RequestInfo info1("host1", 70); | 819 HostResolver::RequestInfo info1("host1", 70); |
| 825 scoped_refptr<LoadLog> log(new LoadLog(LoadLog::kUnbounded)); | 820 scoped_refptr<LoadLog> log(new LoadLog(LoadLog::kUnbounded)); |
| 826 int rv = host_resolver->Resolve(info1, &addrlist, NULL, NULL, log); | 821 int rv = host_resolver->Resolve(info1, &addrlist, NULL, NULL, log); |
| 827 EXPECT_EQ(OK, rv); | 822 EXPECT_EQ(OK, rv); |
| 828 | 823 |
| 829 EXPECT_EQ(6u, log->entries().size()); | 824 EXPECT_EQ(6u, log->entries().size()); |
| 830 ExpectLogContains(log, 0, LoadLog::TYPE_HOST_RESOLVER_IMPL, | 825 EXPECT_TRUE(LogContainsBeginEvent(*log, 0, LoadLog::TYPE_HOST_RESOLVER_IMPL)); |
| 831 LoadLog::PHASE_BEGIN); | 826 EXPECT_TRUE(LogContainsBeginEvent( |
| 832 ExpectLogContains(log, 1, LoadLog::TYPE_HOST_RESOLVER_IMPL_OBSERVER_ONSTART, | 827 *log, 1, LoadLog::TYPE_HOST_RESOLVER_IMPL_OBSERVER_ONSTART)); |
| 833 LoadLog::PHASE_BEGIN); | 828 EXPECT_TRUE(LogContainsEndEvent( |
| 834 ExpectLogContains(log, 2, LoadLog::TYPE_HOST_RESOLVER_IMPL_OBSERVER_ONSTART, | 829 *log, 2, LoadLog::TYPE_HOST_RESOLVER_IMPL_OBSERVER_ONSTART)); |
| 835 LoadLog::PHASE_END); | 830 EXPECT_TRUE(LogContainsBeginEvent( |
| 836 ExpectLogContains(log, 3, LoadLog::TYPE_HOST_RESOLVER_IMPL_OBSERVER_ONFINISH, | 831 *log, 3, LoadLog::TYPE_HOST_RESOLVER_IMPL_OBSERVER_ONFINISH)); |
| 837 LoadLog::PHASE_BEGIN); | 832 EXPECT_TRUE(LogContainsEndEvent( |
| 838 ExpectLogContains(log, 4, LoadLog::TYPE_HOST_RESOLVER_IMPL_OBSERVER_ONFINISH, | 833 *log, 4, LoadLog::TYPE_HOST_RESOLVER_IMPL_OBSERVER_ONFINISH)); |
| 839 LoadLog::PHASE_END); | 834 EXPECT_TRUE(LogContainsEndEvent( |
| 840 ExpectLogContains(log, 5, LoadLog::TYPE_HOST_RESOLVER_IMPL, | 835 *log, 5, LoadLog::TYPE_HOST_RESOLVER_IMPL)); |
| 841 LoadLog::PHASE_END); | |
| 842 | 836 |
| 843 EXPECT_EQ(1U, observer.start_log.size()); | 837 EXPECT_EQ(1U, observer.start_log.size()); |
| 844 EXPECT_EQ(1U, observer.finish_log.size()); | 838 EXPECT_EQ(1U, observer.finish_log.size()); |
| 845 EXPECT_EQ(0U, observer.cancel_log.size()); | 839 EXPECT_EQ(0U, observer.cancel_log.size()); |
| 846 EXPECT_TRUE(observer.start_log[0] == | 840 EXPECT_TRUE(observer.start_log[0] == |
| 847 CapturingObserver::StartOrCancelEntry(0, info1)); | 841 CapturingObserver::StartOrCancelEntry(0, info1)); |
| 848 EXPECT_TRUE(observer.finish_log[0] == | 842 EXPECT_TRUE(observer.finish_log[0] == |
| 849 CapturingObserver::FinishEntry(0, true, info1)); | 843 CapturingObserver::FinishEntry(0, true, info1)); |
| 850 | 844 |
| 851 // Resolve "host1" again -- this time it will be served from cache, but it | 845 // Resolve "host1" again -- this time it will be served from cache, but it |
| (...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 988 | 982 |
| 989 // Resolve "host1" again -- this time it won't be served from cache, so it | 983 // Resolve "host1" again -- this time it won't be served from cache, so it |
| 990 // will complete asynchronously. | 984 // will complete asynchronously. |
| 991 rv = host_resolver->Resolve(info1, &addrlist, &callback, NULL, NULL); | 985 rv = host_resolver->Resolve(info1, &addrlist, &callback, NULL, NULL); |
| 992 ASSERT_EQ(ERR_IO_PENDING, rv); // Should complete asynchronously. | 986 ASSERT_EQ(ERR_IO_PENDING, rv); // Should complete asynchronously. |
| 993 EXPECT_EQ(OK, callback.WaitForResult()); | 987 EXPECT_EQ(OK, callback.WaitForResult()); |
| 994 } | 988 } |
| 995 | 989 |
| 996 } // namespace | 990 } // namespace |
| 997 } // namespace net | 991 } // namespace net |
| OLD | NEW |