OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "components/drive/chromeos/file_cache.h" | 5 #include "components/drive/chromeos/file_cache.h" |
6 | 6 |
7 #include <linux/fs.h> | 7 #include <linux/fs.h> |
8 #include <stddef.h> | 8 #include <stddef.h> |
9 #include <stdint.h> | 9 #include <stdint.h> |
10 #include <sys/ioctl.h> | 10 #include <sys/ioctl.h> |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
63 return (GetFileAttributes(file_path) & FS_NODUMP_FL) == FS_NODUMP_FL; | 63 return (GetFileAttributes(file_path) & FS_NODUMP_FL) == FS_NODUMP_FL; |
64 } | 64 } |
65 | 65 |
66 } // namespace | 66 } // namespace |
67 | 67 |
68 // Tests FileCache methods working with the blocking task runner. | 68 // Tests FileCache methods working with the blocking task runner. |
69 class FileCacheTest : public testing::Test { | 69 class FileCacheTest : public testing::Test { |
70 protected: | 70 protected: |
71 void SetUp() override { | 71 void SetUp() override { |
72 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); | 72 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); |
73 const base::FilePath metadata_dir = temp_dir_.path().AppendASCII("meta"); | 73 const base::FilePath metadata_dir = temp_dir_.GetPath().AppendASCII("meta"); |
74 cache_files_dir_ = temp_dir_.path().Append(kCacheFileDirectory); | 74 cache_files_dir_ = temp_dir_.GetPath().Append(kCacheFileDirectory); |
75 | 75 |
76 ASSERT_TRUE(base::CreateDirectory(metadata_dir)); | 76 ASSERT_TRUE(base::CreateDirectory(metadata_dir)); |
77 ASSERT_TRUE(base::CreateDirectory(cache_files_dir_)); | 77 ASSERT_TRUE(base::CreateDirectory(cache_files_dir_)); |
78 | 78 |
79 fake_free_disk_space_getter_.reset(new FakeFreeDiskSpaceGetter); | 79 fake_free_disk_space_getter_.reset(new FakeFreeDiskSpaceGetter); |
80 | 80 |
81 metadata_storage_.reset(new ResourceMetadataStorage( | 81 metadata_storage_.reset(new ResourceMetadataStorage( |
82 metadata_dir, | 82 metadata_dir, |
83 base::ThreadTaskRunnerHandle::Get().get())); | 83 base::ThreadTaskRunnerHandle::Get().get())); |
84 ASSERT_TRUE(metadata_storage_->Initialize()); | 84 ASSERT_TRUE(metadata_storage_->Initialize()); |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
136 | 136 |
137 // Store files. This file should not be moved. | 137 // Store files. This file should not be moved. |
138 ResourceEntry entry; | 138 ResourceEntry entry; |
139 entry.set_local_id("id_foo"); | 139 entry.set_local_id("id_foo"); |
140 EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->PutEntry(entry)); | 140 EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->PutEntry(entry)); |
141 EXPECT_EQ(FILE_ERROR_OK, cache_->Store("id_foo", "md5", src_path, | 141 EXPECT_EQ(FILE_ERROR_OK, cache_->Store("id_foo", "md5", src_path, |
142 FileCache::FILE_OPERATION_COPY)); | 142 FileCache::FILE_OPERATION_COPY)); |
143 | 143 |
144 // Set up files in the cache directory. These files should be moved. | 144 // Set up files in the cache directory. These files should be moved. |
145 const base::FilePath file_directory = | 145 const base::FilePath file_directory = |
146 temp_dir_.path().Append(kCacheFileDirectory); | 146 temp_dir_.GetPath().Append(kCacheFileDirectory); |
147 ASSERT_TRUE(base::CopyFile(src_path, file_directory.AppendASCII("id_bar"))); | 147 ASSERT_TRUE(base::CopyFile(src_path, file_directory.AppendASCII("id_bar"))); |
148 ASSERT_TRUE(base::CopyFile(src_path, file_directory.AppendASCII("id_baz"))); | 148 ASSERT_TRUE(base::CopyFile(src_path, file_directory.AppendASCII("id_baz"))); |
149 | 149 |
150 // Insert a dirty entry with "id_baz" to |recovered_cache_info|. | 150 // Insert a dirty entry with "id_baz" to |recovered_cache_info|. |
151 // This should not prevent the file from being recovered. | 151 // This should not prevent the file from being recovered. |
152 ResourceMetadataStorage::RecoveredCacheInfoMap recovered_cache_info; | 152 ResourceMetadataStorage::RecoveredCacheInfoMap recovered_cache_info; |
153 recovered_cache_info["id_baz"].is_dirty = true; | 153 recovered_cache_info["id_baz"].is_dirty = true; |
154 recovered_cache_info["id_baz"].title = "baz.png"; | 154 recovered_cache_info["id_baz"].title = "baz.png"; |
155 | 155 |
156 // Recover files. | 156 // Recover files. |
157 const base::FilePath dest_directory = temp_dir_.path().AppendASCII("dest"); | 157 const base::FilePath dest_directory = temp_dir_.GetPath().AppendASCII("dest"); |
158 EXPECT_TRUE(cache_->RecoverFilesFromCacheDirectory(dest_directory, | 158 EXPECT_TRUE(cache_->RecoverFilesFromCacheDirectory(dest_directory, |
159 recovered_cache_info)); | 159 recovered_cache_info)); |
160 | 160 |
161 // Only two files should be recovered. | 161 // Only two files should be recovered. |
162 EXPECT_TRUE(base::PathExists(dest_directory)); | 162 EXPECT_TRUE(base::PathExists(dest_directory)); |
163 // base::FileEnumerator does not guarantee the order. | 163 // base::FileEnumerator does not guarantee the order. |
164 if (base::PathExists(dest_directory.AppendASCII("baz00000001.png"))) { | 164 if (base::PathExists(dest_directory.AppendASCII("baz00000001.png"))) { |
165 EXPECT_TRUE(base::ContentsEqual( | 165 EXPECT_TRUE(base::ContentsEqual( |
166 src_path, | 166 src_path, |
167 dest_directory.AppendASCII("baz00000001.png"))); | 167 dest_directory.AppendASCII("baz00000001.png"))); |
168 EXPECT_TRUE(base::ContentsEqual( | 168 EXPECT_TRUE(base::ContentsEqual( |
169 src_path, | 169 src_path, |
170 dest_directory.AppendASCII("image00000002.png"))); | 170 dest_directory.AppendASCII("image00000002.png"))); |
171 } else { | 171 } else { |
172 EXPECT_TRUE(base::ContentsEqual( | 172 EXPECT_TRUE(base::ContentsEqual( |
173 src_path, | 173 src_path, |
174 dest_directory.AppendASCII("image00000001.png"))); | 174 dest_directory.AppendASCII("image00000001.png"))); |
175 EXPECT_TRUE(base::ContentsEqual( | 175 EXPECT_TRUE(base::ContentsEqual( |
176 src_path, | 176 src_path, |
177 dest_directory.AppendASCII("baz00000002.png"))); | 177 dest_directory.AppendASCII("baz00000002.png"))); |
178 } | 178 } |
179 EXPECT_FALSE(base::PathExists( | 179 EXPECT_FALSE(base::PathExists( |
180 dest_directory.AppendASCII("image00000003.png"))); | 180 dest_directory.AppendASCII("image00000003.png"))); |
181 } | 181 } |
182 | 182 |
183 TEST_F(FileCacheTest, FreeDiskSpaceIfNeededFor) { | 183 TEST_F(FileCacheTest, FreeDiskSpaceIfNeededFor) { |
184 base::FilePath src_file; | 184 base::FilePath src_file; |
185 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), &src_file)); | 185 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.GetPath(), &src_file)); |
186 | 186 |
187 // Store a file as a 'temporary' file and remember the path. | 187 // Store a file as a 'temporary' file and remember the path. |
188 const std::string id_tmp = "id_tmp", md5_tmp = "md5_tmp"; | 188 const std::string id_tmp = "id_tmp", md5_tmp = "md5_tmp"; |
189 const time_t last_accessed_tmp = 1; | 189 const time_t last_accessed_tmp = 1; |
190 const base::FilePath& tmp_path = | 190 const base::FilePath& tmp_path = |
191 AddTestEntry(id_tmp, md5_tmp, last_accessed_tmp, src_file); | 191 AddTestEntry(id_tmp, md5_tmp, last_accessed_tmp, src_file); |
192 | 192 |
193 // Store a file as a pinned file and remember the path. | 193 // Store a file as a pinned file and remember the path. |
194 const std::string id_pinned = "id_pinned", md5_pinned = "md5_pinned"; | 194 const std::string id_pinned = "id_pinned", md5_pinned = "md5_pinned"; |
195 const time_t last_accessed_pinned = 1; | 195 const time_t last_accessed_pinned = 1; |
(...skipping 19 matching lines...) Expand all Loading... |
215 EXPECT_TRUE(base::PathExists(pinned_path)); | 215 EXPECT_TRUE(base::PathExists(pinned_path)); |
216 | 216 |
217 // Returns false when disk space cannot be freed. | 217 // Returns false when disk space cannot be freed. |
218 fake_free_disk_space_getter_->set_default_value(0); | 218 fake_free_disk_space_getter_->set_default_value(0); |
219 EXPECT_FALSE(cache_->FreeDiskSpaceIfNeededFor(kNeededBytes)); | 219 EXPECT_FALSE(cache_->FreeDiskSpaceIfNeededFor(kNeededBytes)); |
220 } | 220 } |
221 | 221 |
222 TEST_F(FileCacheTest, EvictDriveCacheInLRU) { | 222 TEST_F(FileCacheTest, EvictDriveCacheInLRU) { |
223 // Create temporary file. | 223 // Create temporary file. |
224 base::FilePath src_file; | 224 base::FilePath src_file; |
225 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), &src_file)); | 225 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.GetPath(), &src_file)); |
226 ASSERT_EQ(kTemporaryFileSizeInBytes, | 226 ASSERT_EQ(kTemporaryFileSizeInBytes, |
227 base::WriteFile(src_file, "abcdefghij", kTemporaryFileSizeInBytes)); | 227 base::WriteFile(src_file, "abcdefghij", kTemporaryFileSizeInBytes)); |
228 | 228 |
229 // Add entries. | 229 // Add entries. |
230 const std::string id_a = "id_a", md5_a = "md5_a"; | 230 const std::string id_a = "id_a", md5_a = "md5_a"; |
231 const time_t last_accessed_a = 1; | 231 const time_t last_accessed_a = 1; |
232 const base::FilePath& a_path = | 232 const base::FilePath& a_path = |
233 AddTestEntry(id_a, md5_a, last_accessed_a, src_file); | 233 AddTestEntry(id_a, md5_a, last_accessed_a, src_file); |
234 | 234 |
235 const std::string id_pinned = "id_pinned", md5_pinned = "md5_pinned"; | 235 const std::string id_pinned = "id_pinned", md5_pinned = "md5_pinned"; |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
274 // Entry C should not be evicted. | 274 // Entry C should not be evicted. |
275 EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->GetEntry(id_c, &entry)); | 275 EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->GetEntry(id_c, &entry)); |
276 EXPECT_TRUE(entry.file_specific_info().cache_state().is_present()); | 276 EXPECT_TRUE(entry.file_specific_info().cache_state().is_present()); |
277 EXPECT_TRUE(base::PathExists(c_path)); | 277 EXPECT_TRUE(base::PathExists(c_path)); |
278 } | 278 } |
279 | 279 |
280 // Test case for deleting invalid cache files which don't have corresponding | 280 // Test case for deleting invalid cache files which don't have corresponding |
281 // metadata. | 281 // metadata. |
282 TEST_F(FileCacheTest, EvictInvalidCacheFile) { | 282 TEST_F(FileCacheTest, EvictInvalidCacheFile) { |
283 base::FilePath src_file; | 283 base::FilePath src_file; |
284 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), &src_file)); | 284 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.GetPath(), &src_file)); |
285 | 285 |
286 // Add entries. | 286 // Add entries. |
287 const std::string id_a = "id_a", md5_a = "md5_a"; | 287 const std::string id_a = "id_a", md5_a = "md5_a"; |
288 const time_t last_accessed_a = 1; | 288 const time_t last_accessed_a = 1; |
289 const base::FilePath& a_path = | 289 const base::FilePath& a_path = |
290 AddTestEntry(id_a, md5_a, last_accessed_a, src_file); | 290 AddTestEntry(id_a, md5_a, last_accessed_a, src_file); |
291 | 291 |
292 const std::string id_b = "id_b", md5_b = "md5_b"; | 292 const std::string id_b = "id_b", md5_b = "md5_b"; |
293 const time_t last_accessed_b = 2; | 293 const time_t last_accessed_b = 2; |
294 const base::FilePath& b_path = | 294 const base::FilePath& b_path = |
(...skipping 21 matching lines...) Expand all Loading... |
316 EXPECT_EQ(FILE_ERROR_NOT_FOUND, metadata_storage_->GetEntry(id_b, &entry)); | 316 EXPECT_EQ(FILE_ERROR_NOT_FOUND, metadata_storage_->GetEntry(id_b, &entry)); |
317 EXPECT_FALSE(base::PathExists(b_path)); | 317 EXPECT_FALSE(base::PathExists(b_path)); |
318 } | 318 } |
319 | 319 |
320 TEST_F(FileCacheTest, TooManyCacheFiles) { | 320 TEST_F(FileCacheTest, TooManyCacheFiles) { |
321 const size_t kMaxNumOfEvictedCacheFiles = 50; | 321 const size_t kMaxNumOfEvictedCacheFiles = 50; |
322 cache_->SetMaxNumOfEvictedCacheFilesForTest(kMaxNumOfEvictedCacheFiles); | 322 cache_->SetMaxNumOfEvictedCacheFilesForTest(kMaxNumOfEvictedCacheFiles); |
323 | 323 |
324 // Create temporary file. | 324 // Create temporary file. |
325 base::FilePath src_file; | 325 base::FilePath src_file; |
326 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), &src_file)); | 326 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.GetPath(), &src_file)); |
327 ASSERT_EQ(kTemporaryFileSizeInBytes, | 327 ASSERT_EQ(kTemporaryFileSizeInBytes, |
328 base::WriteFile(src_file, "abcdefghij", kTemporaryFileSizeInBytes)); | 328 base::WriteFile(src_file, "abcdefghij", kTemporaryFileSizeInBytes)); |
329 | 329 |
330 // Add kNumOfTestFiles=kMaxNumOfEvictedCacheFiles*2 entries. | 330 // Add kNumOfTestFiles=kMaxNumOfEvictedCacheFiles*2 entries. |
331 std::vector<base::FilePath> paths; | 331 std::vector<base::FilePath> paths; |
332 const int32_t kNumOfTestFiles = kMaxNumOfEvictedCacheFiles * 2; | 332 const int32_t kNumOfTestFiles = kMaxNumOfEvictedCacheFiles * 2; |
333 for (int i = 0; i < kNumOfTestFiles; ++i) { | 333 for (int i = 0; i < kNumOfTestFiles; ++i) { |
334 // Set last accessed in reverse order to the file name. i.e. If you sort | 334 // Set last accessed in reverse order to the file name. i.e. If you sort |
335 // files in name-asc order, they will be last access desc order. | 335 // files in name-asc order, they will be last access desc order. |
336 paths.push_back(AddTestEntry( | 336 paths.push_back(AddTestEntry( |
(...skipping 17 matching lines...) Expand all Loading... |
354 (kMaxNumOfEvictedCacheFiles * 3 / 2) * kTemporaryFileSizeInBytes; | 354 (kMaxNumOfEvictedCacheFiles * 3 / 2) * kTemporaryFileSizeInBytes; |
355 EXPECT_FALSE(cache_->FreeDiskSpaceIfNeededFor(kNeededBytes)); | 355 EXPECT_FALSE(cache_->FreeDiskSpaceIfNeededFor(kNeededBytes)); |
356 | 356 |
357 for (uint32_t i = 0; i < kNumOfTestFiles; ++i) { | 357 for (uint32_t i = 0; i < kNumOfTestFiles; ++i) { |
358 // Assert that only first kMaxNumOfEvictedCacheFiles exist. | 358 // Assert that only first kMaxNumOfEvictedCacheFiles exist. |
359 ASSERT_EQ(i < kMaxNumOfEvictedCacheFiles, base::PathExists(paths[i])); | 359 ASSERT_EQ(i < kMaxNumOfEvictedCacheFiles, base::PathExists(paths[i])); |
360 } | 360 } |
361 } | 361 } |
362 | 362 |
363 TEST_F(FileCacheTest, GetFile) { | 363 TEST_F(FileCacheTest, GetFile) { |
364 const base::FilePath src_file_path = temp_dir_.path().Append("test.dat"); | 364 const base::FilePath src_file_path = temp_dir_.GetPath().Append("test.dat"); |
365 const std::string src_contents = "test"; | 365 const std::string src_contents = "test"; |
366 EXPECT_TRUE(google_apis::test_util::WriteStringToFile(src_file_path, | 366 EXPECT_TRUE(google_apis::test_util::WriteStringToFile(src_file_path, |
367 src_contents)); | 367 src_contents)); |
368 std::string id("id1"); | 368 std::string id("id1"); |
369 std::string md5(base::MD5String(src_contents)); | 369 std::string md5(base::MD5String(src_contents)); |
370 | 370 |
371 const base::FilePath cache_file_directory = | 371 const base::FilePath cache_file_directory = |
372 temp_dir_.path().Append(kCacheFileDirectory); | 372 temp_dir_.GetPath().Append(kCacheFileDirectory); |
373 | 373 |
374 // Try to get an existing file from cache. | 374 // Try to get an existing file from cache. |
375 ResourceEntry entry; | 375 ResourceEntry entry; |
376 entry.set_local_id(id); | 376 entry.set_local_id(id); |
377 EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->PutEntry(entry)); | 377 EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->PutEntry(entry)); |
378 EXPECT_EQ(FILE_ERROR_OK, cache_->Store(id, md5, src_file_path, | 378 EXPECT_EQ(FILE_ERROR_OK, cache_->Store(id, md5, src_file_path, |
379 FileCache::FILE_OPERATION_COPY)); | 379 FileCache::FILE_OPERATION_COPY)); |
380 base::FilePath cache_file_path; | 380 base::FilePath cache_file_path; |
381 EXPECT_EQ(FILE_ERROR_OK, cache_->GetFile(id, &cache_file_path)); | 381 EXPECT_EQ(FILE_ERROR_OK, cache_->GetFile(id, &cache_file_path)); |
382 EXPECT_EQ( | 382 EXPECT_EQ( |
(...skipping 25 matching lines...) Expand all Loading... |
408 EXPECT_EQ( | 408 EXPECT_EQ( |
409 cache_file_directory.AppendASCII(util::EscapeCacheFileName(id)).value(), | 409 cache_file_directory.AppendASCII(util::EscapeCacheFileName(id)).value(), |
410 cache_file_path.value()); | 410 cache_file_path.value()); |
411 | 411 |
412 contents.clear(); | 412 contents.clear(); |
413 EXPECT_TRUE(base::ReadFileToString(cache_file_path, &contents)); | 413 EXPECT_TRUE(base::ReadFileToString(cache_file_path, &contents)); |
414 EXPECT_EQ(src_contents, contents); | 414 EXPECT_EQ(src_contents, contents); |
415 } | 415 } |
416 | 416 |
417 TEST_F(FileCacheTest, Store) { | 417 TEST_F(FileCacheTest, Store) { |
418 const base::FilePath src_file_path = temp_dir_.path().Append("test.dat"); | 418 const base::FilePath src_file_path = temp_dir_.GetPath().Append("test.dat"); |
419 const std::string src_contents = "test"; | 419 const std::string src_contents = "test"; |
420 EXPECT_TRUE(google_apis::test_util::WriteStringToFile(src_file_path, | 420 EXPECT_TRUE(google_apis::test_util::WriteStringToFile(src_file_path, |
421 src_contents)); | 421 src_contents)); |
422 std::string id("id"); | 422 std::string id("id"); |
423 std::string md5(base::MD5String(src_contents)); | 423 std::string md5(base::MD5String(src_contents)); |
424 | 424 |
425 // Store a file. | 425 // Store a file. |
426 ResourceEntry entry; | 426 ResourceEntry entry; |
427 entry.set_local_id(id); | 427 entry.set_local_id(id); |
428 EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->PutEntry(entry)); | 428 EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->PutEntry(entry)); |
(...skipping 27 matching lines...) Expand all Loading... |
456 EXPECT_FALSE(HasRemovableFlag((dest_file_path))); | 456 EXPECT_FALSE(HasRemovableFlag((dest_file_path))); |
457 | 457 |
458 // No free space available. | 458 // No free space available. |
459 fake_free_disk_space_getter_->set_default_value(0); | 459 fake_free_disk_space_getter_->set_default_value(0); |
460 | 460 |
461 EXPECT_EQ(FILE_ERROR_NO_LOCAL_SPACE, cache_->Store( | 461 EXPECT_EQ(FILE_ERROR_NO_LOCAL_SPACE, cache_->Store( |
462 id, md5, src_file_path, FileCache::FILE_OPERATION_COPY)); | 462 id, md5, src_file_path, FileCache::FILE_OPERATION_COPY)); |
463 } | 463 } |
464 | 464 |
465 TEST_F(FileCacheTest, PinAndUnpin) { | 465 TEST_F(FileCacheTest, PinAndUnpin) { |
466 const base::FilePath src_file_path = temp_dir_.path().Append("test.dat"); | 466 const base::FilePath src_file_path = temp_dir_.GetPath().Append("test.dat"); |
467 const std::string src_contents = "test"; | 467 const std::string src_contents = "test"; |
468 EXPECT_TRUE(google_apis::test_util::WriteStringToFile(src_file_path, | 468 EXPECT_TRUE(google_apis::test_util::WriteStringToFile(src_file_path, |
469 src_contents)); | 469 src_contents)); |
470 std::string id("id_present"); | 470 std::string id("id_present"); |
471 std::string md5(base::MD5String(src_contents)); | 471 std::string md5(base::MD5String(src_contents)); |
472 | 472 |
473 // Store a file. | 473 // Store a file. |
474 ResourceEntry entry; | 474 ResourceEntry entry; |
475 entry.set_local_id(id); | 475 entry.set_local_id(id); |
476 EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->PutEntry(entry)); | 476 EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->PutEntry(entry)); |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
510 EXPECT_EQ(FILE_ERROR_OK, cache_->Unpin(id_non_present)); | 510 EXPECT_EQ(FILE_ERROR_OK, cache_->Unpin(id_non_present)); |
511 | 511 |
512 EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->GetEntry(id_non_present, &entry)); | 512 EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->GetEntry(id_non_present, &entry)); |
513 EXPECT_FALSE(entry.file_specific_info().has_cache_state()); | 513 EXPECT_FALSE(entry.file_specific_info().has_cache_state()); |
514 | 514 |
515 // Unpin a file that doesn't exist in cache and is not pinned. | 515 // Unpin a file that doesn't exist in cache and is not pinned. |
516 EXPECT_EQ(FILE_ERROR_NOT_FOUND, cache_->Unpin("id_non_existent")); | 516 EXPECT_EQ(FILE_ERROR_NOT_FOUND, cache_->Unpin("id_non_existent")); |
517 } | 517 } |
518 | 518 |
519 TEST_F(FileCacheTest, MountUnmount) { | 519 TEST_F(FileCacheTest, MountUnmount) { |
520 const base::FilePath src_file_path = temp_dir_.path().Append("test.dat"); | 520 const base::FilePath src_file_path = temp_dir_.GetPath().Append("test.dat"); |
521 const std::string src_contents = "test"; | 521 const std::string src_contents = "test"; |
522 EXPECT_TRUE(google_apis::test_util::WriteStringToFile(src_file_path, | 522 EXPECT_TRUE(google_apis::test_util::WriteStringToFile(src_file_path, |
523 src_contents)); | 523 src_contents)); |
524 std::string id("id_present"); | 524 std::string id("id_present"); |
525 std::string md5(base::MD5String(src_contents)); | 525 std::string md5(base::MD5String(src_contents)); |
526 | 526 |
527 // Store a file. | 527 // Store a file. |
528 ResourceEntry entry; | 528 ResourceEntry entry; |
529 entry.set_local_id(id); | 529 entry.set_local_id(id); |
530 EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->PutEntry(entry)); | 530 EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->PutEntry(entry)); |
(...skipping 10 matching lines...) Expand all Loading... |
541 // Clear mounted state of the file. | 541 // Clear mounted state of the file. |
542 EXPECT_EQ(FILE_ERROR_OK, cache_->MarkAsUnmounted(cache_file_path)); | 542 EXPECT_EQ(FILE_ERROR_OK, cache_->MarkAsUnmounted(cache_file_path)); |
543 | 543 |
544 // Try to remove again. | 544 // Try to remove again. |
545 EXPECT_EQ(FILE_ERROR_OK, cache_->Remove(id)); | 545 EXPECT_EQ(FILE_ERROR_OK, cache_->Remove(id)); |
546 } | 546 } |
547 | 547 |
548 TEST_F(FileCacheTest, OpenForWrite) { | 548 TEST_F(FileCacheTest, OpenForWrite) { |
549 // Prepare a file. | 549 // Prepare a file. |
550 base::FilePath src_file; | 550 base::FilePath src_file; |
551 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), &src_file)); | 551 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.GetPath(), &src_file)); |
552 | 552 |
553 const std::string id = "id"; | 553 const std::string id = "id"; |
554 ResourceEntry entry; | 554 ResourceEntry entry; |
555 entry.set_local_id(id); | 555 entry.set_local_id(id); |
556 EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->PutEntry(entry)); | 556 EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->PutEntry(entry)); |
557 ASSERT_EQ(FILE_ERROR_OK, cache_->Store(id, "md5", src_file, | 557 ASSERT_EQ(FILE_ERROR_OK, cache_->Store(id, "md5", src_file, |
558 FileCache::FILE_OPERATION_COPY)); | 558 FileCache::FILE_OPERATION_COPY)); |
559 EXPECT_EQ(0, entry.file_info().last_modified()); | 559 EXPECT_EQ(0, entry.file_info().last_modified()); |
560 | 560 |
561 // Entry is not dirty nor opened. | 561 // Entry is not dirty nor opened. |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
595 base::RunLoop().RunUntilIdle(); | 595 base::RunLoop().RunUntilIdle(); |
596 EXPECT_FALSE(cache_->IsOpenedForWrite(id)); | 596 EXPECT_FALSE(cache_->IsOpenedForWrite(id)); |
597 | 597 |
598 // Try to open non-existent file. | 598 // Try to open non-existent file. |
599 EXPECT_EQ(FILE_ERROR_NOT_FOUND, | 599 EXPECT_EQ(FILE_ERROR_NOT_FOUND, |
600 cache_->OpenForWrite("nonexistent_id", &file_closer1)); | 600 cache_->OpenForWrite("nonexistent_id", &file_closer1)); |
601 } | 601 } |
602 | 602 |
603 TEST_F(FileCacheTest, UpdateMd5) { | 603 TEST_F(FileCacheTest, UpdateMd5) { |
604 // Store test data. | 604 // Store test data. |
605 const base::FilePath src_file_path = temp_dir_.path().Append("test.dat"); | 605 const base::FilePath src_file_path = temp_dir_.GetPath().Append("test.dat"); |
606 const std::string contents_before = "before"; | 606 const std::string contents_before = "before"; |
607 EXPECT_TRUE(google_apis::test_util::WriteStringToFile(src_file_path, | 607 EXPECT_TRUE(google_apis::test_util::WriteStringToFile(src_file_path, |
608 contents_before)); | 608 contents_before)); |
609 std::string id("id1"); | 609 std::string id("id1"); |
610 ResourceEntry entry; | 610 ResourceEntry entry; |
611 entry.set_local_id(id); | 611 entry.set_local_id(id); |
612 EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->PutEntry(entry)); | 612 EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->PutEntry(entry)); |
613 EXPECT_EQ(FILE_ERROR_OK, cache_->Store(id, base::MD5String(contents_before), | 613 EXPECT_EQ(FILE_ERROR_OK, cache_->Store(id, base::MD5String(contents_before), |
614 src_file_path, | 614 src_file_path, |
615 FileCache::FILE_OPERATION_COPY)); | 615 FileCache::FILE_OPERATION_COPY)); |
(...skipping 21 matching lines...) Expand all Loading... |
637 // Update MD5. | 637 // Update MD5. |
638 EXPECT_EQ(FILE_ERROR_OK, cache_->UpdateMd5(id)); | 638 EXPECT_EQ(FILE_ERROR_OK, cache_->UpdateMd5(id)); |
639 EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->GetEntry(id, &entry)); | 639 EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->GetEntry(id, &entry)); |
640 EXPECT_EQ(base::MD5String(contents_after), | 640 EXPECT_EQ(base::MD5String(contents_after), |
641 entry.file_specific_info().cache_state().md5()); | 641 entry.file_specific_info().cache_state().md5()); |
642 } | 642 } |
643 | 643 |
644 TEST_F(FileCacheTest, ClearDirty) { | 644 TEST_F(FileCacheTest, ClearDirty) { |
645 // Prepare a file. | 645 // Prepare a file. |
646 base::FilePath src_file; | 646 base::FilePath src_file; |
647 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), &src_file)); | 647 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.GetPath(), &src_file)); |
648 | 648 |
649 const std::string id = "id"; | 649 const std::string id = "id"; |
650 ResourceEntry entry; | 650 ResourceEntry entry; |
651 entry.set_local_id(id); | 651 entry.set_local_id(id); |
652 EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->PutEntry(entry)); | 652 EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->PutEntry(entry)); |
653 ASSERT_EQ(FILE_ERROR_OK, cache_->Store(id, "md5", src_file, | 653 ASSERT_EQ(FILE_ERROR_OK, cache_->Store(id, "md5", src_file, |
654 FileCache::FILE_OPERATION_COPY)); | 654 FileCache::FILE_OPERATION_COPY)); |
655 | 655 |
656 const base::FilePath dest_file = GetCacheFilePath(id); | 656 const base::FilePath dest_file = GetCacheFilePath(id); |
657 EXPECT_TRUE(HasRemovableFlag((dest_file))); | 657 EXPECT_TRUE(HasRemovableFlag((dest_file))); |
(...skipping 16 matching lines...) Expand all Loading... |
674 base::RunLoop().RunUntilIdle(); | 674 base::RunLoop().RunUntilIdle(); |
675 EXPECT_EQ(FILE_ERROR_OK, cache_->ClearDirty(id)); | 675 EXPECT_EQ(FILE_ERROR_OK, cache_->ClearDirty(id)); |
676 | 676 |
677 // Entry is not dirty. | 677 // Entry is not dirty. |
678 EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->GetEntry(id, &entry)); | 678 EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->GetEntry(id, &entry)); |
679 EXPECT_FALSE(entry.file_specific_info().cache_state().is_dirty()); | 679 EXPECT_FALSE(entry.file_specific_info().cache_state().is_dirty()); |
680 EXPECT_TRUE(HasRemovableFlag((dest_file))); | 680 EXPECT_TRUE(HasRemovableFlag((dest_file))); |
681 } | 681 } |
682 | 682 |
683 TEST_F(FileCacheTest, Remove) { | 683 TEST_F(FileCacheTest, Remove) { |
684 const base::FilePath src_file_path = temp_dir_.path().Append("test.dat"); | 684 const base::FilePath src_file_path = temp_dir_.GetPath().Append("test.dat"); |
685 const std::string src_contents = "test"; | 685 const std::string src_contents = "test"; |
686 EXPECT_TRUE(google_apis::test_util::WriteStringToFile(src_file_path, | 686 EXPECT_TRUE(google_apis::test_util::WriteStringToFile(src_file_path, |
687 src_contents)); | 687 src_contents)); |
688 std::string id("id"); | 688 std::string id("id"); |
689 std::string md5(base::MD5String(src_contents)); | 689 std::string md5(base::MD5String(src_contents)); |
690 | 690 |
691 // First store a file to cache. | 691 // First store a file to cache. |
692 ResourceEntry entry; | 692 ResourceEntry entry; |
693 entry.set_local_id(id); | 693 entry.set_local_id(id); |
694 EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->PutEntry(entry)); | 694 EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->PutEntry(entry)); |
695 base::FilePath src_file; | 695 base::FilePath src_file; |
696 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), &src_file)); | 696 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.GetPath(), &src_file)); |
697 EXPECT_EQ(FILE_ERROR_OK, cache_->Store( | 697 EXPECT_EQ(FILE_ERROR_OK, cache_->Store( |
698 id, md5, src_file_path, FileCache::FILE_OPERATION_COPY)); | 698 id, md5, src_file_path, FileCache::FILE_OPERATION_COPY)); |
699 | 699 |
700 base::FilePath cache_file_path; | 700 base::FilePath cache_file_path; |
701 EXPECT_EQ(FILE_ERROR_OK, cache_->GetFile(id, &cache_file_path)); | 701 EXPECT_EQ(FILE_ERROR_OK, cache_->GetFile(id, &cache_file_path)); |
702 | 702 |
703 // Then try to remove existing file from cache. | 703 // Then try to remove existing file from cache. |
704 EXPECT_EQ(FILE_ERROR_OK, cache_->Remove(id)); | 704 EXPECT_EQ(FILE_ERROR_OK, cache_->Remove(id)); |
705 EXPECT_FALSE(base::PathExists(cache_file_path)); | 705 EXPECT_FALSE(base::PathExists(cache_file_path)); |
706 } | 706 } |
707 | 707 |
708 TEST_F(FileCacheTest, RenameCacheFilesToNewFormat) { | 708 TEST_F(FileCacheTest, RenameCacheFilesToNewFormat) { |
709 const base::FilePath file_directory = | 709 const base::FilePath file_directory = |
710 temp_dir_.path().Append(kCacheFileDirectory); | 710 temp_dir_.GetPath().Append(kCacheFileDirectory); |
711 | 711 |
712 // File with an old style "<prefix>:<ID>.<MD5>" name. | 712 // File with an old style "<prefix>:<ID>.<MD5>" name. |
713 ASSERT_TRUE(google_apis::test_util::WriteStringToFile( | 713 ASSERT_TRUE(google_apis::test_util::WriteStringToFile( |
714 file_directory.AppendASCII("file:id_koo.md5"), "koo")); | 714 file_directory.AppendASCII("file:id_koo.md5"), "koo")); |
715 | 715 |
716 // File with multiple extensions should be removed. | 716 // File with multiple extensions should be removed. |
717 ASSERT_TRUE(google_apis::test_util::WriteStringToFile( | 717 ASSERT_TRUE(google_apis::test_util::WriteStringToFile( |
718 file_directory.AppendASCII("id_kyu.md5.mounted"), "kyu (mounted)")); | 718 file_directory.AppendASCII("id_kyu.md5.mounted"), "kyu (mounted)")); |
719 ASSERT_TRUE(google_apis::test_util::WriteStringToFile( | 719 ASSERT_TRUE(google_apis::test_util::WriteStringToFile( |
720 file_directory.AppendASCII("id_kyu.md5"), "kyu")); | 720 file_directory.AppendASCII("id_kyu.md5"), "kyu")); |
(...skipping 19 matching lines...) Expand all Loading... |
740 EXPECT_EQ("koo", contents); | 740 EXPECT_EQ("koo", contents); |
741 contents.clear(); | 741 contents.clear(); |
742 EXPECT_TRUE(base::ReadFileToString(file_directory.AppendASCII("id_kyu"), | 742 EXPECT_TRUE(base::ReadFileToString(file_directory.AppendASCII("id_kyu"), |
743 &contents)); | 743 &contents)); |
744 EXPECT_EQ("kyu", contents); | 744 EXPECT_EQ("kyu", contents); |
745 } | 745 } |
746 | 746 |
747 TEST_F(FileCacheTest, FixMetadataAndFileAttributes) { | 747 TEST_F(FileCacheTest, FixMetadataAndFileAttributes) { |
748 // Create test files and metadata. | 748 // Create test files and metadata. |
749 base::FilePath temp_file; | 749 base::FilePath temp_file; |
750 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), &temp_file)); | 750 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.GetPath(), &temp_file)); |
751 | 751 |
752 // Entry A: pinned cache file. | 752 // Entry A: pinned cache file. |
753 const std::string id_a = "id_a"; | 753 const std::string id_a = "id_a"; |
754 ResourceEntry entry_a; | 754 ResourceEntry entry_a; |
755 entry_a.set_local_id(id_a); | 755 entry_a.set_local_id(id_a); |
756 FileCacheEntry* file_cache_entry_a = | 756 FileCacheEntry* file_cache_entry_a = |
757 entry_a.mutable_file_specific_info()->mutable_cache_state(); | 757 entry_a.mutable_file_specific_info()->mutable_cache_state(); |
758 file_cache_entry_a->set_is_present(true); | 758 file_cache_entry_a->set_is_present(true); |
759 file_cache_entry_a->set_is_pinned(true); | 759 file_cache_entry_a->set_is_pinned(true); |
760 file_cache_entry_a->set_is_dirty(false); | 760 file_cache_entry_a->set_is_dirty(false); |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
862 | 862 |
863 TEST_F(FileCacheTest, ClearAll) { | 863 TEST_F(FileCacheTest, ClearAll) { |
864 const std::string id("1a2b"); | 864 const std::string id("1a2b"); |
865 const std::string md5("abcdef0123456789"); | 865 const std::string md5("abcdef0123456789"); |
866 | 866 |
867 // Store an existing file. | 867 // Store an existing file. |
868 ResourceEntry entry; | 868 ResourceEntry entry; |
869 entry.set_local_id(id); | 869 entry.set_local_id(id); |
870 EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->PutEntry(entry)); | 870 EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->PutEntry(entry)); |
871 base::FilePath src_file; | 871 base::FilePath src_file; |
872 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), &src_file)); | 872 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.GetPath(), &src_file)); |
873 ASSERT_EQ(FILE_ERROR_OK, | 873 ASSERT_EQ(FILE_ERROR_OK, |
874 cache_->Store(id, md5, src_file, FileCache::FILE_OPERATION_COPY)); | 874 cache_->Store(id, md5, src_file, FileCache::FILE_OPERATION_COPY)); |
875 | 875 |
876 // Clear cache. | 876 // Clear cache. |
877 EXPECT_TRUE(cache_->ClearAll()); | 877 EXPECT_TRUE(cache_->ClearAll()); |
878 | 878 |
879 // Verify that the cache is removed. | 879 // Verify that the cache is removed. |
880 EXPECT_TRUE(base::IsDirectoryEmpty(cache_files_dir_)); | 880 EXPECT_TRUE(base::IsDirectoryEmpty(cache_files_dir_)); |
881 } | 881 } |
882 | 882 |
883 } // namespace internal | 883 } // namespace internal |
884 } // namespace drive | 884 } // namespace drive |
OLD | NEW |