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

Unified 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: slan@ comments 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chromecast/crash/linux/synchronized_minidump_manager.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chromecast/crash/linux/synchronized_minidump_manager_unittest.cc
diff --git a/chromecast/crash/linux/synchronized_minidump_manager_unittest.cc b/chromecast/crash/linux/synchronized_minidump_manager_unittest.cc
index 5fa5a79b7e00994fd97548ebe26da9c6d45b69e2..fa3e22c79c9088f2a4ea450be7d82bde7902e2f2 100644
--- a/chromecast/crash/linux/synchronized_minidump_manager_unittest.cc
+++ b/chromecast/crash/linux/synchronized_minidump_manager_unittest.cc
@@ -48,7 +48,7 @@ class SynchronizedMinidumpManagerSimple : public SynchronizedMinidumpManager {
SynchronizedMinidumpManagerSimple()
: SynchronizedMinidumpManager(),
work_done_(false),
- add_entry_return_code_(-1),
+ add_entry_return_code_(false),
lockfile_path_(dump_path_.Append(kLockfileName).value()) {}
~SynchronizedMinidumpManagerSimple() override {}
@@ -56,14 +56,14 @@ class SynchronizedMinidumpManagerSimple : public SynchronizedMinidumpManager {
dump_info_ = std::move(dump_info);
}
- int DoWorkLocked() { return AcquireLockAndDoWork(); }
+ bool DoWorkLocked() { return AcquireLockAndDoWork(); }
// SynchronizedMinidumpManager implementation:
- int DoWork() override {
+ bool DoWork() override {
if (dump_info_)
add_entry_return_code_ = AddEntryToLockFile(*dump_info_);
work_done_ = true;
- return 0;
+ return true;
}
// Accessors for testing.
@@ -71,11 +71,11 @@ class SynchronizedMinidumpManagerSimple : public SynchronizedMinidumpManager {
const std::string& dump_path() { return dump_path_.value(); }
const std::string& lockfile_path() { return lockfile_path_; }
bool work_done() { return work_done_; }
- int add_entry_return_code() { return add_entry_return_code_; }
+ bool add_entry_return_code() { return add_entry_return_code_; }
private:
bool work_done_;
- int add_entry_return_code_;
+ bool add_entry_return_code_;
std::string lockfile_path_;
std::unique_ptr<DumpInfo> dump_info_;
};
@@ -92,19 +92,19 @@ class FakeSynchronizedMinidumpUploader : public SynchronizedMinidumpManager {
: SynchronizedMinidumpManager(), can_upload_return_val_(false) {}
~FakeSynchronizedMinidumpUploader() override {}
- int DoWorkLocked() { return AcquireLockAndDoWork(); }
+ bool DoWorkLocked() { return AcquireLockAndDoWork(); }
// SynchronizedMinidumpManager implementation:
- int DoWork() override {
+ bool DoWork() override {
can_upload_return_val_ = CanUploadDump();
- if (RemoveEntryFromLockFile(0) < 0)
- return -1;
+ if (!RemoveEntryFromLockFile(0))
+ return false;
- if (IncrementNumDumpsInCurrentPeriod() < 0)
- return -1;
+ if (!IncrementNumDumpsInCurrentPeriod())
+ return false;
- return 0;
+ return true;
}
// Accessors for testing.
@@ -124,7 +124,7 @@ class SleepySynchronizedMinidumpManagerSimple
~SleepySynchronizedMinidumpManagerSimple() override {}
// SynchronizedMinidumpManager implementation:
- int DoWork() override {
+ bool DoWork() override {
// The lock has been acquired. Fall asleep for |kSleepDurationMs|, then
// write the file.
base::PlatformThread::Sleep(
@@ -174,8 +174,8 @@ class SynchronizedMinidumpManagerTest : public testing::Test {
// Have |producer| generate |num_dumps| while checking there are no errors.
void produce_dumps(SynchronizedMinidumpManagerSimple& producer, int num_dumps) {
for (int i = 0; i < num_dumps; ++i) {
- ASSERT_EQ(0, producer.DoWorkLocked());
- ASSERT_EQ(0, producer.add_entry_return_code());
+ ASSERT_TRUE(producer.DoWorkLocked());
+ ASSERT_TRUE(producer.add_entry_return_code());
}
}
@@ -183,7 +183,7 @@ void produce_dumps(SynchronizedMinidumpManagerSimple& producer, int num_dumps) {
// errors.
void consume_dumps(FakeSynchronizedMinidumpUploader& consumer, int num_dumps) {
for (int i = 0; i < num_dumps; ++i) {
- ASSERT_EQ(0, consumer.DoWorkLocked());
+ ASSERT_TRUE(consumer.DoWorkLocked());
ASSERT_TRUE(consumer.can_upload_return_val());
}
}
@@ -204,7 +204,7 @@ TEST_F(SynchronizedMinidumpManagerTest, AcquireLockOnNonExistentDirectory) {
ASSERT_FALSE(base::PathExists(minidump_dir_));
SynchronizedMinidumpManagerSimple manager;
- ASSERT_EQ(0, manager.DoWorkLocked());
+ ASSERT_TRUE(manager.DoWorkLocked());
ASSERT_TRUE(manager.work_done());
// Verify the directory and the lockfile both exist.
@@ -218,7 +218,7 @@ TEST_F(SynchronizedMinidumpManagerTest, AcquireLockOnExistingEmptyDirectory) {
ASSERT_FALSE(base::PathExists(lockfile_));
SynchronizedMinidumpManagerSimple manager;
- ASSERT_EQ(0, manager.DoWorkLocked());
+ ASSERT_TRUE(manager.DoWorkLocked());
ASSERT_TRUE(manager.work_done());
// Verify the directory and the lockfile both exist.
@@ -229,7 +229,7 @@ TEST_F(SynchronizedMinidumpManagerTest, AcquireLockOnExistingEmptyDirectory) {
TEST_F(SynchronizedMinidumpManagerTest,
AcquireLockOnExistingDirectoryWithLockfile) {
SynchronizedMinidumpManagerSimple manager;
- ASSERT_EQ(0, manager.DoWorkLocked());
+ ASSERT_TRUE(manager.DoWorkLocked());
ASSERT_TRUE(manager.work_done());
// Verify the directory and the lockfile both exist.
@@ -245,8 +245,8 @@ TEST_F(SynchronizedMinidumpManagerTest,
// Test that the manager tried to log the entry and failed.
SynchronizedMinidumpManagerSimple manager;
manager.SetDumpInfoToWrite(base::WrapUnique(new DumpInfo(&val)));
- ASSERT_EQ(0, manager.DoWorkLocked());
- ASSERT_EQ(-1, manager.add_entry_return_code());
+ ASSERT_TRUE(manager.DoWorkLocked());
+ ASSERT_FALSE(manager.add_entry_return_code());
// Verify the lockfile is untouched.
ScopedVector<DumpInfo> dumps;
@@ -257,7 +257,7 @@ TEST_F(SynchronizedMinidumpManagerTest,
TEST_F(SynchronizedMinidumpManagerTest,
AddEntryToLockFile_SucceedsWithValidEntries) {
// Sample parameters.
- time_t now = time(0);
+ base::Time now = base::Time::Now();
MinidumpParams params;
params.process_name = "process";
@@ -265,8 +265,8 @@ TEST_F(SynchronizedMinidumpManagerTest,
SynchronizedMinidumpManagerSimple manager;
manager.SetDumpInfoToWrite(
base::WrapUnique(new DumpInfo("dump1", "log1", now, params)));
- ASSERT_EQ(0, manager.DoWorkLocked());
- ASSERT_EQ(0, manager.add_entry_return_code());
+ ASSERT_TRUE(manager.DoWorkLocked());
+ ASSERT_TRUE(manager.add_entry_return_code());
// Test that the manager was successful in logging the entry.
ScopedVector<DumpInfo> dumps;
@@ -276,39 +276,17 @@ TEST_F(SynchronizedMinidumpManagerTest,
// Write the second entry.
manager.SetDumpInfoToWrite(
base::WrapUnique(new DumpInfo("dump2", "log2", now, params)));
- ASSERT_EQ(0, manager.DoWorkLocked());
- ASSERT_EQ(0, manager.add_entry_return_code());
+ ASSERT_TRUE(manager.DoWorkLocked());
+ ASSERT_TRUE(manager.add_entry_return_code());
// Test that the second entry is also valid.
ASSERT_TRUE(FetchDumps(lockfile_.value(), &dumps));
ASSERT_EQ(2u, dumps.size());
}
-TEST_F(SynchronizedMinidumpManagerTest,
- AcquireLockFile_FailsWhenNonBlockingAndFileLocked) {
- ASSERT_TRUE(CreateFiles(lockfile_.value(), metadata_.value()));
- // Lock the lockfile here. Note that the Chromium base::File tools permit
- // multiple locks on the same process to succeed, so we must use POSIX system
- // calls to accomplish this.
- int fd = open(lockfile_.value().c_str(), O_RDWR | O_CREAT, 0660);
- ASSERT_GE(fd, 0);
- ASSERT_EQ(0, flock(fd, LOCK_EX));
-
- SynchronizedMinidumpManagerSimple manager;
- manager.set_non_blocking(true);
- ASSERT_EQ(-1, manager.DoWorkLocked());
- ASSERT_FALSE(manager.work_done());
-
- // Test that the manager was not able to log the crash dump.
- ScopedVector<DumpInfo> dumps;
- ASSERT_TRUE(FetchDumps(lockfile_.value(), &dumps));
- ASSERT_EQ(0u, dumps.size());
-}
-
-TEST_F(SynchronizedMinidumpManagerTest,
- AcquireLockFile_WaitsForOtherThreadWhenBlocking) {
+TEST_F(SynchronizedMinidumpManagerTest, AcquireLockFile_WaitsForOtherThread) {
// Create some parameters for a minidump.
- time_t now = time(0);
+ base::Time now = base::Time::Now();
MinidumpParams params;
params.process_name = "process";
@@ -337,14 +315,13 @@ TEST_F(SynchronizedMinidumpManagerTest,
SynchronizedMinidumpManagerSimple manager;
manager.SetDumpInfoToWrite(
base::WrapUnique(new DumpInfo("dump", "log", now, params)));
- manager.set_non_blocking(false);
- EXPECT_EQ(0, manager.DoWorkLocked());
- EXPECT_EQ(0, manager.add_entry_return_code());
+ EXPECT_TRUE(manager.DoWorkLocked());
+ EXPECT_TRUE(manager.add_entry_return_code());
EXPECT_TRUE(manager.work_done());
// Check that the other manager was also successful.
- EXPECT_EQ(0, sleepy_manager.add_entry_return_code());
+ EXPECT_TRUE(sleepy_manager.add_entry_return_code());
EXPECT_TRUE(sleepy_manager.work_done());
// Test that both entries were logged.
@@ -357,41 +334,9 @@ TEST_F(SynchronizedMinidumpManagerTest,
// of all tests in this thread. Figure out how to lock the file more cleanly
// from another process.
TEST_F(SynchronizedMinidumpManagerTest,
- DISABLED_AcquireLockFile_FailsWhenNonBlockingAndLockedFromOtherProcess) {
- // Fork the process.
- pid_t pid = base::ForkWithFlags(0u, nullptr, nullptr);
- if (pid != 0) {
- // The child process should instantiate a manager which immediately grabs
- // the lock, and falls aleep for some period of time, then writes a dump,
- // and finally releases the lock.
- SleepySynchronizedMinidumpManagerSimple sleepy_manager(100);
- ASSERT_EQ(0, sleepy_manager.DoWorkLocked());
- ASSERT_TRUE(sleepy_manager.work_done());
- return;
- }
-
- // Meanwhile, this process should wait brielfy to allow the other thread to
- // grab the lock.
- base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(50));
-
- SynchronizedMinidumpManagerSimple manager;
- manager.set_non_blocking(true);
- ASSERT_EQ(-1, manager.DoWorkLocked());
- ASSERT_FALSE(manager.work_done());
-
- // Test that the manager was not able to log the crash dump.
- ScopedVector<DumpInfo> dumps;
- ASSERT_TRUE(FetchDumps(lockfile_.value(), &dumps));
- ASSERT_EQ(0u, dumps.size());
-}
-
-// TODO(slan): These tests are passing but forking them is creating duplicates
-// of all tests in this thread. Figure out how to lock the file more cleanly
-// from another process.
-TEST_F(SynchronizedMinidumpManagerTest,
- DISABLED_AcquireLockFile_WaitsForOtherProcessWhenBlocking) {
+ DISABLED_AcquireLockFile_WaitsForOtherProcess) {
// Create some parameters for a minidump.
- time_t now = time(0);
+ base::Time now = base::Time::Now();
MinidumpParams params;
params.process_name = "process";
@@ -404,7 +349,7 @@ TEST_F(SynchronizedMinidumpManagerTest,
SleepySynchronizedMinidumpManagerSimple sleepy_manager(100);
sleepy_manager.SetDumpInfoToWrite(
base::WrapUnique(new DumpInfo("dump", "log", now, params)));
- ASSERT_EQ(0, sleepy_manager.DoWorkLocked());
+ ASSERT_TRUE(sleepy_manager.DoWorkLocked());
ASSERT_TRUE(sleepy_manager.work_done());
return;
}
@@ -421,10 +366,9 @@ TEST_F(SynchronizedMinidumpManagerTest,
SynchronizedMinidumpManagerSimple manager;
manager.SetDumpInfoToWrite(
base::WrapUnique(new DumpInfo("dump", "log", now, params)));
- manager.set_non_blocking(false);
- EXPECT_EQ(0, manager.DoWorkLocked());
- EXPECT_EQ(0, manager.add_entry_return_code());
+ EXPECT_TRUE(manager.DoWorkLocked());
+ EXPECT_TRUE(manager.add_entry_return_code());
EXPECT_TRUE(manager.work_done());
// Test that both entries were logged.
@@ -436,7 +380,7 @@ TEST_F(SynchronizedMinidumpManagerTest,
TEST_F(SynchronizedMinidumpManagerTest,
Upload_SucceedsWhenDumpLimitsNotExceeded) {
// Sample parameters.
- time_t now = time(0);
+ base::Time now = base::Time::Now();
MinidumpParams params;
params.process_name = "process";
@@ -452,7 +396,7 @@ TEST_F(SynchronizedMinidumpManagerTest,
TEST_F(SynchronizedMinidumpManagerTest, Upload_FailsWhenTooManyRecentDumps) {
// Sample parameters.
- time_t now = time(0);
+ base::Time now = base::Time::Now();
MinidumpParams params;
params.process_name = "process";
@@ -466,13 +410,13 @@ TEST_F(SynchronizedMinidumpManagerTest, Upload_FailsWhenTooManyRecentDumps) {
consume_dumps(uploader, max_dumps);
// Should fail with too many dumps
- ASSERT_EQ(0, uploader.DoWorkLocked());
+ ASSERT_TRUE(uploader.DoWorkLocked());
ASSERT_FALSE(uploader.can_upload_return_val());
}
TEST_F(SynchronizedMinidumpManagerTest, UploadSucceedsAfterRateLimitPeriodEnd) {
// Sample parameters.
- time_t now = time(0);
+ base::Time now = base::Time::Now();
MinidumpParams params;
params.process_name = "process";
@@ -489,15 +433,17 @@ TEST_F(SynchronizedMinidumpManagerTest, UploadSucceedsAfterRateLimitPeriodEnd) {
consume_dumps(uploader, max_dumps);
// Should fail with too many dumps
- ASSERT_EQ(0, uploader.DoWorkLocked());
+ ASSERT_TRUE(uploader.DoWorkLocked());
ASSERT_FALSE(uploader.can_upload_return_val());
- int64_t period = SynchronizedMinidumpManager::kRatelimitPeriodSeconds;
+ base::TimeDelta period = base::TimeDelta::FromSeconds(
+ SynchronizedMinidumpManager::kRatelimitPeriodSeconds);
+ base::Time now = base::Time::Now();
// Half period shouldn't trigger reset
produce_dumps(producer, 1);
SetRatelimitPeriodStart(metadata_.value(), now - period / 2);
- ASSERT_EQ(0, uploader.DoWorkLocked());
+ ASSERT_TRUE(uploader.DoWorkLocked());
ASSERT_FALSE(uploader.can_upload_return_val());
// Set period starting time to trigger a reset
@@ -515,7 +461,7 @@ TEST_F(SynchronizedMinidumpManagerTest, HasDumpsWithoutDumps) {
TEST_F(SynchronizedMinidumpManagerTest, HasDumpsWithDumps) {
// Sample parameters.
- time_t now = time(0);
+ base::Time now = base::Time::Now();
MinidumpParams params;
params.process_name = "process";
« no previous file with comments | « chromecast/crash/linux/synchronized_minidump_manager.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698