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

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

Issue 2203123003: [Chromecast] Remove usage of nonreentrant functions. (Closed) Base URL: https://chromium.googlesource.com/chromium/src@master
Patch Set: Cleanup Created 4 years, 4 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>
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after
250 250
251 // Verify the lockfile is untouched. 251 // Verify the lockfile is untouched.
252 ScopedVector<DumpInfo> dumps; 252 ScopedVector<DumpInfo> dumps;
253 ASSERT_TRUE(FetchDumps(lockfile_.value(), &dumps)); 253 ASSERT_TRUE(FetchDumps(lockfile_.value(), &dumps));
254 ASSERT_EQ(0u, dumps.size()); 254 ASSERT_EQ(0u, dumps.size());
255 } 255 }
256 256
257 TEST_F(SynchronizedMinidumpManagerTest, 257 TEST_F(SynchronizedMinidumpManagerTest,
258 AddEntryToLockFile_SucceedsWithValidEntries) { 258 AddEntryToLockFile_SucceedsWithValidEntries) {
259 // Sample parameters. 259 // Sample parameters.
260 time_t now = time(0); 260 base::Time now = base::Time::Now();
261 MinidumpParams params; 261 MinidumpParams params;
262 params.process_name = "process"; 262 params.process_name = "process";
263 263
264 // Write the first entry. 264 // Write the first entry.
265 SynchronizedMinidumpManagerSimple manager; 265 SynchronizedMinidumpManagerSimple manager;
266 manager.SetDumpInfoToWrite( 266 manager.SetDumpInfoToWrite(
267 base::WrapUnique(new DumpInfo("dump1", "log1", now, params))); 267 base::WrapUnique(new DumpInfo("dump1", "log1", now, params)));
268 ASSERT_EQ(0, manager.DoWorkLocked()); 268 ASSERT_EQ(0, manager.DoWorkLocked());
269 ASSERT_EQ(0, manager.add_entry_return_code()); 269 ASSERT_EQ(0, manager.add_entry_return_code());
270 270
271 // Test that the manager was successful in logging the entry. 271 // Test that the manager was successful in logging the entry.
272 ScopedVector<DumpInfo> dumps; 272 ScopedVector<DumpInfo> dumps;
273 ASSERT_TRUE(FetchDumps(lockfile_.value(), &dumps)); 273 ASSERT_TRUE(FetchDumps(lockfile_.value(), &dumps));
274 ASSERT_EQ(1u, dumps.size()); 274 ASSERT_EQ(1u, dumps.size());
275 275
276 // Write the second entry. 276 // Write the second entry.
277 manager.SetDumpInfoToWrite( 277 manager.SetDumpInfoToWrite(
278 base::WrapUnique(new DumpInfo("dump2", "log2", now, params))); 278 base::WrapUnique(new DumpInfo("dump2", "log2", now, params)));
279 ASSERT_EQ(0, manager.DoWorkLocked()); 279 ASSERT_EQ(0, manager.DoWorkLocked());
280 ASSERT_EQ(0, manager.add_entry_return_code()); 280 ASSERT_EQ(0, manager.add_entry_return_code());
281 281
282 // Test that the second entry is also valid. 282 // Test that the second entry is also valid.
283 ASSERT_TRUE(FetchDumps(lockfile_.value(), &dumps)); 283 ASSERT_TRUE(FetchDumps(lockfile_.value(), &dumps));
284 ASSERT_EQ(2u, dumps.size()); 284 ASSERT_EQ(2u, dumps.size());
285 } 285 }
286 286
287 TEST_F(SynchronizedMinidumpManagerTest, 287 TEST_F(SynchronizedMinidumpManagerTest,
bcf 2016/08/05 03:33:23 Why are we keeping this around?
ameyak 2016/08/05 18:45:06 Initial thought was it would be cleaner to just di
288 AcquireLockFile_FailsWhenNonBlockingAndFileLocked) { 288 DISABLED_AcquireLockFile_FailsWhenNonBlockingAndFileLocked) {
289 ASSERT_TRUE(CreateFiles(lockfile_.value(), metadata_.value())); 289 ASSERT_TRUE(CreateFiles(lockfile_.value(), metadata_.value()));
290 // Lock the lockfile here. Note that the Chromium base::File tools permit 290 // Lock the lockfile here. Note that the Chromium base::File tools permit
291 // multiple locks on the same process to succeed, so we must use POSIX system 291 // multiple locks on the same process to succeed, so we must use POSIX system
292 // calls to accomplish this. 292 // calls to accomplish this.
293 int fd = open(lockfile_.value().c_str(), O_RDWR | O_CREAT, 0660); 293 int fd = open(lockfile_.value().c_str(), O_RDWR | O_CREAT, 0660);
294 ASSERT_GE(fd, 0); 294 ASSERT_GE(fd, 0);
295 ASSERT_EQ(0, flock(fd, LOCK_EX)); 295 ASSERT_EQ(0, flock(fd, LOCK_EX));
296 296
297 SynchronizedMinidumpManagerSimple manager; 297 SynchronizedMinidumpManagerSimple manager;
298 manager.set_non_blocking(true); 298 // manager.set_non_blocking(true); This method has been deprecated.
299 ASSERT_EQ(-1, manager.DoWorkLocked()); 299 ASSERT_EQ(-1, manager.DoWorkLocked());
300 ASSERT_FALSE(manager.work_done()); 300 ASSERT_FALSE(manager.work_done());
301
302 // Test that the manager was not able to log the crash dump. 301 // Test that the manager was not able to log the crash dump.
303 ScopedVector<DumpInfo> dumps; 302 ScopedVector<DumpInfo> dumps;
304 ASSERT_TRUE(FetchDumps(lockfile_.value(), &dumps)); 303 ASSERT_TRUE(FetchDumps(lockfile_.value(), &dumps));
305 ASSERT_EQ(0u, dumps.size()); 304 ASSERT_EQ(0u, dumps.size());
306 } 305 }
307 306
308 TEST_F(SynchronizedMinidumpManagerTest, 307 TEST_F(SynchronizedMinidumpManagerTest, AcquireLockFile_WaitsForOtherThread) {
309 AcquireLockFile_WaitsForOtherThreadWhenBlocking) {
310 // Create some parameters for a minidump. 308 // Create some parameters for a minidump.
311 time_t now = time(0); 309 base::Time now = base::Time::Now();
312 MinidumpParams params; 310 MinidumpParams params;
313 params.process_name = "process"; 311 params.process_name = "process";
314 312
315 // Create a manager that grabs the lock then sleeps. Post a DoWork task to 313 // Create a manager that grabs the lock then sleeps. Post a DoWork task to
316 // another thread. |sleepy_manager| will grab the lock and hold it for 314 // another thread. |sleepy_manager| will grab the lock and hold it for
317 // |sleep_time_ms|. It will then write a dump and release the lock. 315 // |sleep_time_ms|. It will then write a dump and release the lock.
318 const int sleep_time_ms = 100; 316 const int sleep_time_ms = 100;
319 SleepySynchronizedMinidumpManagerSimple sleepy_manager(sleep_time_ms); 317 SleepySynchronizedMinidumpManagerSimple sleepy_manager(sleep_time_ms);
320 sleepy_manager.SetDumpInfoToWrite( 318 sleepy_manager.SetDumpInfoToWrite(
321 base::WrapUnique(new DumpInfo("dump", "log", now, params))); 319 base::WrapUnique(new DumpInfo("dump", "log", now, params)));
322 base::Thread sleepy_thread("sleepy"); 320 base::Thread sleepy_thread("sleepy");
323 sleepy_thread.Start(); 321 sleepy_thread.Start();
324 sleepy_thread.task_runner()->PostTask( 322 sleepy_thread.task_runner()->PostTask(
325 FROM_HERE, 323 FROM_HERE,
326 base::Bind(&DoWorkLockedTask, base::Unretained(&sleepy_manager))); 324 base::Bind(&DoWorkLockedTask, base::Unretained(&sleepy_manager)));
327 325
328 // Meanwhile, this thread should wait brielfy to allow the other thread to 326 // Meanwhile, this thread should wait brielfy to allow the other thread to
329 // grab the lock. 327 // grab the lock.
330 const int concurrency_delay = 50; 328 const int concurrency_delay = 50;
331 base::PlatformThread::Sleep( 329 base::PlatformThread::Sleep(
332 base::TimeDelta::FromMilliseconds(concurrency_delay)); 330 base::TimeDelta::FromMilliseconds(concurrency_delay));
333 331
334 // |sleepy_manager| has the lock by now, but has not released it. Attempt to 332 // |sleepy_manager| has the lock by now, but has not released it. Attempt to
335 // grab it. DoWorkLocked() should block until |manager| has a chance to write 333 // grab it. DoWorkLocked() should block until |manager| has a chance to write
336 // the dump. 334 // the dump.
337 SynchronizedMinidumpManagerSimple manager; 335 SynchronizedMinidumpManagerSimple manager;
338 manager.SetDumpInfoToWrite( 336 manager.SetDumpInfoToWrite(
339 base::WrapUnique(new DumpInfo("dump", "log", now, params))); 337 base::WrapUnique(new DumpInfo("dump", "log", now, params)));
340 manager.set_non_blocking(false);
341 338
342 EXPECT_EQ(0, manager.DoWorkLocked()); 339 EXPECT_EQ(0, manager.DoWorkLocked());
343 EXPECT_EQ(0, manager.add_entry_return_code()); 340 EXPECT_EQ(0, manager.add_entry_return_code());
344 EXPECT_TRUE(manager.work_done()); 341 EXPECT_TRUE(manager.work_done());
345 342
346 // Check that the other manager was also successful. 343 // Check that the other manager was also successful.
347 EXPECT_EQ(0, sleepy_manager.add_entry_return_code()); 344 EXPECT_EQ(0, sleepy_manager.add_entry_return_code());
348 EXPECT_TRUE(sleepy_manager.work_done()); 345 EXPECT_TRUE(sleepy_manager.work_done());
349 346
350 // Test that both entries were logged. 347 // Test that both entries were logged.
351 ScopedVector<DumpInfo> dumps; 348 ScopedVector<DumpInfo> dumps;
352 ASSERT_TRUE(FetchDumps(lockfile_.value(), &dumps)); 349 ASSERT_TRUE(FetchDumps(lockfile_.value(), &dumps));
353 EXPECT_EQ(2u, dumps.size()); 350 EXPECT_EQ(2u, dumps.size());
354 } 351 }
355 352
356 // TODO(slan): These tests are passing but forking them is creating duplicates 353 // TODO(slan): These tests are passing but forking them is creating duplicates
357 // of all tests in this thread. Figure out how to lock the file more cleanly 354 // of all tests in this thread. Figure out how to lock the file more cleanly
358 // from another process. 355 // from another process.
359 TEST_F(SynchronizedMinidumpManagerTest, 356 TEST_F(SynchronizedMinidumpManagerTest,
bcf 2016/08/05 03:33:23 Ditto
ameyak 2016/08/05 18:45:07 See comment above.
360 DISABLED_AcquireLockFile_FailsWhenNonBlockingAndLockedFromOtherProcess) { 357 DISABLED_AcquireLockFile_FailsWhenNonBlockingAndLockedFromOtherProcess) {
361 // Fork the process. 358 // Fork the process.
362 pid_t pid = base::ForkWithFlags(0u, nullptr, nullptr); 359 pid_t pid = base::ForkWithFlags(0u, nullptr, nullptr);
363 if (pid != 0) { 360 if (pid != 0) {
364 // The child process should instantiate a manager which immediately grabs 361 // The child process should instantiate a manager which immediately grabs
365 // the lock, and falls aleep for some period of time, then writes a dump, 362 // the lock, and falls aleep for some period of time, then writes a dump,
366 // and finally releases the lock. 363 // and finally releases the lock.
367 SleepySynchronizedMinidumpManagerSimple sleepy_manager(100); 364 SleepySynchronizedMinidumpManagerSimple sleepy_manager(100);
368 ASSERT_EQ(0, sleepy_manager.DoWorkLocked()); 365 ASSERT_EQ(0, sleepy_manager.DoWorkLocked());
369 ASSERT_TRUE(sleepy_manager.work_done()); 366 ASSERT_TRUE(sleepy_manager.work_done());
370 return; 367 return;
371 } 368 }
372 369
373 // Meanwhile, this process should wait brielfy to allow the other thread to 370 // Meanwhile, this process should wait brielfy to allow the other thread to
374 // grab the lock. 371 // grab the lock.
375 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(50)); 372 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(50));
376 373
377 SynchronizedMinidumpManagerSimple manager; 374 SynchronizedMinidumpManagerSimple manager;
378 manager.set_non_blocking(true); 375 // manager.set_non_blocking(true); This method has been deprecated.
379 ASSERT_EQ(-1, manager.DoWorkLocked()); 376 ASSERT_EQ(-1, manager.DoWorkLocked());
380 ASSERT_FALSE(manager.work_done()); 377 ASSERT_FALSE(manager.work_done());
381
382 // Test that the manager was not able to log the crash dump. 378 // Test that the manager was not able to log the crash dump.
383 ScopedVector<DumpInfo> dumps; 379 ScopedVector<DumpInfo> dumps;
384 ASSERT_TRUE(FetchDumps(lockfile_.value(), &dumps)); 380 ASSERT_TRUE(FetchDumps(lockfile_.value(), &dumps));
385 ASSERT_EQ(0u, dumps.size()); 381 ASSERT_EQ(0u, dumps.size());
386 } 382 }
387 383
388 // TODO(slan): These tests are passing but forking them is creating duplicates 384 // TODO(slan): These tests are passing but forking them is creating duplicates
389 // of all tests in this thread. Figure out how to lock the file more cleanly 385 // of all tests in this thread. Figure out how to lock the file more cleanly
390 // from another process. 386 // from another process.
391 TEST_F(SynchronizedMinidumpManagerTest, 387 TEST_F(SynchronizedMinidumpManagerTest,
392 DISABLED_AcquireLockFile_WaitsForOtherProcessWhenBlocking) { 388 DISABLED_AcquireLockFile_WaitsForOtherProcess) {
393 // Create some parameters for a minidump. 389 // Create some parameters for a minidump.
394 time_t now = time(0); 390 base::Time now = base::Time::Now();
395 MinidumpParams params; 391 MinidumpParams params;
396 params.process_name = "process"; 392 params.process_name = "process";
397 393
398 // Fork the process. 394 // Fork the process.
399 pid_t pid = base::ForkWithFlags(0u, nullptr, nullptr); 395 pid_t pid = base::ForkWithFlags(0u, nullptr, nullptr);
400 if (pid != 0) { 396 if (pid != 0) {
401 // The child process should instantiate a manager which immediately grabs 397 // The child process should instantiate a manager which immediately grabs
402 // the lock, and falls aleep for some period of time, then writes a dump, 398 // the lock, and falls aleep for some period of time, then writes a dump,
403 // and finally releases the lock. 399 // and finally releases the lock.
404 SleepySynchronizedMinidumpManagerSimple sleepy_manager(100); 400 SleepySynchronizedMinidumpManagerSimple sleepy_manager(100);
405 sleepy_manager.SetDumpInfoToWrite( 401 sleepy_manager.SetDumpInfoToWrite(
406 base::WrapUnique(new DumpInfo("dump", "log", now, params))); 402 base::WrapUnique(new DumpInfo("dump", "log", now, params)));
407 ASSERT_EQ(0, sleepy_manager.DoWorkLocked()); 403 ASSERT_EQ(0, sleepy_manager.DoWorkLocked());
408 ASSERT_TRUE(sleepy_manager.work_done()); 404 ASSERT_TRUE(sleepy_manager.work_done());
409 return; 405 return;
410 } 406 }
411 407
412 // Meanwhile, this process should wait brielfy to allow the other thread to 408 // Meanwhile, this process should wait brielfy to allow the other thread to
413 // grab the lock. 409 // grab the lock.
414 const int concurrency_delay = 50; 410 const int concurrency_delay = 50;
415 base::PlatformThread::Sleep( 411 base::PlatformThread::Sleep(
416 base::TimeDelta::FromMilliseconds(concurrency_delay)); 412 base::TimeDelta::FromMilliseconds(concurrency_delay));
417 413
418 // |sleepy_manager| has the lock by now, but has not released it. Attempt to 414 // |sleepy_manager| has the lock by now, but has not released it. Attempt to
419 // grab it. DoWorkLocked() should block until |manager| has a chance to write 415 // grab it. DoWorkLocked() should block until |manager| has a chance to write
420 // the dump. 416 // the dump.
421 SynchronizedMinidumpManagerSimple manager; 417 SynchronizedMinidumpManagerSimple manager;
422 manager.SetDumpInfoToWrite( 418 manager.SetDumpInfoToWrite(
423 base::WrapUnique(new DumpInfo("dump", "log", now, params))); 419 base::WrapUnique(new DumpInfo("dump", "log", now, params)));
424 manager.set_non_blocking(false);
425 420
426 EXPECT_EQ(0, manager.DoWorkLocked()); 421 EXPECT_EQ(0, manager.DoWorkLocked());
427 EXPECT_EQ(0, manager.add_entry_return_code()); 422 EXPECT_EQ(0, manager.add_entry_return_code());
428 EXPECT_TRUE(manager.work_done()); 423 EXPECT_TRUE(manager.work_done());
429 424
430 // Test that both entries were logged. 425 // Test that both entries were logged.
431 ScopedVector<DumpInfo> dumps; 426 ScopedVector<DumpInfo> dumps;
432 ASSERT_TRUE(FetchDumps(lockfile_.value(), &dumps)); 427 ASSERT_TRUE(FetchDumps(lockfile_.value(), &dumps));
433 EXPECT_EQ(2u, dumps.size()); 428 EXPECT_EQ(2u, dumps.size());
434 } 429 }
435 430
436 TEST_F(SynchronizedMinidumpManagerTest, 431 TEST_F(SynchronizedMinidumpManagerTest,
437 Upload_SucceedsWhenDumpLimitsNotExceeded) { 432 Upload_SucceedsWhenDumpLimitsNotExceeded) {
438 // Sample parameters. 433 // Sample parameters.
439 time_t now = time(0); 434 base::Time now = base::Time::Now();
440 MinidumpParams params; 435 MinidumpParams params;
441 params.process_name = "process"; 436 params.process_name = "process";
442 437
443 FakeSynchronizedMinidumpUploader uploader; 438 FakeSynchronizedMinidumpUploader uploader;
444 SynchronizedMinidumpManagerSimple producer; 439 SynchronizedMinidumpManagerSimple producer;
445 producer.SetDumpInfoToWrite( 440 producer.SetDumpInfoToWrite(
446 base::WrapUnique(new DumpInfo("dump1", "log1", now, params))); 441 base::WrapUnique(new DumpInfo("dump1", "log1", now, params)));
447 442
448 const int max_dumps = SynchronizedMinidumpManager::kRatelimitPeriodMaxDumps; 443 const int max_dumps = SynchronizedMinidumpManager::kRatelimitPeriodMaxDumps;
449 produce_dumps(producer, max_dumps); 444 produce_dumps(producer, max_dumps);
450 consume_dumps(uploader, max_dumps); 445 consume_dumps(uploader, max_dumps);
451 } 446 }
452 447
453 TEST_F(SynchronizedMinidumpManagerTest, Upload_FailsWhenTooManyRecentDumps) { 448 TEST_F(SynchronizedMinidumpManagerTest, Upload_FailsWhenTooManyRecentDumps) {
454 // Sample parameters. 449 // Sample parameters.
455 time_t now = time(0); 450 base::Time now = base::Time::Now();
456 MinidumpParams params; 451 MinidumpParams params;
457 params.process_name = "process"; 452 params.process_name = "process";
458 453
459 FakeSynchronizedMinidumpUploader uploader; 454 FakeSynchronizedMinidumpUploader uploader;
460 SynchronizedMinidumpManagerSimple producer; 455 SynchronizedMinidumpManagerSimple producer;
461 producer.SetDumpInfoToWrite( 456 producer.SetDumpInfoToWrite(
462 base::WrapUnique(new DumpInfo("dump1", "log1", now, params))); 457 base::WrapUnique(new DumpInfo("dump1", "log1", now, params)));
463 458
464 const int max_dumps = SynchronizedMinidumpManager::kRatelimitPeriodMaxDumps; 459 const int max_dumps = SynchronizedMinidumpManager::kRatelimitPeriodMaxDumps;
465 produce_dumps(producer, max_dumps + 1); 460 produce_dumps(producer, max_dumps + 1);
466 consume_dumps(uploader, max_dumps); 461 consume_dumps(uploader, max_dumps);
467 462
468 // Should fail with too many dumps 463 // Should fail with too many dumps
469 ASSERT_EQ(0, uploader.DoWorkLocked()); 464 ASSERT_EQ(0, uploader.DoWorkLocked());
470 ASSERT_FALSE(uploader.can_upload_return_val()); 465 ASSERT_FALSE(uploader.can_upload_return_val());
471 } 466 }
472 467
473 TEST_F(SynchronizedMinidumpManagerTest, UploadSucceedsAfterRateLimitPeriodEnd) { 468 TEST_F(SynchronizedMinidumpManagerTest, UploadSucceedsAfterRateLimitPeriodEnd) {
474 // Sample parameters. 469 // Sample parameters.
475 time_t now = time(0); 470 base::Time now = base::Time::Now();
476 MinidumpParams params; 471 MinidumpParams params;
477 params.process_name = "process"; 472 params.process_name = "process";
478 473
479 FakeSynchronizedMinidumpUploader uploader; 474 FakeSynchronizedMinidumpUploader uploader;
480 SynchronizedMinidumpManagerSimple producer; 475 SynchronizedMinidumpManagerSimple producer;
481 producer.SetDumpInfoToWrite( 476 producer.SetDumpInfoToWrite(
482 base::WrapUnique(new DumpInfo("dump1", "log1", now, params))); 477 base::WrapUnique(new DumpInfo("dump1", "log1", now, params)));
483 478
484 const int iters = 3; 479 const int iters = 3;
485 const int max_dumps = SynchronizedMinidumpManager::kRatelimitPeriodMaxDumps; 480 const int max_dumps = SynchronizedMinidumpManager::kRatelimitPeriodMaxDumps;
486 481
487 for (int i = 0; i < iters; ++i) { 482 for (int i = 0; i < iters; ++i) {
488 produce_dumps(producer, max_dumps + 1); 483 produce_dumps(producer, max_dumps + 1);
489 consume_dumps(uploader, max_dumps); 484 consume_dumps(uploader, max_dumps);
490 485
491 // Should fail with too many dumps 486 // Should fail with too many dumps
492 ASSERT_EQ(0, uploader.DoWorkLocked()); 487 ASSERT_EQ(0, uploader.DoWorkLocked());
493 ASSERT_FALSE(uploader.can_upload_return_val()); 488 ASSERT_FALSE(uploader.can_upload_return_val());
494 489
495 int64_t period = SynchronizedMinidumpManager::kRatelimitPeriodSeconds; 490 base::TimeDelta period = base::TimeDelta::FromSeconds(
491 SynchronizedMinidumpManager::kRatelimitPeriodSeconds);
492 base::Time now = base::Time::Now();
496 493
497 // Half period shouldn't trigger reset 494 // Half period shouldn't trigger reset
498 produce_dumps(producer, 1); 495 produce_dumps(producer, 1);
499 SetRatelimitPeriodStart(metadata_.value(), now - period / 2); 496 SetRatelimitPeriodStart(metadata_.value(), now - period / 2);
500 ASSERT_EQ(0, uploader.DoWorkLocked()); 497 ASSERT_EQ(0, uploader.DoWorkLocked());
501 ASSERT_FALSE(uploader.can_upload_return_val()); 498 ASSERT_FALSE(uploader.can_upload_return_val());
502 499
503 // Set period starting time to trigger a reset 500 // Set period starting time to trigger a reset
504 SetRatelimitPeriodStart(metadata_.value(), now - period); 501 SetRatelimitPeriodStart(metadata_.value(), now - period);
505 } 502 }
506 503
507 produce_dumps(producer, 1); 504 produce_dumps(producer, 1);
508 consume_dumps(uploader, 1); 505 consume_dumps(uploader, 1);
509 } 506 }
510 507
511 TEST_F(SynchronizedMinidumpManagerTest, HasDumpsWithoutDumps) { 508 TEST_F(SynchronizedMinidumpManagerTest, HasDumpsWithoutDumps) {
512 FakeSynchronizedMinidumpUploader uploader; 509 FakeSynchronizedMinidumpUploader uploader;
513 ASSERT_FALSE(uploader.HasDumps()); 510 ASSERT_FALSE(uploader.HasDumps());
514 } 511 }
515 512
516 TEST_F(SynchronizedMinidumpManagerTest, HasDumpsWithDumps) { 513 TEST_F(SynchronizedMinidumpManagerTest, HasDumpsWithDumps) {
517 // Sample parameters. 514 // Sample parameters.
518 time_t now = time(0); 515 base::Time now = base::Time::Now();
519 MinidumpParams params; 516 MinidumpParams params;
520 params.process_name = "process"; 517 params.process_name = "process";
521 518
522 SynchronizedMinidumpManagerSimple producer; 519 SynchronizedMinidumpManagerSimple producer;
523 FakeSynchronizedMinidumpUploader uploader; 520 FakeSynchronizedMinidumpUploader uploader;
524 521
525 producer.SetDumpInfoToWrite( 522 producer.SetDumpInfoToWrite(
526 base::WrapUnique(new DumpInfo("dump1", "log1", now, params))); 523 base::WrapUnique(new DumpInfo("dump1", "log1", now, params)));
527 524
528 const int kNumDumps = 3; 525 const int kNumDumps = 3;
(...skipping 18 matching lines...) Expand all
547 const base::FilePath path = 544 const base::FilePath path =
548 base::FilePath(manager.dump_path()).Append("hello123"); 545 base::FilePath(manager.dump_path()).Append("hello123");
549 const char kFileContents[] = "foobar"; 546 const char kFileContents[] = "foobar";
550 ASSERT_EQ(static_cast<int>(sizeof(kFileContents)), 547 ASSERT_EQ(static_cast<int>(sizeof(kFileContents)),
551 WriteFile(path, kFileContents, sizeof(kFileContents))); 548 WriteFile(path, kFileContents, sizeof(kFileContents)));
552 549
553 ASSERT_TRUE(manager.HasDumps()); 550 ASSERT_TRUE(manager.HasDumps());
554 } 551 }
555 552
556 } // namespace chromecast 553 } // namespace chromecast
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698