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

Side by Side Diff: chrome/browser/net/dns_master_unittest.cc

Issue 523076: Clear the host cache when closing the last incognito window.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Address jar's comments Created 10 years, 11 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
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 <time.h> 5 #include <time.h>
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <sstream> 8 #include <sstream>
9 #include <string> 9 #include <string>
10 10
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
56 const NameList hosts_; 56 const NameList hosts_;
57 HelperTimer* timer_; 57 HelperTimer* timer_;
58 }; 58 };
59 59
60 class DnsMasterTest : public testing::Test { 60 class DnsMasterTest : public testing::Test {
61 public: 61 public:
62 DnsMasterTest() 62 DnsMasterTest()
63 : io_thread_(ChromeThread::IO, &loop_), 63 : io_thread_(ChromeThread::IO, &loop_),
64 host_resolver_(new net::MockCachingHostResolver()), 64 host_resolver_(new net::MockCachingHostResolver()),
65 default_max_queueing_delay_(TimeDelta::FromMilliseconds( 65 default_max_queueing_delay_(TimeDelta::FromMilliseconds(
66 DnsPrefetcherInit::kMaxQueueingDelayMs)) { 66 DnsGlobalInit::kMaxPrefetchQueueingDelayMs)) {
67 } 67 }
68 68
69 protected: 69 protected:
70 virtual void SetUp() { 70 virtual void SetUp() {
71 #if defined(OS_WIN) 71 #if defined(OS_WIN)
72 net::EnsureWinsockInit(); 72 net::EnsureWinsockInit();
73 #endif 73 #endif
74 // Since we are using a caching HostResolver, the following latencies will 74 // Since we are using a caching HostResolver, the following latencies will
75 // only be incurred by the first request, after which the result will be 75 // only be incurred by the first request, after which the result will be
76 // cached internally by |host_resolver_|. 76 // cached internally by |host_resolver_|.
(...skipping 15 matching lines...) Expand all
92 private: 92 private:
93 // IMPORTANT: do not move this below |host_resolver_|; the host resolver 93 // IMPORTANT: do not move this below |host_resolver_|; the host resolver
94 // must not outlive the message loop, otherwise bad things can happen 94 // must not outlive the message loop, otherwise bad things can happen
95 // (like posting to a deleted message loop). 95 // (like posting to a deleted message loop).
96 MessageLoop loop_; 96 MessageLoop loop_;
97 ChromeThread io_thread_; 97 ChromeThread io_thread_;
98 98
99 protected: 99 protected:
100 scoped_refptr<net::MockCachingHostResolver> host_resolver_; 100 scoped_refptr<net::MockCachingHostResolver> host_resolver_;
101 101
102 // Shorthand to access TimeDelta of DnsPrefetcherInit::kMaxQueueingDelayMs. 102 // Shorthand to access TimeDelta of DnsGlobalInit::kMaxQueueingDelayMs.
103 // (It would be a static constant... except style rules preclude that :-/ ). 103 // (It would be a static constant... except style rules preclude that :-/ ).
104 const TimeDelta default_max_queueing_delay_; 104 const TimeDelta default_max_queueing_delay_;
105 }; 105 };
106 106
107 //------------------------------------------------------------------------------ 107 //------------------------------------------------------------------------------
108 108
109 TEST_F(DnsMasterTest, StartupShutdownTest) { 109 TEST_F(DnsMasterTest, StartupShutdownTest) {
110 scoped_refptr<DnsMaster> testing_master = new DnsMaster(host_resolver_, 110 scoped_refptr<DnsMaster> testing_master = new DnsMaster(host_resolver_,
111 default_max_queueing_delay_, DnsPrefetcherInit::kMaxConcurrentLookups); 111 default_max_queueing_delay_,
112 DnsGlobalInit::kMaxPrefetchConcurrentLookups);
112 testing_master->Shutdown(); 113 testing_master->Shutdown();
113 } 114 }
114 115
115 TEST_F(DnsMasterTest, BenefitLookupTest) { 116 TEST_F(DnsMasterTest, BenefitLookupTest) {
116 scoped_refptr<DnsMaster> testing_master = new DnsMaster(host_resolver_, 117 scoped_refptr<DnsMaster> testing_master = new DnsMaster(host_resolver_,
117 default_max_queueing_delay_, DnsPrefetcherInit::kMaxConcurrentLookups); 118 default_max_queueing_delay_,
119 DnsGlobalInit::kMaxPrefetchConcurrentLookups);
118 120
119 std::string goog("www.google.com"), 121 std::string goog("www.google.com"),
120 goog2("gmail.google.com.com"), 122 goog2("gmail.google.com.com"),
121 goog3("mail.google.com"), 123 goog3("mail.google.com"),
122 goog4("gmail.com"); 124 goog4("gmail.com");
123 DnsHostInfo goog_info, goog2_info, goog3_info, goog4_info; 125 DnsHostInfo goog_info, goog2_info, goog3_info, goog4_info;
124 126
125 // Simulate getting similar names from a network observer 127 // Simulate getting similar names from a network observer
126 goog_info.SetHostname(goog); 128 goog_info.SetHostname(goog);
127 goog2_info.SetHostname(goog2); 129 goog2_info.SetHostname(goog2);
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
171 173
172 testing_master->Shutdown(); 174 testing_master->Shutdown();
173 } 175 }
174 176
175 TEST_F(DnsMasterTest, ShutdownWhenResolutionIsPendingTest) { 177 TEST_F(DnsMasterTest, ShutdownWhenResolutionIsPendingTest) {
176 scoped_refptr<net::WaitingHostResolverProc> resolver_proc = 178 scoped_refptr<net::WaitingHostResolverProc> resolver_proc =
177 new net::WaitingHostResolverProc(NULL); 179 new net::WaitingHostResolverProc(NULL);
178 host_resolver_->Reset(resolver_proc); 180 host_resolver_->Reset(resolver_proc);
179 181
180 scoped_refptr<DnsMaster> testing_master = new DnsMaster(host_resolver_, 182 scoped_refptr<DnsMaster> testing_master = new DnsMaster(host_resolver_,
181 default_max_queueing_delay_, DnsPrefetcherInit::kMaxConcurrentLookups); 183 default_max_queueing_delay_,
184 DnsGlobalInit::kMaxPrefetchConcurrentLookups);
182 185
183 std::string localhost("127.0.0.1"); 186 std::string localhost("127.0.0.1");
184 NameList names; 187 NameList names;
185 names.insert(names.end(), localhost); 188 names.insert(names.end(), localhost);
186 189
187 testing_master->ResolveList(names, DnsHostInfo::PAGE_SCAN_MOTIVATED); 190 testing_master->ResolveList(names, DnsHostInfo::PAGE_SCAN_MOTIVATED);
188 191
189 MessageLoop::current()->PostDelayedTask(FROM_HERE, 192 MessageLoop::current()->PostDelayedTask(FROM_HERE,
190 new MessageLoop::QuitTask(), 500); 193 new MessageLoop::QuitTask(), 500);
191 MessageLoop::current()->Run(); 194 MessageLoop::current()->Run();
192 195
193 EXPECT_FALSE(testing_master->WasFound(localhost)); 196 EXPECT_FALSE(testing_master->WasFound(localhost));
194 197
195 testing_master->Shutdown(); 198 testing_master->Shutdown();
196 199
197 // Clean up after ourselves. 200 // Clean up after ourselves.
198 resolver_proc->Signal(); 201 resolver_proc->Signal();
199 MessageLoop::current()->RunAllPending(); 202 MessageLoop::current()->RunAllPending();
200 } 203 }
201 204
202 TEST_F(DnsMasterTest, SingleLookupTest) { 205 TEST_F(DnsMasterTest, SingleLookupTest) {
203 scoped_refptr<DnsMaster> testing_master = new DnsMaster(host_resolver_, 206 scoped_refptr<DnsMaster> testing_master = new DnsMaster(host_resolver_,
204 default_max_queueing_delay_, DnsPrefetcherInit::kMaxConcurrentLookups); 207 default_max_queueing_delay_,
208 DnsGlobalInit::kMaxPrefetchConcurrentLookups);
205 209
206 std::string goog("www.google.com"); 210 std::string goog("www.google.com");
207 211
208 NameList names; 212 NameList names;
209 names.insert(names.end(), goog); 213 names.insert(names.end(), goog);
210 214
211 // Try to flood the master with many concurrent requests. 215 // Try to flood the master with many concurrent requests.
212 for (int i = 0; i < 10; i++) 216 for (int i = 0; i < 10; i++)
213 testing_master->ResolveList(names, DnsHostInfo::PAGE_SCAN_MOTIVATED); 217 testing_master->ResolveList(names, DnsHostInfo::PAGE_SCAN_MOTIVATED);
214 218
215 WaitForResolution(testing_master, names); 219 WaitForResolution(testing_master, names);
216 220
217 EXPECT_TRUE(testing_master->WasFound(goog)); 221 EXPECT_TRUE(testing_master->WasFound(goog));
218 222
219 MessageLoop::current()->RunAllPending(); 223 MessageLoop::current()->RunAllPending();
220 224
221 EXPECT_GT(testing_master->peak_pending_lookups(), names.size() / 2); 225 EXPECT_GT(testing_master->peak_pending_lookups(), names.size() / 2);
222 EXPECT_LE(testing_master->peak_pending_lookups(), names.size()); 226 EXPECT_LE(testing_master->peak_pending_lookups(), names.size());
223 EXPECT_LE(testing_master->peak_pending_lookups(), 227 EXPECT_LE(testing_master->peak_pending_lookups(),
224 testing_master->max_concurrent_lookups()); 228 testing_master->max_concurrent_lookups());
225 229
226 testing_master->Shutdown(); 230 testing_master->Shutdown();
227 } 231 }
228 232
229 TEST_F(DnsMasterTest, ConcurrentLookupTest) { 233 TEST_F(DnsMasterTest, ConcurrentLookupTest) {
230 host_resolver_->rules()->AddSimulatedFailure("*.notfound"); 234 host_resolver_->rules()->AddSimulatedFailure("*.notfound");
231 235
232 scoped_refptr<DnsMaster> testing_master = new DnsMaster(host_resolver_, 236 scoped_refptr<DnsMaster> testing_master = new DnsMaster(host_resolver_,
233 default_max_queueing_delay_, DnsPrefetcherInit::kMaxConcurrentLookups); 237 default_max_queueing_delay_,
238 DnsGlobalInit::kMaxPrefetchConcurrentLookups);
234 239
235 std::string goog("www.google.com"), 240 std::string goog("www.google.com"),
236 goog2("gmail.google.com.com"), 241 goog2("gmail.google.com.com"),
237 goog3("mail.google.com"), 242 goog3("mail.google.com"),
238 goog4("gmail.com"); 243 goog4("gmail.com");
239 std::string bad1("bad1.notfound"), 244 std::string bad1("bad1.notfound"),
240 bad2("bad2.notfound"); 245 bad2("bad2.notfound");
241 246
242 NameList names; 247 NameList names;
243 names.insert(names.end(), goog); 248 names.insert(names.end(), goog);
(...skipping 27 matching lines...) Expand all
271 EXPECT_LE(testing_master->peak_pending_lookups(), 276 EXPECT_LE(testing_master->peak_pending_lookups(),
272 testing_master->max_concurrent_lookups()); 277 testing_master->max_concurrent_lookups());
273 278
274 testing_master->Shutdown(); 279 testing_master->Shutdown();
275 } 280 }
276 281
277 TEST_F(DnsMasterTest, MassiveConcurrentLookupTest) { 282 TEST_F(DnsMasterTest, MassiveConcurrentLookupTest) {
278 host_resolver_->rules()->AddSimulatedFailure("*.notfound"); 283 host_resolver_->rules()->AddSimulatedFailure("*.notfound");
279 284
280 scoped_refptr<DnsMaster> testing_master = new DnsMaster(host_resolver_, 285 scoped_refptr<DnsMaster> testing_master = new DnsMaster(host_resolver_,
281 default_max_queueing_delay_, DnsPrefetcherInit::kMaxConcurrentLookups); 286 default_max_queueing_delay_,
287 DnsGlobalInit::kMaxPrefetchConcurrentLookups);
282 288
283 NameList names; 289 NameList names;
284 for (int i = 0; i < 100; i++) 290 for (int i = 0; i < 100; i++)
285 names.push_back("host" + IntToString(i) + ".notfound"); 291 names.push_back("host" + IntToString(i) + ".notfound");
286 292
287 // Try to flood the master with many concurrent requests. 293 // Try to flood the master with many concurrent requests.
288 for (int i = 0; i < 10; i++) 294 for (int i = 0; i < 10; i++)
289 testing_master->ResolveList(names, DnsHostInfo::PAGE_SCAN_MOTIVATED); 295 testing_master->ResolveList(names, DnsHostInfo::PAGE_SCAN_MOTIVATED);
290 296
291 WaitForResolution(testing_master, names); 297 WaitForResolution(testing_master, names);
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
375 ++i; // Skip latency value. 381 ++i; // Skip latency value.
376 } 382 }
377 return kLatencyNotFound; 383 return kLatencyNotFound;
378 } 384 }
379 385
380 //------------------------------------------------------------------------------ 386 //------------------------------------------------------------------------------
381 387
382 // Make sure nil referral lists really have no entries, and no latency listed. 388 // Make sure nil referral lists really have no entries, and no latency listed.
383 TEST_F(DnsMasterTest, ReferrerSerializationNilTest) { 389 TEST_F(DnsMasterTest, ReferrerSerializationNilTest) {
384 scoped_refptr<DnsMaster> master = new DnsMaster(host_resolver_, 390 scoped_refptr<DnsMaster> master = new DnsMaster(host_resolver_,
385 default_max_queueing_delay_, DnsPrefetcherInit::kMaxConcurrentLookups); 391 default_max_queueing_delay_,
392 DnsGlobalInit::kMaxPrefetchConcurrentLookups);
386 ListValue referral_list; 393 ListValue referral_list;
387 master->SerializeReferrers(&referral_list); 394 master->SerializeReferrers(&referral_list);
388 EXPECT_EQ(0U, referral_list.GetSize()); 395 EXPECT_EQ(0U, referral_list.GetSize());
389 EXPECT_EQ(kLatencyNotFound, GetLatencyFromSerialization("a.com", "b.com", 396 EXPECT_EQ(kLatencyNotFound, GetLatencyFromSerialization("a.com", "b.com",
390 referral_list)); 397 referral_list));
391 398
392 master->Shutdown(); 399 master->Shutdown();
393 } 400 }
394 401
395 // Make sure that when a serialization list includes a value, that it can be 402 // Make sure that when a serialization list includes a value, that it can be
396 // deserialized into the database, and can be extracted back out via 403 // deserialized into the database, and can be extracted back out via
397 // serialization without being changed. 404 // serialization without being changed.
398 TEST_F(DnsMasterTest, ReferrerSerializationSingleReferrerTest) { 405 TEST_F(DnsMasterTest, ReferrerSerializationSingleReferrerTest) {
399 scoped_refptr<DnsMaster> master = new DnsMaster(host_resolver_, 406 scoped_refptr<DnsMaster> master = new DnsMaster(host_resolver_,
400 default_max_queueing_delay_, DnsPrefetcherInit::kMaxConcurrentLookups); 407 default_max_queueing_delay_,
408 DnsGlobalInit::kMaxPrefetchConcurrentLookups);
401 std::string motivation_hostname = "www.google.com"; 409 std::string motivation_hostname = "www.google.com";
402 std::string subresource_hostname = "icons.google.com"; 410 std::string subresource_hostname = "icons.google.com";
403 const int kLatency = 3; 411 const int kLatency = 3;
404 ListValue referral_list; 412 ListValue referral_list;
405 413
406 AddToSerializedList(motivation_hostname, subresource_hostname, kLatency, 414 AddToSerializedList(motivation_hostname, subresource_hostname, kLatency,
407 &referral_list); 415 &referral_list);
408 416
409 master->DeserializeReferrers(referral_list); 417 master->DeserializeReferrers(referral_list);
410 418
411 ListValue recovered_referral_list; 419 ListValue recovered_referral_list;
412 master->SerializeReferrers(&recovered_referral_list); 420 master->SerializeReferrers(&recovered_referral_list);
413 EXPECT_EQ(1U, recovered_referral_list.GetSize()); 421 EXPECT_EQ(1U, recovered_referral_list.GetSize());
414 EXPECT_EQ(kLatency, GetLatencyFromSerialization(motivation_hostname, 422 EXPECT_EQ(kLatency, GetLatencyFromSerialization(motivation_hostname,
415 subresource_hostname, 423 subresource_hostname,
416 recovered_referral_list)); 424 recovered_referral_list));
417 425
418 master->Shutdown(); 426 master->Shutdown();
419 } 427 }
420 428
421 // Make sure the Trim() functionality works as expected. 429 // Make sure the Trim() functionality works as expected.
422 TEST_F(DnsMasterTest, ReferrerSerializationTrimTest) { 430 TEST_F(DnsMasterTest, ReferrerSerializationTrimTest) {
423 scoped_refptr<DnsMaster> master = new DnsMaster(host_resolver_, 431 scoped_refptr<DnsMaster> master = new DnsMaster(host_resolver_,
424 default_max_queueing_delay_, DnsPrefetcherInit::kMaxConcurrentLookups); 432 default_max_queueing_delay_,
433 DnsGlobalInit::kMaxPrefetchConcurrentLookups);
425 std::string motivation_hostname = "www.google.com"; 434 std::string motivation_hostname = "www.google.com";
426 std::string icon_subresource_hostname = "icons.google.com"; 435 std::string icon_subresource_hostname = "icons.google.com";
427 std::string img_subresource_hostname = "img.google.com"; 436 std::string img_subresource_hostname = "img.google.com";
428 ListValue referral_list; 437 ListValue referral_list;
429 438
430 AddToSerializedList(motivation_hostname, icon_subresource_hostname, 10, 439 AddToSerializedList(motivation_hostname, icon_subresource_hostname, 10,
431 &referral_list); 440 &referral_list);
432 AddToSerializedList(motivation_hostname, img_subresource_hostname, 3, 441 AddToSerializedList(motivation_hostname, img_subresource_hostname, 3,
433 &referral_list); 442 &referral_list);
434 443
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
544 EXPECT_EQ(queue.Pop(), "unit"); 553 EXPECT_EQ(queue.Pop(), "unit");
545 EXPECT_EQ(queue.Pop(), "lmax"); 554 EXPECT_EQ(queue.Pop(), "lmax");
546 EXPECT_EQ(queue.Pop(), "omni"); 555 EXPECT_EQ(queue.Pop(), "omni");
547 EXPECT_EQ(queue.Pop(), "startup"); 556 EXPECT_EQ(queue.Pop(), "startup");
548 EXPECT_EQ(queue.Pop(), "omni"); 557 EXPECT_EQ(queue.Pop(), "omni");
549 558
550 EXPECT_TRUE(queue.IsEmpty()); 559 EXPECT_TRUE(queue.IsEmpty());
551 } 560 }
552 561
553 } // namespace chrome_browser_net 562 } // namespace chrome_browser_net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698