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

Side by Side 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/files/memory_mapped_file.h" 5 #include "base/files/memory_mapped_file.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <utility> 10 #include <utility>
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
163 163
164 File file(temp_file_path(), File::FLAG_OPEN | File::FLAG_READ); 164 File file(temp_file_path(), File::FLAG_OPEN | File::FLAG_READ);
165 MemoryMappedFile::Region region = {kOffset, kPartialSize}; 165 MemoryMappedFile::Region region = {kOffset, kPartialSize};
166 map.Initialize(std::move(file), region); 166 map.Initialize(std::move(file), region);
167 ASSERT_EQ(kPartialSize, map.length()); 167 ASSERT_EQ(kPartialSize, map.length());
168 ASSERT_TRUE(map.data() != NULL); 168 ASSERT_TRUE(map.data() != NULL);
169 EXPECT_TRUE(map.IsValid()); 169 EXPECT_TRUE(map.IsValid());
170 ASSERT_TRUE(CheckBufferContents(map.data(), kPartialSize, kOffset)); 170 ASSERT_TRUE(CheckBufferContents(map.data(), kPartialSize, kOffset));
171 } 171 }
172 172
173 TEST_F(MemoryMappedFileTest, WriteableFile) {
174 const size_t kFileSize = 127;
175 CreateTemporaryTestFile(kFileSize);
176
177 {
178 MemoryMappedFile map;
179 map.Initialize(temp_file_path(), MemoryMappedFile::READ_WRITE);
180 ASSERT_EQ(kFileSize, map.length());
181 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.
182 EXPECT_TRUE(map.IsValid());
183 ASSERT_TRUE(CheckBufferContents(map.data(), kFileSize, 0));
184
185 uint8_t* bytes = map.data();
186 bytes[0] = 'B';
187 bytes[1] = 'a';
188 bytes[2] = 'r';
189 bytes[kFileSize - 1] = '!';
190 EXPECT_FALSE(CheckBufferContents(map.data(), kFileSize, 0));
191 EXPECT_TRUE(CheckBufferContents(map.data() + 3, kFileSize - 4, 3));
192 }
193
194 int64_t file_size;
195 ASSERT_TRUE(GetFileSize(temp_file_path(), &file_size));
196 EXPECT_EQ(static_cast<int64_t>(kFileSize), file_size);
197
198 std::string contents;
199 ASSERT_TRUE(ReadFileToString(temp_file_path(), &contents));
200 EXPECT_EQ("Bar", contents.substr(0, 3));
201 EXPECT_EQ("!", contents.substr(kFileSize - 1, 1));
202 }
203
204 TEST_F(MemoryMappedFileTest, ExtendableFile) {
205 const size_t kFileSize = 127;
206 const size_t kFileExtend = 100;
207 CreateTemporaryTestFile(kFileSize);
208
209 {
210 File file(temp_file_path(),
211 File::FLAG_OPEN | File::FLAG_READ | File::FLAG_WRITE);
212 MemoryMappedFile::Region region = {0, kFileSize + kFileExtend};
213 MemoryMappedFile map;
214 map.Initialize(std::move(file), region,
215 MemoryMappedFile::READ_WRITE_EXTEND);
216 EXPECT_EQ(kFileSize + kFileExtend, map.length());
217 ASSERT_TRUE(map.data() != NULL);
danakj 2016/04/25 21:26:17 nullptr
bcwhite 2016/04/26 00:08:46 Done.
218 EXPECT_TRUE(map.IsValid());
219 ASSERT_TRUE(CheckBufferContents(map.data(), kFileSize, 0));
220
221 uint8_t* bytes = map.data();
222 EXPECT_EQ(0, bytes[kFileSize + 0]);
223 EXPECT_EQ(0, bytes[kFileSize + 1]);
224 EXPECT_EQ(0, bytes[kFileSize + 2]);
225 bytes[kFileSize + 0] = 'B';
226 bytes[kFileSize + 1] = 'A';
227 bytes[kFileSize + 2] = 'Z';
228 EXPECT_TRUE(CheckBufferContents(map.data(), kFileSize, 0));
229 }
230
231 int64_t file_size;
232 ASSERT_TRUE(GetFileSize(temp_file_path(), &file_size));
233 EXPECT_LE(static_cast<int64_t>(kFileSize + 3), file_size);
234 EXPECT_GE(static_cast<int64_t>(kFileSize + kFileExtend), file_size);
235
236 std::string contents;
237 ASSERT_TRUE(ReadFileToString(temp_file_path(), &contents));
238 EXPECT_EQ("BAZ", contents.substr(kFileSize, 3));
239 }
240
173 } // namespace 241 } // namespace
174 242
175 } // namespace base 243 } // namespace base
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698