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 |