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 |