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 #if defined(OS_WIN) | 7 #if defined(OS_WIN) |
8 #include <ws2tcpip.h> | 8 #include <ws2tcpip.h> |
9 #include <wspiapi.h> | 9 #include <wspiapi.h> |
10 #elif defined(OS_POSIX) | 10 #elif defined(OS_POSIX) |
(...skipping 12 matching lines...) Expand all Loading... |
23 #include "net/base/net_errors.h" | 23 #include "net/base/net_errors.h" |
24 #include "net/base/test_completion_callback.h" | 24 #include "net/base/test_completion_callback.h" |
25 #include "testing/gtest/include/gtest/gtest.h" | 25 #include "testing/gtest/include/gtest/gtest.h" |
26 | 26 |
27 // TODO(eroman): | 27 // TODO(eroman): |
28 // - Test mixing async with sync (in particular how does sync update the | 28 // - Test mixing async with sync (in particular how does sync update the |
29 // cache while an async is already pending). | 29 // cache while an async is already pending). |
30 | 30 |
31 namespace net { | 31 namespace net { |
32 namespace { | 32 namespace { |
33 static const int kMaxCacheEntries = 100; | 33 const int kMaxCacheEntries = 100; |
34 static const int kMaxCacheAgeMs = 60000; | 34 const int kMaxCacheAgeMs = 60000; |
35 | 35 |
36 // A variant of WaitingHostResolverProc that pushes each host mapped into a | 36 // A variant of WaitingHostResolverProc that pushes each host mapped into a |
37 // list. | 37 // list. |
38 // (and uses a manual-reset event rather than auto-reset). | 38 // (and uses a manual-reset event rather than auto-reset). |
39 class CapturingHostResolverProc : public HostResolverProc { | 39 class CapturingHostResolverProc : public HostResolverProc { |
40 public: | 40 public: |
41 explicit CapturingHostResolverProc(HostResolverProc* previous) | 41 explicit CapturingHostResolverProc(HostResolverProc* previous) |
42 : HostResolverProc(previous), event_(true, false) { | 42 : HostResolverProc(previous), event_(true, false) { |
43 } | 43 } |
44 | 44 |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
182 const int kPortnum = 80; | 182 const int kPortnum = 80; |
183 | 183 |
184 scoped_refptr<RuleBasedHostResolverProc> resolver_proc = | 184 scoped_refptr<RuleBasedHostResolverProc> resolver_proc = |
185 new RuleBasedHostResolverProc(NULL); | 185 new RuleBasedHostResolverProc(NULL); |
186 resolver_proc->AddRule("just.testing", "192.168.1.42"); | 186 resolver_proc->AddRule("just.testing", "192.168.1.42"); |
187 | 187 |
188 scoped_refptr<HostResolver> host_resolver( | 188 scoped_refptr<HostResolver> host_resolver( |
189 new HostResolverImpl(resolver_proc, kMaxCacheEntries, kMaxCacheAgeMs)); | 189 new HostResolverImpl(resolver_proc, kMaxCacheEntries, kMaxCacheAgeMs)); |
190 | 190 |
191 HostResolver::RequestInfo info("just.testing", kPortnum); | 191 HostResolver::RequestInfo info("just.testing", kPortnum); |
192 scoped_refptr<LoadLog> log(new LoadLog); | 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->events().size()); | 196 EXPECT_EQ(2u, log->events().size()); |
197 ExpectLogContains(log, 0, LoadLog::TYPE_HOST_RESOLVER_IMPL, | 197 ExpectLogContains(log, 0, LoadLog::TYPE_HOST_RESOLVER_IMPL, |
198 LoadLog::PHASE_BEGIN); | 198 LoadLog::PHASE_BEGIN); |
199 ExpectLogContains(log, 1, LoadLog::TYPE_HOST_RESOLVER_IMPL, | 199 ExpectLogContains(log, 1, LoadLog::TYPE_HOST_RESOLVER_IMPL, |
200 LoadLog::PHASE_END); | 200 LoadLog::PHASE_END); |
201 | 201 |
202 const struct addrinfo* ainfo = adrlist.head(); | 202 const struct addrinfo* ainfo = adrlist.head(); |
(...skipping 11 matching lines...) Expand all Loading... |
214 const int kPortnum = 80; | 214 const int kPortnum = 80; |
215 | 215 |
216 scoped_refptr<RuleBasedHostResolverProc> resolver_proc = | 216 scoped_refptr<RuleBasedHostResolverProc> resolver_proc = |
217 new RuleBasedHostResolverProc(NULL); | 217 new RuleBasedHostResolverProc(NULL); |
218 resolver_proc->AddRule("just.testing", "192.168.1.42"); | 218 resolver_proc->AddRule("just.testing", "192.168.1.42"); |
219 | 219 |
220 scoped_refptr<HostResolver> host_resolver( | 220 scoped_refptr<HostResolver> host_resolver( |
221 new HostResolverImpl(resolver_proc, kMaxCacheEntries, kMaxCacheAgeMs)); | 221 new HostResolverImpl(resolver_proc, kMaxCacheEntries, kMaxCacheAgeMs)); |
222 | 222 |
223 HostResolver::RequestInfo info("just.testing", kPortnum); | 223 HostResolver::RequestInfo info("just.testing", kPortnum); |
224 scoped_refptr<LoadLog> log(new LoadLog); | 224 scoped_refptr<LoadLog> log(new LoadLog(LoadLog::kUnbounded)); |
225 int err = host_resolver->Resolve(info, &adrlist, &callback_, NULL, log); | 225 int err = host_resolver->Resolve(info, &adrlist, &callback_, NULL, log); |
226 EXPECT_EQ(ERR_IO_PENDING, err); | 226 EXPECT_EQ(ERR_IO_PENDING, err); |
227 | 227 |
228 EXPECT_EQ(1u, log->events().size()); | 228 EXPECT_EQ(1u, log->events().size()); |
229 ExpectLogContains(log, 0, LoadLog::TYPE_HOST_RESOLVER_IMPL, | 229 ExpectLogContains(log, 0, LoadLog::TYPE_HOST_RESOLVER_IMPL, |
230 LoadLog::PHASE_BEGIN); | 230 LoadLog::PHASE_BEGIN); |
231 | 231 |
232 MessageLoop::current()->Run(); | 232 MessageLoop::current()->Run(); |
233 | 233 |
234 ASSERT_TRUE(callback_called_); | 234 ASSERT_TRUE(callback_called_); |
(...skipping 10 matching lines...) Expand all Loading... |
245 const struct sockaddr* sa = ainfo->ai_addr; | 245 const struct sockaddr* sa = ainfo->ai_addr; |
246 const struct sockaddr_in* sa_in = (const struct sockaddr_in*) sa; | 246 const struct sockaddr_in* sa_in = (const struct sockaddr_in*) sa; |
247 EXPECT_TRUE(htons(kPortnum) == sa_in->sin_port); | 247 EXPECT_TRUE(htons(kPortnum) == sa_in->sin_port); |
248 EXPECT_TRUE(htonl(0xc0a8012a) == sa_in->sin_addr.s_addr); | 248 EXPECT_TRUE(htonl(0xc0a8012a) == sa_in->sin_addr.s_addr); |
249 } | 249 } |
250 | 250 |
251 TEST_F(HostResolverImplTest, CanceledAsynchronousLookup) { | 251 TEST_F(HostResolverImplTest, CanceledAsynchronousLookup) { |
252 scoped_refptr<WaitingHostResolverProc> resolver_proc = | 252 scoped_refptr<WaitingHostResolverProc> resolver_proc = |
253 new WaitingHostResolverProc(NULL); | 253 new WaitingHostResolverProc(NULL); |
254 | 254 |
255 scoped_refptr<LoadLog> log(new LoadLog); | 255 scoped_refptr<LoadLog> log(new LoadLog(LoadLog::kUnbounded)); |
256 { | 256 { |
257 scoped_refptr<HostResolver> host_resolver( | 257 scoped_refptr<HostResolver> host_resolver( |
258 new HostResolverImpl(resolver_proc, kMaxCacheEntries, kMaxCacheAgeMs)); | 258 new HostResolverImpl(resolver_proc, kMaxCacheEntries, kMaxCacheAgeMs)); |
259 AddressList adrlist; | 259 AddressList adrlist; |
260 const int kPortnum = 80; | 260 const int kPortnum = 80; |
261 | 261 |
262 HostResolver::RequestInfo info("just.testing", kPortnum); | 262 HostResolver::RequestInfo info("just.testing", kPortnum); |
263 int err = host_resolver->Resolve(info, &adrlist, &callback_, NULL, log); | 263 int err = host_resolver->Resolve(info, &adrlist, &callback_, NULL, log); |
264 EXPECT_EQ(ERR_IO_PENDING, err); | 264 EXPECT_EQ(ERR_IO_PENDING, err); |
265 | 265 |
(...skipping 549 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
815 new HostResolverImpl(NULL, kMaxCacheEntries, kMaxCacheAgeMs)); | 815 new HostResolverImpl(NULL, kMaxCacheEntries, kMaxCacheAgeMs)); |
816 | 816 |
817 CapturingObserver observer; | 817 CapturingObserver observer; |
818 | 818 |
819 host_resolver->AddObserver(&observer); | 819 host_resolver->AddObserver(&observer); |
820 | 820 |
821 AddressList addrlist; | 821 AddressList addrlist; |
822 | 822 |
823 // Resolve "host1". | 823 // Resolve "host1". |
824 HostResolver::RequestInfo info1("host1", 70); | 824 HostResolver::RequestInfo info1("host1", 70); |
825 scoped_refptr<LoadLog> log(new LoadLog); | 825 scoped_refptr<LoadLog> log(new LoadLog(LoadLog::kUnbounded)); |
826 int rv = host_resolver->Resolve(info1, &addrlist, NULL, NULL, log); | 826 int rv = host_resolver->Resolve(info1, &addrlist, NULL, NULL, log); |
827 EXPECT_EQ(OK, rv); | 827 EXPECT_EQ(OK, rv); |
828 | 828 |
829 EXPECT_EQ(6u, log->events().size()); | 829 EXPECT_EQ(6u, log->events().size()); |
830 ExpectLogContains(log, 0, LoadLog::TYPE_HOST_RESOLVER_IMPL, | 830 ExpectLogContains(log, 0, LoadLog::TYPE_HOST_RESOLVER_IMPL, |
831 LoadLog::PHASE_BEGIN); | 831 LoadLog::PHASE_BEGIN); |
832 ExpectLogContains(log, 1, LoadLog::TYPE_HOST_RESOLVER_IMPL_OBSERVER_ONSTART, | 832 ExpectLogContains(log, 1, LoadLog::TYPE_HOST_RESOLVER_IMPL_OBSERVER_ONSTART, |
833 LoadLog::PHASE_BEGIN); | 833 LoadLog::PHASE_BEGIN); |
834 ExpectLogContains(log, 2, LoadLog::TYPE_HOST_RESOLVER_IMPL_OBSERVER_ONSTART, | 834 ExpectLogContains(log, 2, LoadLog::TYPE_HOST_RESOLVER_IMPL_OBSERVER_ONSTART, |
835 LoadLog::PHASE_END); | 835 LoadLog::PHASE_END); |
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
956 EXPECT_EQ(0U, observer.finish_log.size()); | 956 EXPECT_EQ(0U, observer.finish_log.size()); |
957 EXPECT_EQ(2U, observer.cancel_log.size()); | 957 EXPECT_EQ(2U, observer.cancel_log.size()); |
958 | 958 |
959 HostResolver::RequestInfo info("host2", 60); | 959 HostResolver::RequestInfo info("host2", 60); |
960 EXPECT_TRUE(observer.cancel_log[1] == | 960 EXPECT_TRUE(observer.cancel_log[1] == |
961 CapturingObserver::StartOrCancelEntry(1, info)); | 961 CapturingObserver::StartOrCancelEntry(1, info)); |
962 } | 962 } |
963 | 963 |
964 } // namespace | 964 } // namespace |
965 } // namespace net | 965 } // namespace net |
OLD | NEW |