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 <errno.h> | 5 #include <errno.h> |
6 #include <string> | 6 #include <string> |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
115 upload_file_info->gdata_path = gdata_path; | 115 upload_file_info->gdata_path = gdata_path; |
116 upload_file_info->file_path = local_file_path; | 116 upload_file_info->file_path = local_file_path; |
117 upload_file_info->entry.reset(document_entry); | 117 upload_file_info->entry.reset(document_entry); |
118 base::MessageLoopProxy::current()->PostTask(FROM_HERE, | 118 base::MessageLoopProxy::current()->PostTask(FROM_HERE, |
119 base::Bind(arg5, error, base::Passed(&upload_file_info))); | 119 base::Bind(arg5, error, base::Passed(&upload_file_info))); |
120 | 120 |
121 const int kUploadId = 123; | 121 const int kUploadId = 123; |
122 return kUploadId; | 122 return kUploadId; |
123 } | 123 } |
124 | 124 |
125 // Converts |cache_state| to a GDataCache::CacheEntry. | 125 // Converts |cache_state| to a GDataCacheEntry. |
126 GDataCache::CacheEntry ToCacheEntry(int cache_state) { | 126 GDataCacheEntry ToCacheEntry(int cache_state) { |
127 return GDataCache::CacheEntry("dummy_md5", cache_state); | 127 return GDataCacheEntry("dummy_md5", cache_state); |
128 } | 128 } |
129 | 129 |
130 } // namespace | 130 } // namespace |
131 | 131 |
132 class MockFreeDiskSpaceGetter : public FreeDiskSpaceGetterInterface { | 132 class MockFreeDiskSpaceGetter : public FreeDiskSpaceGetterInterface { |
133 public: | 133 public: |
134 virtual ~MockFreeDiskSpaceGetter() {} | 134 virtual ~MockFreeDiskSpaceGetter() {} |
135 MOCK_CONST_METHOD0(AmountOfFreeDiskSpace, int64()); | 135 MOCK_CONST_METHOD0(AmountOfFreeDiskSpace, int64()); |
136 }; | 136 }; |
137 | 137 |
(...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
413 | 413 |
414 FilePath GetCacheFilePath(const std::string& resource_id, | 414 FilePath GetCacheFilePath(const std::string& resource_id, |
415 const std::string& md5, | 415 const std::string& md5, |
416 GDataCache::CacheSubDirectoryType sub_dir_type, | 416 GDataCache::CacheSubDirectoryType sub_dir_type, |
417 GDataCache::CachedFileOrigin file_origin) { | 417 GDataCache::CachedFileOrigin file_origin) { |
418 return cache_->GetCacheFilePath(resource_id, md5, sub_dir_type, | 418 return cache_->GetCacheFilePath(resource_id, md5, sub_dir_type, |
419 file_origin); | 419 file_origin); |
420 } | 420 } |
421 | 421 |
422 // Helper function to call GetCacheEntry from origin thread. | 422 // Helper function to call GetCacheEntry from origin thread. |
423 scoped_ptr<GDataCache::CacheEntry> GetCacheEntryFromOriginThread( | 423 scoped_ptr<GDataCacheEntry> GetCacheEntryFromOriginThread( |
424 const std::string& resource_id, | 424 const std::string& resource_id, |
425 const std::string& md5) { | 425 const std::string& md5) { |
426 scoped_ptr<GDataCache::CacheEntry> cache_entry; | 426 scoped_ptr<GDataCacheEntry> cache_entry; |
427 content::BrowserThread::GetBlockingPool() | 427 content::BrowserThread::GetBlockingPool() |
428 ->GetSequencedTaskRunner(sequence_token_)->PostTask( | 428 ->GetSequencedTaskRunner(sequence_token_)->PostTask( |
429 FROM_HERE, | 429 FROM_HERE, |
430 base::Bind( | 430 base::Bind( |
431 &GDataFileSystemTest::GetCacheEntryFromOriginThreadInternal, | 431 &GDataFileSystemTest::GetCacheEntryFromOriginThreadInternal, |
432 base::Unretained(this), | 432 base::Unretained(this), |
433 resource_id, | 433 resource_id, |
434 md5, | 434 md5, |
435 &cache_entry)); | 435 &cache_entry)); |
436 test_util::RunBlockingPoolTask(); | 436 test_util::RunBlockingPoolTask(); |
437 return cache_entry.Pass(); | 437 return cache_entry.Pass(); |
438 } | 438 } |
439 | 439 |
440 // Used to implement GetCacheEntry. | 440 // Used to implement GetCacheEntry. |
441 void GetCacheEntryFromOriginThreadInternal( | 441 void GetCacheEntryFromOriginThreadInternal( |
442 const std::string& resource_id, | 442 const std::string& resource_id, |
443 const std::string& md5, | 443 const std::string& md5, |
444 scoped_ptr<GDataCache::CacheEntry>* cache_entry) { | 444 scoped_ptr<GDataCacheEntry>* cache_entry) { |
445 cache_entry->reset(cache_->GetCacheEntry(resource_id, md5).release()); | 445 cache_entry->reset(cache_->GetCacheEntry(resource_id, md5).release()); |
446 } | 446 } |
447 | 447 |
448 // Returns true if the cache entry exists for the given resource ID and MD5. | 448 // Returns true if the cache entry exists for the given resource ID and MD5. |
449 bool CacheEntryExists(const std::string& resource_id, | 449 bool CacheEntryExists(const std::string& resource_id, |
450 const std::string& md5) { | 450 const std::string& md5) { |
451 return GetCacheEntryFromOriginThread(resource_id, md5).get(); | 451 return GetCacheEntryFromOriginThread(resource_id, md5).get(); |
452 } | 452 } |
453 | 453 |
454 // Returns true if the cache file exists for the given resource ID and MD5. | 454 // Returns true if the cache file exists for the given resource ID and MD5. |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
495 } | 495 } |
496 | 496 |
497 void VerifyRemoveFromCache(base::PlatformFileError error, | 497 void VerifyRemoveFromCache(base::PlatformFileError error, |
498 const std::string& resource_id, | 498 const std::string& resource_id, |
499 const std::string& md5) { | 499 const std::string& md5) { |
500 ++num_callback_invocations_; | 500 ++num_callback_invocations_; |
501 | 501 |
502 EXPECT_EQ(expected_error_, error); | 502 EXPECT_EQ(expected_error_, error); |
503 | 503 |
504 // Verify cache map. | 504 // Verify cache map. |
505 scoped_ptr<GDataCache::CacheEntry> cache_entry = | 505 scoped_ptr<GDataCacheEntry> cache_entry = |
506 GetCacheEntryFromOriginThread(resource_id, md5); | 506 GetCacheEntryFromOriginThread(resource_id, md5); |
507 if (cache_entry.get()) | 507 if (cache_entry.get()) |
508 EXPECT_TRUE(cache_entry->IsDirty()); | 508 EXPECT_TRUE(cache_entry->IsDirty()); |
509 | 509 |
510 // If entry doesn't exist, verify that: | 510 // If entry doesn't exist, verify that: |
511 // - no files with "<resource_id>.* exists in persistent and tmp dirs | 511 // - no files with "<resource_id>.* exists in persistent and tmp dirs |
512 // - no "<resource_id>" symlink exists in pinned and outgoing dirs. | 512 // - no "<resource_id>" symlink exists in pinned and outgoing dirs. |
513 std::vector<PathToVerify> paths_to_verify; | 513 std::vector<PathToVerify> paths_to_verify; |
514 paths_to_verify.push_back( // Index 0: CACHE_TYPE_TMP. | 514 paths_to_verify.push_back( // Index 0: CACHE_TYPE_TMP. |
515 PathToVerify(cache_->GetCacheFilePath(resource_id, "*", | 515 PathToVerify(cache_->GetCacheFilePath(resource_id, "*", |
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
664 } | 664 } |
665 | 665 |
666 // Verify the file identified by |resource_id| and |md5| is in the expected | 666 // Verify the file identified by |resource_id| and |md5| is in the expected |
667 // cache state after |OpenFile|, that is, marked dirty and has no outgoing | 667 // cache state after |OpenFile|, that is, marked dirty and has no outgoing |
668 // symlink, etc. | 668 // symlink, etc. |
669 void VerifyCacheStateAfterOpenFile(base::PlatformFileError error, | 669 void VerifyCacheStateAfterOpenFile(base::PlatformFileError error, |
670 const std::string& resource_id, | 670 const std::string& resource_id, |
671 const std::string& md5, | 671 const std::string& md5, |
672 const FilePath& cache_file_path) { | 672 const FilePath& cache_file_path) { |
673 expected_error_ = base::PLATFORM_FILE_OK; | 673 expected_error_ = base::PLATFORM_FILE_OK; |
674 expected_cache_state_ = (GDataCache::CACHE_STATE_PRESENT | | 674 expected_cache_state_ = (CACHE_STATE_PRESENT | |
675 GDataCache::CACHE_STATE_DIRTY | | 675 CACHE_STATE_DIRTY | |
676 GDataCache::CACHE_STATE_PERSISTENT); | 676 CACHE_STATE_PERSISTENT); |
677 expected_sub_dir_type_ = GDataCache::CACHE_TYPE_PERSISTENT; | 677 expected_sub_dir_type_ = GDataCache::CACHE_TYPE_PERSISTENT; |
678 expect_outgoing_symlink_ = false; | 678 expect_outgoing_symlink_ = false; |
679 VerifyMarkDirty(error, resource_id, md5, cache_file_path); | 679 VerifyMarkDirty(error, resource_id, md5, cache_file_path); |
680 } | 680 } |
681 | 681 |
682 // Verify the file identified by |resource_id| and |md5| is in the expected | 682 // Verify the file identified by |resource_id| and |md5| is in the expected |
683 // cache state after |CloseFile|, that is, marked dirty and has an outgoing | 683 // cache state after |CloseFile|, that is, marked dirty and has an outgoing |
684 // symlink, etc. | 684 // symlink, etc. |
685 void VerifyCacheStateAfterCloseFile(base::PlatformFileError error, | 685 void VerifyCacheStateAfterCloseFile(base::PlatformFileError error, |
686 const std::string& resource_id, | 686 const std::string& resource_id, |
687 const std::string& md5) { | 687 const std::string& md5) { |
688 expected_error_ = base::PLATFORM_FILE_OK; | 688 expected_error_ = base::PLATFORM_FILE_OK; |
689 expected_cache_state_ = (GDataCache::CACHE_STATE_PRESENT | | 689 expected_cache_state_ = (CACHE_STATE_PRESENT | |
690 GDataCache::CACHE_STATE_DIRTY | | 690 CACHE_STATE_DIRTY | |
691 GDataCache::CACHE_STATE_PERSISTENT); | 691 CACHE_STATE_PERSISTENT); |
692 expected_sub_dir_type_ = GDataCache::CACHE_TYPE_PERSISTENT; | 692 expected_sub_dir_type_ = GDataCache::CACHE_TYPE_PERSISTENT; |
693 expect_outgoing_symlink_ = true; | 693 expect_outgoing_symlink_ = true; |
694 VerifyCacheFileState(error, resource_id, md5); | 694 VerifyCacheFileState(error, resource_id, md5); |
695 } | 695 } |
696 | 696 |
697 void VerifyCacheFileState(base::PlatformFileError error, | 697 void VerifyCacheFileState(base::PlatformFileError error, |
698 const std::string& resource_id, | 698 const std::string& resource_id, |
699 const std::string& md5) { | 699 const std::string& md5) { |
700 ++num_callback_invocations_; | 700 ++num_callback_invocations_; |
701 | 701 |
702 EXPECT_EQ(expected_error_, error); | 702 EXPECT_EQ(expected_error_, error); |
703 | 703 |
704 // Verify cache map. | 704 // Verify cache map. |
705 scoped_ptr<GDataCache::CacheEntry> cache_entry = | 705 scoped_ptr<GDataCacheEntry> cache_entry = |
706 GetCacheEntryFromOriginThread(resource_id, md5); | 706 GetCacheEntryFromOriginThread(resource_id, md5); |
707 if (ToCacheEntry(expected_cache_state_).IsPresent() || | 707 if (ToCacheEntry(expected_cache_state_).IsPresent() || |
708 ToCacheEntry(expected_cache_state_).IsPinned()) { | 708 ToCacheEntry(expected_cache_state_).IsPinned()) { |
709 ASSERT_TRUE(cache_entry.get()); | 709 ASSERT_TRUE(cache_entry.get()); |
710 EXPECT_EQ(expected_cache_state_, cache_entry->cache_state()); | 710 EXPECT_EQ(expected_cache_state_, cache_entry->cache_state()); |
711 EXPECT_EQ(expected_sub_dir_type_, cache_entry->GetSubDirectoryType()); | 711 EXPECT_EQ(expected_sub_dir_type_, |
| 712 GDataCache::GetSubDirectoryType(*cache_entry)); |
712 } else { | 713 } else { |
713 EXPECT_FALSE(cache_entry.get()); | 714 EXPECT_FALSE(cache_entry.get()); |
714 } | 715 } |
715 | 716 |
716 // Verify actual cache file. | 717 // Verify actual cache file. |
717 FilePath dest_path = cache_->GetCacheFilePath( | 718 FilePath dest_path = cache_->GetCacheFilePath( |
718 resource_id, | 719 resource_id, |
719 md5, | 720 md5, |
720 ToCacheEntry(expected_cache_state_).IsPinned() || | 721 ToCacheEntry(expected_cache_state_).IsPinned() || |
721 ToCacheEntry(expected_cache_state_).IsDirty() ? | 722 ToCacheEntry(expected_cache_state_).IsDirty() ? |
(...skipping 1416 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2138 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace()) | 2139 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace()) |
2139 .WillOnce(Return(0)) | 2140 .WillOnce(Return(0)) |
2140 .WillOnce(Return(file_size + kMinFreeSpace)) | 2141 .WillOnce(Return(file_size + kMinFreeSpace)) |
2141 .WillOnce(Return(file_size + kMinFreeSpace)); | 2142 .WillOnce(Return(file_size + kMinFreeSpace)); |
2142 | 2143 |
2143 // Store something in the temporary cache directory. | 2144 // Store something in the temporary cache directory. |
2144 TestStoreToCache("<resource_id>", | 2145 TestStoreToCache("<resource_id>", |
2145 "<md5>", | 2146 "<md5>", |
2146 GetTestFilePath("root_feed.json"), | 2147 GetTestFilePath("root_feed.json"), |
2147 base::PLATFORM_FILE_OK, | 2148 base::PLATFORM_FILE_OK, |
2148 GDataCache::CACHE_STATE_PRESENT, | 2149 CACHE_STATE_PRESENT, |
2149 GDataCache::CACHE_TYPE_TMP); | 2150 GDataCache::CACHE_TYPE_TMP); |
2150 ASSERT_TRUE(CacheEntryExists("<resource_id>", "<md5>")); | 2151 ASSERT_TRUE(CacheEntryExists("<resource_id>", "<md5>")); |
2151 ASSERT_TRUE(CacheFileExists("<resource_id>", "<md5>")); | 2152 ASSERT_TRUE(CacheFileExists("<resource_id>", "<md5>")); |
2152 | 2153 |
2153 // Before Download starts metadata from server will be fetched. | 2154 // Before Download starts metadata from server will be fetched. |
2154 // We will read content url from the result. | 2155 // We will read content url from the result. |
2155 scoped_ptr<base::Value> document(LoadJSONFile("document_to_download.json")); | 2156 scoped_ptr<base::Value> document(LoadJSONFile("document_to_download.json")); |
2156 SetExpectationsForGetDocumentEntry(&document, "file:2_file_resource_id"); | 2157 SetExpectationsForGetDocumentEntry(&document, "file:2_file_resource_id"); |
2157 | 2158 |
2158 // The file is obtained with the mock DocumentsService, because of we freed | 2159 // The file is obtained with the mock DocumentsService, because of we freed |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2232 FilePath file_in_root(FILE_PATH_LITERAL("drive/File 1.txt")); | 2233 FilePath file_in_root(FILE_PATH_LITERAL("drive/File 1.txt")); |
2233 GDataEntry* entry = FindEntry(file_in_root); | 2234 GDataEntry* entry = FindEntry(file_in_root); |
2234 GDataFile* file = entry->AsGDataFile(); | 2235 GDataFile* file = entry->AsGDataFile(); |
2235 FilePath downloaded_file = GetCachePathForFile(file); | 2236 FilePath downloaded_file = GetCachePathForFile(file); |
2236 | 2237 |
2237 // Store something as cached version of this file. | 2238 // Store something as cached version of this file. |
2238 TestStoreToCache(file->resource_id(), | 2239 TestStoreToCache(file->resource_id(), |
2239 file->file_md5(), | 2240 file->file_md5(), |
2240 GetTestFilePath("root_feed.json"), | 2241 GetTestFilePath("root_feed.json"), |
2241 base::PLATFORM_FILE_OK, | 2242 base::PLATFORM_FILE_OK, |
2242 GDataCache::CACHE_STATE_PRESENT, | 2243 CACHE_STATE_PRESENT, |
2243 GDataCache::CACHE_TYPE_TMP); | 2244 GDataCache::CACHE_TYPE_TMP); |
2244 | 2245 |
2245 // Make sure we don't fetch metadata for downloading file. | 2246 // Make sure we don't fetch metadata for downloading file. |
2246 EXPECT_CALL(*mock_doc_service_, GetDocumentEntry(_, _)).Times(0); | 2247 EXPECT_CALL(*mock_doc_service_, GetDocumentEntry(_, _)).Times(0); |
2247 | 2248 |
2248 // Make sure we don't call downloads at all. | 2249 // Make sure we don't call downloads at all. |
2249 EXPECT_CALL(*mock_doc_service_, | 2250 EXPECT_CALL(*mock_doc_service_, |
2250 DownloadFile(file_in_root, | 2251 DownloadFile(file_in_root, |
2251 downloaded_file, | 2252 downloaded_file, |
2252 GURL("https://file_content_url_changed/"), | 2253 GURL("https://file_content_url_changed/"), |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2332 FilePath file_in_root(FILE_PATH_LITERAL("drive/File 1.txt")); | 2333 FilePath file_in_root(FILE_PATH_LITERAL("drive/File 1.txt")); |
2333 GDataEntry* entry = FindEntry(file_in_root); | 2334 GDataEntry* entry = FindEntry(file_in_root); |
2334 GDataFile* file = entry->AsGDataFile(); | 2335 GDataFile* file = entry->AsGDataFile(); |
2335 FilePath downloaded_file = GetCachePathForFile(file); | 2336 FilePath downloaded_file = GetCachePathForFile(file); |
2336 | 2337 |
2337 // Store something as cached version of this file. | 2338 // Store something as cached version of this file. |
2338 TestStoreToCache(file->resource_id(), | 2339 TestStoreToCache(file->resource_id(), |
2339 file->file_md5(), | 2340 file->file_md5(), |
2340 GetTestFilePath("root_feed.json"), | 2341 GetTestFilePath("root_feed.json"), |
2341 base::PLATFORM_FILE_OK, | 2342 base::PLATFORM_FILE_OK, |
2342 GDataCache::CACHE_STATE_PRESENT, | 2343 CACHE_STATE_PRESENT, |
2343 GDataCache::CACHE_TYPE_TMP); | 2344 GDataCache::CACHE_TYPE_TMP); |
2344 | 2345 |
2345 // The file is obtained from the cache. | 2346 // The file is obtained from the cache. |
2346 // Make sure we don't call downloads at all. | 2347 // Make sure we don't call downloads at all. |
2347 EXPECT_CALL(*mock_doc_service_, DownloadFile(_, _, _, _, _)) | 2348 EXPECT_CALL(*mock_doc_service_, DownloadFile(_, _, _, _, _)) |
2348 .Times(0); | 2349 .Times(0); |
2349 | 2350 |
2350 file_system_->GetFileByResourceId(file->resource_id(), callback, | 2351 file_system_->GetFileByResourceId(file->resource_id(), callback, |
2351 GetDownloadDataCallback()); | 2352 GetDownloadDataCallback()); |
2352 test_util::RunBlockingPoolTask(); | 2353 test_util::RunBlockingPoolTask(); |
2353 | 2354 |
2354 EXPECT_EQ(REGULAR_FILE, callback_helper_->file_type_); | 2355 EXPECT_EQ(REGULAR_FILE, callback_helper_->file_type_); |
2355 EXPECT_EQ(downloaded_file.value(), | 2356 EXPECT_EQ(downloaded_file.value(), |
2356 callback_helper_->download_path_.value()); | 2357 callback_helper_->download_path_.value()); |
2357 } | 2358 } |
2358 | 2359 |
2359 TEST_F(GDataFileSystemTest, UpdateFileByResourceId_PersistentFile) { | 2360 TEST_F(GDataFileSystemTest, UpdateFileByResourceId_PersistentFile) { |
2360 LoadRootFeedDocument("root_feed.json"); | 2361 LoadRootFeedDocument("root_feed.json"); |
2361 | 2362 |
2362 // This is a file defined in root_feed.json. | 2363 // This is a file defined in root_feed.json. |
2363 const FilePath kFilePath(FILE_PATH_LITERAL("drive/File 1.txt")); | 2364 const FilePath kFilePath(FILE_PATH_LITERAL("drive/File 1.txt")); |
2364 const std::string kResourceId("file:2_file_resource_id"); | 2365 const std::string kResourceId("file:2_file_resource_id"); |
2365 const std::string kMd5("3b4382ebefec6e743578c76bbd0575ce"); | 2366 const std::string kMd5("3b4382ebefec6e743578c76bbd0575ce"); |
2366 | 2367 |
2367 // Pin the file so it'll be store in "persistent" directory. | 2368 // Pin the file so it'll be store in "persistent" directory. |
2368 EXPECT_CALL(*mock_sync_client_, OnCachePinned(kResourceId, kMd5)).Times(1); | 2369 EXPECT_CALL(*mock_sync_client_, OnCachePinned(kResourceId, kMd5)).Times(1); |
2369 TestPin(kResourceId, | 2370 TestPin(kResourceId, |
2370 kMd5, | 2371 kMd5, |
2371 base::PLATFORM_FILE_OK, | 2372 base::PLATFORM_FILE_OK, |
2372 GDataCache::CACHE_STATE_PINNED, | 2373 CACHE_STATE_PINNED, |
2373 GDataCache::CACHE_TYPE_TMP); | 2374 GDataCache::CACHE_TYPE_TMP); |
2374 | 2375 |
2375 // First store a file to cache. A cache file will be created at: | 2376 // First store a file to cache. A cache file will be created at: |
2376 // GCache/v1/persistent/<kResourceId>.<kMd5> | 2377 // GCache/v1/persistent/<kResourceId>.<kMd5> |
2377 const FilePath original_cache_file_path = | 2378 const FilePath original_cache_file_path = |
2378 GDataCache::GetCacheRootPath(profile_.get()) | 2379 GDataCache::GetCacheRootPath(profile_.get()) |
2379 .AppendASCII("persistent") | 2380 .AppendASCII("persistent") |
2380 .AppendASCII(kResourceId + "." + kMd5); | 2381 .AppendASCII(kResourceId + "." + kMd5); |
2381 TestStoreToCache(kResourceId, | 2382 TestStoreToCache(kResourceId, |
2382 kMd5, | 2383 kMd5, |
2383 GetTestFilePath("root_feed.json"), // Anything works. | 2384 GetTestFilePath("root_feed.json"), // Anything works. |
2384 base::PLATFORM_FILE_OK, | 2385 base::PLATFORM_FILE_OK, |
2385 GDataCache::CACHE_STATE_PRESENT | | 2386 CACHE_STATE_PRESENT | |
2386 GDataCache::CACHE_STATE_PINNED | | 2387 CACHE_STATE_PINNED | |
2387 GDataCache::CACHE_STATE_PERSISTENT, | 2388 CACHE_STATE_PERSISTENT, |
2388 GDataCache::CACHE_TYPE_PERSISTENT); | 2389 GDataCache::CACHE_TYPE_PERSISTENT); |
2389 ASSERT_TRUE(file_util::PathExists(original_cache_file_path)); | 2390 ASSERT_TRUE(file_util::PathExists(original_cache_file_path)); |
2390 | 2391 |
2391 // Add the dirty bit. The cache file will be renamed to | 2392 // Add the dirty bit. The cache file will be renamed to |
2392 // GCache/v1/persistent/<kResourceId>.local | 2393 // GCache/v1/persistent/<kResourceId>.local |
2393 TestMarkDirty(kResourceId, | 2394 TestMarkDirty(kResourceId, |
2394 kMd5, | 2395 kMd5, |
2395 base::PLATFORM_FILE_OK, | 2396 base::PLATFORM_FILE_OK, |
2396 GDataCache::CACHE_STATE_PRESENT | | 2397 CACHE_STATE_PRESENT | |
2397 GDataCache::CACHE_STATE_PINNED | | 2398 CACHE_STATE_PINNED | |
2398 GDataCache::CACHE_STATE_DIRTY | | 2399 CACHE_STATE_DIRTY | |
2399 GDataCache::CACHE_STATE_PERSISTENT, | 2400 CACHE_STATE_PERSISTENT, |
2400 GDataCache::CACHE_TYPE_PERSISTENT); | 2401 GDataCache::CACHE_TYPE_PERSISTENT); |
2401 const FilePath dirty_cache_file_path = | 2402 const FilePath dirty_cache_file_path = |
2402 GDataCache::GetCacheRootPath(profile_.get()) | 2403 GDataCache::GetCacheRootPath(profile_.get()) |
2403 .AppendASCII("persistent") | 2404 .AppendASCII("persistent") |
2404 .AppendASCII(kResourceId + ".local"); | 2405 .AppendASCII(kResourceId + ".local"); |
2405 ASSERT_FALSE(file_util::PathExists(original_cache_file_path)); | 2406 ASSERT_FALSE(file_util::PathExists(original_cache_file_path)); |
2406 ASSERT_TRUE(file_util::PathExists(dirty_cache_file_path)); | 2407 ASSERT_TRUE(file_util::PathExists(dirty_cache_file_path)); |
2407 | 2408 |
2408 // Commit the dirty bit. The cache file name remains the same | 2409 // Commit the dirty bit. The cache file name remains the same |
2409 // but a symlink will be created at: | 2410 // but a symlink will be created at: |
2410 // GCache/v1/outgoing/<kResourceId> | 2411 // GCache/v1/outgoing/<kResourceId> |
2411 EXPECT_CALL(*mock_sync_client_, OnCacheCommitted(kResourceId)).Times(1); | 2412 EXPECT_CALL(*mock_sync_client_, OnCacheCommitted(kResourceId)).Times(1); |
2412 TestCommitDirty(kResourceId, | 2413 TestCommitDirty(kResourceId, |
2413 kMd5, | 2414 kMd5, |
2414 base::PLATFORM_FILE_OK, | 2415 base::PLATFORM_FILE_OK, |
2415 GDataCache::CACHE_STATE_PRESENT | | 2416 CACHE_STATE_PRESENT | |
2416 GDataCache::CACHE_STATE_PINNED | | 2417 CACHE_STATE_PINNED | |
2417 GDataCache::CACHE_STATE_DIRTY | | 2418 CACHE_STATE_DIRTY | |
2418 GDataCache::CACHE_STATE_PERSISTENT, | 2419 CACHE_STATE_PERSISTENT, |
2419 GDataCache::CACHE_TYPE_PERSISTENT); | 2420 GDataCache::CACHE_TYPE_PERSISTENT); |
2420 const FilePath outgoing_symlink_path = | 2421 const FilePath outgoing_symlink_path = |
2421 GDataCache::GetCacheRootPath(profile_.get()) | 2422 GDataCache::GetCacheRootPath(profile_.get()) |
2422 .AppendASCII("outgoing") | 2423 .AppendASCII("outgoing") |
2423 .AppendASCII(kResourceId); | 2424 .AppendASCII(kResourceId); |
2424 ASSERT_TRUE(file_util::PathExists(dirty_cache_file_path)); | 2425 ASSERT_TRUE(file_util::PathExists(dirty_cache_file_path)); |
2425 ASSERT_TRUE(file_util::PathExists(outgoing_symlink_path)); | 2426 ASSERT_TRUE(file_util::PathExists(outgoing_symlink_path)); |
2426 | 2427 |
2427 // Create a DocumentEntry, which is needed to mock | 2428 // Create a DocumentEntry, which is needed to mock |
2428 // GDataUploaderInterface::UploadExistingFile(). | 2429 // GDataUploaderInterface::UploadExistingFile(). |
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2631 | 2632 |
2632 // Try to close the same file twice. | 2633 // Try to close the same file twice. |
2633 file_system_->CloseFile(kFileInRoot, close_file_callback); | 2634 file_system_->CloseFile(kFileInRoot, close_file_callback); |
2634 message_loop_.Run(); | 2635 message_loop_.Run(); |
2635 | 2636 |
2636 // It must fail. | 2637 // It must fail. |
2637 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND, callback_helper_->last_error_); | 2638 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND, callback_helper_->last_error_); |
2638 } | 2639 } |
2639 | 2640 |
2640 } // namespace gdata | 2641 } // namespace gdata |
OLD | NEW |