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

Side by Side Diff: net/url_request/url_request_throttler_unittest.cc

Issue 6696023: Remove minidump analysis aides from URLRequestThrottlerManager. New (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 9 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/url_request/url_request_throttler_manager.cc ('k') | no next file » | 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) 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 "base/pickle.h" 5 #include "base/pickle.h"
6 #include "base/scoped_ptr.h" 6 #include "base/scoped_ptr.h"
7 #include "base/stringprintf.h" 7 #include "base/stringprintf.h"
8 #include "base/string_number_conversions.h" 8 #include "base/string_number_conversions.h"
9 #include "base/time.h" 9 #include "base/time.h"
10 #include "net/base/test_completion_callback.h" 10 #include "net/base/test_completion_callback.h"
11 #include "net/url_request/url_request_context.h" 11 #include "net/url_request/url_request_context.h"
12 #include "net/url_request/url_request_throttler_header_interface.h" 12 #include "net/url_request/url_request_throttler_header_interface.h"
13 #include "net/url_request/url_request_throttler_manager.h" 13 #include "net/url_request/url_request_throttler_manager.h"
14 #include "testing/gtest/include/gtest/gtest.h" 14 #include "testing/gtest/include/gtest/gtest.h"
15 15
16 using base::TimeDelta; 16 using base::TimeDelta;
17 using base::TimeTicks; 17 using base::TimeTicks;
18 18
19 namespace { 19 namespace {
20 class MockURLRequestThrottlerManager; 20 class MockURLRequestThrottlerManager;
21 21
22 class MockBackoffEntry : public net::BackoffEntry {
23 public:
24 MockBackoffEntry(const net::BackoffEntry::Policy* policy)
25 : net::BackoffEntry(policy), fake_now_(TimeTicks()) {
26 }
27
28 TimeTicks GetTimeNow() const {
29 return fake_now_;
30 }
31
32 void SetFakeNow(TimeTicks now) {
33 fake_now_ = now;
34 }
35
36 private:
37 TimeTicks fake_now_;
38 };
39
22 class MockURLRequestThrottlerEntry : public net::URLRequestThrottlerEntry { 40 class MockURLRequestThrottlerEntry : public net::URLRequestThrottlerEntry {
23 public : 41 public :
24 MockURLRequestThrottlerEntry() {} 42 MockURLRequestThrottlerEntry() : mock_backoff_entry_(&backoff_policy_) {}
25 MockURLRequestThrottlerEntry( 43 MockURLRequestThrottlerEntry(
26 const TimeTicks& exponential_backoff_release_time, 44 const TimeTicks& exponential_backoff_release_time,
27 const TimeTicks& sliding_window_release_time, 45 const TimeTicks& sliding_window_release_time,
28 const TimeTicks& fake_now) 46 const TimeTicks& fake_now)
29 : fake_time_now_(fake_now) { 47 : fake_time_now_(fake_now),
48 mock_backoff_entry_(&backoff_policy_) {
49 mock_backoff_entry_.SetFakeNow(fake_now);
30 set_exponential_backoff_release_time(exponential_backoff_release_time); 50 set_exponential_backoff_release_time(exponential_backoff_release_time);
31 set_sliding_window_release_time(sliding_window_release_time); 51 set_sliding_window_release_time(sliding_window_release_time);
32 } 52 }
33 virtual ~MockURLRequestThrottlerEntry() {} 53 virtual ~MockURLRequestThrottlerEntry() {}
34 54
55 const net::BackoffEntry* GetBackoffEntry() const {
56 return &mock_backoff_entry_;
57 }
58
59 net::BackoffEntry* GetBackoffEntry() {
60 return &mock_backoff_entry_;
61 }
62
35 void ResetToBlank(const TimeTicks& time_now) { 63 void ResetToBlank(const TimeTicks& time_now) {
36 fake_time_now_ = time_now; 64 fake_time_now_ = time_now;
37 set_exponential_backoff_release_time(time_now); 65 mock_backoff_entry_.SetFakeNow(time_now);
38 set_failure_count(0); 66
67 GetBackoffEntry()->SetCustomReleaseTime(time_now);
68 GetBackoffEntry()->InformOfRequest(true); // Sets failure count to 0.
39 set_sliding_window_release_time(time_now); 69 set_sliding_window_release_time(time_now);
40 } 70 }
41 71
42 // Overridden for tests. 72 // Overridden for tests.
43 virtual TimeTicks GetTimeNow() const { return fake_time_now_; } 73 virtual TimeTicks GetTimeNow() const { return fake_time_now_; }
44 74
45 void set_exponential_backoff_release_time( 75 void set_exponential_backoff_release_time(
46 const base::TimeTicks& release_time) { 76 const base::TimeTicks& release_time) {
47 net::URLRequestThrottlerEntry::set_exponential_backoff_release_time( 77 GetBackoffEntry()->SetCustomReleaseTime(release_time);
48 release_time);
49 } 78 }
50 79
51 base::TimeTicks sliding_window_release_time() const { 80 base::TimeTicks sliding_window_release_time() const {
52 return net::URLRequestThrottlerEntry::sliding_window_release_time(); 81 return net::URLRequestThrottlerEntry::sliding_window_release_time();
53 } 82 }
54 83
55 void set_sliding_window_release_time( 84 void set_sliding_window_release_time(
56 const base::TimeTicks& release_time) { 85 const base::TimeTicks& release_time) {
57 net::URLRequestThrottlerEntry::set_sliding_window_release_time( 86 net::URLRequestThrottlerEntry::set_sliding_window_release_time(
58 release_time); 87 release_time);
59 } 88 }
60 89
61 TimeTicks fake_time_now_; 90 TimeTicks fake_time_now_;
91 MockBackoffEntry mock_backoff_entry_;
62 }; 92 };
63 93
64 class MockURLRequestThrottlerHeaderAdapter 94 class MockURLRequestThrottlerHeaderAdapter
65 : public net::URLRequestThrottlerHeaderInterface { 95 : public net::URLRequestThrottlerHeaderInterface {
66 public: 96 public:
67 MockURLRequestThrottlerHeaderAdapter() 97 MockURLRequestThrottlerHeaderAdapter()
68 : fake_retry_value_("0.0"), 98 : fake_retry_value_("0.0"),
69 fake_response_code_(0) { 99 fake_response_code_(0) {
70 } 100 }
71 101
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
219 249
220 TEST_F(URLRequestThrottlerEntryTest, IsEntryReallyOutdated) { 250 TEST_F(URLRequestThrottlerEntryTest, IsEntryReallyOutdated) {
221 TimeDelta lifetime = TimeDelta::FromMilliseconds( 251 TimeDelta lifetime = TimeDelta::FromMilliseconds(
222 MockURLRequestThrottlerEntry::kDefaultEntryLifetimeMs); 252 MockURLRequestThrottlerEntry::kDefaultEntryLifetimeMs);
223 const TimeDelta kFiveMs = TimeDelta::FromMilliseconds(5); 253 const TimeDelta kFiveMs = TimeDelta::FromMilliseconds(5);
224 254
225 TimeAndBool test_values[] = { 255 TimeAndBool test_values[] = {
226 TimeAndBool(now_, false, __LINE__), 256 TimeAndBool(now_, false, __LINE__),
227 TimeAndBool(now_ - kFiveMs, false, __LINE__), 257 TimeAndBool(now_ - kFiveMs, false, __LINE__),
228 TimeAndBool(now_ + kFiveMs, false, __LINE__), 258 TimeAndBool(now_ + kFiveMs, false, __LINE__),
229 TimeAndBool(now_ - lifetime, false, __LINE__), 259 TimeAndBool(now_ - (lifetime - kFiveMs), false, __LINE__),
260 TimeAndBool(now_ - lifetime, true, __LINE__),
230 TimeAndBool(now_ - (lifetime + kFiveMs), true, __LINE__)}; 261 TimeAndBool(now_ - (lifetime + kFiveMs), true, __LINE__)};
231 262
232 for (unsigned int i = 0; i < arraysize(test_values); ++i) { 263 for (unsigned int i = 0; i < arraysize(test_values); ++i) {
233 entry_->set_exponential_backoff_release_time(test_values[i].time); 264 entry_->set_exponential_backoff_release_time(test_values[i].time);
234 EXPECT_EQ(entry_->IsEntryOutdated(), test_values[i].result) << 265 EXPECT_EQ(entry_->IsEntryOutdated(), test_values[i].result) <<
235 "Test case #" << i << " line " << test_values[i].line << " failed"; 266 "Test case #" << i << " line " << test_values[i].line << " failed";
236 } 267 }
237 } 268 }
238 269
239 TEST_F(URLRequestThrottlerEntryTest, MaxAllowedBackoff) { 270 TEST_F(URLRequestThrottlerEntryTest, MaxAllowedBackoff) {
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
287 for (int i = 0; i < (max_send + 1) / 2; ++i) 318 for (int i = 0; i < (max_send + 1) / 2; ++i)
288 EXPECT_EQ(0, entry_->ReserveSendingTimeForNextRequest(TimeTicks())); 319 EXPECT_EQ(0, entry_->ReserveSendingTimeForNextRequest(TimeTicks()));
289 320
290 EXPECT_EQ(time_4, entry_->sliding_window_release_time()); 321 EXPECT_EQ(time_4, entry_->sliding_window_release_time());
291 } 322 }
292 323
293 TEST(URLRequestThrottlerManager, IsUrlStandardised) { 324 TEST(URLRequestThrottlerManager, IsUrlStandardised) {
294 MockURLRequestThrottlerManager manager; 325 MockURLRequestThrottlerManager manager;
295 GurlAndString test_values[] = { 326 GurlAndString test_values[] = {
296 GurlAndString(GURL("http://www.example.com"), 327 GurlAndString(GURL("http://www.example.com"),
297 std::string("GOOGYhttp://www.example.com/MONSTA"), 328 std::string("http://www.example.com/"),
298 __LINE__), 329 __LINE__),
299 GurlAndString(GURL("http://www.Example.com"), 330 GurlAndString(GURL("http://www.Example.com"),
300 std::string("GOOGYhttp://www.example.com/MONSTA"), 331 std::string("http://www.example.com/"),
301 __LINE__), 332 __LINE__),
302 GurlAndString(GURL("http://www.ex4mple.com/Pr4c71c41"), 333 GurlAndString(GURL("http://www.ex4mple.com/Pr4c71c41"),
303 std::string("GOOGYhttp://www.ex4mple.com/pr4c71c41MONSTA"), 334 std::string("http://www.ex4mple.com/pr4c71c41"),
304 __LINE__), 335 __LINE__),
305 GurlAndString( 336 GurlAndString(GURL("http://www.example.com/0/token/false"),
306 GURL("http://www.example.com/0/token/false"), 337 std::string("http://www.example.com/0/token/false"),
307 std::string("GOOGYhttp://www.example.com/0/token/falseMONSTA"), 338 __LINE__),
308 __LINE__),
309 GurlAndString(GURL("http://www.example.com/index.php?code=javascript"), 339 GurlAndString(GURL("http://www.example.com/index.php?code=javascript"),
310 std::string("GOOGYhttp://www.example.com/index.phpMONSTA"), 340 std::string("http://www.example.com/index.php"),
311 __LINE__), 341 __LINE__),
312 GurlAndString(GURL("http://www.example.com/index.php?code=1#superEntry"), 342 GurlAndString(GURL("http://www.example.com/index.php?code=1#superEntry"),
313 std::string("GOOGYhttp://www.example.com/index.phpMONSTA"), 343 std::string("http://www.example.com/index.php"),
314 __LINE__), 344 __LINE__),
315 GurlAndString(GURL("http://www.example.com:1234/"), 345 GurlAndString(GURL("http://www.example.com:1234/"),
316 std::string("GOOGYhttp://www.example.com:1234/MONSTA"), 346 std::string("http://www.example.com:1234/"),
317 __LINE__)}; 347 __LINE__)};
318 348
319 for (unsigned int i = 0; i < arraysize(test_values); ++i) { 349 for (unsigned int i = 0; i < arraysize(test_values); ++i) {
320 std::string temp = manager.DoGetUrlIdFromUrl(test_values[i].url); 350 std::string temp = manager.DoGetUrlIdFromUrl(test_values[i].url);
321 EXPECT_EQ(temp, test_values[i].result) << 351 EXPECT_EQ(temp, test_values[i].result) <<
322 "Test case #" << i << " line " << test_values[i].line << " failed"; 352 "Test case #" << i << " line " << test_values[i].line << " failed";
323 } 353 }
324 } 354 }
325 355
326 TEST(URLRequestThrottlerManager, AreEntriesBeingCollected) { 356 TEST(URLRequestThrottlerManager, AreEntriesBeingCollected) {
(...skipping 17 matching lines...) Expand all
344 MockURLRequestThrottlerManager manager; 374 MockURLRequestThrottlerManager manager;
345 375
346 manager.RegisterRequestUrl(GURL("http://www.example.com/")); 376 manager.RegisterRequestUrl(GURL("http://www.example.com/"));
347 manager.RegisterRequestUrl(GURL("http://www.google.com/")); 377 manager.RegisterRequestUrl(GURL("http://www.google.com/"));
348 manager.RegisterRequestUrl(GURL("http://www.google.com/index/0")); 378 manager.RegisterRequestUrl(GURL("http://www.google.com/index/0"));
349 manager.RegisterRequestUrl(GURL("http://www.google.com/index/0?code=1")); 379 manager.RegisterRequestUrl(GURL("http://www.google.com/index/0?code=1"));
350 manager.RegisterRequestUrl(GURL("http://www.google.com/index/0#lolsaure")); 380 manager.RegisterRequestUrl(GURL("http://www.google.com/index/0#lolsaure"));
351 381
352 EXPECT_EQ(3, manager.GetNumberOfEntries()); 382 EXPECT_EQ(3, manager.GetNumberOfEntries());
353 } 383 }
354
355 class DummyResponseHeaders : public net::URLRequestThrottlerHeaderInterface {
356 public:
357 DummyResponseHeaders(int response_code) : response_code_(response_code) {}
358
359 std::string GetNormalizedValue(const std::string& key) const {
360 return "";
361 }
362
363 // Returns the HTTP response code associated with the request.
364 int GetResponseCode() const {
365 return response_code_;
366 }
367
368 private:
369 int response_code_;
370 };
371
372 TEST(URLRequestThrottlerManager, StressTest) {
373 MockURLRequestThrottlerManager manager;
374
375 for (int i = 0; i < 10000; ++i) {
376 // Make some entries duplicates or triplicates.
377 int entry_number = i + 2;
378 if (i % 17 == 0) {
379 entry_number = i - 1;
380 } else if ((i - 1) % 17 == 0) {
381 entry_number = i - 2;
382 } else if (i % 13 == 0) {
383 entry_number = i - 1;
384 }
385
386 scoped_refptr<net::URLRequestThrottlerEntryInterface> entry =
387 manager.RegisterRequestUrl(GURL(StringPrintf(
388 "http://bingourl.com/%d", entry_number)));
389 entry->IsDuringExponentialBackoff();
390 entry->GetExponentialBackoffReleaseTime();
391
392 DummyResponseHeaders headers(i % 7 == 0 ? 500 : 200);
393 entry->UpdateWithResponse(&headers);
394 entry->SetEntryLifetimeMsForTest(1);
395
396 entry->IsDuringExponentialBackoff();
397 entry->GetExponentialBackoffReleaseTime();
398 entry->ReserveSendingTimeForNextRequest(base::TimeTicks::Now());
399
400 if (i % 11 == 0) {
401 manager.DoGarbageCollectEntries();
402 }
403 }
404 }
405
406 // TODO(joi): Remove the debug-only condition after M11 branch point.
407 #if defined(GTEST_HAS_DEATH_TEST) && !defined(NDEBUG)
408 TEST(URLRequestThrottlerManager, NullHandlingTest) {
409 MockURLRequestThrottlerManager manager;
410 manager.OverrideEntryForTests(GURL("http://www.foo.com/"), NULL);
411 ASSERT_DEATH({
412 manager.DoGarbageCollectEntries();
413 }, "");
414 }
415 #endif // defined(GTEST_HAS_DEATH_TEST) && !defined(NDEBUG)
OLDNEW
« no previous file with comments | « net/url_request/url_request_throttler_manager.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698