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

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

Issue 1875623002: Convert //chromecast from scoped_ptr to std::unique_ptr (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 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 "chromecast/crash/linux/synchronized_minidump_manager.h" 5 #include "chromecast/crash/linux/synchronized_minidump_manager.h"
6 6
7 #include <fcntl.h> 7 #include <fcntl.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 #include <stdio.h> // perror 9 #include <stdio.h> // perror
10 #include <stdlib.h> 10 #include <stdlib.h>
11 #include <sys/file.h> 11 #include <sys/file.h>
12 #include <sys/stat.h> // mkdir 12 #include <sys/stat.h> // mkdir
13 #include <sys/types.h> 13 #include <sys/types.h>
14 #include <time.h> 14 #include <time.h>
15
15 #include <fstream> 16 #include <fstream>
17 #include <memory>
16 #include <utility> 18 #include <utility>
17 19
18 #include "base/base_paths.h" 20 #include "base/base_paths.h"
19 #include "base/bind.h" 21 #include "base/bind.h"
20 #include "base/files/file.h" 22 #include "base/files/file.h"
21 #include "base/files/file_util.h" 23 #include "base/files/file_util.h"
22 #include "base/files/scoped_temp_dir.h" 24 #include "base/files/scoped_temp_dir.h"
23 #include "base/memory/scoped_ptr.h" 25 #include "base/memory/ptr_util.h"
24 #include "base/memory/scoped_vector.h" 26 #include "base/memory/scoped_vector.h"
25 #include "base/process/launch.h" 27 #include "base/process/launch.h"
26 #include "base/test/scoped_path_override.h" 28 #include "base/test/scoped_path_override.h"
27 #include "base/threading/platform_thread.h" 29 #include "base/threading/platform_thread.h"
28 #include "base/threading/thread.h" 30 #include "base/threading/thread.h"
29 #include "chromecast/base/scoped_temp_file.h" 31 #include "chromecast/base/scoped_temp_file.h"
30 #include "chromecast/crash/linux/crash_testing_utils.h" 32 #include "chromecast/crash/linux/crash_testing_utils.h"
31 #include "chromecast/crash/linux/dump_info.h" 33 #include "chromecast/crash/linux/dump_info.h"
32 #include "testing/gtest/include/gtest/gtest.h" 34 #include "testing/gtest/include/gtest/gtest.h"
33 35
34 namespace chromecast { 36 namespace chromecast {
35 namespace { 37 namespace {
36 38
37 const char kLockfileName[] = "lockfile"; 39 const char kLockfileName[] = "lockfile";
38 const char kMetadataName[] = "metadata"; 40 const char kMetadataName[] = "metadata";
39 const char kMinidumpSubdir[] = "minidumps"; 41 const char kMinidumpSubdir[] = "minidumps";
40 42
41 // A trivial implementation of SynchronizedMinidumpManager, which does no work 43 // A trivial implementation of SynchronizedMinidumpManager, which does no work
42 // to the minidump and exposes its protected members for testing. This simply 44 // to the minidump and exposes its protected members for testing. This simply
43 // adds an entry to the lockfile. 45 // adds an entry to the lockfile.
44 class SynchronizedMinidumpManagerSimple : public SynchronizedMinidumpManager { 46 class SynchronizedMinidumpManagerSimple : public SynchronizedMinidumpManager {
45 public: 47 public:
46 SynchronizedMinidumpManagerSimple() 48 SynchronizedMinidumpManagerSimple()
47 : SynchronizedMinidumpManager(), 49 : SynchronizedMinidumpManager(),
48 work_done_(false), 50 work_done_(false),
49 add_entry_return_code_(-1), 51 add_entry_return_code_(-1),
50 lockfile_path_(dump_path_.Append(kLockfileName).value()) {} 52 lockfile_path_(dump_path_.Append(kLockfileName).value()) {}
51 ~SynchronizedMinidumpManagerSimple() override {} 53 ~SynchronizedMinidumpManagerSimple() override {}
52 54
53 void SetDumpInfoToWrite(scoped_ptr<DumpInfo> dump_info) { 55 void SetDumpInfoToWrite(std::unique_ptr<DumpInfo> dump_info) {
54 dump_info_ = std::move(dump_info); 56 dump_info_ = std::move(dump_info);
55 } 57 }
56 58
57 int DoWorkLocked() { return AcquireLockAndDoWork(); } 59 int DoWorkLocked() { return AcquireLockAndDoWork(); }
58 60
59 // SynchronizedMinidumpManager implementation: 61 // SynchronizedMinidumpManager implementation:
60 int DoWork() override { 62 int DoWork() override {
61 if (dump_info_) 63 if (dump_info_)
62 add_entry_return_code_ = AddEntryToLockFile(*dump_info_); 64 add_entry_return_code_ = AddEntryToLockFile(*dump_info_);
63 work_done_ = true; 65 work_done_ = true;
64 return 0; 66 return 0;
65 } 67 }
66 68
67 // Accessors for testing. 69 // Accessors for testing.
68 bool HasDumps() { return SynchronizedMinidumpManager::HasDumps(); } 70 bool HasDumps() { return SynchronizedMinidumpManager::HasDumps(); }
69 const std::string& dump_path() { return dump_path_.value(); } 71 const std::string& dump_path() { return dump_path_.value(); }
70 const std::string& lockfile_path() { return lockfile_path_; } 72 const std::string& lockfile_path() { return lockfile_path_; }
71 bool work_done() { return work_done_; } 73 bool work_done() { return work_done_; }
72 int add_entry_return_code() { return add_entry_return_code_; } 74 int add_entry_return_code() { return add_entry_return_code_; }
73 75
74 private: 76 private:
75 bool work_done_; 77 bool work_done_;
76 int add_entry_return_code_; 78 int add_entry_return_code_;
77 std::string lockfile_path_; 79 std::string lockfile_path_;
78 scoped_ptr<DumpInfo> dump_info_; 80 std::unique_ptr<DumpInfo> dump_info_;
79 }; 81 };
80 82
81 void DoWorkLockedTask(SynchronizedMinidumpManagerSimple* manager) { 83 void DoWorkLockedTask(SynchronizedMinidumpManagerSimple* manager) {
82 manager->DoWorkLocked(); 84 manager->DoWorkLocked();
83 } 85 }
84 86
85 // Simple SynchronizedMinidumpManager consumer. Checks if a dump can be uploaded 87 // Simple SynchronizedMinidumpManager consumer. Checks if a dump can be uploaded
86 // then removes it from the lockfile. 88 // then removes it from the lockfile.
87 class FakeSynchronizedMinidumpUploader : public SynchronizedMinidumpManager { 89 class FakeSynchronizedMinidumpUploader : public SynchronizedMinidumpManager {
88 public: 90 public:
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
159 ASSERT_TRUE(lockfile.IsValid()); 161 ASSERT_TRUE(lockfile.IsValid());
160 } 162 }
161 163
162 protected: 164 protected:
163 base::FilePath minidump_dir_; // Path the the minidump directory. 165 base::FilePath minidump_dir_; // Path the the minidump directory.
164 base::FilePath lockfile_; // Path to the lockfile in |minidump_dir_|. 166 base::FilePath lockfile_; // Path to the lockfile in |minidump_dir_|.
165 base::FilePath metadata_; // Path to the metadata in |minidump_dir_|. 167 base::FilePath metadata_; // Path to the metadata in |minidump_dir_|.
166 168
167 private: 169 private:
168 base::ScopedTempDir fake_home_dir_; 170 base::ScopedTempDir fake_home_dir_;
169 scoped_ptr<base::ScopedPathOverride> path_override_; 171 std::unique_ptr<base::ScopedPathOverride> path_override_;
170 }; 172 };
171 173
172 // Have |producer| generate |num_dumps| while checking there are no errors. 174 // Have |producer| generate |num_dumps| while checking there are no errors.
173 void produce_dumps(SynchronizedMinidumpManagerSimple& producer, int num_dumps) { 175 void produce_dumps(SynchronizedMinidumpManagerSimple& producer, int num_dumps) {
174 for (int i = 0; i < num_dumps; ++i) { 176 for (int i = 0; i < num_dumps; ++i) {
175 ASSERT_EQ(0, producer.DoWorkLocked()); 177 ASSERT_EQ(0, producer.DoWorkLocked());
176 ASSERT_EQ(0, producer.add_entry_return_code()); 178 ASSERT_EQ(0, producer.add_entry_return_code());
177 } 179 }
178 } 180 }
179 181
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
235 ASSERT_TRUE(base::PathExists(lockfile_)); 237 ASSERT_TRUE(base::PathExists(lockfile_));
236 } 238 }
237 239
238 TEST_F(SynchronizedMinidumpManagerTest, 240 TEST_F(SynchronizedMinidumpManagerTest,
239 AddEntryToLockFile_FailsWithInvalidEntry) { 241 AddEntryToLockFile_FailsWithInvalidEntry) {
240 // Create invalid dump info value 242 // Create invalid dump info value
241 base::DictionaryValue val; 243 base::DictionaryValue val;
242 244
243 // Test that the manager tried to log the entry and failed. 245 // Test that the manager tried to log the entry and failed.
244 SynchronizedMinidumpManagerSimple manager; 246 SynchronizedMinidumpManagerSimple manager;
245 manager.SetDumpInfoToWrite(make_scoped_ptr(new DumpInfo(&val))); 247 manager.SetDumpInfoToWrite(base::WrapUnique(new DumpInfo(&val)));
246 ASSERT_EQ(0, manager.DoWorkLocked()); 248 ASSERT_EQ(0, manager.DoWorkLocked());
247 ASSERT_EQ(-1, manager.add_entry_return_code()); 249 ASSERT_EQ(-1, manager.add_entry_return_code());
248 250
249 // Verify the lockfile is untouched. 251 // Verify the lockfile is untouched.
250 ScopedVector<DumpInfo> dumps; 252 ScopedVector<DumpInfo> dumps;
251 ASSERT_TRUE(FetchDumps(lockfile_.value(), &dumps)); 253 ASSERT_TRUE(FetchDumps(lockfile_.value(), &dumps));
252 ASSERT_EQ(0u, dumps.size()); 254 ASSERT_EQ(0u, dumps.size());
253 } 255 }
254 256
255 TEST_F(SynchronizedMinidumpManagerTest, 257 TEST_F(SynchronizedMinidumpManagerTest,
256 AddEntryToLockFile_SucceedsWithValidEntries) { 258 AddEntryToLockFile_SucceedsWithValidEntries) {
257 // Sample parameters. 259 // Sample parameters.
258 time_t now = time(0); 260 time_t now = time(0);
259 MinidumpParams params; 261 MinidumpParams params;
260 params.process_name = "process"; 262 params.process_name = "process";
261 263
262 // Write the first entry. 264 // Write the first entry.
263 SynchronizedMinidumpManagerSimple manager; 265 SynchronizedMinidumpManagerSimple manager;
264 manager.SetDumpInfoToWrite( 266 manager.SetDumpInfoToWrite(
265 make_scoped_ptr(new DumpInfo("dump1", "log1", now, params))); 267 base::WrapUnique(new DumpInfo("dump1", "log1", now, params)));
266 ASSERT_EQ(0, manager.DoWorkLocked()); 268 ASSERT_EQ(0, manager.DoWorkLocked());
267 ASSERT_EQ(0, manager.add_entry_return_code()); 269 ASSERT_EQ(0, manager.add_entry_return_code());
268 270
269 // Test that the manager was successful in logging the entry. 271 // Test that the manager was successful in logging the entry.
270 ScopedVector<DumpInfo> dumps; 272 ScopedVector<DumpInfo> dumps;
271 ASSERT_TRUE(FetchDumps(lockfile_.value(), &dumps)); 273 ASSERT_TRUE(FetchDumps(lockfile_.value(), &dumps));
272 ASSERT_EQ(1u, dumps.size()); 274 ASSERT_EQ(1u, dumps.size());
273 275
274 // Write the second entry. 276 // Write the second entry.
275 manager.SetDumpInfoToWrite( 277 manager.SetDumpInfoToWrite(
276 make_scoped_ptr(new DumpInfo("dump2", "log2", now, params))); 278 base::WrapUnique(new DumpInfo("dump2", "log2", now, params)));
277 ASSERT_EQ(0, manager.DoWorkLocked()); 279 ASSERT_EQ(0, manager.DoWorkLocked());
278 ASSERT_EQ(0, manager.add_entry_return_code()); 280 ASSERT_EQ(0, manager.add_entry_return_code());
279 281
280 // Test that the second entry is also valid. 282 // Test that the second entry is also valid.
281 ASSERT_TRUE(FetchDumps(lockfile_.value(), &dumps)); 283 ASSERT_TRUE(FetchDumps(lockfile_.value(), &dumps));
282 ASSERT_EQ(2u, dumps.size()); 284 ASSERT_EQ(2u, dumps.size());
283 } 285 }
284 286
285 TEST_F(SynchronizedMinidumpManagerTest, 287 TEST_F(SynchronizedMinidumpManagerTest,
286 AcquireLockFile_FailsWhenNonBlockingAndFileLocked) { 288 AcquireLockFile_FailsWhenNonBlockingAndFileLocked) {
(...skipping 22 matching lines...) Expand all
309 time_t now = time(0); 311 time_t now = time(0);
310 MinidumpParams params; 312 MinidumpParams params;
311 params.process_name = "process"; 313 params.process_name = "process";
312 314
313 // Create a manager that grabs the lock then sleeps. Post a DoWork task to 315 // Create a manager that grabs the lock then sleeps. Post a DoWork task to
314 // another thread. |sleepy_manager| will grab the lock and hold it for 316 // another thread. |sleepy_manager| will grab the lock and hold it for
315 // |sleep_time_ms|. It will then write a dump and release the lock. 317 // |sleep_time_ms|. It will then write a dump and release the lock.
316 const int sleep_time_ms = 100; 318 const int sleep_time_ms = 100;
317 SleepySynchronizedMinidumpManagerSimple sleepy_manager(sleep_time_ms); 319 SleepySynchronizedMinidumpManagerSimple sleepy_manager(sleep_time_ms);
318 sleepy_manager.SetDumpInfoToWrite( 320 sleepy_manager.SetDumpInfoToWrite(
319 make_scoped_ptr(new DumpInfo("dump", "log", now, params))); 321 base::WrapUnique(new DumpInfo("dump", "log", now, params)));
320 base::Thread sleepy_thread("sleepy"); 322 base::Thread sleepy_thread("sleepy");
321 sleepy_thread.Start(); 323 sleepy_thread.Start();
322 sleepy_thread.task_runner()->PostTask( 324 sleepy_thread.task_runner()->PostTask(
323 FROM_HERE, 325 FROM_HERE,
324 base::Bind(&DoWorkLockedTask, base::Unretained(&sleepy_manager))); 326 base::Bind(&DoWorkLockedTask, base::Unretained(&sleepy_manager)));
325 327
326 // Meanwhile, this thread should wait brielfy to allow the other thread to 328 // Meanwhile, this thread should wait brielfy to allow the other thread to
327 // grab the lock. 329 // grab the lock.
328 const int concurrency_delay = 50; 330 const int concurrency_delay = 50;
329 base::PlatformThread::Sleep( 331 base::PlatformThread::Sleep(
330 base::TimeDelta::FromMilliseconds(concurrency_delay)); 332 base::TimeDelta::FromMilliseconds(concurrency_delay));
331 333
332 // |sleepy_manager| has the lock by now, but has not released it. Attempt to 334 // |sleepy_manager| has the lock by now, but has not released it. Attempt to
333 // grab it. DoWorkLocked() should block until |manager| has a chance to write 335 // grab it. DoWorkLocked() should block until |manager| has a chance to write
334 // the dump. 336 // the dump.
335 SynchronizedMinidumpManagerSimple manager; 337 SynchronizedMinidumpManagerSimple manager;
336 manager.SetDumpInfoToWrite( 338 manager.SetDumpInfoToWrite(
337 make_scoped_ptr(new DumpInfo("dump", "log", now, params))); 339 base::WrapUnique(new DumpInfo("dump", "log", now, params)));
338 manager.set_non_blocking(false); 340 manager.set_non_blocking(false);
339 341
340 EXPECT_EQ(0, manager.DoWorkLocked()); 342 EXPECT_EQ(0, manager.DoWorkLocked());
341 EXPECT_EQ(0, manager.add_entry_return_code()); 343 EXPECT_EQ(0, manager.add_entry_return_code());
342 EXPECT_TRUE(manager.work_done()); 344 EXPECT_TRUE(manager.work_done());
343 345
344 // Check that the other manager was also successful. 346 // Check that the other manager was also successful.
345 EXPECT_EQ(0, sleepy_manager.add_entry_return_code()); 347 EXPECT_EQ(0, sleepy_manager.add_entry_return_code());
346 EXPECT_TRUE(sleepy_manager.work_done()); 348 EXPECT_TRUE(sleepy_manager.work_done());
347 349
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
394 params.process_name = "process"; 396 params.process_name = "process";
395 397
396 // Fork the process. 398 // Fork the process.
397 pid_t pid = base::ForkWithFlags(0u, nullptr, nullptr); 399 pid_t pid = base::ForkWithFlags(0u, nullptr, nullptr);
398 if (pid != 0) { 400 if (pid != 0) {
399 // The child process should instantiate a manager which immediately grabs 401 // The child process should instantiate a manager which immediately grabs
400 // the lock, and falls aleep for some period of time, then writes a dump, 402 // the lock, and falls aleep for some period of time, then writes a dump,
401 // and finally releases the lock. 403 // and finally releases the lock.
402 SleepySynchronizedMinidumpManagerSimple sleepy_manager(100); 404 SleepySynchronizedMinidumpManagerSimple sleepy_manager(100);
403 sleepy_manager.SetDumpInfoToWrite( 405 sleepy_manager.SetDumpInfoToWrite(
404 make_scoped_ptr(new DumpInfo("dump", "log", now, params))); 406 base::WrapUnique(new DumpInfo("dump", "log", now, params)));
405 ASSERT_EQ(0, sleepy_manager.DoWorkLocked()); 407 ASSERT_EQ(0, sleepy_manager.DoWorkLocked());
406 ASSERT_TRUE(sleepy_manager.work_done()); 408 ASSERT_TRUE(sleepy_manager.work_done());
407 return; 409 return;
408 } 410 }
409 411
410 // Meanwhile, this process should wait brielfy to allow the other thread to 412 // Meanwhile, this process should wait brielfy to allow the other thread to
411 // grab the lock. 413 // grab the lock.
412 const int concurrency_delay = 50; 414 const int concurrency_delay = 50;
413 base::PlatformThread::Sleep( 415 base::PlatformThread::Sleep(
414 base::TimeDelta::FromMilliseconds(concurrency_delay)); 416 base::TimeDelta::FromMilliseconds(concurrency_delay));
415 417
416 // |sleepy_manager| has the lock by now, but has not released it. Attempt to 418 // |sleepy_manager| has the lock by now, but has not released it. Attempt to
417 // grab it. DoWorkLocked() should block until |manager| has a chance to write 419 // grab it. DoWorkLocked() should block until |manager| has a chance to write
418 // the dump. 420 // the dump.
419 SynchronizedMinidumpManagerSimple manager; 421 SynchronizedMinidumpManagerSimple manager;
420 manager.SetDumpInfoToWrite( 422 manager.SetDumpInfoToWrite(
421 make_scoped_ptr(new DumpInfo("dump", "log", now, params))); 423 base::WrapUnique(new DumpInfo("dump", "log", now, params)));
422 manager.set_non_blocking(false); 424 manager.set_non_blocking(false);
423 425
424 EXPECT_EQ(0, manager.DoWorkLocked()); 426 EXPECT_EQ(0, manager.DoWorkLocked());
425 EXPECT_EQ(0, manager.add_entry_return_code()); 427 EXPECT_EQ(0, manager.add_entry_return_code());
426 EXPECT_TRUE(manager.work_done()); 428 EXPECT_TRUE(manager.work_done());
427 429
428 // Test that both entries were logged. 430 // Test that both entries were logged.
429 ScopedVector<DumpInfo> dumps; 431 ScopedVector<DumpInfo> dumps;
430 ASSERT_TRUE(FetchDumps(lockfile_.value(), &dumps)); 432 ASSERT_TRUE(FetchDumps(lockfile_.value(), &dumps));
431 EXPECT_EQ(2u, dumps.size()); 433 EXPECT_EQ(2u, dumps.size());
432 } 434 }
433 435
434 TEST_F(SynchronizedMinidumpManagerTest, 436 TEST_F(SynchronizedMinidumpManagerTest,
435 Upload_SucceedsWhenDumpLimitsNotExceeded) { 437 Upload_SucceedsWhenDumpLimitsNotExceeded) {
436 // Sample parameters. 438 // Sample parameters.
437 time_t now = time(0); 439 time_t now = time(0);
438 MinidumpParams params; 440 MinidumpParams params;
439 params.process_name = "process"; 441 params.process_name = "process";
440 442
441 FakeSynchronizedMinidumpUploader uploader; 443 FakeSynchronizedMinidumpUploader uploader;
442 SynchronizedMinidumpManagerSimple producer; 444 SynchronizedMinidumpManagerSimple producer;
443 producer.SetDumpInfoToWrite( 445 producer.SetDumpInfoToWrite(
444 make_scoped_ptr(new DumpInfo("dump1", "log1", now, params))); 446 base::WrapUnique(new DumpInfo("dump1", "log1", now, params)));
445 447
446 const int max_dumps = SynchronizedMinidumpManager::kRatelimitPeriodMaxDumps; 448 const int max_dumps = SynchronizedMinidumpManager::kRatelimitPeriodMaxDumps;
447 produce_dumps(producer, max_dumps); 449 produce_dumps(producer, max_dumps);
448 consume_dumps(uploader, max_dumps); 450 consume_dumps(uploader, max_dumps);
449 } 451 }
450 452
451 TEST_F(SynchronizedMinidumpManagerTest, Upload_FailsWhenTooManyRecentDumps) { 453 TEST_F(SynchronizedMinidumpManagerTest, Upload_FailsWhenTooManyRecentDumps) {
452 // Sample parameters. 454 // Sample parameters.
453 time_t now = time(0); 455 time_t now = time(0);
454 MinidumpParams params; 456 MinidumpParams params;
455 params.process_name = "process"; 457 params.process_name = "process";
456 458
457 FakeSynchronizedMinidumpUploader uploader; 459 FakeSynchronizedMinidumpUploader uploader;
458 SynchronizedMinidumpManagerSimple producer; 460 SynchronizedMinidumpManagerSimple producer;
459 producer.SetDumpInfoToWrite( 461 producer.SetDumpInfoToWrite(
460 make_scoped_ptr(new DumpInfo("dump1", "log1", now, params))); 462 base::WrapUnique(new DumpInfo("dump1", "log1", now, params)));
461 463
462 const int max_dumps = SynchronizedMinidumpManager::kRatelimitPeriodMaxDumps; 464 const int max_dumps = SynchronizedMinidumpManager::kRatelimitPeriodMaxDumps;
463 produce_dumps(producer, max_dumps + 1); 465 produce_dumps(producer, max_dumps + 1);
464 consume_dumps(uploader, max_dumps); 466 consume_dumps(uploader, max_dumps);
465 467
466 // Should fail with too many dumps 468 // Should fail with too many dumps
467 ASSERT_EQ(0, uploader.DoWorkLocked()); 469 ASSERT_EQ(0, uploader.DoWorkLocked());
468 ASSERT_FALSE(uploader.can_upload_return_val()); 470 ASSERT_FALSE(uploader.can_upload_return_val());
469 } 471 }
470 472
471 TEST_F(SynchronizedMinidumpManagerTest, UploadSucceedsAfterRateLimitPeriodEnd) { 473 TEST_F(SynchronizedMinidumpManagerTest, UploadSucceedsAfterRateLimitPeriodEnd) {
472 // Sample parameters. 474 // Sample parameters.
473 time_t now = time(0); 475 time_t now = time(0);
474 MinidumpParams params; 476 MinidumpParams params;
475 params.process_name = "process"; 477 params.process_name = "process";
476 478
477 FakeSynchronizedMinidumpUploader uploader; 479 FakeSynchronizedMinidumpUploader uploader;
478 SynchronizedMinidumpManagerSimple producer; 480 SynchronizedMinidumpManagerSimple producer;
479 producer.SetDumpInfoToWrite( 481 producer.SetDumpInfoToWrite(
480 make_scoped_ptr(new DumpInfo("dump1", "log1", now, params))); 482 base::WrapUnique(new DumpInfo("dump1", "log1", now, params)));
481 483
482 const int iters = 3; 484 const int iters = 3;
483 const int max_dumps = SynchronizedMinidumpManager::kRatelimitPeriodMaxDumps; 485 const int max_dumps = SynchronizedMinidumpManager::kRatelimitPeriodMaxDumps;
484 486
485 for (int i = 0; i < iters; ++i) { 487 for (int i = 0; i < iters; ++i) {
486 produce_dumps(producer, max_dumps + 1); 488 produce_dumps(producer, max_dumps + 1);
487 consume_dumps(uploader, max_dumps); 489 consume_dumps(uploader, max_dumps);
488 490
489 // Should fail with too many dumps 491 // Should fail with too many dumps
490 ASSERT_EQ(0, uploader.DoWorkLocked()); 492 ASSERT_EQ(0, uploader.DoWorkLocked());
(...skipping 23 matching lines...) Expand all
514 TEST_F(SynchronizedMinidumpManagerTest, HasDumpsWithDumps) { 516 TEST_F(SynchronizedMinidumpManagerTest, HasDumpsWithDumps) {
515 // Sample parameters. 517 // Sample parameters.
516 time_t now = time(0); 518 time_t now = time(0);
517 MinidumpParams params; 519 MinidumpParams params;
518 params.process_name = "process"; 520 params.process_name = "process";
519 521
520 SynchronizedMinidumpManagerSimple producer; 522 SynchronizedMinidumpManagerSimple producer;
521 FakeSynchronizedMinidumpUploader uploader; 523 FakeSynchronizedMinidumpUploader uploader;
522 524
523 producer.SetDumpInfoToWrite( 525 producer.SetDumpInfoToWrite(
524 make_scoped_ptr(new DumpInfo("dump1", "log1", now, params))); 526 base::WrapUnique(new DumpInfo("dump1", "log1", now, params)));
525 527
526 const int kNumDumps = 3; 528 const int kNumDumps = 3;
527 for (int i = 0; i < kNumDumps; ++i) { 529 for (int i = 0; i < kNumDumps; ++i) {
528 produce_dumps(producer, 1); 530 produce_dumps(producer, 1);
529 ASSERT_TRUE(uploader.HasDumps()); 531 ASSERT_TRUE(uploader.HasDumps());
530 } 532 }
531 533
532 for (int i = 0; i < kNumDumps; ++i) { 534 for (int i = 0; i < kNumDumps; ++i) {
533 ASSERT_TRUE(uploader.HasDumps()); 535 ASSERT_TRUE(uploader.HasDumps());
534 consume_dumps(uploader, 1); 536 consume_dumps(uploader, 1);
(...skipping 10 matching lines...) Expand all
545 const base::FilePath path = 547 const base::FilePath path =
546 base::FilePath(manager.dump_path()).Append("hello123"); 548 base::FilePath(manager.dump_path()).Append("hello123");
547 const char kFileContents[] = "foobar"; 549 const char kFileContents[] = "foobar";
548 ASSERT_EQ(static_cast<int>(sizeof(kFileContents)), 550 ASSERT_EQ(static_cast<int>(sizeof(kFileContents)),
549 WriteFile(path, kFileContents, sizeof(kFileContents))); 551 WriteFile(path, kFileContents, sizeof(kFileContents)));
550 552
551 ASSERT_TRUE(manager.HasDumps()); 553 ASSERT_TRUE(manager.HasDumps());
552 } 554 }
553 555
554 } // namespace chromecast 556 } // namespace chromecast
OLDNEW
« no previous file with comments | « chromecast/crash/linux/synchronized_minidump_manager.cc ('k') | chromecast/graphics/osd_plane_default.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698