Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(154)

Side by Side Diff: net/base/host_resolver_impl_unittest.cc

Issue 165404: Implement LoadLog, and hook up HostResolverImpl to LoadLog.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Do an unsigned/signed thing for GCC compile Created 11 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « net/base/host_resolver_impl.cc ('k') | net/base/load_log.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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)
11 #include <netdb.h> 11 #include <netdb.h>
12 #endif 12 #endif
13 13
14 #include <string> 14 #include <string>
15 15
16 #include "base/compiler_specific.h" 16 #include "base/compiler_specific.h"
17 #include "base/message_loop.h" 17 #include "base/message_loop.h"
18 #include "base/ref_counted.h" 18 #include "base/ref_counted.h"
19 #include "net/base/address_list.h" 19 #include "net/base/address_list.h"
20 #include "net/base/completion_callback.h" 20 #include "net/base/completion_callback.h"
21 #include "net/base/load_log_unittest.h"
21 #include "net/base/mock_host_resolver.h" 22 #include "net/base/mock_host_resolver.h"
22 #include "net/base/net_errors.h" 23 #include "net/base/net_errors.h"
23 #include "net/base/test_completion_callback.h" 24 #include "net/base/test_completion_callback.h"
24 #include "testing/gtest/include/gtest/gtest.h" 25 #include "testing/gtest/include/gtest/gtest.h"
25 26
26 using net::HostResolverImpl; 27 using net::HostResolverImpl;
28 using net::LoadLog;
27 using net::RuleBasedHostResolverProc; 29 using net::RuleBasedHostResolverProc;
28 using net::WaitingHostResolverProc; 30 using net::WaitingHostResolverProc;
29 31
30 // TODO(eroman): 32 // TODO(eroman):
31 // - Test mixing async with sync (in particular how does sync update the 33 // - Test mixing async with sync (in particular how does sync update the
32 // cache while an async is already pending). 34 // cache while an async is already pending).
33 35
34 namespace { 36 namespace {
35 static const int kMaxCacheEntries = 100; 37 static const int kMaxCacheEntries = 100;
36 static const int kMaxCacheAgeMs = 60000; 38 static const int kMaxCacheAgeMs = 60000;
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
180 const int kPortnum = 80; 182 const int kPortnum = 80;
181 183
182 scoped_refptr<RuleBasedHostResolverProc> resolver_proc = 184 scoped_refptr<RuleBasedHostResolverProc> resolver_proc =
183 new RuleBasedHostResolverProc(NULL); 185 new RuleBasedHostResolverProc(NULL);
184 resolver_proc->AddRule("just.testing", "192.168.1.42"); 186 resolver_proc->AddRule("just.testing", "192.168.1.42");
185 187
186 scoped_refptr<net::HostResolver> host_resolver( 188 scoped_refptr<net::HostResolver> host_resolver(
187 new HostResolverImpl(resolver_proc, kMaxCacheEntries, kMaxCacheAgeMs)); 189 new HostResolverImpl(resolver_proc, kMaxCacheEntries, kMaxCacheAgeMs));
188 190
189 net::HostResolver::RequestInfo info("just.testing", kPortnum); 191 net::HostResolver::RequestInfo info("just.testing", kPortnum);
190 int err = host_resolver->Resolve(NULL, info, &adrlist, NULL, NULL); 192 scoped_refptr<LoadLog> log(new LoadLog);
193 int err = host_resolver->Resolve(log, info, &adrlist, NULL, NULL);
191 EXPECT_EQ(net::OK, err); 194 EXPECT_EQ(net::OK, err);
192 195
196 EXPECT_EQ(2u, log->events().size());
197 net::ExpectLogContains(log, 0, LoadLog::TYPE_HOST_RESOLVER_IMPL,
198 LoadLog::PHASE_BEGIN);
199 net::ExpectLogContains(log, 1, LoadLog::TYPE_HOST_RESOLVER_IMPL,
200 LoadLog::PHASE_END);
201
193 const struct addrinfo* ainfo = adrlist.head(); 202 const struct addrinfo* ainfo = adrlist.head();
194 EXPECT_EQ(static_cast<addrinfo*>(NULL), ainfo->ai_next); 203 EXPECT_EQ(static_cast<addrinfo*>(NULL), ainfo->ai_next);
195 EXPECT_EQ(sizeof(struct sockaddr_in), ainfo->ai_addrlen); 204 EXPECT_EQ(sizeof(struct sockaddr_in), ainfo->ai_addrlen);
196 205
197 const struct sockaddr* sa = ainfo->ai_addr; 206 const struct sockaddr* sa = ainfo->ai_addr;
198 const struct sockaddr_in* sa_in = (const struct sockaddr_in*) sa; 207 const struct sockaddr_in* sa_in = (const struct sockaddr_in*) sa;
199 EXPECT_TRUE(htons(kPortnum) == sa_in->sin_port); 208 EXPECT_TRUE(htons(kPortnum) == sa_in->sin_port);
200 EXPECT_TRUE(htonl(0xc0a8012a) == sa_in->sin_addr.s_addr); 209 EXPECT_TRUE(htonl(0xc0a8012a) == sa_in->sin_addr.s_addr);
201 } 210 }
202 211
203 TEST_F(HostResolverImplTest, AsynchronousLookup) { 212 TEST_F(HostResolverImplTest, AsynchronousLookup) {
204 net::AddressList adrlist; 213 net::AddressList adrlist;
205 const int kPortnum = 80; 214 const int kPortnum = 80;
206 215
207 scoped_refptr<RuleBasedHostResolverProc> resolver_proc = 216 scoped_refptr<RuleBasedHostResolverProc> resolver_proc =
208 new RuleBasedHostResolverProc(NULL); 217 new RuleBasedHostResolverProc(NULL);
209 resolver_proc->AddRule("just.testing", "192.168.1.42"); 218 resolver_proc->AddRule("just.testing", "192.168.1.42");
210 219
211 scoped_refptr<net::HostResolver> host_resolver( 220 scoped_refptr<net::HostResolver> host_resolver(
212 new HostResolverImpl(resolver_proc, kMaxCacheEntries, kMaxCacheAgeMs)); 221 new HostResolverImpl(resolver_proc, kMaxCacheEntries, kMaxCacheAgeMs));
213 222
214 net::HostResolver::RequestInfo info("just.testing", kPortnum); 223 net::HostResolver::RequestInfo info("just.testing", kPortnum);
215 int err = host_resolver->Resolve(NULL, info, &adrlist, &callback_, NULL); 224 scoped_refptr<LoadLog> log(new LoadLog);
225 int err = host_resolver->Resolve(log, info, &adrlist, &callback_, NULL);
216 EXPECT_EQ(net::ERR_IO_PENDING, err); 226 EXPECT_EQ(net::ERR_IO_PENDING, err);
217 227
228 EXPECT_EQ(1u, log->events().size());
229 net::ExpectLogContains(
230 log, 0, LoadLog::TYPE_HOST_RESOLVER_IMPL, LoadLog::PHASE_BEGIN);
231
218 MessageLoop::current()->Run(); 232 MessageLoop::current()->Run();
219 233
220 ASSERT_TRUE(callback_called_); 234 ASSERT_TRUE(callback_called_);
221 ASSERT_EQ(net::OK, callback_result_); 235 ASSERT_EQ(net::OK, callback_result_);
222 236
237 EXPECT_EQ(2u, log->events().size());
238 net::ExpectLogContains(log, 1, LoadLog::TYPE_HOST_RESOLVER_IMPL,
239 LoadLog::PHASE_END);
240
223 const struct addrinfo* ainfo = adrlist.head(); 241 const struct addrinfo* ainfo = adrlist.head();
224 EXPECT_EQ(static_cast<addrinfo*>(NULL), ainfo->ai_next); 242 EXPECT_EQ(static_cast<addrinfo*>(NULL), ainfo->ai_next);
225 EXPECT_EQ(sizeof(struct sockaddr_in), ainfo->ai_addrlen); 243 EXPECT_EQ(sizeof(struct sockaddr_in), ainfo->ai_addrlen);
226 244
227 const struct sockaddr* sa = ainfo->ai_addr; 245 const struct sockaddr* sa = ainfo->ai_addr;
228 const struct sockaddr_in* sa_in = (const struct sockaddr_in*) sa; 246 const struct sockaddr_in* sa_in = (const struct sockaddr_in*) sa;
229 EXPECT_TRUE(htons(kPortnum) == sa_in->sin_port); 247 EXPECT_TRUE(htons(kPortnum) == sa_in->sin_port);
230 EXPECT_TRUE(htonl(0xc0a8012a) == sa_in->sin_addr.s_addr); 248 EXPECT_TRUE(htonl(0xc0a8012a) == sa_in->sin_addr.s_addr);
231 } 249 }
232 250
233 TEST_F(HostResolverImplTest, CanceledAsynchronousLookup) { 251 TEST_F(HostResolverImplTest, CanceledAsynchronousLookup) {
234 scoped_refptr<WaitingHostResolverProc> resolver_proc = 252 scoped_refptr<WaitingHostResolverProc> resolver_proc =
235 new WaitingHostResolverProc(NULL); 253 new WaitingHostResolverProc(NULL);
236 254
255 scoped_refptr<LoadLog> log(new LoadLog);
237 { 256 {
238 scoped_refptr<net::HostResolver> host_resolver( 257 scoped_refptr<net::HostResolver> host_resolver(
239 new HostResolverImpl(resolver_proc, kMaxCacheEntries, kMaxCacheAgeMs)); 258 new HostResolverImpl(resolver_proc, kMaxCacheEntries, kMaxCacheAgeMs));
240 net::AddressList adrlist; 259 net::AddressList adrlist;
241 const int kPortnum = 80; 260 const int kPortnum = 80;
242 261
243 net::HostResolver::RequestInfo info("just.testing", kPortnum); 262 net::HostResolver::RequestInfo info("just.testing", kPortnum);
244 int err = host_resolver->Resolve(NULL, info, &adrlist, &callback_, NULL); 263 int err = host_resolver->Resolve(log, info, &adrlist, &callback_, NULL);
245 EXPECT_EQ(net::ERR_IO_PENDING, err); 264 EXPECT_EQ(net::ERR_IO_PENDING, err);
246 265
247 // Make sure we will exit the queue even when callback is not called. 266 // Make sure we will exit the queue even when callback is not called.
248 MessageLoop::current()->PostDelayedTask(FROM_HERE, 267 MessageLoop::current()->PostDelayedTask(FROM_HERE,
249 new MessageLoop::QuitTask(), 268 new MessageLoop::QuitTask(),
250 1000); 269 1000);
251 MessageLoop::current()->Run(); 270 MessageLoop::current()->Run();
252 } 271 }
253 272
254 resolver_proc->Signal(); 273 resolver_proc->Signal();
255 274
275 EXPECT_EQ(3u, log->events().size());
276 net::ExpectLogContains(log, 0, LoadLog::TYPE_HOST_RESOLVER_IMPL,
277 LoadLog::PHASE_BEGIN);
278 net::ExpectLogContains(log, 1, LoadLog::TYPE_CANCELLED, LoadLog::PHASE_NONE);
279 net::ExpectLogContains(log, 2, LoadLog::TYPE_HOST_RESOLVER_IMPL,
280 LoadLog::PHASE_END);
281
256 EXPECT_FALSE(callback_called_); 282 EXPECT_FALSE(callback_called_);
257 } 283 }
258 284
259 TEST_F(HostResolverImplTest, NumericIPv4Address) { 285 TEST_F(HostResolverImplTest, NumericIPv4Address) {
260 // Stevens says dotted quads with AI_UNSPEC resolve to a single sockaddr_in. 286 // Stevens says dotted quads with AI_UNSPEC resolve to a single sockaddr_in.
261 287
262 scoped_refptr<RuleBasedHostResolverProc> resolver_proc = 288 scoped_refptr<RuleBasedHostResolverProc> resolver_proc =
263 new RuleBasedHostResolverProc(NULL); 289 new RuleBasedHostResolverProc(NULL);
264 resolver_proc->AllowDirectLookup("*"); 290 resolver_proc->AllowDirectLookup("*");
265 291
(...skipping 528 matching lines...) Expand 10 before | Expand all | Expand 10 after
794 new HostResolverImpl(NULL, kMaxCacheEntries, kMaxCacheAgeMs)); 820 new HostResolverImpl(NULL, kMaxCacheEntries, kMaxCacheAgeMs));
795 821
796 CapturingObserver observer; 822 CapturingObserver observer;
797 823
798 host_resolver->AddObserver(&observer); 824 host_resolver->AddObserver(&observer);
799 825
800 net::AddressList addrlist; 826 net::AddressList addrlist;
801 827
802 // Resolve "host1". 828 // Resolve "host1".
803 net::HostResolver::RequestInfo info1("host1", 70); 829 net::HostResolver::RequestInfo info1("host1", 70);
804 int rv = host_resolver->Resolve(NULL, info1, &addrlist, NULL, NULL); 830 scoped_refptr<LoadLog> log(new LoadLog);
831 int rv = host_resolver->Resolve(log, info1, &addrlist, NULL, NULL);
805 EXPECT_EQ(net::OK, rv); 832 EXPECT_EQ(net::OK, rv);
806 833
834 EXPECT_EQ(6u, log->events().size());
835 net::ExpectLogContains(log, 0,
836 LoadLog::TYPE_HOST_RESOLVER_IMPL, LoadLog::PHASE_BEGIN);
837 net::ExpectLogContains(log, 1,
838 LoadLog::TYPE_HOST_RESOLVER_IMPL_OBSERVER_ONSTART, LoadLog::PHASE_BEGIN);
839 net::ExpectLogContains(log, 2,
840 LoadLog::TYPE_HOST_RESOLVER_IMPL_OBSERVER_ONSTART, LoadLog::PHASE_END);
841 net::ExpectLogContains(log, 3,
842 LoadLog::TYPE_HOST_RESOLVER_IMPL_OBSERVER_ONFINISH, LoadLog::PHASE_BEGIN);
843 net::ExpectLogContains(log, 4,
844 LoadLog::TYPE_HOST_RESOLVER_IMPL_OBSERVER_ONFINISH, LoadLog::PHASE_END);
845 net::ExpectLogContains(log, 5,
846 LoadLog::TYPE_HOST_RESOLVER_IMPL, LoadLog::PHASE_END);
847
807 EXPECT_EQ(1U, observer.start_log.size()); 848 EXPECT_EQ(1U, observer.start_log.size());
808 EXPECT_EQ(1U, observer.finish_log.size()); 849 EXPECT_EQ(1U, observer.finish_log.size());
809 EXPECT_EQ(0U, observer.cancel_log.size()); 850 EXPECT_EQ(0U, observer.cancel_log.size());
810 EXPECT_TRUE(observer.start_log[0] == 851 EXPECT_TRUE(observer.start_log[0] ==
811 CapturingObserver::StartOrCancelEntry(0, info1)); 852 CapturingObserver::StartOrCancelEntry(0, info1));
812 EXPECT_TRUE(observer.finish_log[0] == 853 EXPECT_TRUE(observer.finish_log[0] ==
813 CapturingObserver::FinishEntry(0, true, info1)); 854 CapturingObserver::FinishEntry(0, true, info1));
814 855
815 // Resolve "host1" again -- this time it will be served from cache, but it 856 // Resolve "host1" again -- this time it will be served from cache, but it
816 // should still notify of completion. 857 // should still notify of completion.
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
919 EXPECT_EQ(2U, observer.start_log.size()); 960 EXPECT_EQ(2U, observer.start_log.size());
920 EXPECT_EQ(0U, observer.finish_log.size()); 961 EXPECT_EQ(0U, observer.finish_log.size());
921 EXPECT_EQ(2U, observer.cancel_log.size()); 962 EXPECT_EQ(2U, observer.cancel_log.size());
922 963
923 net::HostResolver::RequestInfo info("host2", 60); 964 net::HostResolver::RequestInfo info("host2", 60);
924 EXPECT_TRUE(observer.cancel_log[1] == 965 EXPECT_TRUE(observer.cancel_log[1] ==
925 CapturingObserver::StartOrCancelEntry(1, info)); 966 CapturingObserver::StartOrCancelEntry(1, info));
926 } 967 }
927 968
928 } // namespace 969 } // namespace
OLDNEW
« no previous file with comments | « net/base/host_resolver_impl.cc ('k') | net/base/load_log.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698