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

Unified Diff: base/files/memory_mapped_file_unittest.cc

Issue 1798203002: Support read/write memory-mapped files. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebased Created 4 years, 8 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
Index: base/files/memory_mapped_file_unittest.cc
diff --git a/base/files/memory_mapped_file_unittest.cc b/base/files/memory_mapped_file_unittest.cc
index 396ab72fbcb91a71795704747d130f6f0fb569cb..4f2b4dbb1c89c2c5f3566004bfde449a64cfc127 100644
--- a/base/files/memory_mapped_file_unittest.cc
+++ b/base/files/memory_mapped_file_unittest.cc
@@ -170,6 +170,74 @@ TEST_F(MemoryMappedFileTest, MapLargePartialRegionInTheMiddle) {
ASSERT_TRUE(CheckBufferContents(map.data(), kPartialSize, kOffset));
}
+TEST_F(MemoryMappedFileTest, WriteableFile) {
+ const size_t kFileSize = 127;
+ CreateTemporaryTestFile(kFileSize);
+
+ {
+ MemoryMappedFile map;
+ map.Initialize(temp_file_path(), MemoryMappedFile::READ_WRITE);
+ ASSERT_EQ(kFileSize, map.length());
+ ASSERT_TRUE(map.data() != NULL);
danakj 2016/04/25 21:26:17 nullptr
bcwhite 2016/04/26 00:08:46 Done here and elsewhere in file.
+ EXPECT_TRUE(map.IsValid());
+ ASSERT_TRUE(CheckBufferContents(map.data(), kFileSize, 0));
+
+ uint8_t* bytes = map.data();
+ bytes[0] = 'B';
+ bytes[1] = 'a';
+ bytes[2] = 'r';
+ bytes[kFileSize - 1] = '!';
+ EXPECT_FALSE(CheckBufferContents(map.data(), kFileSize, 0));
+ EXPECT_TRUE(CheckBufferContents(map.data() + 3, kFileSize - 4, 3));
+ }
+
+ int64_t file_size;
+ ASSERT_TRUE(GetFileSize(temp_file_path(), &file_size));
+ EXPECT_EQ(static_cast<int64_t>(kFileSize), file_size);
+
+ std::string contents;
+ ASSERT_TRUE(ReadFileToString(temp_file_path(), &contents));
+ EXPECT_EQ("Bar", contents.substr(0, 3));
+ EXPECT_EQ("!", contents.substr(kFileSize - 1, 1));
+}
+
+TEST_F(MemoryMappedFileTest, ExtendableFile) {
+ const size_t kFileSize = 127;
+ const size_t kFileExtend = 100;
+ CreateTemporaryTestFile(kFileSize);
+
+ {
+ File file(temp_file_path(),
+ File::FLAG_OPEN | File::FLAG_READ | File::FLAG_WRITE);
+ MemoryMappedFile::Region region = {0, kFileSize + kFileExtend};
+ MemoryMappedFile map;
+ map.Initialize(std::move(file), region,
+ MemoryMappedFile::READ_WRITE_EXTEND);
+ EXPECT_EQ(kFileSize + kFileExtend, map.length());
+ ASSERT_TRUE(map.data() != NULL);
danakj 2016/04/25 21:26:17 nullptr
bcwhite 2016/04/26 00:08:46 Done.
+ EXPECT_TRUE(map.IsValid());
+ ASSERT_TRUE(CheckBufferContents(map.data(), kFileSize, 0));
+
+ uint8_t* bytes = map.data();
+ EXPECT_EQ(0, bytes[kFileSize + 0]);
+ EXPECT_EQ(0, bytes[kFileSize + 1]);
+ EXPECT_EQ(0, bytes[kFileSize + 2]);
+ bytes[kFileSize + 0] = 'B';
+ bytes[kFileSize + 1] = 'A';
+ bytes[kFileSize + 2] = 'Z';
+ EXPECT_TRUE(CheckBufferContents(map.data(), kFileSize, 0));
+ }
+
+ int64_t file_size;
+ ASSERT_TRUE(GetFileSize(temp_file_path(), &file_size));
+ EXPECT_LE(static_cast<int64_t>(kFileSize + 3), file_size);
+ EXPECT_GE(static_cast<int64_t>(kFileSize + kFileExtend), file_size);
+
+ std::string contents;
+ ASSERT_TRUE(ReadFileToString(temp_file_path(), &contents));
+ EXPECT_EQ("BAZ", contents.substr(kFileSize, 3));
+}
+
} // namespace
} // namespace base

Powered by Google App Engine
This is Rietveld 408576698