OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
102 scoped_ptr<net::MockCachingHostResolver> host_resolver_; | 102 scoped_ptr<net::MockCachingHostResolver> host_resolver_; |
103 | 103 |
104 // Shorthand to access TimeDelta of PredictorInit::kMaxQueueingDelayMs. | 104 // Shorthand to access TimeDelta of PredictorInit::kMaxQueueingDelayMs. |
105 // (It would be a static constant... except style rules preclude that :-/ ). | 105 // (It would be a static constant... except style rules preclude that :-/ ). |
106 const TimeDelta default_max_queueing_delay_; | 106 const TimeDelta default_max_queueing_delay_; |
107 }; | 107 }; |
108 | 108 |
109 //------------------------------------------------------------------------------ | 109 //------------------------------------------------------------------------------ |
110 | 110 |
111 TEST_F(PredictorTest, StartupShutdownTest) { | 111 TEST_F(PredictorTest, StartupShutdownTest) { |
112 scoped_refptr<Predictor> testing_master = | 112 scoped_refptr<Predictor> testing_master( |
113 new Predictor(host_resolver_.get(), | 113 new Predictor(host_resolver_.get(), |
114 default_max_queueing_delay_, | 114 default_max_queueing_delay_, |
115 PredictorInit::kMaxSpeculativeParallelResolves, | 115 PredictorInit::kMaxSpeculativeParallelResolves, |
116 false); | 116 false)); |
117 testing_master->Shutdown(); | 117 testing_master->Shutdown(); |
118 } | 118 } |
119 | 119 |
120 | 120 |
121 TEST_F(PredictorTest, ShutdownWhenResolutionIsPendingTest) { | 121 TEST_F(PredictorTest, ShutdownWhenResolutionIsPendingTest) { |
122 scoped_refptr<net::WaitingHostResolverProc> resolver_proc = | 122 scoped_refptr<net::WaitingHostResolverProc> resolver_proc( |
123 new net::WaitingHostResolverProc(NULL); | 123 new net::WaitingHostResolverProc(NULL)); |
124 host_resolver_->Reset(resolver_proc); | 124 host_resolver_->Reset(resolver_proc); |
125 | 125 |
126 scoped_refptr<Predictor> testing_master = | 126 scoped_refptr<Predictor> testing_master( |
127 new Predictor(host_resolver_.get(), | 127 new Predictor(host_resolver_.get(), |
128 default_max_queueing_delay_, | 128 default_max_queueing_delay_, |
129 PredictorInit::kMaxSpeculativeParallelResolves, | 129 PredictorInit::kMaxSpeculativeParallelResolves, |
130 false); | 130 false)); |
131 | 131 |
132 GURL localhost("http://localhost:80"); | 132 GURL localhost("http://localhost:80"); |
133 UrlList names; | 133 UrlList names; |
134 names.push_back(localhost); | 134 names.push_back(localhost); |
135 | 135 |
136 testing_master->ResolveList(names, UrlInfo::PAGE_SCAN_MOTIVATED); | 136 testing_master->ResolveList(names, UrlInfo::PAGE_SCAN_MOTIVATED); |
137 | 137 |
138 MessageLoop::current()->PostDelayedTask(FROM_HERE, | 138 MessageLoop::current()->PostDelayedTask(FROM_HERE, |
139 new MessageLoop::QuitTask(), 500); | 139 new MessageLoop::QuitTask(), 500); |
140 MessageLoop::current()->Run(); | 140 MessageLoop::current()->Run(); |
141 | 141 |
142 EXPECT_FALSE(testing_master->WasFound(localhost)); | 142 EXPECT_FALSE(testing_master->WasFound(localhost)); |
143 | 143 |
144 testing_master->Shutdown(); | 144 testing_master->Shutdown(); |
145 | 145 |
146 // Clean up after ourselves. | 146 // Clean up after ourselves. |
147 resolver_proc->Signal(); | 147 resolver_proc->Signal(); |
148 MessageLoop::current()->RunAllPending(); | 148 MessageLoop::current()->RunAllPending(); |
149 } | 149 } |
150 | 150 |
151 TEST_F(PredictorTest, SingleLookupTest) { | 151 TEST_F(PredictorTest, SingleLookupTest) { |
152 scoped_refptr<Predictor> testing_master = | 152 scoped_refptr<Predictor> testing_master( |
153 new Predictor(host_resolver_.get(), | 153 new Predictor(host_resolver_.get(), |
154 default_max_queueing_delay_, | 154 default_max_queueing_delay_, |
155 PredictorInit::kMaxSpeculativeParallelResolves, | 155 PredictorInit::kMaxSpeculativeParallelResolves, |
156 false); | 156 false)); |
157 | 157 |
158 GURL goog("http://www.google.com:80"); | 158 GURL goog("http://www.google.com:80"); |
159 | 159 |
160 UrlList names; | 160 UrlList names; |
161 names.push_back(goog); | 161 names.push_back(goog); |
162 | 162 |
163 // Try to flood the predictor with many concurrent requests. | 163 // Try to flood the predictor with many concurrent requests. |
164 for (int i = 0; i < 10; i++) | 164 for (int i = 0; i < 10; i++) |
165 testing_master->ResolveList(names, UrlInfo::PAGE_SCAN_MOTIVATED); | 165 testing_master->ResolveList(names, UrlInfo::PAGE_SCAN_MOTIVATED); |
166 | 166 |
167 WaitForResolution(testing_master, names); | 167 WaitForResolution(testing_master, names); |
168 | 168 |
169 EXPECT_TRUE(testing_master->WasFound(goog)); | 169 EXPECT_TRUE(testing_master->WasFound(goog)); |
170 | 170 |
171 MessageLoop::current()->RunAllPending(); | 171 MessageLoop::current()->RunAllPending(); |
172 | 172 |
173 EXPECT_GT(testing_master->peak_pending_lookups(), names.size() / 2); | 173 EXPECT_GT(testing_master->peak_pending_lookups(), names.size() / 2); |
174 EXPECT_LE(testing_master->peak_pending_lookups(), names.size()); | 174 EXPECT_LE(testing_master->peak_pending_lookups(), names.size()); |
175 EXPECT_LE(testing_master->peak_pending_lookups(), | 175 EXPECT_LE(testing_master->peak_pending_lookups(), |
176 testing_master->max_concurrent_dns_lookups()); | 176 testing_master->max_concurrent_dns_lookups()); |
177 | 177 |
178 testing_master->Shutdown(); | 178 testing_master->Shutdown(); |
179 } | 179 } |
180 | 180 |
181 TEST_F(PredictorTest, ConcurrentLookupTest) { | 181 TEST_F(PredictorTest, ConcurrentLookupTest) { |
182 host_resolver_->rules()->AddSimulatedFailure("*.notfound"); | 182 host_resolver_->rules()->AddSimulatedFailure("*.notfound"); |
183 | 183 |
184 scoped_refptr<Predictor> testing_master = | 184 scoped_refptr<Predictor> testing_master( |
185 new Predictor(host_resolver_.get(), | 185 new Predictor(host_resolver_.get(), |
186 default_max_queueing_delay_, | 186 default_max_queueing_delay_, |
187 PredictorInit::kMaxSpeculativeParallelResolves, | 187 PredictorInit::kMaxSpeculativeParallelResolves, |
188 false); | 188 false)); |
189 | 189 |
190 GURL goog("http://www.google.com:80"), | 190 GURL goog("http://www.google.com:80"), |
191 goog2("http://gmail.google.com.com:80"), | 191 goog2("http://gmail.google.com.com:80"), |
192 goog3("http://mail.google.com:80"), | 192 goog3("http://mail.google.com:80"), |
193 goog4("http://gmail.com:80"); | 193 goog4("http://gmail.com:80"); |
194 GURL bad1("http://bad1.notfound:80"), | 194 GURL bad1("http://bad1.notfound:80"), |
195 bad2("http://bad2.notfound:80"); | 195 bad2("http://bad2.notfound:80"); |
196 | 196 |
197 UrlList names; | 197 UrlList names; |
198 names.push_back(goog); | 198 names.push_back(goog); |
(...skipping 25 matching lines...) Expand all Loading... |
224 EXPECT_LE(testing_master->peak_pending_lookups(), names.size()); | 224 EXPECT_LE(testing_master->peak_pending_lookups(), names.size()); |
225 EXPECT_LE(testing_master->peak_pending_lookups(), | 225 EXPECT_LE(testing_master->peak_pending_lookups(), |
226 testing_master->max_concurrent_dns_lookups()); | 226 testing_master->max_concurrent_dns_lookups()); |
227 | 227 |
228 testing_master->Shutdown(); | 228 testing_master->Shutdown(); |
229 } | 229 } |
230 | 230 |
231 TEST_F(PredictorTest, MassiveConcurrentLookupTest) { | 231 TEST_F(PredictorTest, MassiveConcurrentLookupTest) { |
232 host_resolver_->rules()->AddSimulatedFailure("*.notfound"); | 232 host_resolver_->rules()->AddSimulatedFailure("*.notfound"); |
233 | 233 |
234 scoped_refptr<Predictor> testing_master = | 234 scoped_refptr<Predictor> testing_master( |
235 new Predictor(host_resolver_.get(), | 235 new Predictor(host_resolver_.get(), |
236 default_max_queueing_delay_, | 236 default_max_queueing_delay_, |
237 PredictorInit::kMaxSpeculativeParallelResolves, | 237 PredictorInit::kMaxSpeculativeParallelResolves, |
238 false); | 238 false)); |
239 | 239 |
240 UrlList names; | 240 UrlList names; |
241 for (int i = 0; i < 100; i++) | 241 for (int i = 0; i < 100; i++) |
242 names.push_back(GURL( | 242 names.push_back(GURL( |
243 "http://host" + base::IntToString(i) + ".notfound:80")); | 243 "http://host" + base::IntToString(i) + ".notfound:80")); |
244 | 244 |
245 // Try to flood the predictor with many concurrent requests. | 245 // Try to flood the predictor with many concurrent requests. |
246 for (int i = 0; i < 10; i++) | 246 for (int i = 0; i < 10; i++) |
247 testing_master->ResolveList(names, UrlInfo::PAGE_SCAN_MOTIVATED); | 247 testing_master->ResolveList(names, UrlInfo::PAGE_SCAN_MOTIVATED); |
248 | 248 |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
344 return true; | 344 return true; |
345 } | 345 } |
346 } | 346 } |
347 return false; | 347 return false; |
348 } | 348 } |
349 | 349 |
350 //------------------------------------------------------------------------------ | 350 //------------------------------------------------------------------------------ |
351 | 351 |
352 // Make sure nil referral lists really have no entries, and no latency listed. | 352 // Make sure nil referral lists really have no entries, and no latency listed. |
353 TEST_F(PredictorTest, ReferrerSerializationNilTest) { | 353 TEST_F(PredictorTest, ReferrerSerializationNilTest) { |
354 scoped_refptr<Predictor> predictor = | 354 scoped_refptr<Predictor> predictor( |
355 new Predictor(host_resolver_.get(), | 355 new Predictor(host_resolver_.get(), |
356 default_max_queueing_delay_, | 356 default_max_queueing_delay_, |
357 PredictorInit::kMaxSpeculativeParallelResolves, | 357 PredictorInit::kMaxSpeculativeParallelResolves, |
358 false); | 358 false)); |
359 scoped_ptr<ListValue> referral_list(NewEmptySerializationList()); | 359 scoped_ptr<ListValue> referral_list(NewEmptySerializationList()); |
360 predictor->SerializeReferrers(referral_list.get()); | 360 predictor->SerializeReferrers(referral_list.get()); |
361 EXPECT_EQ(1U, referral_list->GetSize()); | 361 EXPECT_EQ(1U, referral_list->GetSize()); |
362 EXPECT_FALSE(GetDataFromSerialization( | 362 EXPECT_FALSE(GetDataFromSerialization( |
363 GURL("http://a.com:79"), GURL("http://b.com:78"), | 363 GURL("http://a.com:79"), GURL("http://b.com:78"), |
364 *referral_list.get(), NULL)); | 364 *referral_list.get(), NULL)); |
365 | 365 |
366 predictor->Shutdown(); | 366 predictor->Shutdown(); |
367 } | 367 } |
368 | 368 |
369 // Make sure that when a serialization list includes a value, that it can be | 369 // Make sure that when a serialization list includes a value, that it can be |
370 // deserialized into the database, and can be extracted back out via | 370 // deserialized into the database, and can be extracted back out via |
371 // serialization without being changed. | 371 // serialization without being changed. |
372 TEST_F(PredictorTest, ReferrerSerializationSingleReferrerTest) { | 372 TEST_F(PredictorTest, ReferrerSerializationSingleReferrerTest) { |
373 scoped_refptr<Predictor> predictor = | 373 scoped_refptr<Predictor> predictor( |
374 new Predictor(host_resolver_.get(), | 374 new Predictor(host_resolver_.get(), |
375 default_max_queueing_delay_, | 375 default_max_queueing_delay_, |
376 PredictorInit::kMaxSpeculativeParallelResolves, | 376 PredictorInit::kMaxSpeculativeParallelResolves, |
377 false); | 377 false)); |
378 const GURL motivation_url("http://www.google.com:91"); | 378 const GURL motivation_url("http://www.google.com:91"); |
379 const GURL subresource_url("http://icons.google.com:90"); | 379 const GURL subresource_url("http://icons.google.com:90"); |
380 const double kUseRate = 23.4; | 380 const double kUseRate = 23.4; |
381 scoped_ptr<ListValue> referral_list(NewEmptySerializationList()); | 381 scoped_ptr<ListValue> referral_list(NewEmptySerializationList()); |
382 | 382 |
383 AddToSerializedList(motivation_url, subresource_url, | 383 AddToSerializedList(motivation_url, subresource_url, |
384 kUseRate, referral_list.get()); | 384 kUseRate, referral_list.get()); |
385 | 385 |
386 predictor->DeserializeReferrers(*referral_list.get()); | 386 predictor->DeserializeReferrers(*referral_list.get()); |
387 | 387 |
388 ListValue recovered_referral_list; | 388 ListValue recovered_referral_list; |
389 predictor->SerializeReferrers(&recovered_referral_list); | 389 predictor->SerializeReferrers(&recovered_referral_list); |
390 EXPECT_EQ(2U, recovered_referral_list.GetSize()); | 390 EXPECT_EQ(2U, recovered_referral_list.GetSize()); |
391 double rate; | 391 double rate; |
392 EXPECT_TRUE(GetDataFromSerialization( | 392 EXPECT_TRUE(GetDataFromSerialization( |
393 motivation_url, subresource_url, recovered_referral_list, &rate)); | 393 motivation_url, subresource_url, recovered_referral_list, &rate)); |
394 EXPECT_EQ(rate, kUseRate); | 394 EXPECT_EQ(rate, kUseRate); |
395 | 395 |
396 predictor->Shutdown(); | 396 predictor->Shutdown(); |
397 } | 397 } |
398 | 398 |
399 // Make sure the Trim() functionality works as expected. | 399 // Make sure the Trim() functionality works as expected. |
400 TEST_F(PredictorTest, ReferrerSerializationTrimTest) { | 400 TEST_F(PredictorTest, ReferrerSerializationTrimTest) { |
401 scoped_refptr<Predictor> predictor = | 401 scoped_refptr<Predictor> predictor( |
402 new Predictor(host_resolver_.get(), | 402 new Predictor(host_resolver_.get(), |
403 default_max_queueing_delay_, | 403 default_max_queueing_delay_, |
404 PredictorInit::kMaxSpeculativeParallelResolves, | 404 PredictorInit::kMaxSpeculativeParallelResolves, |
405 false); | 405 false)); |
406 GURL motivation_url("http://www.google.com:110"); | 406 GURL motivation_url("http://www.google.com:110"); |
407 | 407 |
408 GURL icon_subresource_url("http://icons.google.com:111"); | 408 GURL icon_subresource_url("http://icons.google.com:111"); |
409 const double kRateIcon = 16.0 * Predictor::kPersistWorthyExpectedValue; | 409 const double kRateIcon = 16.0 * Predictor::kPersistWorthyExpectedValue; |
410 GURL img_subresource_url("http://img.google.com:118"); | 410 GURL img_subresource_url("http://img.google.com:118"); |
411 const double kRateImg = 8.0 * Predictor::kPersistWorthyExpectedValue; | 411 const double kRateImg = 8.0 * Predictor::kPersistWorthyExpectedValue; |
412 | 412 |
413 scoped_ptr<ListValue> referral_list(NewEmptySerializationList()); | 413 scoped_ptr<ListValue> referral_list(NewEmptySerializationList()); |
414 AddToSerializedList( | 414 AddToSerializedList( |
415 motivation_url, icon_subresource_url, kRateIcon, referral_list.get()); | 415 motivation_url, icon_subresource_url, kRateIcon, referral_list.get()); |
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
579 EXPECT_NE(Predictor::CanonicalizeUrl(http), | 579 EXPECT_NE(Predictor::CanonicalizeUrl(http), |
580 Predictor::CanonicalizeUrl(https)); | 580 Predictor::CanonicalizeUrl(https)); |
581 | 581 |
582 // Https works fine. | 582 // Https works fine. |
583 GURL long_https("https://host:999/path?query=value"); | 583 GURL long_https("https://host:999/path?query=value"); |
584 EXPECT_EQ(Predictor::CanonicalizeUrl(long_https), | 584 EXPECT_EQ(Predictor::CanonicalizeUrl(long_https), |
585 long_https.GetWithEmptyPath()); | 585 long_https.GetWithEmptyPath()); |
586 } | 586 } |
587 | 587 |
588 } // namespace chrome_browser_net | 588 } // namespace chrome_browser_net |
OLD | NEW |