Chromium Code Reviews| 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 "base/file_util.h" | 5 #include "base/file_util.h" |
| 6 #include "base/json/json_file_value_serializer.h" | 6 #include "base/json/json_file_value_serializer.h" |
| 7 #include "base/message_loop.h" | 7 #include "base/message_loop.h" |
| 8 #include "base/path_service.h" | 8 #include "base/path_service.h" |
| 9 #include "chrome/browser/chromeos/cros/cros_library.h" | 9 #include "chrome/browser/chromeos/cros/cros_library.h" |
| 10 #include "chrome/browser/chromeos/gdata/drive_webapps_registry.h" | 10 #include "chrome/browser/chromeos/gdata/drive_webapps_registry.h" |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 83 struct PathToVerify { | 83 struct PathToVerify { |
| 84 PathToVerify(const FilePath& in_path_to_scan, | 84 PathToVerify(const FilePath& in_path_to_scan, |
| 85 const FilePath& in_expected_existing_path) : | 85 const FilePath& in_expected_existing_path) : |
| 86 path_to_scan(in_path_to_scan), | 86 path_to_scan(in_path_to_scan), |
| 87 expected_existing_path(in_expected_existing_path) { | 87 expected_existing_path(in_expected_existing_path) { |
| 88 } | 88 } |
| 89 | 89 |
| 90 FilePath path_to_scan; | 90 FilePath path_to_scan; |
| 91 FilePath expected_existing_path; | 91 FilePath expected_existing_path; |
| 92 }; | 92 }; |
| 93 | |
| 94 // Converts |cache_state| to a GDataCAche::CacheEntry. | |
|
hashimoto
2012/07/11 11:08:04
nit: s/CAche/Cache/
satorux1
2012/07/11 19:54:42
Done.
| |
| 95 GDataCache::CacheEntry ToCacheEntry(int cache_state) { | |
| 96 return GDataCache::CacheEntry("dummy_md5", cache_state); | |
| 97 } | |
| 98 | |
| 93 } // anonymous namespace | 99 } // anonymous namespace |
|
hashimoto
2012/07/11 11:08:04
Could you fix this while you are at this file?
s/a
satorux1
2012/07/11 19:54:42
Done.
satorux1
2012/07/11 19:54:42
Done.
| |
| 94 | 100 |
| 95 class MockFreeDiskSpaceGetter : public FreeDiskSpaceGetterInterface { | 101 class MockFreeDiskSpaceGetter : public FreeDiskSpaceGetterInterface { |
| 96 public: | 102 public: |
| 97 virtual ~MockFreeDiskSpaceGetter() {} | 103 virtual ~MockFreeDiskSpaceGetter() {} |
| 98 MOCK_CONST_METHOD0(AmountOfFreeDiskSpace, int64()); | 104 MOCK_CONST_METHOD0(AmountOfFreeDiskSpace, int64()); |
| 99 }; | 105 }; |
| 100 | 106 |
| 101 class MockGDataUploader : public GDataUploaderInterface { | 107 class MockGDataUploader : public GDataUploaderInterface { |
| 102 public: | 108 public: |
| 103 virtual ~MockGDataUploader() {} | 109 virtual ~MockGDataUploader() {} |
| (...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 262 // GDataFileSystem::InitializeCacheOnBlockingPool would scan through them | 268 // GDataFileSystem::InitializeCacheOnBlockingPool would scan through them |
| 263 // and populate cache map accordingly. | 269 // and populate cache map accordingly. |
| 264 | 270 |
| 265 // Copy files from data dir to cache dir to act as cached files. | 271 // Copy files from data dir to cache dir to act as cached files. |
| 266 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(initial_cache_resources); ++i) { | 272 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(initial_cache_resources); ++i) { |
| 267 const struct InitialCacheResource& resource = initial_cache_resources[i]; | 273 const struct InitialCacheResource& resource = initial_cache_resources[i]; |
| 268 // Determine gdata cache file absolute path according to cache state. | 274 // Determine gdata cache file absolute path according to cache state. |
| 269 FilePath dest_path = cache_->GetCacheFilePath( | 275 FilePath dest_path = cache_->GetCacheFilePath( |
| 270 resource.resource_id, | 276 resource.resource_id, |
| 271 resource.md5, | 277 resource.md5, |
| 272 GDataCache::IsCachePinned(resource.cache_state) || | 278 ToCacheEntry(resource.cache_state).IsPinned() || |
| 273 GDataCache::IsCacheDirty(resource.cache_state) ? | 279 ToCacheEntry(resource.cache_state).IsDirty() ? |
| 274 GDataCache::CACHE_TYPE_PERSISTENT : | 280 GDataCache::CACHE_TYPE_PERSISTENT : |
| 275 GDataCache::CACHE_TYPE_TMP, | 281 GDataCache::CACHE_TYPE_TMP, |
| 276 GDataCache::IsCacheDirty(resource.cache_state) ? | 282 ToCacheEntry(resource.cache_state).IsDirty() ? |
| 277 GDataCache::CACHED_FILE_LOCALLY_MODIFIED : | 283 GDataCache::CACHED_FILE_LOCALLY_MODIFIED : |
| 278 GDataCache::CACHED_FILE_FROM_SERVER); | 284 GDataCache::CACHED_FILE_FROM_SERVER); |
| 279 | 285 |
| 280 // Copy file from data dir to cache subdir, naming it per cache files | 286 // Copy file from data dir to cache subdir, naming it per cache files |
| 281 // convention. | 287 // convention. |
| 282 if (GDataCache::IsCachePresent(resource.cache_state)) { | 288 if (ToCacheEntry(resource.cache_state).IsPresent()) { |
| 283 FilePath source_path = GetTestFilePath(resource.source_file); | 289 FilePath source_path = GetTestFilePath(resource.source_file); |
| 284 ASSERT_TRUE(file_util::CopyFile(source_path, dest_path)); | 290 ASSERT_TRUE(file_util::CopyFile(source_path, dest_path)); |
| 285 } else { | 291 } else { |
| 286 dest_path = FilePath(FILE_PATH_LITERAL(kSymLinkToDevNull)); | 292 dest_path = FilePath(FILE_PATH_LITERAL(kSymLinkToDevNull)); |
| 287 } | 293 } |
| 288 | 294 |
| 289 // Create symbolic link in pinned dir, naming it per cache files | 295 // Create symbolic link in pinned dir, naming it per cache files |
| 290 // convention. | 296 // convention. |
| 291 if (GDataCache::IsCachePinned(resource.cache_state)) { | 297 if (ToCacheEntry(resource.cache_state).IsPinned()) { |
| 292 FilePath link_path = cache_->GetCacheFilePath( | 298 FilePath link_path = cache_->GetCacheFilePath( |
| 293 resource.resource_id, | 299 resource.resource_id, |
| 294 "", | 300 "", |
| 295 GDataCache::CACHE_TYPE_PINNED, | 301 GDataCache::CACHE_TYPE_PINNED, |
| 296 GDataCache::CACHED_FILE_FROM_SERVER); | 302 GDataCache::CACHED_FILE_FROM_SERVER); |
| 297 ASSERT_TRUE(file_util::CreateSymbolicLink(dest_path, link_path)); | 303 ASSERT_TRUE(file_util::CreateSymbolicLink(dest_path, link_path)); |
| 298 } | 304 } |
| 299 | 305 |
| 300 // Create symbolic link in outgoing dir, naming it per cache files | 306 // Create symbolic link in outgoing dir, naming it per cache files |
| 301 // convention. | 307 // convention. |
| 302 if (GDataCache::IsCacheDirty(resource.cache_state)) { | 308 if (ToCacheEntry(resource.cache_state).IsDirty()) { |
| 303 FilePath link_path = cache_->GetCacheFilePath( | 309 FilePath link_path = cache_->GetCacheFilePath( |
| 304 resource.resource_id, | 310 resource.resource_id, |
| 305 "", | 311 "", |
| 306 GDataCache::CACHE_TYPE_OUTGOING, | 312 GDataCache::CACHE_TYPE_OUTGOING, |
| 307 GDataCache::CACHED_FILE_FROM_SERVER); | 313 GDataCache::CACHED_FILE_FROM_SERVER); |
| 308 ASSERT_TRUE(file_util::CreateSymbolicLink(dest_path, link_path)); | 314 ASSERT_TRUE(file_util::CreateSymbolicLink(dest_path, link_path)); |
| 309 } | 315 } |
| 310 } | 316 } |
| 311 DVLOG(1) << "PrepareForInitCacheTest finished"; | 317 DVLOG(1) << "PrepareForInitCacheTest finished"; |
| 312 cache_->RequestInitializeOnUIThread(); // Force a re-scan. | 318 cache_->RequestInitializeOnUIThread(); // Force a re-scan. |
| 313 test_util::RunBlockingPoolTask(); | 319 test_util::RunBlockingPoolTask(); |
| 314 } | 320 } |
| 315 | 321 |
| 316 void TestInitializeCache() { | 322 void TestInitializeCache() { |
| 317 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(initial_cache_resources); ++i) { | 323 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(initial_cache_resources); ++i) { |
| 318 const struct InitialCacheResource& resource = initial_cache_resources[i]; | 324 const struct InitialCacheResource& resource = initial_cache_resources[i]; |
| 319 // Check cache file. | 325 // Check cache file. |
| 320 num_callback_invocations_ = 0; | 326 num_callback_invocations_ = 0; |
| 321 TestGetFileFromCacheByResourceIdAndMd5( | 327 TestGetFileFromCacheByResourceIdAndMd5( |
| 322 resource.resource_id, | 328 resource.resource_id, |
| 323 resource.md5, | 329 resource.md5, |
| 324 GDataCache::IsCachePresent(resource.cache_state) ? | 330 ToCacheEntry(resource.cache_state).IsPresent() ? |
| 325 base::PLATFORM_FILE_OK : | 331 base::PLATFORM_FILE_OK : |
| 326 base::PLATFORM_FILE_ERROR_NOT_FOUND, | 332 base::PLATFORM_FILE_ERROR_NOT_FOUND, |
| 327 resource.expected_file_extension); | 333 resource.expected_file_extension); |
| 328 EXPECT_EQ(1, num_callback_invocations_); | 334 EXPECT_EQ(1, num_callback_invocations_); |
| 329 | 335 |
| 330 // Verify cache state. | 336 // Verify cache state. |
| 331 std::string md5; | 337 std::string md5; |
| 332 if (GDataCache::IsCachePresent(resource.cache_state)) | 338 if (ToCacheEntry(resource.cache_state).IsPresent()) |
| 333 md5 = resource.md5; | 339 md5 = resource.md5; |
| 334 scoped_ptr<GDataCache::CacheEntry> cache_entry = | 340 scoped_ptr<GDataCache::CacheEntry> cache_entry = |
| 335 GetCacheEntryFromOriginThread(resource.resource_id, md5); | 341 GetCacheEntryFromOriginThread(resource.resource_id, md5); |
| 336 ASSERT_TRUE(cache_entry.get()); | 342 ASSERT_TRUE(cache_entry.get()); |
| 337 EXPECT_EQ(resource.cache_state, cache_entry->cache_state); | 343 EXPECT_EQ(resource.cache_state, cache_entry->cache_state); |
| 338 EXPECT_EQ(resource.expected_sub_dir_type, | 344 EXPECT_EQ(resource.expected_sub_dir_type, |
| 339 cache_entry->GetSubDirectoryType()); | 345 cache_entry->GetSubDirectoryType()); |
| 340 } | 346 } |
| 341 } | 347 } |
| 342 | 348 |
| (...skipping 338 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 681 void VerifyCacheFileState(base::PlatformFileError error, | 687 void VerifyCacheFileState(base::PlatformFileError error, |
| 682 const std::string& resource_id, | 688 const std::string& resource_id, |
| 683 const std::string& md5) { | 689 const std::string& md5) { |
| 684 ++num_callback_invocations_; | 690 ++num_callback_invocations_; |
| 685 | 691 |
| 686 EXPECT_EQ(expected_error_, error); | 692 EXPECT_EQ(expected_error_, error); |
| 687 | 693 |
| 688 // Verify cache map. | 694 // Verify cache map. |
| 689 scoped_ptr<GDataCache::CacheEntry> cache_entry = | 695 scoped_ptr<GDataCache::CacheEntry> cache_entry = |
| 690 GetCacheEntryFromOriginThread(resource_id, md5); | 696 GetCacheEntryFromOriginThread(resource_id, md5); |
| 691 if (GDataCache::IsCachePresent(expected_cache_state_) || | 697 if (ToCacheEntry(expected_cache_state_).IsPresent() || |
| 692 GDataCache::IsCachePinned(expected_cache_state_)) { | 698 ToCacheEntry(expected_cache_state_).IsPinned()) { |
| 693 ASSERT_TRUE(cache_entry.get()); | 699 ASSERT_TRUE(cache_entry.get()); |
| 694 EXPECT_EQ(expected_cache_state_, cache_entry->cache_state); | 700 EXPECT_EQ(expected_cache_state_, cache_entry->cache_state); |
| 695 EXPECT_EQ(expected_sub_dir_type_, cache_entry->GetSubDirectoryType()); | 701 EXPECT_EQ(expected_sub_dir_type_, cache_entry->GetSubDirectoryType()); |
| 696 } else { | 702 } else { |
| 697 EXPECT_FALSE(cache_entry.get()); | 703 EXPECT_FALSE(cache_entry.get()); |
| 698 } | 704 } |
| 699 | 705 |
| 700 // Verify actual cache file. | 706 // Verify actual cache file. |
| 701 FilePath dest_path = cache_->GetCacheFilePath( | 707 FilePath dest_path = cache_->GetCacheFilePath( |
| 702 resource_id, | 708 resource_id, |
| 703 md5, | 709 md5, |
| 704 GDataCache::IsCachePinned(expected_cache_state_) || | 710 ToCacheEntry(expected_cache_state_).IsPinned() || |
| 705 GDataCache::IsCacheDirty(expected_cache_state_) ? | 711 ToCacheEntry(expected_cache_state_).IsDirty() ? |
| 706 GDataCache::CACHE_TYPE_PERSISTENT : | 712 GDataCache::CACHE_TYPE_PERSISTENT : |
| 707 GDataCache::CACHE_TYPE_TMP, | 713 GDataCache::CACHE_TYPE_TMP, |
| 708 GDataCache::IsCacheDirty(expected_cache_state_) ? | 714 ToCacheEntry(expected_cache_state_).IsDirty() ? |
| 709 GDataCache::CACHED_FILE_LOCALLY_MODIFIED : | 715 GDataCache::CACHED_FILE_LOCALLY_MODIFIED : |
| 710 GDataCache::CACHED_FILE_FROM_SERVER); | 716 GDataCache::CACHED_FILE_FROM_SERVER); |
| 711 bool exists = file_util::PathExists(dest_path); | 717 bool exists = file_util::PathExists(dest_path); |
| 712 if (GDataCache::IsCachePresent(expected_cache_state_)) | 718 if (ToCacheEntry(expected_cache_state_).IsPresent()) |
| 713 EXPECT_TRUE(exists); | 719 EXPECT_TRUE(exists); |
| 714 else | 720 else |
| 715 EXPECT_FALSE(exists); | 721 EXPECT_FALSE(exists); |
| 716 | 722 |
| 717 // Verify symlink in pinned dir. | 723 // Verify symlink in pinned dir. |
| 718 FilePath symlink_path = cache_->GetCacheFilePath( | 724 FilePath symlink_path = cache_->GetCacheFilePath( |
| 719 resource_id, | 725 resource_id, |
| 720 std::string(), | 726 std::string(), |
| 721 GDataCache::CACHE_TYPE_PINNED, | 727 GDataCache::CACHE_TYPE_PINNED, |
| 722 GDataCache::CACHED_FILE_FROM_SERVER); | 728 GDataCache::CACHED_FILE_FROM_SERVER); |
| 723 // Check that pin symlink exists, without deferencing to target path. | 729 // Check that pin symlink exists, without deferencing to target path. |
| 724 exists = file_util::IsLink(symlink_path); | 730 exists = file_util::IsLink(symlink_path); |
| 725 if (GDataCache::IsCachePinned(expected_cache_state_)) { | 731 if (ToCacheEntry(expected_cache_state_).IsPinned()) { |
| 726 EXPECT_TRUE(exists); | 732 EXPECT_TRUE(exists); |
| 727 FilePath target_path; | 733 FilePath target_path; |
| 728 EXPECT_TRUE(file_util::ReadSymbolicLink(symlink_path, &target_path)); | 734 EXPECT_TRUE(file_util::ReadSymbolicLink(symlink_path, &target_path)); |
| 729 if (GDataCache::IsCachePresent(expected_cache_state_)) | 735 if (ToCacheEntry(expected_cache_state_).IsPresent()) |
| 730 EXPECT_EQ(dest_path, target_path); | 736 EXPECT_EQ(dest_path, target_path); |
| 731 else | 737 else |
| 732 EXPECT_EQ(kSymLinkToDevNull, target_path.value()); | 738 EXPECT_EQ(kSymLinkToDevNull, target_path.value()); |
| 733 } else { | 739 } else { |
| 734 EXPECT_FALSE(exists); | 740 EXPECT_FALSE(exists); |
| 735 } | 741 } |
| 736 | 742 |
| 737 // Verify symlink in outgoing dir. | 743 // Verify symlink in outgoing dir. |
| 738 symlink_path = cache_->GetCacheFilePath( | 744 symlink_path = cache_->GetCacheFilePath( |
| 739 resource_id, | 745 resource_id, |
| 740 std::string(), | 746 std::string(), |
| 741 GDataCache::CACHE_TYPE_OUTGOING, | 747 GDataCache::CACHE_TYPE_OUTGOING, |
| 742 GDataCache::CACHED_FILE_FROM_SERVER); | 748 GDataCache::CACHED_FILE_FROM_SERVER); |
| 743 // Check that outgoing symlink exists, without deferencing to target path. | 749 // Check that outgoing symlink exists, without deferencing to target path. |
| 744 exists = file_util::IsLink(symlink_path); | 750 exists = file_util::IsLink(symlink_path); |
| 745 if (expect_outgoing_symlink_ && | 751 if (expect_outgoing_symlink_ && |
| 746 GDataCache::IsCacheDirty(expected_cache_state_)) { | 752 ToCacheEntry(expected_cache_state_).IsDirty()) { |
| 747 EXPECT_TRUE(exists); | 753 EXPECT_TRUE(exists); |
| 748 FilePath target_path; | 754 FilePath target_path; |
| 749 EXPECT_TRUE(file_util::ReadSymbolicLink(symlink_path, &target_path)); | 755 EXPECT_TRUE(file_util::ReadSymbolicLink(symlink_path, &target_path)); |
| 750 EXPECT_TRUE(target_path.value() != kSymLinkToDevNull); | 756 EXPECT_TRUE(target_path.value() != kSymLinkToDevNull); |
| 751 if (GDataCache::IsCachePresent(expected_cache_state_)) | 757 if (ToCacheEntry(expected_cache_state_).IsPresent()) |
| 752 EXPECT_EQ(dest_path, target_path); | 758 EXPECT_EQ(dest_path, target_path); |
| 753 } else { | 759 } else { |
| 754 EXPECT_FALSE(exists); | 760 EXPECT_FALSE(exists); |
| 755 } | 761 } |
| 756 } | 762 } |
| 757 | 763 |
| 758 FilePath GetCacheFilePath(const std::string& resource_id, | 764 FilePath GetCacheFilePath(const std::string& resource_id, |
| 759 const std::string& md5, | 765 const std::string& md5, |
| 760 GDataCache::CacheSubDirectoryType sub_dir_type, | 766 GDataCache::CacheSubDirectoryType sub_dir_type, |
| 761 GDataCache::CachedFileOrigin file_origin) { | 767 GDataCache::CachedFileOrigin file_origin) { |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 865 bool expect_outgoing_symlink_; | 871 bool expect_outgoing_symlink_; |
| 866 std::string expected_file_extension_; | 872 std::string expected_file_extension_; |
| 867 int root_feed_changestamp_; | 873 int root_feed_changestamp_; |
| 868 }; | 874 }; |
| 869 | 875 |
| 870 TEST_F(GDataCacheTest, InitializeCache) { | 876 TEST_F(GDataCacheTest, InitializeCache) { |
| 871 PrepareForInitCacheTest(); | 877 PrepareForInitCacheTest(); |
| 872 TestInitializeCache(); | 878 TestInitializeCache(); |
| 873 } | 879 } |
| 874 | 880 |
| 875 TEST_F(GDataCacheTest, CacheStateBitmasks) { | 881 TEST_F(GDataCacheTest, CacheEntry_Is) { |
| 876 GDataCache::CacheEntry cache_entry("md5_cache_state_bitmasks", | 882 GDataCache::CacheEntry cache_entry("dummy_md5", GDataCache::CACHE_STATE_NONE); |
| 877 GDataCache::CACHE_STATE_NONE); | |
| 878 EXPECT_FALSE(cache_entry.IsPresent()); | 883 EXPECT_FALSE(cache_entry.IsPresent()); |
| 879 EXPECT_FALSE(cache_entry.IsPinned()); | 884 EXPECT_FALSE(cache_entry.IsPinned()); |
| 880 EXPECT_FALSE(cache_entry.IsDirty()); | 885 EXPECT_FALSE(cache_entry.IsDirty()); |
| 886 EXPECT_FALSE(cache_entry.IsMounted()); | |
| 887 EXPECT_FALSE(cache_entry.IsPersistent()); | |
| 881 | 888 |
| 882 cache_entry.cache_state = GDataCache::CACHE_STATE_PRESENT; | 889 cache_entry.cache_state = GDataCache::CACHE_STATE_PRESENT; |
| 883 EXPECT_TRUE(cache_entry.IsPresent()); | 890 EXPECT_TRUE(cache_entry.IsPresent()); |
| 884 EXPECT_FALSE(cache_entry.IsPinned()); | 891 EXPECT_FALSE(cache_entry.IsPinned()); |
| 885 EXPECT_FALSE(cache_entry.IsDirty()); | 892 EXPECT_FALSE(cache_entry.IsDirty()); |
| 893 EXPECT_FALSE(cache_entry.IsMounted()); | |
| 894 EXPECT_FALSE(cache_entry.IsPersistent()); | |
| 886 | 895 |
| 887 cache_entry.cache_state = GDataCache::CACHE_STATE_PINNED; | 896 cache_entry.cache_state |= GDataCache::CACHE_STATE_PINNED; |
| 888 EXPECT_FALSE(cache_entry.IsPresent()); | |
| 889 EXPECT_TRUE(cache_entry.IsPinned()); | |
| 890 EXPECT_FALSE(cache_entry.IsDirty()); | |
| 891 | |
| 892 cache_entry.cache_state = GDataCache::CACHE_STATE_PRESENT | | |
| 893 GDataCache::CACHE_STATE_PINNED; | |
| 894 EXPECT_TRUE(cache_entry.IsPresent()); | 897 EXPECT_TRUE(cache_entry.IsPresent()); |
| 895 EXPECT_TRUE(cache_entry.IsPinned()); | 898 EXPECT_TRUE(cache_entry.IsPinned()); |
| 896 EXPECT_FALSE(cache_entry.IsDirty()); | 899 EXPECT_FALSE(cache_entry.IsDirty()); |
| 900 EXPECT_FALSE(cache_entry.IsMounted()); | |
| 901 EXPECT_FALSE(cache_entry.IsPersistent()); | |
| 897 | 902 |
| 898 cache_entry.cache_state = GDataCache::CACHE_STATE_PRESENT | | 903 cache_entry.cache_state |= GDataCache::CACHE_STATE_DIRTY; |
| 899 GDataCache::CACHE_STATE_DIRTY; | |
| 900 EXPECT_TRUE(cache_entry.IsPresent()); | |
| 901 EXPECT_FALSE(cache_entry.IsPinned()); | |
| 902 EXPECT_TRUE(cache_entry.IsDirty()); | |
| 903 | |
| 904 cache_entry.cache_state = GDataCache::CACHE_STATE_PRESENT | | |
| 905 GDataCache::CACHE_STATE_PINNED | | |
| 906 GDataCache::CACHE_STATE_DIRTY; | |
| 907 EXPECT_TRUE(cache_entry.IsPresent()); | 904 EXPECT_TRUE(cache_entry.IsPresent()); |
| 908 EXPECT_TRUE(cache_entry.IsPinned()); | 905 EXPECT_TRUE(cache_entry.IsPinned()); |
| 909 EXPECT_TRUE(cache_entry.IsDirty()); | 906 EXPECT_TRUE(cache_entry.IsDirty()); |
| 907 EXPECT_FALSE(cache_entry.IsMounted()); | |
| 908 EXPECT_FALSE(cache_entry.IsPersistent()); | |
| 910 | 909 |
| 911 int cache_state = GDataCache::CACHE_STATE_NONE; | 910 cache_entry.cache_state |= GDataCache::CACHE_STATE_MOUNTED; |
| 912 EXPECT_EQ(GDataCache::CACHE_STATE_PRESENT, | 911 EXPECT_TRUE(cache_entry.IsPresent()); |
| 913 GDataCache::SetCachePresent(cache_state)); | 912 EXPECT_TRUE(cache_entry.IsPinned()); |
| 914 EXPECT_EQ(GDataCache::CACHE_STATE_PINNED, | 913 EXPECT_TRUE(cache_entry.IsDirty()); |
| 915 GDataCache::SetCachePinned(cache_state)); | 914 EXPECT_TRUE(cache_entry.IsMounted()); |
| 915 EXPECT_FALSE(cache_entry.IsPersistent()); | |
| 916 | 916 |
| 917 cache_state = GDataCache::CACHE_STATE_PRESENT; | 917 cache_entry.cache_state |= GDataCache::CACHE_STATE_PERSISTENT; |
| 918 EXPECT_EQ(GDataCache::CACHE_STATE_PRESENT | GDataCache::CACHE_STATE_PINNED, | 918 EXPECT_TRUE(cache_entry.IsPresent()); |
| 919 GDataCache::SetCachePinned(cache_state)); | 919 EXPECT_TRUE(cache_entry.IsPinned()); |
| 920 EXPECT_EQ(GDataCache::CACHE_STATE_PRESENT | GDataCache::CACHE_STATE_DIRTY, | 920 EXPECT_TRUE(cache_entry.IsDirty()); |
| 921 GDataCache::SetCacheDirty(cache_state)); | 921 EXPECT_TRUE(cache_entry.IsMounted()); |
| 922 cache_state |= GDataCache::CACHE_STATE_PINNED; | 922 EXPECT_TRUE(cache_entry.IsPersistent()); |
| 923 EXPECT_EQ(GDataCache::CACHE_STATE_PRESENT | GDataCache::CACHE_STATE_PINNED | | 923 } |
| 924 | |
| 925 TEST_F(GDataCacheTest, CacheEntry_Set) { | |
| 926 GDataCache::CacheEntry cache_entry("dummy_md5", GDataCache::CACHE_STATE_NONE); | |
| 927 | |
| 928 cache_entry.SetPresent(true); | |
| 929 EXPECT_EQ(GDataCache::CACHE_STATE_PRESENT, cache_entry.cache_state); | |
| 930 | |
| 931 cache_entry.SetPinned(true); | |
| 932 EXPECT_EQ(GDataCache::CACHE_STATE_PRESENT | | |
| 933 GDataCache::CACHE_STATE_PINNED, | |
| 934 cache_entry.cache_state); | |
| 935 | |
| 936 cache_entry.SetDirty(true); | |
| 937 EXPECT_EQ(GDataCache::CACHE_STATE_PRESENT | | |
| 938 GDataCache::CACHE_STATE_PINNED | | |
| 924 GDataCache::CACHE_STATE_DIRTY, | 939 GDataCache::CACHE_STATE_DIRTY, |
| 925 GDataCache::SetCacheDirty(cache_state)); | 940 cache_entry.cache_state); |
| 926 | 941 |
| 927 cache_state = GDataCache::CACHE_STATE_PINNED; | 942 cache_entry.SetMounted(true); |
| 928 EXPECT_EQ(GDataCache::CACHE_STATE_PRESENT | GDataCache::CACHE_STATE_PINNED, | 943 EXPECT_EQ(GDataCache::CACHE_STATE_PRESENT | |
| 929 GDataCache::SetCachePresent(cache_state)); | 944 GDataCache::CACHE_STATE_PINNED | |
| 945 GDataCache::CACHE_STATE_DIRTY | | |
| 946 GDataCache::CACHE_STATE_MOUNTED, | |
| 947 cache_entry.cache_state); | |
| 930 | 948 |
| 931 cache_state = GDataCache::CACHE_STATE_PRESENT | | 949 cache_entry.SetPersistent(true); |
| 932 GDataCache::CACHE_STATE_PINNED | | 950 EXPECT_EQ(GDataCache::CACHE_STATE_PRESENT | |
| 933 GDataCache::CACHE_STATE_DIRTY; | 951 GDataCache::CACHE_STATE_PINNED | |
| 934 EXPECT_EQ(cache_state & ~GDataCache::CACHE_STATE_PRESENT, | 952 GDataCache::CACHE_STATE_DIRTY | |
| 935 GDataCache::ClearCachePresent(cache_state)); | 953 GDataCache::CACHE_STATE_MOUNTED | |
| 936 EXPECT_EQ(cache_state & ~GDataCache::CACHE_STATE_PINNED, | 954 GDataCache::CACHE_STATE_PERSISTENT, |
| 937 GDataCache::ClearCachePinned(cache_state)); | 955 cache_entry.cache_state); |
| 938 EXPECT_EQ(cache_state & ~GDataCache::CACHE_STATE_DIRTY, | 956 |
| 939 GDataCache::ClearCacheDirty(cache_state)); | 957 cache_entry.SetPresent(false); |
| 958 EXPECT_EQ(GDataCache::CACHE_STATE_PINNED | | |
| 959 GDataCache::CACHE_STATE_DIRTY | | |
| 960 GDataCache::CACHE_STATE_MOUNTED | | |
| 961 GDataCache::CACHE_STATE_PERSISTENT, | |
| 962 cache_entry.cache_state); | |
| 963 | |
| 964 cache_entry.SetPinned(false); | |
| 965 EXPECT_EQ(GDataCache::CACHE_STATE_DIRTY | | |
| 966 GDataCache::CACHE_STATE_MOUNTED | | |
| 967 GDataCache::CACHE_STATE_PERSISTENT, | |
| 968 cache_entry.cache_state); | |
| 969 | |
| 970 cache_entry.SetDirty(false); | |
| 971 EXPECT_EQ(GDataCache::CACHE_STATE_MOUNTED | | |
| 972 GDataCache::CACHE_STATE_PERSISTENT, cache_entry.cache_state); | |
| 973 | |
| 974 cache_entry.SetMounted(false); | |
| 975 EXPECT_EQ(GDataCache::CACHE_STATE_PERSISTENT, cache_entry.cache_state); | |
| 976 | |
| 977 cache_entry.SetPersistent(false); | |
| 978 EXPECT_EQ(GDataCache::CACHE_STATE_NONE, cache_entry.cache_state); | |
| 940 } | 979 } |
| 941 | 980 |
| 942 TEST_F(GDataCacheTest, GetCacheFilePath) { | 981 TEST_F(GDataCacheTest, GetCacheFilePath) { |
| 943 // Use alphanumeric characters for resource id. | 982 // Use alphanumeric characters for resource id. |
| 944 std::string resource_id("pdf:1a2b"); | 983 std::string resource_id("pdf:1a2b"); |
| 945 std::string md5("abcdef0123456789"); | 984 std::string md5("abcdef0123456789"); |
| 946 TestGetCacheFilePath(resource_id, md5, | 985 TestGetCacheFilePath(resource_id, md5, |
| 947 resource_id + FilePath::kExtensionSeparator + md5); | 986 resource_id + FilePath::kExtensionSeparator + md5); |
| 948 EXPECT_EQ(0, num_callback_invocations_); | 987 EXPECT_EQ(0, num_callback_invocations_); |
| 949 | 988 |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 982 // |md5|. | 1021 // |md5|. |
| 983 md5 = "new_md5"; | 1022 md5 = "new_md5"; |
| 984 num_callback_invocations_ = 0; | 1023 num_callback_invocations_ = 0; |
| 985 TestStoreToCache(resource_id, md5, GetTestFilePath("subdir_feed.json"), | 1024 TestStoreToCache(resource_id, md5, GetTestFilePath("subdir_feed.json"), |
| 986 base::PLATFORM_FILE_OK, GDataCache::CACHE_STATE_PRESENT, | 1025 base::PLATFORM_FILE_OK, GDataCache::CACHE_STATE_PRESENT, |
| 987 GDataCache::CACHE_TYPE_TMP); | 1026 GDataCache::CACHE_TYPE_TMP); |
| 988 EXPECT_EQ(1, num_callback_invocations_); | 1027 EXPECT_EQ(1, num_callback_invocations_); |
| 989 | 1028 |
| 990 // Verify that there's only one file with name <resource_id>, i.e. previously | 1029 // Verify that there's only one file with name <resource_id>, i.e. previously |
| 991 // cached file with the different md5 should be deleted. | 1030 // cached file with the different md5 should be deleted. |
| 992 FilePath path = GetCacheFilePath(resource_id, "*", | 1031 FilePath path = GetCacheFilePath( |
| 993 (GDataCache::IsCachePinned(expected_cache_state_)) ? | 1032 resource_id, "*", |
| 994 GDataCache::CACHE_TYPE_PERSISTENT : | 1033 (ToCacheEntry(expected_cache_state_).IsPinned() ? |
| 995 GDataCache::CACHE_TYPE_TMP, | 1034 GDataCache::CACHE_TYPE_PERSISTENT : |
| 1035 GDataCache::CACHE_TYPE_TMP), | |
| 996 GDataCache::CACHED_FILE_FROM_SERVER); | 1036 GDataCache::CACHED_FILE_FROM_SERVER); |
| 997 file_util::FileEnumerator enumerator(path.DirName(), false, | 1037 file_util::FileEnumerator enumerator(path.DirName(), false, |
| 998 file_util::FileEnumerator::FILES, | 1038 file_util::FileEnumerator::FILES, |
| 999 path.BaseName().value()); | 1039 path.BaseName().value()); |
| 1000 size_t num_files_found = 0; | 1040 size_t num_files_found = 0; |
| 1001 for (FilePath current = enumerator.Next(); !current.empty(); | 1041 for (FilePath current = enumerator.Next(); !current.empty(); |
| 1002 current = enumerator.Next()) { | 1042 current = enumerator.Next()) { |
| 1003 ++num_files_found; | 1043 ++num_files_found; |
| 1004 EXPECT_EQ(util::EscapeCacheFileName(resource_id) + | 1044 EXPECT_EQ(util::EscapeCacheFileName(resource_id) + |
| 1005 FilePath::kExtensionSeparator + | 1045 FilePath::kExtensionSeparator + |
| (...skipping 633 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1639 EXPECT_EQ(1, num_callback_invocations_); | 1679 EXPECT_EQ(1, num_callback_invocations_); |
| 1640 EXPECT_TRUE(CacheEntryExists(resource_id, md5)); | 1680 EXPECT_TRUE(CacheEntryExists(resource_id, md5)); |
| 1641 | 1681 |
| 1642 // Try to remove the file. | 1682 // Try to remove the file. |
| 1643 num_callback_invocations_ = 0; | 1683 num_callback_invocations_ = 0; |
| 1644 TestRemoveFromCache(resource_id, base::PLATFORM_FILE_OK); | 1684 TestRemoveFromCache(resource_id, base::PLATFORM_FILE_OK); |
| 1645 EXPECT_EQ(1, num_callback_invocations_); | 1685 EXPECT_EQ(1, num_callback_invocations_); |
| 1646 } | 1686 } |
| 1647 | 1687 |
| 1648 } // namespace gdata | 1688 } // namespace gdata |
| OLD | NEW |