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

Side by Side Diff: chromecast/crash/linux/synchronized_minidump_manager_unittest.cc

Issue 1310313004: [Chromecast] Move SynchronizedMinidumpManager ratelimit logic to child classes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src@master
Patch Set: Revert SynchronizedMinidumpManagerSimple name. Created 5 years, 3 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
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 <fcntl.h> 5 #include <fcntl.h>
6 #include <stdlib.h> 6 #include <stdlib.h>
7 #include <sys/file.h> 7 #include <sys/file.h>
8 #include <sys/stat.h> // mkdir 8 #include <sys/stat.h> // mkdir
9 #include <sys/types.h> // 9 #include <sys/types.h> //
10 #include <stdio.h> // perror 10 #include <stdio.h> // perror
(...skipping 17 matching lines...) Expand all
28 #include "testing/gtest/include/gtest/gtest.h" 28 #include "testing/gtest/include/gtest/gtest.h"
29 29
30 namespace chromecast { 30 namespace chromecast {
31 namespace { 31 namespace {
32 32
33 const char kLockfileName[] = "lockfile"; 33 const char kLockfileName[] = "lockfile";
34 const char kMetadataName[] = "metadata"; 34 const char kMetadataName[] = "metadata";
35 const char kMinidumpSubdir[] = "minidumps"; 35 const char kMinidumpSubdir[] = "minidumps";
36 36
37 // A trivial implementation of SynchronizedMinidumpManager, which does no work 37 // A trivial implementation of SynchronizedMinidumpManager, which does no work
38 // to the 38 // to the minidump and exposes its protected members for testing. This simply
39 // minidump and exposes its protected members for testing. 39 // adds an entry to the lockfile.
40 class SynchronizedMinidumpManagerSimple : public SynchronizedMinidumpManager { 40 class SynchronizedMinidumpManagerSimple : public SynchronizedMinidumpManager {
41 public: 41 public:
42 SynchronizedMinidumpManagerSimple() 42 SynchronizedMinidumpManagerSimple()
43 : SynchronizedMinidumpManager(), 43 : SynchronizedMinidumpManager(),
44 work_done_(false), 44 work_done_(false),
45 add_entry_return_code_(-1), 45 add_entry_return_code_(-1),
46 lockfile_path_(dump_path_.Append(kLockfileName).value()) {} 46 lockfile_path_(dump_path_.Append(kLockfileName).value()) {}
47 ~SynchronizedMinidumpManagerSimple() override {} 47 ~SynchronizedMinidumpManagerSimple() override {}
48 48
49 void SetDumpInfoToWrite(scoped_ptr<DumpInfo> dump_info) { 49 void SetDumpInfoToWrite(scoped_ptr<DumpInfo> dump_info) {
(...skipping 20 matching lines...) Expand all
70 bool work_done_; 70 bool work_done_;
71 int add_entry_return_code_; 71 int add_entry_return_code_;
72 std::string lockfile_path_; 72 std::string lockfile_path_;
73 scoped_ptr<DumpInfo> dump_info_; 73 scoped_ptr<DumpInfo> dump_info_;
74 }; 74 };
75 75
76 void DoWorkLockedTask(SynchronizedMinidumpManagerSimple* manager) { 76 void DoWorkLockedTask(SynchronizedMinidumpManagerSimple* manager) {
77 manager->DoWorkLocked(); 77 manager->DoWorkLocked();
78 } 78 }
79 79
80 // Simple SynchronizedMinidumpManager consumer. Checks if a dump can be uploaded
81 // then removes it from the lockfile.
82 class SynchronizedMinidumpManagerUploader : public SynchronizedMinidumpManager {
slan 2015/09/09 19:08:11 Please rename to SynchronizedMinidumpManagerConsum
bcf_google 2015/09/09 21:20:29 Done.
83 public:
84 SynchronizedMinidumpManagerUploader()
85 : SynchronizedMinidumpManager(),
86 can_upload_return_val_(false),
87 lockfile_path_(dump_path_.Append(kLockfileName).value()) {}
88 ~SynchronizedMinidumpManagerUploader() override {}
89
90 int DoWorkLocked() { return AcquireLockAndDoWork(); }
91
92 // SynchronizedMinidumpManager implementation:
93 int DoWork() override {
94 can_upload_return_val_ = CanUploadDump();
95
96 if (RemoveEntryFromLockFile(0) < 0)
97 return -1;
98
99 if (IncrementRatelimitPeriodDumps() < 0)
100 return -1;
101
102 return 0;
103 }
104
105 // Accessors for testing.
106 const std::string& dump_path() { return dump_path_.value(); }
slan 2015/09/09 19:08:11 I don't see these methods called?
bcf_google 2015/09/09 21:20:29 Okay they were removed.
107 const std::string& lockfile_path() { return lockfile_path_; }
108 bool can_upload_return_val() { return can_upload_return_val_; }
109
110 private:
111 bool can_upload_return_val_;
112 std::string lockfile_path_;
113 };
114
80 class SleepySynchronizedMinidumpManagerSimple 115 class SleepySynchronizedMinidumpManagerSimple
81 : public SynchronizedMinidumpManagerSimple { 116 : public SynchronizedMinidumpManagerSimple {
82 public: 117 public:
83 SleepySynchronizedMinidumpManagerSimple(int sleep_duration_ms) 118 SleepySynchronizedMinidumpManagerSimple(int sleep_duration_ms)
84 : SynchronizedMinidumpManagerSimple(), 119 : SynchronizedMinidumpManagerSimple(),
85 sleep_duration_ms_(sleep_duration_ms) {} 120 sleep_duration_ms_(sleep_duration_ms) {}
86 ~SleepySynchronizedMinidumpManagerSimple() override {} 121 ~SleepySynchronizedMinidumpManagerSimple() override {}
87 122
88 // SynchronizedMinidumpManager implementation: 123 // SynchronizedMinidumpManager implementation:
89 int DoWork() override { 124 int DoWork() override {
(...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after
376 EXPECT_EQ(0, manager.DoWorkLocked()); 411 EXPECT_EQ(0, manager.DoWorkLocked());
377 EXPECT_EQ(0, manager.add_entry_return_code()); 412 EXPECT_EQ(0, manager.add_entry_return_code());
378 EXPECT_TRUE(manager.work_done()); 413 EXPECT_TRUE(manager.work_done());
379 414
380 // Test that both entries were logged. 415 // Test that both entries were logged.
381 ScopedVector<DumpInfo> dumps; 416 ScopedVector<DumpInfo> dumps;
382 ASSERT_TRUE(FetchDumps(lockfile_.value(), &dumps)); 417 ASSERT_TRUE(FetchDumps(lockfile_.value(), &dumps));
383 EXPECT_EQ(2u, dumps.size()); 418 EXPECT_EQ(2u, dumps.size());
384 } 419 }
385 420
386 TEST_F(SynchronizedMinidumpManagerTest, 421 TEST_F(SynchronizedMinidumpManagerTest,
slan 2015/09/09 19:08:11 I know that this test was like this before this ch
bcf_google 2015/09/09 21:20:29 How does this look?
387 AddEntryFailsWhenTooManyRecentDumpsPresent) { 422 CanUploadFailsWhenRatelimitPeriodExceeded) {
388 // Sample parameters. 423 // Sample parameters.
389 time_t now = time(0); 424 time_t now = time(0);
390 MinidumpParams params; 425 MinidumpParams params;
391 params.process_name = "process"; 426 params.process_name = "process";
392 427
393 SynchronizedMinidumpManagerSimple manager; 428 SynchronizedMinidumpManagerSimple producer;
394 manager.SetDumpInfoToWrite( 429 SynchronizedMinidumpManagerUploader uploader;
395 make_scoped_ptr(new DumpInfo("dump1", "log1", now, params))); 430 producer.SetDumpInfoToWrite(
396
397 for (int i = 0; i < SynchronizedMinidumpManager::kMaxLockfileDumps; ++i) {
398 // Adding these should succeed
399 ASSERT_EQ(0, manager.DoWorkLocked());
400 ASSERT_EQ(0, manager.add_entry_return_code());
401 }
402
403 ASSERT_EQ(0, manager.DoWorkLocked());
404
405 // This one should fail
406 ASSERT_GT(0, manager.add_entry_return_code());
407 }
408
409 TEST_F(SynchronizedMinidumpManagerTest,
410 AddEntryFailsWhenRatelimitPeriodExceeded) {
411 // Sample parameters.
412 time_t now = time(0);
413 MinidumpParams params;
414 params.process_name = "process";
415
416 SynchronizedMinidumpManagerSimple manager;
417 manager.SetDumpInfoToWrite(
418 make_scoped_ptr(new DumpInfo("dump1", "log1", now, params))); 431 make_scoped_ptr(new DumpInfo("dump1", "log1", now, params)));
419 432
420 // Multiple iters to make sure period resets work correctly 433 // Multiple iters to make sure period resets work correctly
421 for (int iter = 0; iter < 3; ++iter) { 434 for (int iter = 0; iter < 3; ++iter) {
422 time_t now = time(nullptr); 435 time_t now = time(nullptr);
423 436
424 // Write dump logs to the lockfile. 437 // Write dump logs to the lockfile.
425 size_t too_many_recent_dumps = 438 size_t too_many_recent_dumps =
426 SynchronizedMinidumpManager::kRatelimitPeriodMaxDumps; 439 SynchronizedMinidumpManager::kRatelimitPeriodMaxDumps;
427 for (size_t i = 0; i < too_many_recent_dumps; ++i) { 440 for (size_t i = 0; i < too_many_recent_dumps; ++i) {
428 // Adding these should succeed 441 // Uploading these should succeed
429 ASSERT_EQ(0, manager.DoWorkLocked()); 442 ASSERT_EQ(0, producer.DoWorkLocked());
430 ASSERT_EQ(0, manager.add_entry_return_code()); 443 ASSERT_EQ(0, producer.add_entry_return_code());
431 444
432 // Clear dumps so we don't reach max dumps in lockfile 445 ASSERT_EQ(0, uploader.DoWorkLocked());
433 ASSERT_TRUE(ClearDumps(lockfile_.value())); 446 ASSERT_EQ(true, uploader.can_upload_return_val());
434 } 447 }
435 448
436 ASSERT_EQ(0, manager.DoWorkLocked()); 449 ASSERT_EQ(0, producer.DoWorkLocked());
450 ASSERT_EQ(0, producer.add_entry_return_code());
451
437 // Should fail with too many dumps 452 // Should fail with too many dumps
438 ASSERT_GT(0, manager.add_entry_return_code()); 453 ASSERT_EQ(0, uploader.DoWorkLocked());
454 ASSERT_EQ(false, uploader.can_upload_return_val());
439 455
440 int64 period = SynchronizedMinidumpManager::kRatelimitPeriodSeconds; 456 int64 period = SynchronizedMinidumpManager::kRatelimitPeriodSeconds;
441 457
458 ASSERT_EQ(0, producer.DoWorkLocked());
459 ASSERT_EQ(0, producer.add_entry_return_code());
460
442 // Half period shouldn't trigger reset 461 // Half period shouldn't trigger reset
443 SetRatelimitPeriodStart(metadata_.value(), now - period / 2); 462 SetRatelimitPeriodStart(metadata_.value(), now - period / 2);
444 ASSERT_EQ(0, manager.DoWorkLocked()); 463 ASSERT_EQ(0, uploader.DoWorkLocked());
445 ASSERT_GT(0, manager.add_entry_return_code()); 464 ASSERT_EQ(false, uploader.can_upload_return_val());
446 465
447 // Set period starting time to trigger a reset 466 // Set period starting time to trigger a reset
448 SetRatelimitPeriodStart(metadata_.value(), now - period); 467 SetRatelimitPeriodStart(metadata_.value(), now - period);
449 } 468 }
450 469
451 ASSERT_EQ(0, manager.DoWorkLocked()); 470 ASSERT_EQ(0, producer.DoWorkLocked());
452 ASSERT_EQ(0, manager.add_entry_return_code()); 471 ASSERT_EQ(0, producer.add_entry_return_code());
472
473 ASSERT_EQ(0, uploader.DoWorkLocked());
474 ASSERT_EQ(true, uploader.can_upload_return_val());
453 } 475 }
454 476
455 } // namespace chromecast 477 } // namespace chromecast
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698