| 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 648 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 659 } | 659 } |
| 660 | 660 |
| 661 // Verify the file identified by |resource_id| and |md5| is in the expected | 661 // Verify the file identified by |resource_id| and |md5| is in the expected |
| 662 // cache state after |OpenFile|, that is, marked dirty and has no outgoing | 662 // cache state after |OpenFile|, that is, marked dirty and has no outgoing |
| 663 // symlink, etc. | 663 // symlink, etc. |
| 664 void VerifyCacheStateAfterOpenFile(base::PlatformFileError error, | 664 void VerifyCacheStateAfterOpenFile(base::PlatformFileError error, |
| 665 const std::string& resource_id, | 665 const std::string& resource_id, |
| 666 const std::string& md5, | 666 const std::string& md5, |
| 667 const FilePath& cache_file_path) { | 667 const FilePath& cache_file_path) { |
| 668 expected_error_ = base::PLATFORM_FILE_OK; | 668 expected_error_ = base::PLATFORM_FILE_OK; |
| 669 expected_cache_state_ = | 669 expected_cache_state_ = (GDataCache::CACHE_STATE_PRESENT | |
| 670 GDataCache::CACHE_STATE_PRESENT | GDataCache::CACHE_STATE_DIRTY; | 670 GDataCache::CACHE_STATE_DIRTY | |
| 671 GDataCache::CACHE_STATE_PERSISTENT); |
| 671 expected_sub_dir_type_ = GDataCache::CACHE_TYPE_PERSISTENT; | 672 expected_sub_dir_type_ = GDataCache::CACHE_TYPE_PERSISTENT; |
| 672 expect_outgoing_symlink_ = false; | 673 expect_outgoing_symlink_ = false; |
| 673 VerifyMarkDirty(error, resource_id, md5, cache_file_path); | 674 VerifyMarkDirty(error, resource_id, md5, cache_file_path); |
| 674 } | 675 } |
| 675 | 676 |
| 676 // Verify the file identified by |resource_id| and |md5| is in the expected | 677 // Verify the file identified by |resource_id| and |md5| is in the expected |
| 677 // cache state after |CloseFile|, that is, marked dirty and has an outgoing | 678 // cache state after |CloseFile|, that is, marked dirty and has an outgoing |
| 678 // symlink, etc. | 679 // symlink, etc. |
| 679 void VerifyCacheStateAfterCloseFile(base::PlatformFileError error, | 680 void VerifyCacheStateAfterCloseFile(base::PlatformFileError error, |
| 680 const std::string& resource_id, | 681 const std::string& resource_id, |
| 681 const std::string& md5) { | 682 const std::string& md5) { |
| 682 expected_error_ = base::PLATFORM_FILE_OK; | 683 expected_error_ = base::PLATFORM_FILE_OK; |
| 683 expected_cache_state_ = | 684 expected_cache_state_ = (GDataCache::CACHE_STATE_PRESENT | |
| 684 GDataCache::CACHE_STATE_PRESENT | GDataCache::CACHE_STATE_DIRTY; | 685 GDataCache::CACHE_STATE_DIRTY | |
| 686 GDataCache::CACHE_STATE_PERSISTENT); |
| 685 expected_sub_dir_type_ = GDataCache::CACHE_TYPE_PERSISTENT; | 687 expected_sub_dir_type_ = GDataCache::CACHE_TYPE_PERSISTENT; |
| 686 expect_outgoing_symlink_ = true; | 688 expect_outgoing_symlink_ = true; |
| 687 VerifyCacheFileState(error, resource_id, md5); | 689 VerifyCacheFileState(error, resource_id, md5); |
| 688 } | 690 } |
| 689 | 691 |
| 690 void VerifyCacheFileState(base::PlatformFileError error, | 692 void VerifyCacheFileState(base::PlatformFileError error, |
| 691 const std::string& resource_id, | 693 const std::string& resource_id, |
| 692 const std::string& md5) { | 694 const std::string& md5) { |
| 693 ++num_callback_invocations_; | 695 ++num_callback_invocations_; |
| 694 | 696 |
| 695 EXPECT_EQ(expected_error_, error); | 697 EXPECT_EQ(expected_error_, error); |
| 696 | 698 |
| 697 // Verify cache map. | 699 // Verify cache map. |
| 698 scoped_ptr<GDataCache::CacheEntry> cache_entry = | 700 scoped_ptr<GDataCache::CacheEntry> cache_entry = |
| 699 GetCacheEntryFromOriginThread(resource_id, md5); | 701 GetCacheEntryFromOriginThread(resource_id, md5); |
| 700 if (GDataCache::IsCachePresent(expected_cache_state_) || | 702 if (GDataCache::IsCachePresent(expected_cache_state_) || |
| 701 GDataCache::IsCachePinned(expected_cache_state_)) { | 703 GDataCache::IsCachePinned(expected_cache_state_)) { |
| 702 ASSERT_TRUE(cache_entry.get()); | 704 ASSERT_TRUE(cache_entry.get()); |
| 703 EXPECT_EQ(expected_cache_state_, cache_entry->cache_state); | 705 EXPECT_EQ(expected_cache_state_, cache_entry->cache_state); |
| 704 EXPECT_EQ(expected_sub_dir_type_, cache_entry->sub_dir_type); | 706 EXPECT_EQ(expected_sub_dir_type_, cache_entry->GetSubDirectoryType()); |
| 705 } else { | 707 } else { |
| 706 EXPECT_FALSE(cache_entry.get()); | 708 EXPECT_FALSE(cache_entry.get()); |
| 707 } | 709 } |
| 708 | 710 |
| 709 // Verify actual cache file. | 711 // Verify actual cache file. |
| 710 FilePath dest_path = cache_->GetCacheFilePath( | 712 FilePath dest_path = cache_->GetCacheFilePath( |
| 711 resource_id, | 713 resource_id, |
| 712 md5, | 714 md5, |
| 713 GDataCache::IsCachePinned(expected_cache_state_) || | 715 GDataCache::IsCachePinned(expected_cache_state_) || |
| 714 GDataCache::IsCacheDirty(expected_cache_state_) ? | 716 GDataCache::IsCacheDirty(expected_cache_state_) ? |
| (...skipping 1654 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2369 // GCache/v1/persistent/<kResourceId>.<kMd5> | 2371 // GCache/v1/persistent/<kResourceId>.<kMd5> |
| 2370 const FilePath original_cache_file_path = | 2372 const FilePath original_cache_file_path = |
| 2371 GDataCache::GetCacheRootPath(profile_.get()) | 2373 GDataCache::GetCacheRootPath(profile_.get()) |
| 2372 .AppendASCII("persistent") | 2374 .AppendASCII("persistent") |
| 2373 .AppendASCII(kResourceId + "." + kMd5); | 2375 .AppendASCII(kResourceId + "." + kMd5); |
| 2374 TestStoreToCache(kResourceId, | 2376 TestStoreToCache(kResourceId, |
| 2375 kMd5, | 2377 kMd5, |
| 2376 GetTestFilePath("root_feed.json"), // Anything works. | 2378 GetTestFilePath("root_feed.json"), // Anything works. |
| 2377 base::PLATFORM_FILE_OK, | 2379 base::PLATFORM_FILE_OK, |
| 2378 GDataCache::CACHE_STATE_PRESENT | | 2380 GDataCache::CACHE_STATE_PRESENT | |
| 2379 GDataCache::CACHE_STATE_PINNED, | 2381 GDataCache::CACHE_STATE_PINNED | |
| 2382 GDataCache::CACHE_STATE_PERSISTENT, |
| 2380 GDataCache::CACHE_TYPE_PERSISTENT); | 2383 GDataCache::CACHE_TYPE_PERSISTENT); |
| 2381 ASSERT_TRUE(file_util::PathExists(original_cache_file_path)); | 2384 ASSERT_TRUE(file_util::PathExists(original_cache_file_path)); |
| 2382 | 2385 |
| 2383 // Add the dirty bit. The cache file will be renamed to | 2386 // Add the dirty bit. The cache file will be renamed to |
| 2384 // GCache/v1/persistent/<kResourceId>.local | 2387 // GCache/v1/persistent/<kResourceId>.local |
| 2385 TestMarkDirty(kResourceId, | 2388 TestMarkDirty(kResourceId, |
| 2386 kMd5, | 2389 kMd5, |
| 2387 base::PLATFORM_FILE_OK, | 2390 base::PLATFORM_FILE_OK, |
| 2388 GDataCache::CACHE_STATE_PRESENT | | 2391 GDataCache::CACHE_STATE_PRESENT | |
| 2389 GDataCache::CACHE_STATE_PINNED | | 2392 GDataCache::CACHE_STATE_PINNED | |
| 2390 GDataCache::CACHE_STATE_DIRTY, | 2393 GDataCache::CACHE_STATE_DIRTY | |
| 2394 GDataCache::CACHE_STATE_PERSISTENT, |
| 2391 GDataCache::CACHE_TYPE_PERSISTENT); | 2395 GDataCache::CACHE_TYPE_PERSISTENT); |
| 2392 const FilePath dirty_cache_file_path = | 2396 const FilePath dirty_cache_file_path = |
| 2393 GDataCache::GetCacheRootPath(profile_.get()) | 2397 GDataCache::GetCacheRootPath(profile_.get()) |
| 2394 .AppendASCII("persistent") | 2398 .AppendASCII("persistent") |
| 2395 .AppendASCII(kResourceId + ".local"); | 2399 .AppendASCII(kResourceId + ".local"); |
| 2396 ASSERT_FALSE(file_util::PathExists(original_cache_file_path)); | 2400 ASSERT_FALSE(file_util::PathExists(original_cache_file_path)); |
| 2397 ASSERT_TRUE(file_util::PathExists(dirty_cache_file_path)); | 2401 ASSERT_TRUE(file_util::PathExists(dirty_cache_file_path)); |
| 2398 | 2402 |
| 2399 // Commit the dirty bit. The cache file name remains the same | 2403 // Commit the dirty bit. The cache file name remains the same |
| 2400 // but a symlink will be created at: | 2404 // but a symlink will be created at: |
| 2401 // GCache/v1/outgoing/<kResourceId> | 2405 // GCache/v1/outgoing/<kResourceId> |
| 2402 EXPECT_CALL(*mock_sync_client_, OnCacheCommitted(kResourceId)).Times(1); | 2406 EXPECT_CALL(*mock_sync_client_, OnCacheCommitted(kResourceId)).Times(1); |
| 2403 TestCommitDirty(kResourceId, | 2407 TestCommitDirty(kResourceId, |
| 2404 kMd5, | 2408 kMd5, |
| 2405 base::PLATFORM_FILE_OK, | 2409 base::PLATFORM_FILE_OK, |
| 2406 GDataCache::CACHE_STATE_PRESENT | | 2410 GDataCache::CACHE_STATE_PRESENT | |
| 2407 GDataCache::CACHE_STATE_PINNED | | 2411 GDataCache::CACHE_STATE_PINNED | |
| 2408 GDataCache::CACHE_STATE_DIRTY, | 2412 GDataCache::CACHE_STATE_DIRTY | |
| 2413 GDataCache::CACHE_STATE_PERSISTENT, |
| 2409 GDataCache::CACHE_TYPE_PERSISTENT); | 2414 GDataCache::CACHE_TYPE_PERSISTENT); |
| 2410 const FilePath outgoing_symlink_path = | 2415 const FilePath outgoing_symlink_path = |
| 2411 GDataCache::GetCacheRootPath(profile_.get()) | 2416 GDataCache::GetCacheRootPath(profile_.get()) |
| 2412 .AppendASCII("outgoing") | 2417 .AppendASCII("outgoing") |
| 2413 .AppendASCII(kResourceId); | 2418 .AppendASCII(kResourceId); |
| 2414 ASSERT_TRUE(file_util::PathExists(dirty_cache_file_path)); | 2419 ASSERT_TRUE(file_util::PathExists(dirty_cache_file_path)); |
| 2415 ASSERT_TRUE(file_util::PathExists(outgoing_symlink_path)); | 2420 ASSERT_TRUE(file_util::PathExists(outgoing_symlink_path)); |
| 2416 | 2421 |
| 2417 // Create a DocumentEntry, which is needed to mock | 2422 // Create a DocumentEntry, which is needed to mock |
| 2418 // GDataUploaderInterface::UploadExistingFile(). | 2423 // GDataUploaderInterface::UploadExistingFile(). |
| (...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2621 | 2626 |
| 2622 // Try to close the same file twice. | 2627 // Try to close the same file twice. |
| 2623 file_system_->CloseFile(kFileInRoot, close_file_callback); | 2628 file_system_->CloseFile(kFileInRoot, close_file_callback); |
| 2624 message_loop_.Run(); | 2629 message_loop_.Run(); |
| 2625 | 2630 |
| 2626 // It must fail. | 2631 // It must fail. |
| 2627 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND, callback_helper_->last_error_); | 2632 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND, callback_helper_->last_error_); |
| 2628 } | 2633 } |
| 2629 | 2634 |
| 2630 } // namespace gdata | 2635 } // namespace gdata |
| OLD | NEW |