| 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 "chrome/browser/chromeos/drive/drive_cache.h" | 5 #include "chrome/browser/chromeos/drive/drive_cache.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/file_util.h" | 10 #include "base/file_util.h" |
| 11 #include "base/message_loop.h" | 11 #include "base/message_loop.h" |
| 12 #include "base/path_service.h" | 12 #include "base/path_service.h" |
| 13 #include "base/threading/sequenced_worker_pool.h" | 13 #include "base/threading/sequenced_worker_pool.h" |
| 14 #include "chrome/browser/chromeos/drive/drive.pb.h" | 14 #include "chrome/browser/chromeos/drive/drive.pb.h" |
| 15 #include "chrome/browser/chromeos/drive/drive_file_system.h" | 15 #include "chrome/browser/chromeos/drive/drive_file_system.h" |
| 16 #include "chrome/browser/chromeos/drive/drive_file_system_util.h" | 16 #include "chrome/browser/chromeos/drive/drive_file_system_util.h" |
| 17 #include "chrome/browser/chromeos/drive/drive_test_util.h" | 17 #include "chrome/browser/chromeos/drive/drive_test_util.h" |
| 18 #include "chrome/browser/chromeos/drive/mock_drive_cache_observer.h" | 18 #include "chrome/browser/chromeos/drive/mock_drive_cache_observer.h" |
| 19 #include "chrome/common/chrome_paths.h" | 19 #include "chrome/common/chrome_paths.h" |
| 20 #include "chrome/test/base/testing_profile.h" | 20 #include "chrome/test/base/testing_profile.h" |
| 21 #include "content/public/test/test_browser_thread.h" | 21 #include "content/public/test/test_browser_thread.h" |
| 22 #include "testing/gmock/include/gmock/gmock.h" | 22 #include "testing/gmock/include/gmock/gmock.h" |
| 23 #include "testing/gtest/include/gtest/gtest.h" | 23 #include "testing/gtest/include/gtest/gtest.h" |
| 24 | 24 |
| 25 using ::testing::AtLeast; | 25 using ::testing::AtLeast; |
| 26 using ::testing::Return; | 26 using ::testing::Return; |
| 27 using ::testing::StrictMock; | 27 using ::testing::StrictMock; |
| 28 | 28 |
| 29 namespace gdata { | 29 namespace drive { |
| 30 namespace { | 30 namespace { |
| 31 | 31 |
| 32 const char kSymLinkToDevNull[] = "/dev/null"; | 32 const char kSymLinkToDevNull[] = "/dev/null"; |
| 33 | 33 |
| 34 struct InitialCacheResource { | 34 struct InitialCacheResource { |
| 35 const char* source_file; // Source file to be used for cache. | 35 const char* source_file; // Source file to be used for cache. |
| 36 const char* resource_id; // Resource id of cache file. | 36 const char* resource_id; // Resource id of cache file. |
| 37 const char* md5; // MD5 of cache file. | 37 const char* md5; // MD5 of cache file. |
| 38 int cache_state; // Cache state of cache file. | 38 int cache_state; // Cache state of cache file. |
| 39 const char* expected_file_extension; // Expected extension of cached file. | 39 const char* expected_file_extension; // Expected extension of cached file. |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 156 cache_ = DriveCache::CreateDriveCacheOnUIThread( | 156 cache_ = DriveCache::CreateDriveCacheOnUIThread( |
| 157 DriveCache::GetCacheRootPath(profile_.get()), blocking_task_runner_); | 157 DriveCache::GetCacheRootPath(profile_.get()), blocking_task_runner_); |
| 158 | 158 |
| 159 mock_cache_observer_.reset(new StrictMock<MockDriveCacheObserver>); | 159 mock_cache_observer_.reset(new StrictMock<MockDriveCacheObserver>); |
| 160 cache_->AddObserver(mock_cache_observer_.get()); | 160 cache_->AddObserver(mock_cache_observer_.get()); |
| 161 | 161 |
| 162 bool initialization_success = false; | 162 bool initialization_success = false; |
| 163 cache_->RequestInitializeOnUIThread( | 163 cache_->RequestInitializeOnUIThread( |
| 164 base::Bind(&test_util::CopyResultFromInitializeCacheCallback, | 164 base::Bind(&test_util::CopyResultFromInitializeCacheCallback, |
| 165 &initialization_success)); | 165 &initialization_success)); |
| 166 test_util::RunBlockingPoolTask(); | 166 gdata::test_util::RunBlockingPoolTask(); |
| 167 ASSERT_TRUE(initialization_success); | 167 ASSERT_TRUE(initialization_success); |
| 168 } | 168 } |
| 169 | 169 |
| 170 virtual void TearDown() OVERRIDE { | 170 virtual void TearDown() OVERRIDE { |
| 171 SetFreeDiskSpaceGetterForTesting(NULL); | 171 SetFreeDiskSpaceGetterForTesting(NULL); |
| 172 cache_->DestroyOnUIThread(); | 172 cache_->DestroyOnUIThread(); |
| 173 // The cache destruction requires to post a task to the blocking pool. | 173 // The cache destruction requires to post a task to the blocking pool. |
| 174 test_util::RunBlockingPoolTask(); | 174 gdata::test_util::RunBlockingPoolTask(); |
| 175 | 175 |
| 176 profile_.reset(NULL); | 176 profile_.reset(NULL); |
| 177 } | 177 } |
| 178 | 178 |
| 179 void PrepareForInitCacheTest() { | 179 void PrepareForInitCacheTest() { |
| 180 DVLOG(1) << "PrepareForInitCacheTest start"; | 180 DVLOG(1) << "PrepareForInitCacheTest start"; |
| 181 // Create drive cache sub directories. | 181 // Create drive cache sub directories. |
| 182 ASSERT_TRUE(file_util::CreateDirectory( | 182 ASSERT_TRUE(file_util::CreateDirectory( |
| 183 cache_->GetCacheDirectoryPath(DriveCache::CACHE_TYPE_PERSISTENT))); | 183 cache_->GetCacheDirectoryPath(DriveCache::CACHE_TYPE_PERSISTENT))); |
| 184 ASSERT_TRUE(file_util::CreateDirectory( | 184 ASSERT_TRUE(file_util::CreateDirectory( |
| (...skipping 18 matching lines...) Expand all Loading... |
| 203 test_util::ToCacheEntry(resource.cache_state).is_dirty() ? | 203 test_util::ToCacheEntry(resource.cache_state).is_dirty() ? |
| 204 DriveCache::CACHE_TYPE_PERSISTENT : | 204 DriveCache::CACHE_TYPE_PERSISTENT : |
| 205 DriveCache::CACHE_TYPE_TMP, | 205 DriveCache::CACHE_TYPE_TMP, |
| 206 test_util::ToCacheEntry(resource.cache_state).is_dirty() ? | 206 test_util::ToCacheEntry(resource.cache_state).is_dirty() ? |
| 207 DriveCache::CACHED_FILE_LOCALLY_MODIFIED : | 207 DriveCache::CACHED_FILE_LOCALLY_MODIFIED : |
| 208 DriveCache::CACHED_FILE_FROM_SERVER); | 208 DriveCache::CACHED_FILE_FROM_SERVER); |
| 209 | 209 |
| 210 // Copy file from data dir to cache subdir, naming it per cache files | 210 // Copy file from data dir to cache subdir, naming it per cache files |
| 211 // convention. | 211 // convention. |
| 212 if (test_util::ToCacheEntry(resource.cache_state).is_present()) { | 212 if (test_util::ToCacheEntry(resource.cache_state).is_present()) { |
| 213 FilePath source_path = test_util::GetTestFilePath(resource.source_file); | 213 FilePath source_path = |
| 214 gdata::test_util::GetTestFilePath(resource.source_file); |
| 214 ASSERT_TRUE(file_util::CopyFile(source_path, dest_path)); | 215 ASSERT_TRUE(file_util::CopyFile(source_path, dest_path)); |
| 215 } else { | 216 } else { |
| 216 dest_path = FilePath(FILE_PATH_LITERAL(kSymLinkToDevNull)); | 217 dest_path = FilePath(FILE_PATH_LITERAL(kSymLinkToDevNull)); |
| 217 } | 218 } |
| 218 | 219 |
| 219 // Create symbolic link in pinned dir, naming it per cache files | 220 // Create symbolic link in pinned dir, naming it per cache files |
| 220 // convention. | 221 // convention. |
| 221 if (test_util::ToCacheEntry(resource.cache_state).is_pinned()) { | 222 if (test_util::ToCacheEntry(resource.cache_state).is_pinned()) { |
| 222 FilePath link_path = cache_->GetCacheFilePath( | 223 FilePath link_path = cache_->GetCacheFilePath( |
| 223 resource.resource_id, | 224 resource.resource_id, |
| (...skipping 10 matching lines...) Expand all Loading... |
| 234 resource.resource_id, | 235 resource.resource_id, |
| 235 "", | 236 "", |
| 236 DriveCache::CACHE_TYPE_OUTGOING, | 237 DriveCache::CACHE_TYPE_OUTGOING, |
| 237 DriveCache::CACHED_FILE_FROM_SERVER); | 238 DriveCache::CACHED_FILE_FROM_SERVER); |
| 238 ASSERT_TRUE(file_util::CreateSymbolicLink(dest_path, link_path)); | 239 ASSERT_TRUE(file_util::CreateSymbolicLink(dest_path, link_path)); |
| 239 } | 240 } |
| 240 } | 241 } |
| 241 | 242 |
| 242 DVLOG(1) << "PrepareForInitCacheTest finished"; | 243 DVLOG(1) << "PrepareForInitCacheTest finished"; |
| 243 cache_->ForceRescanOnUIThreadForTesting(); | 244 cache_->ForceRescanOnUIThreadForTesting(); |
| 244 test_util::RunBlockingPoolTask(); | 245 gdata::test_util::RunBlockingPoolTask(); |
| 245 } | 246 } |
| 246 | 247 |
| 247 void TestInitializeCache() { | 248 void TestInitializeCache() { |
| 248 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(initial_cache_resources); ++i) { | 249 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(initial_cache_resources); ++i) { |
| 249 const struct InitialCacheResource& resource = initial_cache_resources[i]; | 250 const struct InitialCacheResource& resource = initial_cache_resources[i]; |
| 250 // Check cache file. | 251 // Check cache file. |
| 251 num_callback_invocations_ = 0; | 252 num_callback_invocations_ = 0; |
| 252 TestGetFileFromCacheByResourceIdAndMd5( | 253 TestGetFileFromCacheByResourceIdAndMd5( |
| 253 resource.resource_id, | 254 resource.resource_id, |
| 254 resource.md5, | 255 resource.md5, |
| (...skipping 27 matching lines...) Expand all Loading... |
| 282 expected_file_extension_ = expected_file_extension; | 283 expected_file_extension_ = expected_file_extension; |
| 283 | 284 |
| 284 cache_->GetFileOnUIThread( | 285 cache_->GetFileOnUIThread( |
| 285 resource_id, | 286 resource_id, |
| 286 md5, | 287 md5, |
| 287 base::Bind(&DriveCacheTest::VerifyGetFromCache, | 288 base::Bind(&DriveCacheTest::VerifyGetFromCache, |
| 288 base::Unretained(this), | 289 base::Unretained(this), |
| 289 resource_id, | 290 resource_id, |
| 290 md5)); | 291 md5)); |
| 291 | 292 |
| 292 test_util::RunBlockingPoolTask(); | 293 gdata::test_util::RunBlockingPoolTask(); |
| 293 } | 294 } |
| 294 | 295 |
| 295 void TestStoreToCache( | 296 void TestStoreToCache( |
| 296 const std::string& resource_id, | 297 const std::string& resource_id, |
| 297 const std::string& md5, | 298 const std::string& md5, |
| 298 const FilePath& source_path, | 299 const FilePath& source_path, |
| 299 DriveFileError expected_error, | 300 DriveFileError expected_error, |
| 300 int expected_cache_state, | 301 int expected_cache_state, |
| 301 DriveCache::CacheSubDirectoryType expected_sub_dir_type) { | 302 DriveCache::CacheSubDirectoryType expected_sub_dir_type) { |
| 302 expected_error_ = expected_error; | 303 expected_error_ = expected_error; |
| 303 expected_cache_state_ = expected_cache_state; | 304 expected_cache_state_ = expected_cache_state; |
| 304 expected_sub_dir_type_ = expected_sub_dir_type; | 305 expected_sub_dir_type_ = expected_sub_dir_type; |
| 305 | 306 |
| 306 cache_->StoreOnUIThread( | 307 cache_->StoreOnUIThread( |
| 307 resource_id, md5, source_path, | 308 resource_id, md5, source_path, |
| 308 DriveCache::FILE_OPERATION_COPY, | 309 DriveCache::FILE_OPERATION_COPY, |
| 309 base::Bind(&DriveCacheTest::VerifyCacheFileState, | 310 base::Bind(&DriveCacheTest::VerifyCacheFileState, |
| 310 base::Unretained(this))); | 311 base::Unretained(this))); |
| 311 | 312 |
| 312 test_util::RunBlockingPoolTask(); | 313 gdata::test_util::RunBlockingPoolTask(); |
| 313 } | 314 } |
| 314 | 315 |
| 315 void VerifyGetFromCache(const std::string& resource_id, | 316 void VerifyGetFromCache(const std::string& resource_id, |
| 316 const std::string& md5, | 317 const std::string& md5, |
| 317 DriveFileError error, | 318 DriveFileError error, |
| 318 const FilePath& cache_file_path) { | 319 const FilePath& cache_file_path) { |
| 319 ++num_callback_invocations_; | 320 ++num_callback_invocations_; |
| 320 | 321 |
| 321 EXPECT_EQ(expected_error_, error); | 322 EXPECT_EQ(expected_error_, error); |
| 322 | 323 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 336 | 337 |
| 337 void TestRemoveFromCache(const std::string& resource_id, | 338 void TestRemoveFromCache(const std::string& resource_id, |
| 338 DriveFileError expected_error) { | 339 DriveFileError expected_error) { |
| 339 expected_error_ = expected_error; | 340 expected_error_ = expected_error; |
| 340 | 341 |
| 341 cache_->RemoveOnUIThread( | 342 cache_->RemoveOnUIThread( |
| 342 resource_id, | 343 resource_id, |
| 343 base::Bind(&DriveCacheTest::VerifyRemoveFromCache, | 344 base::Bind(&DriveCacheTest::VerifyRemoveFromCache, |
| 344 base::Unretained(this))); | 345 base::Unretained(this))); |
| 345 | 346 |
| 346 test_util::RunBlockingPoolTask(); | 347 gdata::test_util::RunBlockingPoolTask(); |
| 347 } | 348 } |
| 348 | 349 |
| 349 void VerifyRemoveFromCache(DriveFileError error, | 350 void VerifyRemoveFromCache(DriveFileError error, |
| 350 const std::string& resource_id, | 351 const std::string& resource_id, |
| 351 const std::string& md5) { | 352 const std::string& md5) { |
| 352 ++num_callback_invocations_; | 353 ++num_callback_invocations_; |
| 353 | 354 |
| 354 EXPECT_EQ(expected_error_, error); | 355 EXPECT_EQ(expected_error_, error); |
| 355 | 356 |
| 356 // Verify cache map. | 357 // Verify cache map. |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 449 DriveCache::CacheSubDirectoryType expected_sub_dir_type) { | 450 DriveCache::CacheSubDirectoryType expected_sub_dir_type) { |
| 450 expected_error_ = expected_error; | 451 expected_error_ = expected_error; |
| 451 expected_cache_state_ = expected_cache_state; | 452 expected_cache_state_ = expected_cache_state; |
| 452 expected_sub_dir_type_ = expected_sub_dir_type; | 453 expected_sub_dir_type_ = expected_sub_dir_type; |
| 453 | 454 |
| 454 cache_->PinOnUIThread( | 455 cache_->PinOnUIThread( |
| 455 resource_id, md5, | 456 resource_id, md5, |
| 456 base::Bind(&DriveCacheTest::VerifyCacheFileState, | 457 base::Bind(&DriveCacheTest::VerifyCacheFileState, |
| 457 base::Unretained(this))); | 458 base::Unretained(this))); |
| 458 | 459 |
| 459 test_util::RunBlockingPoolTask(); | 460 gdata::test_util::RunBlockingPoolTask(); |
| 460 } | 461 } |
| 461 | 462 |
| 462 void TestUnpin( | 463 void TestUnpin( |
| 463 const std::string& resource_id, | 464 const std::string& resource_id, |
| 464 const std::string& md5, | 465 const std::string& md5, |
| 465 DriveFileError expected_error, | 466 DriveFileError expected_error, |
| 466 int expected_cache_state, | 467 int expected_cache_state, |
| 467 DriveCache::CacheSubDirectoryType expected_sub_dir_type) { | 468 DriveCache::CacheSubDirectoryType expected_sub_dir_type) { |
| 468 expected_error_ = expected_error; | 469 expected_error_ = expected_error; |
| 469 expected_cache_state_ = expected_cache_state; | 470 expected_cache_state_ = expected_cache_state; |
| 470 expected_sub_dir_type_ = expected_sub_dir_type; | 471 expected_sub_dir_type_ = expected_sub_dir_type; |
| 471 | 472 |
| 472 cache_->UnpinOnUIThread( | 473 cache_->UnpinOnUIThread( |
| 473 resource_id, md5, | 474 resource_id, md5, |
| 474 base::Bind(&DriveCacheTest::VerifyCacheFileState, | 475 base::Bind(&DriveCacheTest::VerifyCacheFileState, |
| 475 base::Unretained(this))); | 476 base::Unretained(this))); |
| 476 | 477 |
| 477 test_util::RunBlockingPoolTask(); | 478 gdata::test_util::RunBlockingPoolTask(); |
| 478 } | 479 } |
| 479 | 480 |
| 480 void TestMarkDirty( | 481 void TestMarkDirty( |
| 481 const std::string& resource_id, | 482 const std::string& resource_id, |
| 482 const std::string& md5, | 483 const std::string& md5, |
| 483 DriveFileError expected_error, | 484 DriveFileError expected_error, |
| 484 int expected_cache_state, | 485 int expected_cache_state, |
| 485 DriveCache::CacheSubDirectoryType expected_sub_dir_type) { | 486 DriveCache::CacheSubDirectoryType expected_sub_dir_type) { |
| 486 expected_error_ = expected_error; | 487 expected_error_ = expected_error; |
| 487 expected_cache_state_ = expected_cache_state; | 488 expected_cache_state_ = expected_cache_state; |
| 488 expected_sub_dir_type_ = expected_sub_dir_type; | 489 expected_sub_dir_type_ = expected_sub_dir_type; |
| 489 expect_outgoing_symlink_ = false; | 490 expect_outgoing_symlink_ = false; |
| 490 | 491 |
| 491 cache_->MarkDirtyOnUIThread( | 492 cache_->MarkDirtyOnUIThread( |
| 492 resource_id, | 493 resource_id, |
| 493 md5, | 494 md5, |
| 494 base::Bind(&DriveCacheTest::VerifyMarkDirty, | 495 base::Bind(&DriveCacheTest::VerifyMarkDirty, |
| 495 base::Unretained(this), | 496 base::Unretained(this), |
| 496 resource_id, | 497 resource_id, |
| 497 md5)); | 498 md5)); |
| 498 | 499 |
| 499 test_util::RunBlockingPoolTask(); | 500 gdata::test_util::RunBlockingPoolTask(); |
| 500 } | 501 } |
| 501 | 502 |
| 502 void VerifyMarkDirty(const std::string& resource_id, | 503 void VerifyMarkDirty(const std::string& resource_id, |
| 503 const std::string& md5, | 504 const std::string& md5, |
| 504 DriveFileError error, | 505 DriveFileError error, |
| 505 const FilePath& cache_file_path) { | 506 const FilePath& cache_file_path) { |
| 506 VerifyCacheFileState(error, resource_id, md5); | 507 VerifyCacheFileState(error, resource_id, md5); |
| 507 | 508 |
| 508 // Verify filename of |cache_file_path|. | 509 // Verify filename of |cache_file_path|. |
| 509 if (error == DRIVE_FILE_OK) { | 510 if (error == DRIVE_FILE_OK) { |
| (...skipping 16 matching lines...) Expand all Loading... |
| 526 expected_error_ = expected_error; | 527 expected_error_ = expected_error; |
| 527 expected_cache_state_ = expected_cache_state; | 528 expected_cache_state_ = expected_cache_state; |
| 528 expected_sub_dir_type_ = expected_sub_dir_type; | 529 expected_sub_dir_type_ = expected_sub_dir_type; |
| 529 expect_outgoing_symlink_ = true; | 530 expect_outgoing_symlink_ = true; |
| 530 | 531 |
| 531 cache_->CommitDirtyOnUIThread( | 532 cache_->CommitDirtyOnUIThread( |
| 532 resource_id, md5, | 533 resource_id, md5, |
| 533 base::Bind(&DriveCacheTest::VerifyCacheFileState, | 534 base::Bind(&DriveCacheTest::VerifyCacheFileState, |
| 534 base::Unretained(this))); | 535 base::Unretained(this))); |
| 535 | 536 |
| 536 test_util::RunBlockingPoolTask(); | 537 gdata::test_util::RunBlockingPoolTask(); |
| 537 } | 538 } |
| 538 | 539 |
| 539 void TestClearDirty( | 540 void TestClearDirty( |
| 540 const std::string& resource_id, | 541 const std::string& resource_id, |
| 541 const std::string& md5, | 542 const std::string& md5, |
| 542 DriveFileError expected_error, | 543 DriveFileError expected_error, |
| 543 int expected_cache_state, | 544 int expected_cache_state, |
| 544 DriveCache::CacheSubDirectoryType expected_sub_dir_type) { | 545 DriveCache::CacheSubDirectoryType expected_sub_dir_type) { |
| 545 expected_error_ = expected_error; | 546 expected_error_ = expected_error; |
| 546 expected_cache_state_ = expected_cache_state; | 547 expected_cache_state_ = expected_cache_state; |
| 547 expected_sub_dir_type_ = expected_sub_dir_type; | 548 expected_sub_dir_type_ = expected_sub_dir_type; |
| 548 expect_outgoing_symlink_ = false; | 549 expect_outgoing_symlink_ = false; |
| 549 | 550 |
| 550 cache_->ClearDirtyOnUIThread(resource_id, md5, | 551 cache_->ClearDirtyOnUIThread(resource_id, md5, |
| 551 base::Bind(&DriveCacheTest::VerifyCacheFileState, | 552 base::Bind(&DriveCacheTest::VerifyCacheFileState, |
| 552 base::Unretained(this))); | 553 base::Unretained(this))); |
| 553 | 554 |
| 554 test_util::RunBlockingPoolTask(); | 555 gdata::test_util::RunBlockingPoolTask(); |
| 555 } | 556 } |
| 556 | 557 |
| 557 void TestSetMountedState( | 558 void TestSetMountedState( |
| 558 const std::string& resource_id, | 559 const std::string& resource_id, |
| 559 const std::string& md5, | 560 const std::string& md5, |
| 560 const FilePath& file_path, | 561 const FilePath& file_path, |
| 561 bool to_mount, | 562 bool to_mount, |
| 562 DriveFileError expected_error, | 563 DriveFileError expected_error, |
| 563 int expected_cache_state, | 564 int expected_cache_state, |
| 564 DriveCache::CacheSubDirectoryType expected_sub_dir_type) { | 565 DriveCache::CacheSubDirectoryType expected_sub_dir_type) { |
| 565 expected_error_ = expected_error; | 566 expected_error_ = expected_error; |
| 566 expected_cache_state_ = expected_cache_state; | 567 expected_cache_state_ = expected_cache_state; |
| 567 expected_sub_dir_type_ = expected_sub_dir_type; | 568 expected_sub_dir_type_ = expected_sub_dir_type; |
| 568 expect_outgoing_symlink_ = false; | 569 expect_outgoing_symlink_ = false; |
| 569 | 570 |
| 570 cache_->SetMountedStateOnUIThread(file_path, to_mount, | 571 cache_->SetMountedStateOnUIThread(file_path, to_mount, |
| 571 base::Bind(&DriveCacheTest::VerifySetMountedState, | 572 base::Bind(&DriveCacheTest::VerifySetMountedState, |
| 572 base::Unretained(this), resource_id, md5, to_mount)); | 573 base::Unretained(this), resource_id, md5, to_mount)); |
| 573 | 574 |
| 574 test_util::RunBlockingPoolTask(); | 575 gdata::test_util::RunBlockingPoolTask(); |
| 575 } | 576 } |
| 576 | 577 |
| 577 void VerifySetMountedState(const std::string& resource_id, | 578 void VerifySetMountedState(const std::string& resource_id, |
| 578 const std::string& md5, | 579 const std::string& md5, |
| 579 bool to_mount, | 580 bool to_mount, |
| 580 DriveFileError error, | 581 DriveFileError error, |
| 581 const FilePath& file_path) { | 582 const FilePath& file_path) { |
| 582 ++num_callback_invocations_; | 583 ++num_callback_invocations_; |
| 583 EXPECT_TRUE(file_util::PathExists(file_path)); | 584 EXPECT_TRUE(file_util::PathExists(file_path)); |
| 584 EXPECT_TRUE(file_path == cache_->GetCacheFilePath( | 585 EXPECT_TRUE(file_path == cache_->GetCacheFilePath( |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 685 DriveCacheEntry* cache_entry) { | 686 DriveCacheEntry* cache_entry) { |
| 686 bool result = false; | 687 bool result = false; |
| 687 blocking_task_runner_->PostTask( | 688 blocking_task_runner_->PostTask( |
| 688 FROM_HERE, | 689 FROM_HERE, |
| 689 base::Bind(&DriveCacheTest::GetCacheEntryFromOriginThreadInternal, | 690 base::Bind(&DriveCacheTest::GetCacheEntryFromOriginThreadInternal, |
| 690 base::Unretained(this), | 691 base::Unretained(this), |
| 691 resource_id, | 692 resource_id, |
| 692 md5, | 693 md5, |
| 693 cache_entry, | 694 cache_entry, |
| 694 &result)); | 695 &result)); |
| 695 test_util::RunBlockingPoolTask(); | 696 gdata::test_util::RunBlockingPoolTask(); |
| 696 return result; | 697 return result; |
| 697 } | 698 } |
| 698 | 699 |
| 699 // Used to implement GetCacheEntry. | 700 // Used to implement GetCacheEntry. |
| 700 void GetCacheEntryFromOriginThreadInternal( | 701 void GetCacheEntryFromOriginThreadInternal( |
| 701 const std::string& resource_id, | 702 const std::string& resource_id, |
| 702 const std::string& md5, | 703 const std::string& md5, |
| 703 DriveCacheEntry* cache_entry, | 704 DriveCacheEntry* cache_entry, |
| 704 bool* result) { | 705 bool* result) { |
| 705 *result = cache_->GetCacheEntry(resource_id, md5, cache_entry); | 706 *result = cache_->GetCacheEntry(resource_id, md5, cache_entry); |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 810 | 811 |
| 811 TEST_F(DriveCacheTest, StoreToCacheSimple) { | 812 TEST_F(DriveCacheTest, StoreToCacheSimple) { |
| 812 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace()) | 813 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace()) |
| 813 .Times(AtLeast(1)).WillRepeatedly(Return(kLotsOfSpace)); | 814 .Times(AtLeast(1)).WillRepeatedly(Return(kLotsOfSpace)); |
| 814 | 815 |
| 815 std::string resource_id("pdf:1a2b"); | 816 std::string resource_id("pdf:1a2b"); |
| 816 std::string md5("abcdef0123456789"); | 817 std::string md5("abcdef0123456789"); |
| 817 | 818 |
| 818 // Store an existing file. | 819 // Store an existing file. |
| 819 TestStoreToCache(resource_id, md5, | 820 TestStoreToCache(resource_id, md5, |
| 820 test_util::GetTestFilePath("gdata/root_feed.json"), | 821 gdata::test_util::GetTestFilePath("gdata/root_feed.json"), |
| 821 DRIVE_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT, | 822 DRIVE_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT, |
| 822 DriveCache::CACHE_TYPE_TMP); | 823 DriveCache::CACHE_TYPE_TMP); |
| 823 EXPECT_EQ(1, num_callback_invocations_); | 824 EXPECT_EQ(1, num_callback_invocations_); |
| 824 | 825 |
| 825 // Store a non-existent file to the same |resource_id| and |md5|. | 826 // Store a non-existent file to the same |resource_id| and |md5|. |
| 826 num_callback_invocations_ = 0; | 827 num_callback_invocations_ = 0; |
| 827 TestStoreToCache(resource_id, md5, FilePath("./non_existent.json"), | 828 TestStoreToCache(resource_id, md5, FilePath("./non_existent.json"), |
| 828 DRIVE_FILE_ERROR_FAILED, | 829 DRIVE_FILE_ERROR_FAILED, |
| 829 test_util::TEST_CACHE_STATE_PRESENT, | 830 test_util::TEST_CACHE_STATE_PRESENT, |
| 830 DriveCache::CACHE_TYPE_TMP); | 831 DriveCache::CACHE_TYPE_TMP); |
| 831 EXPECT_EQ(1, num_callback_invocations_); | 832 EXPECT_EQ(1, num_callback_invocations_); |
| 832 | 833 |
| 833 // Store a different existing file to the same |resource_id| but different | 834 // Store a different existing file to the same |resource_id| but different |
| 834 // |md5|. | 835 // |md5|. |
| 835 md5 = "new_md5"; | 836 md5 = "new_md5"; |
| 836 num_callback_invocations_ = 0; | 837 num_callback_invocations_ = 0; |
| 837 TestStoreToCache(resource_id, md5, | 838 TestStoreToCache(resource_id, md5, |
| 838 test_util::GetTestFilePath("gdata/subdir_feed.json"), | 839 gdata::test_util::GetTestFilePath("gdata/subdir_feed.json"), |
| 839 DRIVE_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT, | 840 DRIVE_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT, |
| 840 DriveCache::CACHE_TYPE_TMP); | 841 DriveCache::CACHE_TYPE_TMP); |
| 841 EXPECT_EQ(1, num_callback_invocations_); | 842 EXPECT_EQ(1, num_callback_invocations_); |
| 842 | 843 |
| 843 // Verify that there's only one file with name <resource_id>, i.e. previously | 844 // Verify that there's only one file with name <resource_id>, i.e. previously |
| 844 // cached file with the different md5 should be deleted. | 845 // cached file with the different md5 should be deleted. |
| 845 EXPECT_EQ(1U, CountCacheFiles(resource_id, md5)); | 846 EXPECT_EQ(1U, CountCacheFiles(resource_id, md5)); |
| 846 } | 847 } |
| 847 | 848 |
| 848 TEST_F(DriveCacheTest, GetFromCacheSimple) { | 849 TEST_F(DriveCacheTest, GetFromCacheSimple) { |
| 849 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace()) | 850 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace()) |
| 850 .Times(AtLeast(1)).WillRepeatedly(Return(kLotsOfSpace)); | 851 .Times(AtLeast(1)).WillRepeatedly(Return(kLotsOfSpace)); |
| 851 | 852 |
| 852 std::string resource_id("pdf:1a2b"); | 853 std::string resource_id("pdf:1a2b"); |
| 853 std::string md5("abcdef0123456789"); | 854 std::string md5("abcdef0123456789"); |
| 854 // First store a file to cache. | 855 // First store a file to cache. |
| 855 TestStoreToCache(resource_id, md5, | 856 TestStoreToCache(resource_id, md5, |
| 856 test_util::GetTestFilePath("gdata/root_feed.json"), | 857 gdata::test_util::GetTestFilePath("gdata/root_feed.json"), |
| 857 DRIVE_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT, | 858 DRIVE_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT, |
| 858 DriveCache::CACHE_TYPE_TMP); | 859 DriveCache::CACHE_TYPE_TMP); |
| 859 | 860 |
| 860 // Then try to get the existing file from cache. | 861 // Then try to get the existing file from cache. |
| 861 num_callback_invocations_ = 0; | 862 num_callback_invocations_ = 0; |
| 862 TestGetFileFromCacheByResourceIdAndMd5( | 863 TestGetFileFromCacheByResourceIdAndMd5( |
| 863 resource_id, md5, DRIVE_FILE_OK, md5); | 864 resource_id, md5, DRIVE_FILE_OK, md5); |
| 864 EXPECT_EQ(1, num_callback_invocations_); | 865 EXPECT_EQ(1, num_callback_invocations_); |
| 865 | 866 |
| 866 // Get file from cache with same resource id as existing file but different | 867 // Get file from cache with same resource id as existing file but different |
| (...skipping 14 matching lines...) Expand all Loading... |
| 881 | 882 |
| 882 TEST_F(DriveCacheTest, RemoveFromCacheSimple) { | 883 TEST_F(DriveCacheTest, RemoveFromCacheSimple) { |
| 883 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace()) | 884 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace()) |
| 884 .Times(AtLeast(1)).WillRepeatedly(Return(kLotsOfSpace)); | 885 .Times(AtLeast(1)).WillRepeatedly(Return(kLotsOfSpace)); |
| 885 | 886 |
| 886 // Use alphanumeric characters for resource id. | 887 // Use alphanumeric characters for resource id. |
| 887 std::string resource_id("pdf:1a2b"); | 888 std::string resource_id("pdf:1a2b"); |
| 888 std::string md5("abcdef0123456789"); | 889 std::string md5("abcdef0123456789"); |
| 889 // First store a file to cache. | 890 // First store a file to cache. |
| 890 TestStoreToCache(resource_id, md5, | 891 TestStoreToCache(resource_id, md5, |
| 891 test_util::GetTestFilePath("gdata/root_feed.json"), | 892 gdata::test_util::GetTestFilePath("gdata/root_feed.json"), |
| 892 DRIVE_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT, | 893 DRIVE_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT, |
| 893 DriveCache::CACHE_TYPE_TMP); | 894 DriveCache::CACHE_TYPE_TMP); |
| 894 | 895 |
| 895 // Then try to remove existing file from cache. | 896 // Then try to remove existing file from cache. |
| 896 num_callback_invocations_ = 0; | 897 num_callback_invocations_ = 0; |
| 897 TestRemoveFromCache(resource_id, DRIVE_FILE_OK); | 898 TestRemoveFromCache(resource_id, DRIVE_FILE_OK); |
| 898 EXPECT_EQ(1, num_callback_invocations_); | 899 EXPECT_EQ(1, num_callback_invocations_); |
| 899 | 900 |
| 900 // Repeat using non-alphanumeric characters for resource id, including '.' | 901 // Repeat using non-alphanumeric characters for resource id, including '.' |
| 901 // which is an extension separator. | 902 // which is an extension separator. |
| 902 resource_id = "pdf:`~!@#$%^&*()-_=+[{|]}\\;',<.>/?"; | 903 resource_id = "pdf:`~!@#$%^&*()-_=+[{|]}\\;',<.>/?"; |
| 903 TestStoreToCache(resource_id, md5, | 904 TestStoreToCache(resource_id, md5, |
| 904 test_util::GetTestFilePath("gdata/root_feed.json"), | 905 gdata::test_util::GetTestFilePath("gdata/root_feed.json"), |
| 905 DRIVE_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT, | 906 DRIVE_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT, |
| 906 DriveCache::CACHE_TYPE_TMP); | 907 DriveCache::CACHE_TYPE_TMP); |
| 907 | 908 |
| 908 num_callback_invocations_ = 0; | 909 num_callback_invocations_ = 0; |
| 909 TestRemoveFromCache(resource_id, DRIVE_FILE_OK); | 910 TestRemoveFromCache(resource_id, DRIVE_FILE_OK); |
| 910 EXPECT_EQ(1, num_callback_invocations_); | 911 EXPECT_EQ(1, num_callback_invocations_); |
| 911 } | 912 } |
| 912 | 913 |
| 913 TEST_F(DriveCacheTest, PinAndUnpin) { | 914 TEST_F(DriveCacheTest, PinAndUnpin) { |
| 914 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace()) | 915 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace()) |
| 915 .Times(AtLeast(1)).WillRepeatedly(Return(kLotsOfSpace)); | 916 .Times(AtLeast(1)).WillRepeatedly(Return(kLotsOfSpace)); |
| 916 | 917 |
| 917 std::string resource_id("pdf:1a2b"); | 918 std::string resource_id("pdf:1a2b"); |
| 918 std::string md5("abcdef0123456789"); | 919 std::string md5("abcdef0123456789"); |
| 919 EXPECT_CALL(*mock_cache_observer_, OnCachePinned(resource_id, md5)).Times(2); | 920 EXPECT_CALL(*mock_cache_observer_, OnCachePinned(resource_id, md5)).Times(2); |
| 920 EXPECT_CALL(*mock_cache_observer_, OnCacheUnpinned(resource_id, md5)) | 921 EXPECT_CALL(*mock_cache_observer_, OnCacheUnpinned(resource_id, md5)) |
| 921 .Times(1); | 922 .Times(1); |
| 922 | 923 |
| 923 // First store a file to cache. | 924 // First store a file to cache. |
| 924 TestStoreToCache(resource_id, md5, | 925 TestStoreToCache(resource_id, md5, |
| 925 test_util::GetTestFilePath("gdata/root_feed.json"), | 926 gdata::test_util::GetTestFilePath("gdata/root_feed.json"), |
| 926 DRIVE_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT, | 927 DRIVE_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT, |
| 927 DriveCache::CACHE_TYPE_TMP); | 928 DriveCache::CACHE_TYPE_TMP); |
| 928 | 929 |
| 929 // Pin the existing file in cache. | 930 // Pin the existing file in cache. |
| 930 num_callback_invocations_ = 0; | 931 num_callback_invocations_ = 0; |
| 931 TestPin(resource_id, md5, DRIVE_FILE_OK, | 932 TestPin(resource_id, md5, DRIVE_FILE_OK, |
| 932 test_util::TEST_CACHE_STATE_PRESENT | | 933 test_util::TEST_CACHE_STATE_PRESENT | |
| 933 test_util::TEST_CACHE_STATE_PINNED | | 934 test_util::TEST_CACHE_STATE_PINNED | |
| 934 test_util::TEST_CACHE_STATE_PERSISTENT, | 935 test_util::TEST_CACHE_STATE_PERSISTENT, |
| 935 DriveCache::CACHE_TYPE_PERSISTENT); | 936 DriveCache::CACHE_TYPE_PERSISTENT); |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 993 EXPECT_CALL(*mock_cache_observer_, OnCachePinned(resource_id, md5)).Times(1); | 994 EXPECT_CALL(*mock_cache_observer_, OnCachePinned(resource_id, md5)).Times(1); |
| 994 | 995 |
| 995 // Pin a non-existent file. | 996 // Pin a non-existent file. |
| 996 TestPin(resource_id, md5, DRIVE_FILE_OK, | 997 TestPin(resource_id, md5, DRIVE_FILE_OK, |
| 997 test_util::TEST_CACHE_STATE_PINNED, | 998 test_util::TEST_CACHE_STATE_PINNED, |
| 998 DriveCache::CACHE_TYPE_TMP); | 999 DriveCache::CACHE_TYPE_TMP); |
| 999 | 1000 |
| 1000 // Store an existing file to a previously pinned file. | 1001 // Store an existing file to a previously pinned file. |
| 1001 num_callback_invocations_ = 0; | 1002 num_callback_invocations_ = 0; |
| 1002 TestStoreToCache(resource_id, md5, | 1003 TestStoreToCache(resource_id, md5, |
| 1003 test_util::GetTestFilePath("gdata/root_feed.json"), | 1004 gdata::test_util::GetTestFilePath("gdata/root_feed.json"), |
| 1004 DRIVE_FILE_OK, | 1005 DRIVE_FILE_OK, |
| 1005 test_util::TEST_CACHE_STATE_PRESENT | | 1006 test_util::TEST_CACHE_STATE_PRESENT | |
| 1006 test_util::TEST_CACHE_STATE_PINNED | | 1007 test_util::TEST_CACHE_STATE_PINNED | |
| 1007 test_util::TEST_CACHE_STATE_PERSISTENT, | 1008 test_util::TEST_CACHE_STATE_PERSISTENT, |
| 1008 DriveCache::CACHE_TYPE_PERSISTENT); | 1009 DriveCache::CACHE_TYPE_PERSISTENT); |
| 1009 EXPECT_EQ(1, num_callback_invocations_); | 1010 EXPECT_EQ(1, num_callback_invocations_); |
| 1010 | 1011 |
| 1011 // Store a non-existent file to a previously pinned and stored file. | 1012 // Store a non-existent file to a previously pinned and stored file. |
| 1012 num_callback_invocations_ = 0; | 1013 num_callback_invocations_ = 0; |
| 1013 TestStoreToCache(resource_id, md5, FilePath("./non_existent.json"), | 1014 TestStoreToCache(resource_id, md5, FilePath("./non_existent.json"), |
| (...skipping 19 matching lines...) Expand all Loading... |
| 1033 DriveCache::CACHE_TYPE_TMP); | 1034 DriveCache::CACHE_TYPE_TMP); |
| 1034 | 1035 |
| 1035 // Get the non-existent pinned file from cache. | 1036 // Get the non-existent pinned file from cache. |
| 1036 num_callback_invocations_ = 0; | 1037 num_callback_invocations_ = 0; |
| 1037 TestGetFileFromCacheByResourceIdAndMd5( | 1038 TestGetFileFromCacheByResourceIdAndMd5( |
| 1038 resource_id, md5, DRIVE_FILE_ERROR_NOT_FOUND, md5); | 1039 resource_id, md5, DRIVE_FILE_ERROR_NOT_FOUND, md5); |
| 1039 EXPECT_EQ(1, num_callback_invocations_); | 1040 EXPECT_EQ(1, num_callback_invocations_); |
| 1040 | 1041 |
| 1041 // Store an existing file to the previously pinned non-existent file. | 1042 // Store an existing file to the previously pinned non-existent file. |
| 1042 TestStoreToCache(resource_id, md5, | 1043 TestStoreToCache(resource_id, md5, |
| 1043 test_util::GetTestFilePath("gdata/root_feed.json"), | 1044 gdata::test_util::GetTestFilePath("gdata/root_feed.json"), |
| 1044 DRIVE_FILE_OK, | 1045 DRIVE_FILE_OK, |
| 1045 test_util::TEST_CACHE_STATE_PRESENT | | 1046 test_util::TEST_CACHE_STATE_PRESENT | |
| 1046 test_util::TEST_CACHE_STATE_PINNED | | 1047 test_util::TEST_CACHE_STATE_PINNED | |
| 1047 test_util::TEST_CACHE_STATE_PERSISTENT, | 1048 test_util::TEST_CACHE_STATE_PERSISTENT, |
| 1048 DriveCache::CACHE_TYPE_PERSISTENT); | 1049 DriveCache::CACHE_TYPE_PERSISTENT); |
| 1049 | 1050 |
| 1050 // Get the previously pinned and stored file from cache. | 1051 // Get the previously pinned and stored file from cache. |
| 1051 num_callback_invocations_ = 0; | 1052 num_callback_invocations_ = 0; |
| 1052 TestGetFileFromCacheByResourceIdAndMd5( | 1053 TestGetFileFromCacheByResourceIdAndMd5( |
| 1053 resource_id, md5, DRIVE_FILE_OK, md5); | 1054 resource_id, md5, DRIVE_FILE_OK, md5); |
| 1054 EXPECT_EQ(1, num_callback_invocations_); | 1055 EXPECT_EQ(1, num_callback_invocations_); |
| 1055 } | 1056 } |
| 1056 | 1057 |
| 1057 TEST_F(DriveCacheTest, RemoveFromCachePinned) { | 1058 TEST_F(DriveCacheTest, RemoveFromCachePinned) { |
| 1058 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace()) | 1059 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace()) |
| 1059 .Times(AtLeast(1)).WillRepeatedly(Return(kLotsOfSpace)); | 1060 .Times(AtLeast(1)).WillRepeatedly(Return(kLotsOfSpace)); |
| 1060 | 1061 |
| 1061 // Use alphanumeric characters for resource_id. | 1062 // Use alphanumeric characters for resource_id. |
| 1062 std::string resource_id("pdf:1a2b"); | 1063 std::string resource_id("pdf:1a2b"); |
| 1063 std::string md5("abcdef0123456789"); | 1064 std::string md5("abcdef0123456789"); |
| 1064 EXPECT_CALL(*mock_cache_observer_, OnCachePinned(resource_id, md5)).Times(1); | 1065 EXPECT_CALL(*mock_cache_observer_, OnCachePinned(resource_id, md5)).Times(1); |
| 1065 | 1066 |
| 1066 // Store a file to cache, and pin it. | 1067 // Store a file to cache, and pin it. |
| 1067 TestStoreToCache(resource_id, md5, | 1068 TestStoreToCache(resource_id, md5, |
| 1068 test_util::GetTestFilePath("gdata/root_feed.json"), | 1069 gdata::test_util::GetTestFilePath("gdata/root_feed.json"), |
| 1069 DRIVE_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT, | 1070 DRIVE_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT, |
| 1070 DriveCache::CACHE_TYPE_TMP); | 1071 DriveCache::CACHE_TYPE_TMP); |
| 1071 TestPin(resource_id, md5, DRIVE_FILE_OK, | 1072 TestPin(resource_id, md5, DRIVE_FILE_OK, |
| 1072 test_util::TEST_CACHE_STATE_PRESENT | | 1073 test_util::TEST_CACHE_STATE_PRESENT | |
| 1073 test_util::TEST_CACHE_STATE_PINNED | | 1074 test_util::TEST_CACHE_STATE_PINNED | |
| 1074 test_util::TEST_CACHE_STATE_PERSISTENT, | 1075 test_util::TEST_CACHE_STATE_PERSISTENT, |
| 1075 DriveCache::CACHE_TYPE_PERSISTENT); | 1076 DriveCache::CACHE_TYPE_PERSISTENT); |
| 1076 | 1077 |
| 1077 // Remove |resource_id| from cache. | 1078 // Remove |resource_id| from cache. |
| 1078 num_callback_invocations_ = 0; | 1079 num_callback_invocations_ = 0; |
| 1079 TestRemoveFromCache(resource_id, DRIVE_FILE_OK); | 1080 TestRemoveFromCache(resource_id, DRIVE_FILE_OK); |
| 1080 EXPECT_EQ(1, num_callback_invocations_); | 1081 EXPECT_EQ(1, num_callback_invocations_); |
| 1081 | 1082 |
| 1082 // Repeat using non-alphanumeric characters for resource id, including '.' | 1083 // Repeat using non-alphanumeric characters for resource id, including '.' |
| 1083 // which is an extension separator. | 1084 // which is an extension separator. |
| 1084 resource_id = "pdf:`~!@#$%^&*()-_=+[{|]}\\;',<.>/?"; | 1085 resource_id = "pdf:`~!@#$%^&*()-_=+[{|]}\\;',<.>/?"; |
| 1085 EXPECT_CALL(*mock_cache_observer_, OnCachePinned(resource_id, md5)).Times(1); | 1086 EXPECT_CALL(*mock_cache_observer_, OnCachePinned(resource_id, md5)).Times(1); |
| 1086 | 1087 |
| 1087 TestStoreToCache(resource_id, md5, | 1088 TestStoreToCache(resource_id, md5, |
| 1088 test_util::GetTestFilePath("gdata/root_feed.json"), | 1089 gdata::test_util::GetTestFilePath("gdata/root_feed.json"), |
| 1089 DRIVE_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT, | 1090 DRIVE_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT, |
| 1090 DriveCache::CACHE_TYPE_TMP); | 1091 DriveCache::CACHE_TYPE_TMP); |
| 1091 TestPin(resource_id, md5, DRIVE_FILE_OK, | 1092 TestPin(resource_id, md5, DRIVE_FILE_OK, |
| 1092 test_util::TEST_CACHE_STATE_PRESENT | | 1093 test_util::TEST_CACHE_STATE_PRESENT | |
| 1093 test_util::TEST_CACHE_STATE_PINNED | | 1094 test_util::TEST_CACHE_STATE_PINNED | |
| 1094 test_util::TEST_CACHE_STATE_PERSISTENT, | 1095 test_util::TEST_CACHE_STATE_PERSISTENT, |
| 1095 DriveCache::CACHE_TYPE_PERSISTENT); | 1096 DriveCache::CACHE_TYPE_PERSISTENT); |
| 1096 | 1097 |
| 1097 num_callback_invocations_ = 0; | 1098 num_callback_invocations_ = 0; |
| 1098 TestRemoveFromCache(resource_id, DRIVE_FILE_OK); | 1099 TestRemoveFromCache(resource_id, DRIVE_FILE_OK); |
| 1099 EXPECT_EQ(1, num_callback_invocations_); | 1100 EXPECT_EQ(1, num_callback_invocations_); |
| 1100 } | 1101 } |
| 1101 | 1102 |
| 1102 TEST_F(DriveCacheTest, DirtyCacheSimple) { | 1103 TEST_F(DriveCacheTest, DirtyCacheSimple) { |
| 1103 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace()) | 1104 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace()) |
| 1104 .Times(AtLeast(1)).WillRepeatedly(Return(kLotsOfSpace)); | 1105 .Times(AtLeast(1)).WillRepeatedly(Return(kLotsOfSpace)); |
| 1105 | 1106 |
| 1106 std::string resource_id("pdf:1a2b"); | 1107 std::string resource_id("pdf:1a2b"); |
| 1107 std::string md5("abcdef0123456789"); | 1108 std::string md5("abcdef0123456789"); |
| 1108 EXPECT_CALL(*mock_cache_observer_, OnCacheCommitted(resource_id)).Times(1); | 1109 EXPECT_CALL(*mock_cache_observer_, OnCacheCommitted(resource_id)).Times(1); |
| 1109 | 1110 |
| 1110 // First store a file to cache. | 1111 // First store a file to cache. |
| 1111 TestStoreToCache(resource_id, md5, | 1112 TestStoreToCache(resource_id, md5, |
| 1112 test_util::GetTestFilePath("gdata/root_feed.json"), | 1113 gdata::test_util::GetTestFilePath("gdata/root_feed.json"), |
| 1113 DRIVE_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT, | 1114 DRIVE_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT, |
| 1114 DriveCache::CACHE_TYPE_TMP); | 1115 DriveCache::CACHE_TYPE_TMP); |
| 1115 | 1116 |
| 1116 // Mark the file dirty. | 1117 // Mark the file dirty. |
| 1117 num_callback_invocations_ = 0; | 1118 num_callback_invocations_ = 0; |
| 1118 TestMarkDirty(resource_id, md5, DRIVE_FILE_OK, | 1119 TestMarkDirty(resource_id, md5, DRIVE_FILE_OK, |
| 1119 test_util::TEST_CACHE_STATE_PRESENT | | 1120 test_util::TEST_CACHE_STATE_PRESENT | |
| 1120 test_util::TEST_CACHE_STATE_DIRTY | | 1121 test_util::TEST_CACHE_STATE_DIRTY | |
| 1121 test_util::TEST_CACHE_STATE_PERSISTENT, | 1122 test_util::TEST_CACHE_STATE_PERSISTENT, |
| 1122 DriveCache::CACHE_TYPE_PERSISTENT); | 1123 DriveCache::CACHE_TYPE_PERSISTENT); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 1143 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace()) | 1144 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace()) |
| 1144 .Times(AtLeast(1)).WillRepeatedly(Return(kLotsOfSpace)); | 1145 .Times(AtLeast(1)).WillRepeatedly(Return(kLotsOfSpace)); |
| 1145 | 1146 |
| 1146 std::string resource_id("pdf:1a2b"); | 1147 std::string resource_id("pdf:1a2b"); |
| 1147 std::string md5("abcdef0123456789"); | 1148 std::string md5("abcdef0123456789"); |
| 1148 EXPECT_CALL(*mock_cache_observer_, OnCachePinned(resource_id, md5)).Times(1); | 1149 EXPECT_CALL(*mock_cache_observer_, OnCachePinned(resource_id, md5)).Times(1); |
| 1149 EXPECT_CALL(*mock_cache_observer_, OnCacheCommitted(resource_id)).Times(1); | 1150 EXPECT_CALL(*mock_cache_observer_, OnCacheCommitted(resource_id)).Times(1); |
| 1150 | 1151 |
| 1151 // First store a file to cache and pin it. | 1152 // First store a file to cache and pin it. |
| 1152 TestStoreToCache(resource_id, md5, | 1153 TestStoreToCache(resource_id, md5, |
| 1153 test_util::GetTestFilePath("gdata/root_feed.json"), | 1154 gdata::test_util::GetTestFilePath("gdata/root_feed.json"), |
| 1154 DRIVE_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT, | 1155 DRIVE_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT, |
| 1155 DriveCache::CACHE_TYPE_TMP); | 1156 DriveCache::CACHE_TYPE_TMP); |
| 1156 TestPin(resource_id, md5, DRIVE_FILE_OK, | 1157 TestPin(resource_id, md5, DRIVE_FILE_OK, |
| 1157 test_util::TEST_CACHE_STATE_PRESENT | | 1158 test_util::TEST_CACHE_STATE_PRESENT | |
| 1158 test_util::TEST_CACHE_STATE_PINNED | | 1159 test_util::TEST_CACHE_STATE_PINNED | |
| 1159 test_util::TEST_CACHE_STATE_PERSISTENT, | 1160 test_util::TEST_CACHE_STATE_PERSISTENT, |
| 1160 DriveCache::CACHE_TYPE_PERSISTENT); | 1161 DriveCache::CACHE_TYPE_PERSISTENT); |
| 1161 | 1162 |
| 1162 // Mark the file dirty. | 1163 // Mark the file dirty. |
| 1163 num_callback_invocations_ = 0; | 1164 num_callback_invocations_ = 0; |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1195 .Times(AtLeast(1)).WillRepeatedly(Return(kLotsOfSpace)); | 1196 .Times(AtLeast(1)).WillRepeatedly(Return(kLotsOfSpace)); |
| 1196 | 1197 |
| 1197 std::string resource_id("pdf:1a2b"); | 1198 std::string resource_id("pdf:1a2b"); |
| 1198 std::string md5("abcdef0123456789"); | 1199 std::string md5("abcdef0123456789"); |
| 1199 EXPECT_CALL(*mock_cache_observer_, OnCachePinned(resource_id, md5)).Times(1); | 1200 EXPECT_CALL(*mock_cache_observer_, OnCachePinned(resource_id, md5)).Times(1); |
| 1200 EXPECT_CALL(*mock_cache_observer_, OnCacheUnpinned(resource_id, md5)) | 1201 EXPECT_CALL(*mock_cache_observer_, OnCacheUnpinned(resource_id, md5)) |
| 1201 .Times(1); | 1202 .Times(1); |
| 1202 | 1203 |
| 1203 // First store a file to cache and mark it as dirty. | 1204 // First store a file to cache and mark it as dirty. |
| 1204 TestStoreToCache(resource_id, md5, | 1205 TestStoreToCache(resource_id, md5, |
| 1205 test_util::GetTestFilePath("gdata/root_feed.json"), | 1206 gdata::test_util::GetTestFilePath("gdata/root_feed.json"), |
| 1206 DRIVE_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT, | 1207 DRIVE_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT, |
| 1207 DriveCache::CACHE_TYPE_TMP); | 1208 DriveCache::CACHE_TYPE_TMP); |
| 1208 TestMarkDirty(resource_id, md5, DRIVE_FILE_OK, | 1209 TestMarkDirty(resource_id, md5, DRIVE_FILE_OK, |
| 1209 test_util::TEST_CACHE_STATE_PRESENT | | 1210 test_util::TEST_CACHE_STATE_PRESENT | |
| 1210 test_util::TEST_CACHE_STATE_DIRTY | | 1211 test_util::TEST_CACHE_STATE_DIRTY | |
| 1211 test_util::TEST_CACHE_STATE_PERSISTENT, | 1212 test_util::TEST_CACHE_STATE_PERSISTENT, |
| 1212 DriveCache::CACHE_TYPE_PERSISTENT); | 1213 DriveCache::CACHE_TYPE_PERSISTENT); |
| 1213 | 1214 |
| 1214 // Verifies dirty file exists. | 1215 // Verifies dirty file exists. |
| 1215 FilePath dirty_path = GetCacheFilePath( | 1216 FilePath dirty_path = GetCacheFilePath( |
| (...skipping 28 matching lines...) Expand all Loading... |
| 1244 TEST_F(DriveCacheTest, DirtyCacheRepetitive) { | 1245 TEST_F(DriveCacheTest, DirtyCacheRepetitive) { |
| 1245 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace()) | 1246 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace()) |
| 1246 .Times(AtLeast(1)).WillRepeatedly(Return(kLotsOfSpace)); | 1247 .Times(AtLeast(1)).WillRepeatedly(Return(kLotsOfSpace)); |
| 1247 | 1248 |
| 1248 std::string resource_id("pdf:1a2b"); | 1249 std::string resource_id("pdf:1a2b"); |
| 1249 std::string md5("abcdef0123456789"); | 1250 std::string md5("abcdef0123456789"); |
| 1250 EXPECT_CALL(*mock_cache_observer_, OnCacheCommitted(resource_id)).Times(3); | 1251 EXPECT_CALL(*mock_cache_observer_, OnCacheCommitted(resource_id)).Times(3); |
| 1251 | 1252 |
| 1252 // First store a file to cache. | 1253 // First store a file to cache. |
| 1253 TestStoreToCache(resource_id, md5, | 1254 TestStoreToCache(resource_id, md5, |
| 1254 test_util::GetTestFilePath("gdata/root_feed.json"), | 1255 gdata::test_util::GetTestFilePath("gdata/root_feed.json"), |
| 1255 DRIVE_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT, | 1256 DRIVE_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT, |
| 1256 DriveCache::CACHE_TYPE_TMP); | 1257 DriveCache::CACHE_TYPE_TMP); |
| 1257 | 1258 |
| 1258 // Mark the file dirty. | 1259 // Mark the file dirty. |
| 1259 num_callback_invocations_ = 0; | 1260 num_callback_invocations_ = 0; |
| 1260 TestMarkDirty(resource_id, md5, DRIVE_FILE_OK, | 1261 TestMarkDirty(resource_id, md5, DRIVE_FILE_OK, |
| 1261 test_util::TEST_CACHE_STATE_PRESENT | | 1262 test_util::TEST_CACHE_STATE_PRESENT | |
| 1262 test_util::TEST_CACHE_STATE_DIRTY | | 1263 test_util::TEST_CACHE_STATE_DIRTY | |
| 1263 test_util::TEST_CACHE_STATE_PERSISTENT, | 1264 test_util::TEST_CACHE_STATE_PERSISTENT, |
| 1264 DriveCache::CACHE_TYPE_PERSISTENT); | 1265 DriveCache::CACHE_TYPE_PERSISTENT); |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1348 | 1349 |
| 1349 // Clear dirty state of a non-existent file. | 1350 // Clear dirty state of a non-existent file. |
| 1350 num_callback_invocations_ = 0; | 1351 num_callback_invocations_ = 0; |
| 1351 TestClearDirty(resource_id, md5, DRIVE_FILE_ERROR_NOT_FOUND, | 1352 TestClearDirty(resource_id, md5, DRIVE_FILE_ERROR_NOT_FOUND, |
| 1352 test_util::TEST_CACHE_STATE_NONE, | 1353 test_util::TEST_CACHE_STATE_NONE, |
| 1353 DriveCache::CACHE_TYPE_TMP); | 1354 DriveCache::CACHE_TYPE_TMP); |
| 1354 EXPECT_EQ(1, num_callback_invocations_); | 1355 EXPECT_EQ(1, num_callback_invocations_); |
| 1355 | 1356 |
| 1356 // Store a file to cache. | 1357 // Store a file to cache. |
| 1357 TestStoreToCache(resource_id, md5, | 1358 TestStoreToCache(resource_id, md5, |
| 1358 test_util::GetTestFilePath("gdata/root_feed.json"), | 1359 gdata::test_util::GetTestFilePath("gdata/root_feed.json"), |
| 1359 DRIVE_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT, | 1360 DRIVE_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT, |
| 1360 DriveCache::CACHE_TYPE_TMP); | 1361 DriveCache::CACHE_TYPE_TMP); |
| 1361 | 1362 |
| 1362 // Commit a non-dirty existing file dirty. | 1363 // Commit a non-dirty existing file dirty. |
| 1363 num_callback_invocations_ = 0; | 1364 num_callback_invocations_ = 0; |
| 1364 TestCommitDirty(resource_id, md5, DRIVE_FILE_ERROR_INVALID_OPERATION, | 1365 TestCommitDirty(resource_id, md5, DRIVE_FILE_ERROR_INVALID_OPERATION, |
| 1365 test_util::TEST_CACHE_STATE_PRESENT, | 1366 test_util::TEST_CACHE_STATE_PRESENT, |
| 1366 DriveCache::CACHE_TYPE_TMP); | 1367 DriveCache::CACHE_TYPE_TMP); |
| 1367 EXPECT_EQ(1, num_callback_invocations_); | 1368 EXPECT_EQ(1, num_callback_invocations_); |
| 1368 | 1369 |
| 1369 // Clear dirty state of a non-dirty existing file. | 1370 // Clear dirty state of a non-dirty existing file. |
| 1370 num_callback_invocations_ = 0; | 1371 num_callback_invocations_ = 0; |
| 1371 TestClearDirty(resource_id, md5, DRIVE_FILE_ERROR_INVALID_OPERATION, | 1372 TestClearDirty(resource_id, md5, DRIVE_FILE_ERROR_INVALID_OPERATION, |
| 1372 test_util::TEST_CACHE_STATE_PRESENT, | 1373 test_util::TEST_CACHE_STATE_PRESENT, |
| 1373 DriveCache::CACHE_TYPE_TMP); | 1374 DriveCache::CACHE_TYPE_TMP); |
| 1374 EXPECT_EQ(1, num_callback_invocations_); | 1375 EXPECT_EQ(1, num_callback_invocations_); |
| 1375 | 1376 |
| 1376 // Mark an existing file dirty, then store a new file to the same resource id | 1377 // Mark an existing file dirty, then store a new file to the same resource id |
| 1377 // but different md5, which should fail. | 1378 // but different md5, which should fail. |
| 1378 TestMarkDirty(resource_id, md5, DRIVE_FILE_OK, | 1379 TestMarkDirty(resource_id, md5, DRIVE_FILE_OK, |
| 1379 test_util::TEST_CACHE_STATE_PRESENT | | 1380 test_util::TEST_CACHE_STATE_PRESENT | |
| 1380 test_util::TEST_CACHE_STATE_DIRTY | | 1381 test_util::TEST_CACHE_STATE_DIRTY | |
| 1381 test_util::TEST_CACHE_STATE_PERSISTENT, | 1382 test_util::TEST_CACHE_STATE_PERSISTENT, |
| 1382 DriveCache::CACHE_TYPE_PERSISTENT); | 1383 DriveCache::CACHE_TYPE_PERSISTENT); |
| 1383 num_callback_invocations_ = 0; | 1384 num_callback_invocations_ = 0; |
| 1384 md5 = "new_md5"; | 1385 md5 = "new_md5"; |
| 1385 TestStoreToCache(resource_id, md5, | 1386 TestStoreToCache(resource_id, md5, |
| 1386 test_util::GetTestFilePath("gdata/subdir_feed.json"), | 1387 gdata::test_util::GetTestFilePath("gdata/subdir_feed.json"), |
| 1387 DRIVE_FILE_ERROR_IN_USE, | 1388 DRIVE_FILE_ERROR_IN_USE, |
| 1388 test_util::TEST_CACHE_STATE_PRESENT | | 1389 test_util::TEST_CACHE_STATE_PRESENT | |
| 1389 test_util::TEST_CACHE_STATE_DIRTY | | 1390 test_util::TEST_CACHE_STATE_DIRTY | |
| 1390 test_util::TEST_CACHE_STATE_PERSISTENT, | 1391 test_util::TEST_CACHE_STATE_PERSISTENT, |
| 1391 DriveCache::CACHE_TYPE_PERSISTENT); | 1392 DriveCache::CACHE_TYPE_PERSISTENT); |
| 1392 EXPECT_EQ(1, num_callback_invocations_); | 1393 EXPECT_EQ(1, num_callback_invocations_); |
| 1393 } | 1394 } |
| 1394 | 1395 |
| 1395 TEST_F(DriveCacheTest, RemoveFromDirtyCache) { | 1396 TEST_F(DriveCacheTest, RemoveFromDirtyCache) { |
| 1396 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace()) | 1397 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace()) |
| 1397 .Times(AtLeast(1)).WillRepeatedly(Return(kLotsOfSpace)); | 1398 .Times(AtLeast(1)).WillRepeatedly(Return(kLotsOfSpace)); |
| 1398 | 1399 |
| 1399 std::string resource_id("pdf:1a2b"); | 1400 std::string resource_id("pdf:1a2b"); |
| 1400 std::string md5("abcdef0123456789"); | 1401 std::string md5("abcdef0123456789"); |
| 1401 EXPECT_CALL(*mock_cache_observer_, OnCachePinned(resource_id, md5)).Times(1); | 1402 EXPECT_CALL(*mock_cache_observer_, OnCachePinned(resource_id, md5)).Times(1); |
| 1402 EXPECT_CALL(*mock_cache_observer_, OnCacheCommitted(resource_id)).Times(1); | 1403 EXPECT_CALL(*mock_cache_observer_, OnCacheCommitted(resource_id)).Times(1); |
| 1403 | 1404 |
| 1404 // Store a file to cache, pin it, mark it dirty and commit it. | 1405 // Store a file to cache, pin it, mark it dirty and commit it. |
| 1405 TestStoreToCache(resource_id, md5, | 1406 TestStoreToCache(resource_id, md5, |
| 1406 test_util::GetTestFilePath("gdata/root_feed.json"), | 1407 gdata::test_util::GetTestFilePath("gdata/root_feed.json"), |
| 1407 DRIVE_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT, | 1408 DRIVE_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT, |
| 1408 DriveCache::CACHE_TYPE_TMP); | 1409 DriveCache::CACHE_TYPE_TMP); |
| 1409 TestPin(resource_id, md5, DRIVE_FILE_OK, | 1410 TestPin(resource_id, md5, DRIVE_FILE_OK, |
| 1410 test_util::TEST_CACHE_STATE_PRESENT | | 1411 test_util::TEST_CACHE_STATE_PRESENT | |
| 1411 test_util::TEST_CACHE_STATE_PINNED | | 1412 test_util::TEST_CACHE_STATE_PINNED | |
| 1412 test_util::TEST_CACHE_STATE_PERSISTENT, | 1413 test_util::TEST_CACHE_STATE_PERSISTENT, |
| 1413 DriveCache::CACHE_TYPE_PERSISTENT); | 1414 DriveCache::CACHE_TYPE_PERSISTENT); |
| 1414 TestMarkDirty(resource_id, md5, DRIVE_FILE_OK, | 1415 TestMarkDirty(resource_id, md5, DRIVE_FILE_OK, |
| 1415 test_util::TEST_CACHE_STATE_PRESENT | | 1416 test_util::TEST_CACHE_STATE_PRESENT | |
| 1416 test_util::TEST_CACHE_STATE_PINNED | | 1417 test_util::TEST_CACHE_STATE_PINNED | |
| (...skipping 17 matching lines...) Expand all Loading... |
| 1434 TEST_F(DriveCacheTest, MountUnmount) { | 1435 TEST_F(DriveCacheTest, MountUnmount) { |
| 1435 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace()) | 1436 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace()) |
| 1436 .Times(AtLeast(1)).WillRepeatedly(Return(kLotsOfSpace)); | 1437 .Times(AtLeast(1)).WillRepeatedly(Return(kLotsOfSpace)); |
| 1437 | 1438 |
| 1438 FilePath file_path; | 1439 FilePath file_path; |
| 1439 std::string resource_id("pdf:1a2b"); | 1440 std::string resource_id("pdf:1a2b"); |
| 1440 std::string md5("abcdef0123456789"); | 1441 std::string md5("abcdef0123456789"); |
| 1441 | 1442 |
| 1442 // First store a file to cache in the tmp subdir. | 1443 // First store a file to cache in the tmp subdir. |
| 1443 TestStoreToCache(resource_id, md5, | 1444 TestStoreToCache(resource_id, md5, |
| 1444 test_util::GetTestFilePath("gdata/root_feed.json"), | 1445 gdata::test_util::GetTestFilePath("gdata/root_feed.json"), |
| 1445 DRIVE_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT, | 1446 DRIVE_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT, |
| 1446 DriveCache::CACHE_TYPE_TMP); | 1447 DriveCache::CACHE_TYPE_TMP); |
| 1447 | 1448 |
| 1448 // Mark the file mounted. | 1449 // Mark the file mounted. |
| 1449 num_callback_invocations_ = 0; | 1450 num_callback_invocations_ = 0; |
| 1450 file_path = cache_->GetCacheFilePath(resource_id, md5, | 1451 file_path = cache_->GetCacheFilePath(resource_id, md5, |
| 1451 DriveCache::CACHE_TYPE_TMP, | 1452 DriveCache::CACHE_TYPE_TMP, |
| 1452 DriveCache::CACHED_FILE_FROM_SERVER); | 1453 DriveCache::CACHED_FILE_FROM_SERVER); |
| 1453 TestSetMountedState(resource_id, md5, file_path, true, | 1454 TestSetMountedState(resource_id, md5, file_path, true, |
| 1454 DRIVE_FILE_OK, | 1455 DRIVE_FILE_OK, |
| (...skipping 23 matching lines...) Expand all Loading... |
| 1478 EXPECT_EQ(1, num_callback_invocations_); | 1479 EXPECT_EQ(1, num_callback_invocations_); |
| 1479 } | 1480 } |
| 1480 | 1481 |
| 1481 TEST_F(DriveCacheTest, GetResourceIdsOfBacklogOnUIThread) { | 1482 TEST_F(DriveCacheTest, GetResourceIdsOfBacklogOnUIThread) { |
| 1482 PrepareForInitCacheTest(); | 1483 PrepareForInitCacheTest(); |
| 1483 | 1484 |
| 1484 std::vector<std::string> to_fetch; | 1485 std::vector<std::string> to_fetch; |
| 1485 std::vector<std::string> to_upload; | 1486 std::vector<std::string> to_upload; |
| 1486 cache_->GetResourceIdsOfBacklogOnUIThread( | 1487 cache_->GetResourceIdsOfBacklogOnUIThread( |
| 1487 base::Bind(&OnGetResourceIdsOfBacklog, &to_fetch, &to_upload)); | 1488 base::Bind(&OnGetResourceIdsOfBacklog, &to_fetch, &to_upload)); |
| 1488 test_util::RunBlockingPoolTask(); | 1489 gdata::test_util::RunBlockingPoolTask(); |
| 1489 | 1490 |
| 1490 sort(to_fetch.begin(), to_fetch.end()); | 1491 sort(to_fetch.begin(), to_fetch.end()); |
| 1491 ASSERT_EQ(1U, to_fetch.size()); | 1492 ASSERT_EQ(1U, to_fetch.size()); |
| 1492 EXPECT_EQ("pinned:non-existent", to_fetch[0]); | 1493 EXPECT_EQ("pinned:non-existent", to_fetch[0]); |
| 1493 | 1494 |
| 1494 sort(to_upload.begin(), to_upload.end()); | 1495 sort(to_upload.begin(), to_upload.end()); |
| 1495 ASSERT_EQ(2U, to_upload.size()); | 1496 ASSERT_EQ(2U, to_upload.size()); |
| 1496 EXPECT_EQ("dirty:existing", to_upload[0]); | 1497 EXPECT_EQ("dirty:existing", to_upload[0]); |
| 1497 EXPECT_EQ("dirty_and_pinned:existing", to_upload[1]); | 1498 EXPECT_EQ("dirty_and_pinned:existing", to_upload[1]); |
| 1498 } | 1499 } |
| 1499 | 1500 |
| 1500 TEST_F(DriveCacheTest, GetResourceIdsOfExistingPinnedFilesOnUIThread) { | 1501 TEST_F(DriveCacheTest, GetResourceIdsOfExistingPinnedFilesOnUIThread) { |
| 1501 PrepareForInitCacheTest(); | 1502 PrepareForInitCacheTest(); |
| 1502 | 1503 |
| 1503 std::vector<std::string> resource_ids; | 1504 std::vector<std::string> resource_ids; |
| 1504 cache_->GetResourceIdsOfExistingPinnedFilesOnUIThread( | 1505 cache_->GetResourceIdsOfExistingPinnedFilesOnUIThread( |
| 1505 base::Bind(&OnGetResourceIds, &resource_ids)); | 1506 base::Bind(&OnGetResourceIds, &resource_ids)); |
| 1506 test_util::RunBlockingPoolTask(); | 1507 gdata::test_util::RunBlockingPoolTask(); |
| 1507 | 1508 |
| 1508 sort(resource_ids.begin(), resource_ids.end()); | 1509 sort(resource_ids.begin(), resource_ids.end()); |
| 1509 ASSERT_EQ(2U, resource_ids.size()); | 1510 ASSERT_EQ(2U, resource_ids.size()); |
| 1510 EXPECT_EQ("dirty_and_pinned:existing", resource_ids[0]); | 1511 EXPECT_EQ("dirty_and_pinned:existing", resource_ids[0]); |
| 1511 EXPECT_EQ("pinned:existing", resource_ids[1]); | 1512 EXPECT_EQ("pinned:existing", resource_ids[1]); |
| 1512 } | 1513 } |
| 1513 | 1514 |
| 1514 TEST_F(DriveCacheTest, GetResourceIdsOfAllFilesOnUIThread) { | 1515 TEST_F(DriveCacheTest, GetResourceIdsOfAllFilesOnUIThread) { |
| 1515 PrepareForInitCacheTest(); | 1516 PrepareForInitCacheTest(); |
| 1516 | 1517 |
| 1517 std::vector<std::string> resource_ids; | 1518 std::vector<std::string> resource_ids; |
| 1518 cache_->GetResourceIdsOfAllFilesOnUIThread( | 1519 cache_->GetResourceIdsOfAllFilesOnUIThread( |
| 1519 base::Bind(&OnGetResourceIds, &resource_ids)); | 1520 base::Bind(&OnGetResourceIds, &resource_ids)); |
| 1520 test_util::RunBlockingPoolTask(); | 1521 gdata::test_util::RunBlockingPoolTask(); |
| 1521 | 1522 |
| 1522 sort(resource_ids.begin(), resource_ids.end()); | 1523 sort(resource_ids.begin(), resource_ids.end()); |
| 1523 ASSERT_EQ(6U, resource_ids.size()); | 1524 ASSERT_EQ(6U, resource_ids.size()); |
| 1524 EXPECT_EQ("dirty:existing", resource_ids[0]); | 1525 EXPECT_EQ("dirty:existing", resource_ids[0]); |
| 1525 EXPECT_EQ("dirty_and_pinned:existing", resource_ids[1]); | 1526 EXPECT_EQ("dirty_and_pinned:existing", resource_ids[1]); |
| 1526 EXPECT_EQ("pinned:existing", resource_ids[2]); | 1527 EXPECT_EQ("pinned:existing", resource_ids[2]); |
| 1527 EXPECT_EQ("pinned:non-existent", resource_ids[3]); | 1528 EXPECT_EQ("pinned:non-existent", resource_ids[3]); |
| 1528 EXPECT_EQ("tmp:`~!@#$%^&*()-_=+[{|]}\\;',<.>/?", resource_ids[4]); | 1529 EXPECT_EQ("tmp:`~!@#$%^&*()-_=+[{|]}\\;',<.>/?", resource_ids[4]); |
| 1529 EXPECT_EQ("tmp:resource_id", resource_ids[5]); | 1530 EXPECT_EQ("tmp:resource_id", resource_ids[5]); |
| 1530 } | 1531 } |
| 1531 | 1532 |
| 1532 | 1533 |
| 1533 TEST_F(DriveCacheTest, ClearAllOnUIThread) { | 1534 TEST_F(DriveCacheTest, ClearAllOnUIThread) { |
| 1534 PrepareForInitCacheTest(); | 1535 PrepareForInitCacheTest(); |
| 1535 | 1536 |
| 1536 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace()) | 1537 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace()) |
| 1537 .Times(AtLeast(1)).WillRepeatedly(Return(kLotsOfSpace)); | 1538 .Times(AtLeast(1)).WillRepeatedly(Return(kLotsOfSpace)); |
| 1538 | 1539 |
| 1539 std::string resource_id("pdf:1a2b"); | 1540 std::string resource_id("pdf:1a2b"); |
| 1540 std::string md5("abcdef0123456789"); | 1541 std::string md5("abcdef0123456789"); |
| 1541 | 1542 |
| 1542 // Store an existing file. | 1543 // Store an existing file. |
| 1543 TestStoreToCache(resource_id, md5, | 1544 TestStoreToCache(resource_id, md5, |
| 1544 test_util::GetTestFilePath("gdata/root_feed.json"), | 1545 gdata::test_util::GetTestFilePath("gdata/root_feed.json"), |
| 1545 DRIVE_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT, | 1546 DRIVE_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT, |
| 1546 DriveCache::CACHE_TYPE_TMP); | 1547 DriveCache::CACHE_TYPE_TMP); |
| 1547 EXPECT_EQ(1, num_callback_invocations_); | 1548 EXPECT_EQ(1, num_callback_invocations_); |
| 1548 | 1549 |
| 1549 // Verify that there's only one cached file. | 1550 // Verify that there's only one cached file. |
| 1550 EXPECT_EQ(1U, CountCacheFiles(resource_id, md5)); | 1551 EXPECT_EQ(1U, CountCacheFiles(resource_id, md5)); |
| 1551 | 1552 |
| 1552 // Clear cache. | 1553 // Clear cache. |
| 1553 DriveFileError error = DRIVE_FILE_OK; | 1554 DriveFileError error = DRIVE_FILE_OK; |
| 1554 FilePath file_path; | 1555 FilePath file_path; |
| 1555 cache_->ClearAllOnUIThread(base::Bind(&OnClearAll, | 1556 cache_->ClearAllOnUIThread(base::Bind(&OnClearAll, |
| 1556 &error, | 1557 &error, |
| 1557 &file_path)); | 1558 &file_path)); |
| 1558 test_util::RunBlockingPoolTask(); | 1559 gdata::test_util::RunBlockingPoolTask(); |
| 1559 EXPECT_EQ(DRIVE_FILE_OK, error); | 1560 EXPECT_EQ(DRIVE_FILE_OK, error); |
| 1560 | 1561 |
| 1561 // Verify that all the cache is removed. | 1562 // Verify that all the cache is removed. |
| 1562 VerifyRemoveFromCache(error, resource_id, md5); | 1563 VerifyRemoveFromCache(error, resource_id, md5); |
| 1563 EXPECT_EQ(0U, CountCacheFiles(resource_id, md5)); | 1564 EXPECT_EQ(0U, CountCacheFiles(resource_id, md5)); |
| 1564 } | 1565 } |
| 1565 | 1566 |
| 1566 TEST_F(DriveCacheTest, StoreToCacheNoSpace) { | 1567 TEST_F(DriveCacheTest, StoreToCacheNoSpace) { |
| 1567 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace()) | 1568 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace()) |
| 1568 .Times(AtLeast(1)).WillRepeatedly(Return(0)); | 1569 .Times(AtLeast(1)).WillRepeatedly(Return(0)); |
| 1569 | 1570 |
| 1570 std::string resource_id("pdf:1a2b"); | 1571 std::string resource_id("pdf:1a2b"); |
| 1571 std::string md5("abcdef0123456789"); | 1572 std::string md5("abcdef0123456789"); |
| 1572 | 1573 |
| 1573 // Try to store an existing file. | 1574 // Try to store an existing file. |
| 1574 TestStoreToCache(resource_id, md5, | 1575 TestStoreToCache(resource_id, md5, |
| 1575 test_util::GetTestFilePath("gdata/root_feed.json"), | 1576 gdata::test_util::GetTestFilePath("gdata/root_feed.json"), |
| 1576 DRIVE_FILE_ERROR_NO_SPACE, | 1577 DRIVE_FILE_ERROR_NO_SPACE, |
| 1577 test_util::TEST_CACHE_STATE_NONE, | 1578 test_util::TEST_CACHE_STATE_NONE, |
| 1578 DriveCache::CACHE_TYPE_TMP); | 1579 DriveCache::CACHE_TYPE_TMP); |
| 1579 EXPECT_EQ(1, num_callback_invocations_); | 1580 EXPECT_EQ(1, num_callback_invocations_); |
| 1580 | 1581 |
| 1581 // Verify that there's no files added. | 1582 // Verify that there's no files added. |
| 1582 EXPECT_EQ(0U, CountCacheFiles(resource_id, md5)); | 1583 EXPECT_EQ(0U, CountCacheFiles(resource_id, md5)); |
| 1583 } | 1584 } |
| 1584 | 1585 |
| 1585 // Don't use TEST_F, as we don't want SetUp() and TearDown() for this test. | 1586 // Don't use TEST_F, as we don't want SetUp() and TearDown() for this test. |
| 1586 TEST(DriveCacheExtraTest, InitializationFailure) { | 1587 TEST(DriveCacheExtraTest, InitializationFailure) { |
| 1587 MessageLoopForUI message_loop; | 1588 MessageLoopForUI message_loop; |
| 1588 content::TestBrowserThread ui_thread(content::BrowserThread::UI, | 1589 content::TestBrowserThread ui_thread(content::BrowserThread::UI, |
| 1589 &message_loop); | 1590 &message_loop); |
| 1590 | 1591 |
| 1591 scoped_refptr<base::SequencedWorkerPool> pool = | 1592 scoped_refptr<base::SequencedWorkerPool> pool = |
| 1592 content::BrowserThread::GetBlockingPool(); | 1593 content::BrowserThread::GetBlockingPool(); |
| 1593 | 1594 |
| 1594 // Set the cache root to a non existent path, so the initialization fails. | 1595 // Set the cache root to a non existent path, so the initialization fails. |
| 1595 DriveCache* cache = DriveCache::CreateDriveCacheOnUIThread( | 1596 DriveCache* cache = DriveCache::CreateDriveCacheOnUIThread( |
| 1596 FilePath::FromUTF8Unsafe("/somewhere/nonexistent/blah/blah"), | 1597 FilePath::FromUTF8Unsafe("/somewhere/nonexistent/blah/blah"), |
| 1597 pool->GetSequencedTaskRunner(pool->GetSequenceToken())); | 1598 pool->GetSequencedTaskRunner(pool->GetSequenceToken())); |
| 1598 | 1599 |
| 1599 bool success = false; | 1600 bool success = false; |
| 1600 cache->RequestInitializeOnUIThread( | 1601 cache->RequestInitializeOnUIThread( |
| 1601 base::Bind(&test_util::CopyResultFromInitializeCacheCallback, | 1602 base::Bind(&test_util::CopyResultFromInitializeCacheCallback, |
| 1602 &success)); | 1603 &success)); |
| 1603 test_util::RunBlockingPoolTask(); | 1604 gdata::test_util::RunBlockingPoolTask(); |
| 1604 EXPECT_FALSE(success); | 1605 EXPECT_FALSE(success); |
| 1605 | 1606 |
| 1606 cache->DestroyOnUIThread(); | 1607 cache->DestroyOnUIThread(); |
| 1607 test_util::RunBlockingPoolTask(); | 1608 gdata::test_util::RunBlockingPoolTask(); |
| 1608 } | 1609 } |
| 1609 | 1610 |
| 1610 } // namespace gdata | 1611 } // namespace drive |
| OLD | NEW |