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. |