| Index: chromecast/crash/linux/dummy_minidump_generator_unittest.cc
|
| diff --git a/chromecast/crash/linux/dummy_minidump_generator_unittest.cc b/chromecast/crash/linux/dummy_minidump_generator_unittest.cc
|
| index d70ea76135225e4b0df6a62c2ee3a8b0524dfb9b..c38304f270b6c32c3fa510993d7446af37740897 100644
|
| --- a/chromecast/crash/linux/dummy_minidump_generator_unittest.cc
|
| +++ b/chromecast/crash/linux/dummy_minidump_generator_unittest.cc
|
| @@ -11,6 +11,12 @@
|
|
|
| namespace chromecast {
|
|
|
| +namespace {
|
| +// This value should stay in sync with the internal buffer size used in
|
| +// CopyAndDelete().
|
| +const int kInternalBufferSize = 32768;
|
| +} // namespace
|
| +
|
| TEST(DummyMinidumpGeneratorTest, GenerateFailsWithInvalidPath) {
|
| // Create directory in which to put minidump.
|
| base::FilePath minidump_dir;
|
| @@ -21,7 +27,7 @@
|
| ASSERT_FALSE(generator.Generate(minidump_dir.Append("minidump.dmp").value()));
|
| }
|
|
|
| -TEST(DummyMinidumpGeneratorTest, GenerateSucceedsWithSmallSource) {
|
| +TEST(DummyMinidumpGeneratorTest, GenerateSucceedsWithValidPath) {
|
| // Create directory in which to put minidump.
|
| base::FilePath minidump_dir;
|
| ASSERT_TRUE(base::CreateNewTempDirectory("", &minidump_dir));
|
| @@ -46,24 +52,98 @@
|
| EXPECT_EQ(data, copied_data);
|
| }
|
|
|
| -TEST(DummyMinidumpGeneratorTest, GenerateSucceedsWithLargeSource) {
|
| +TEST(DummyMinidumpGeneratorTest, CopyAndDeleteFailsWithInvalidSource) {
|
| + // Create directory in which to put minidump.
|
| + base::FilePath minidump_dir;
|
| + ASSERT_TRUE(base::CreateNewTempDirectory("", &minidump_dir));
|
| +
|
| + // Attempt to copy from an invalid path.
|
| + DummyMinidumpGenerator generator("/path/does/not/exist/minidump.dmp");
|
| + ASSERT_FALSE(generator.CopyAndDeleteForTest(
|
| + minidump_dir.Append("minidump.dmp").value()));
|
| +}
|
| +
|
| +TEST(DummyMinidumpGeneratorTest, CopyAndDeleteSucceedsWithSmallSource) {
|
| + // Create directory in which to put minidump.
|
| + base::FilePath minidump_dir;
|
| + ASSERT_TRUE(base::CreateNewTempDirectory("", &minidump_dir));
|
| +
|
| + // Create a fake minidump file.
|
| + base::FilePath fake_minidump;
|
| + ASSERT_TRUE(base::CreateTemporaryFile(&fake_minidump));
|
| + const std::string data("Test contents of the minidump file.\n");
|
| + ASSERT_EQ(static_cast<int>(data.size()),
|
| + base::WriteFile(fake_minidump, data.c_str(), data.size()));
|
| +
|
| + base::FilePath new_minidump = minidump_dir.Append("minidump.dmp");
|
| + DummyMinidumpGenerator generator(fake_minidump.value());
|
| + ASSERT_TRUE(generator.CopyAndDeleteForTest(new_minidump.value()));
|
| +
|
| + // Original file should not exist, and new file should contain original
|
| + // contents.
|
| + std::string copied_data;
|
| + EXPECT_FALSE(base::PathExists(fake_minidump));
|
| + ASSERT_TRUE(base::PathExists(new_minidump));
|
| + EXPECT_TRUE(base::ReadFileToString(new_minidump, &copied_data));
|
| + EXPECT_EQ(data, copied_data);
|
| +}
|
| +
|
| +TEST(DummyMinidumpGeneratorTest, CopyAndDeleteSucceedsWithLargeSource) {
|
| // Create directory in which to put minidump.
|
| base::FilePath minidump_dir;
|
| ASSERT_TRUE(base::CreateNewTempDirectory("", &minidump_dir));
|
|
|
| // Create a large fake minidump file.
|
| + // Note: The file must be greater than the size of the buffer used to copy the
|
| + // file in CopyAndDelete(). Create a big string in memory.
|
| base::FilePath fake_minidump;
|
| ASSERT_TRUE(base::CreateTemporaryFile(&fake_minidump));
|
| - size_t str_len = 32768 * 10 + 1;
|
| + size_t str_len = kInternalBufferSize * 10 + 1;
|
| const std::string data = base::RandBytesAsString(str_len);
|
|
|
| - // Write the string to the file.
|
| + // Write the string to the file and verify that the file is big enough.
|
| ASSERT_EQ(static_cast<int>(data.size()),
|
| base::WriteFile(fake_minidump, data.c_str(), data.size()));
|
| + int64_t filesize = 0;
|
| + ASSERT_TRUE(base::GetFileSize(fake_minidump, &filesize));
|
| + ASSERT_GT(filesize, kInternalBufferSize);
|
|
|
| base::FilePath new_minidump = minidump_dir.Append("minidump.dmp");
|
| DummyMinidumpGenerator generator(fake_minidump.value());
|
| - ASSERT_TRUE(generator.Generate(new_minidump.value()));
|
| + ASSERT_TRUE(generator.CopyAndDeleteForTest(new_minidump.value()));
|
| +
|
| + // Original file should not exist, and new file should contain original
|
| + // contents.
|
| + std::string copied_data;
|
| + EXPECT_FALSE(base::PathExists(fake_minidump));
|
| + ASSERT_TRUE(base::PathExists(new_minidump));
|
| + EXPECT_TRUE(base::ReadFileToString(new_minidump, &copied_data));
|
| + EXPECT_EQ(data, copied_data);
|
| +}
|
| +
|
| +TEST(DummyMinidumpGeneratorTest, CopyAndDeleteSucceedsWhenEOFAlignsWithBuffer) {
|
| + // Create directory in which to put minidump.
|
| + base::FilePath minidump_dir;
|
| + ASSERT_TRUE(base::CreateNewTempDirectory("", &minidump_dir));
|
| +
|
| + // Create a large fake minidump file.
|
| + // Note: The file must be greater than the size of the buffer used to copy the
|
| + // file in CopyAndDelete(). Create a big string in memory.
|
| + base::FilePath fake_minidump;
|
| + ASSERT_TRUE(base::CreateTemporaryFile(&fake_minidump));
|
| + size_t str_len = kInternalBufferSize;
|
| + const std::string data = base::RandBytesAsString(str_len);
|
| +
|
| + // Write the string to the file and verify that the file is big enough.
|
| + ASSERT_EQ(static_cast<int>(data.size()),
|
| + base::WriteFile(fake_minidump, data.c_str(), data.size()));
|
| + int64_t filesize = 0;
|
| + ASSERT_TRUE(base::GetFileSize(fake_minidump, &filesize));
|
| + ASSERT_EQ(kInternalBufferSize, filesize);
|
| +
|
| + base::FilePath new_minidump = minidump_dir.Append("minidump.dmp");
|
| + DummyMinidumpGenerator generator(fake_minidump.value());
|
| + ASSERT_TRUE(generator.CopyAndDeleteForTest(new_minidump.value()));
|
|
|
| // Original file should not exist, and new file should contain original
|
| // contents.
|
|
|