| Index: chromecast/crash/linux/minidump_writer_unittest.cc
|
| diff --git a/chromecast/crash/linux/minidump_writer_unittest.cc b/chromecast/crash/linux/minidump_writer_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..7f6963f694ba4454d20cadd1345589ecc4fbbb9e
|
| --- /dev/null
|
| +++ b/chromecast/crash/linux/minidump_writer_unittest.cc
|
| @@ -0,0 +1,74 @@
|
| +
|
| +#include "base/base_paths.h"
|
| +#include "base/files/file_path.h"
|
| +#include "base/files/file_util.h"
|
| +#include "base/memory/scoped_ptr.h"
|
| +#include "base/test/scoped_path_override.h"
|
| +#include "chromecast/crash/linux/minidump_generator.h"
|
| +#include "chromecast/crash/linux/minidump_writer.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +namespace chromecast {
|
| +namespace {
|
| +
|
| +const char kLockfileName[] = "lockfile";
|
| +const char kMinidumpSubdir[] = "minidumps";
|
| +
|
| +class FakeMinidumpGenerator : public MinidumpGenerator {
|
| + public:
|
| + FakeMinidumpGenerator() {}
|
| + ~FakeMinidumpGenerator() override {}
|
| +
|
| + // MinidumpGenerator implementation:
|
| + bool Generate(const std::string& minidump_path) override { return true; }
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| +// TODO(slan): Add more test coverage here.
|
| +
|
| +TEST(MinidumpWriterTest, CanWriteDumpOnlyWhenMaxDumpsNotExceeded) {
|
| + // Set up a temporary directory which will be used as our fake home dir.
|
| + base::FilePath fake_home_dir;
|
| + ASSERT_TRUE(base::CreateNewTempDirectory("", &fake_home_dir));
|
| + base::ScopedPathOverride home(base::DIR_HOME, fake_home_dir);
|
| + base::FilePath minidump_dir = fake_home_dir.Append(kMinidumpSubdir);
|
| + base::FilePath lockfile_path = minidump_dir.Append(kLockfileName);
|
| +
|
| + // Create the minidump directory and lockfile.
|
| + ASSERT_TRUE(base::CreateDirectory(minidump_dir));
|
| + base::File lockfile(lockfile_path,
|
| + base::File::FLAG_CREATE_ALWAYS | base::File::FLAG_WRITE);
|
| + ASSERT_TRUE(lockfile.IsValid());
|
| +
|
| + // Create the writer. Initialize it for our use.
|
| + FakeMinidumpGenerator generator;
|
| + MinidumpWriter writer(&generator, minidump_dir.value(), MinidumpParams());
|
| + writer.SetMaxDumpsForTest(2);
|
| + writer.SetMaxRecentDumpsForTest(10);
|
| +
|
| + // Should be able to write dump with empty file.
|
| + ASSERT_TRUE(writer.CanWriteDumpForTest());
|
| +
|
| + // Add an entry to the lockfile. Should still be able to write dump.
|
| + DumpInfo info("p|2015-01-01 01:02:03|/dump/path||");
|
| + ASSERT_TRUE(info.valid());
|
| + base::AppendToFile(lockfile_path, info.entry().c_str(), info.entry().size());
|
| + ASSERT_TRUE(writer.CanWriteDumpForTest());
|
| +
|
| + // Cannot write dump if next dump would exceed maximum.
|
| + DumpInfo info2("p|2015-01-01 01:02:04|/dump/path||");
|
| + ASSERT_TRUE(info2.valid());
|
| + base::AppendToFile(
|
| + lockfile_path, info2.entry().c_str(), info2.entry().size());
|
| + ASSERT_FALSE(writer.CanWriteDumpForTest());
|
| +
|
| + // Cannot write dump if next dump would exceed maximum.
|
| + DumpInfo info3("p|2015-01-01 01:02:05|/dump/path||");
|
| + ASSERT_TRUE(info3.valid());
|
| + base::AppendToFile(
|
| + lockfile_path, info3.entry().c_str(), info3.entry().size());
|
| + ASSERT_FALSE(writer.CanWriteDumpForTest());
|
| +}
|
| +
|
| +} // namespace chromecast
|
|
|