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/file_cache.h" | 5 #include "chrome/browser/chromeos/drive/file_cache.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/file_util.h" | 10 #include "base/file_util.h" |
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
193 | 193 |
194 FileError error = FILE_ERROR_OK; | 194 FileError error = FILE_ERROR_OK; |
195 cache_->UnpinOnUIThread( | 195 cache_->UnpinOnUIThread( |
196 resource_id, | 196 resource_id, |
197 google_apis::test_util::CreateCopyResultCallback(&error)); | 197 google_apis::test_util::CreateCopyResultCallback(&error)); |
198 test_util::RunBlockingPoolTask(); | 198 test_util::RunBlockingPoolTask(); |
199 VerifyCacheFileState(error, resource_id, std::string()); | 199 VerifyCacheFileState(error, resource_id, std::string()); |
200 } | 200 } |
201 | 201 |
202 void TestMarkDirty(const std::string& resource_id, | 202 void TestMarkDirty(const std::string& resource_id, |
203 const std::string& md5, | |
204 FileError expected_error, | 203 FileError expected_error, |
205 int expected_cache_state) { | 204 int expected_cache_state) { |
206 expected_error_ = expected_error; | 205 expected_error_ = expected_error; |
207 expected_cache_state_ = expected_cache_state; | 206 expected_cache_state_ = expected_cache_state; |
208 | 207 |
209 FileError error = FILE_ERROR_OK; | 208 FileError error = FILE_ERROR_OK; |
210 cache_->MarkDirtyOnUIThread( | 209 cache_->MarkDirtyOnUIThread( |
211 resource_id, md5, | 210 resource_id, |
212 google_apis::test_util::CreateCopyResultCallback(&error)); | 211 google_apis::test_util::CreateCopyResultCallback(&error)); |
213 test_util::RunBlockingPoolTask(); | 212 test_util::RunBlockingPoolTask(); |
214 | 213 |
215 VerifyCacheFileState(error, resource_id, md5); | 214 VerifyCacheFileState(error, resource_id, std::string()); |
216 | 215 |
217 // Verify filename. | 216 // Verify filename. |
218 if (error == FILE_ERROR_OK) { | 217 if (error == FILE_ERROR_OK) { |
219 base::FilePath cache_file_path; | 218 base::FilePath cache_file_path; |
220 cache_->GetFileOnUIThread( | 219 cache_->GetFileOnUIThread( |
221 resource_id, md5, | 220 resource_id, std::string(), |
222 google_apis::test_util::CreateCopyResultCallback( | 221 google_apis::test_util::CreateCopyResultCallback( |
223 &error, &cache_file_path)); | 222 &error, &cache_file_path)); |
224 test_util::RunBlockingPoolTask(); | 223 test_util::RunBlockingPoolTask(); |
225 | 224 |
226 EXPECT_EQ(FILE_ERROR_OK, error); | 225 EXPECT_EQ(FILE_ERROR_OK, error); |
227 EXPECT_EQ(util::EscapeCacheFileName(resource_id), | 226 EXPECT_EQ(util::EscapeCacheFileName(resource_id), |
228 cache_file_path.BaseName().AsUTF8Unsafe()); | 227 cache_file_path.BaseName().AsUTF8Unsafe()); |
229 } | 228 } |
230 } | 229 } |
231 | 230 |
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
547 | 546 |
548 TEST_F(FileCacheTestOnUIThread, DirtyCacheSimple) { | 547 TEST_F(FileCacheTestOnUIThread, DirtyCacheSimple) { |
549 std::string resource_id("pdf:1a2b"); | 548 std::string resource_id("pdf:1a2b"); |
550 std::string md5("abcdef0123456789"); | 549 std::string md5("abcdef0123456789"); |
551 | 550 |
552 // First store a file to cache. | 551 // First store a file to cache. |
553 TestStoreToCache(resource_id, md5, dummy_file_path_, | 552 TestStoreToCache(resource_id, md5, dummy_file_path_, |
554 FILE_ERROR_OK, TEST_CACHE_STATE_PRESENT); | 553 FILE_ERROR_OK, TEST_CACHE_STATE_PRESENT); |
555 | 554 |
556 // Mark the file dirty. | 555 // Mark the file dirty. |
557 TestMarkDirty(resource_id, md5, FILE_ERROR_OK, | 556 TestMarkDirty(resource_id, FILE_ERROR_OK, |
558 TEST_CACHE_STATE_PRESENT | TEST_CACHE_STATE_DIRTY); | 557 TEST_CACHE_STATE_PRESENT | TEST_CACHE_STATE_DIRTY); |
559 | 558 |
560 // Clear dirty state of the file. | 559 // Clear dirty state of the file. |
561 TestClearDirty(resource_id, md5, FILE_ERROR_OK, TEST_CACHE_STATE_PRESENT); | 560 TestClearDirty(resource_id, md5, FILE_ERROR_OK, TEST_CACHE_STATE_PRESENT); |
562 } | 561 } |
563 | 562 |
564 TEST_F(FileCacheTestOnUIThread, DirtyCachePinned) { | 563 TEST_F(FileCacheTestOnUIThread, DirtyCachePinned) { |
565 std::string resource_id("pdf:1a2b"); | 564 std::string resource_id("pdf:1a2b"); |
566 std::string md5("abcdef0123456789"); | 565 std::string md5("abcdef0123456789"); |
567 | 566 |
568 // First store a file to cache and pin it. | 567 // First store a file to cache and pin it. |
569 TestStoreToCache(resource_id, md5, dummy_file_path_, | 568 TestStoreToCache(resource_id, md5, dummy_file_path_, |
570 FILE_ERROR_OK, TEST_CACHE_STATE_PRESENT); | 569 FILE_ERROR_OK, TEST_CACHE_STATE_PRESENT); |
571 TestPin(resource_id, FILE_ERROR_OK, | 570 TestPin(resource_id, FILE_ERROR_OK, |
572 TEST_CACHE_STATE_PRESENT | TEST_CACHE_STATE_PINNED); | 571 TEST_CACHE_STATE_PRESENT | TEST_CACHE_STATE_PINNED); |
573 | 572 |
574 // Mark the file dirty. | 573 // Mark the file dirty. |
575 TestMarkDirty(resource_id, md5, FILE_ERROR_OK, | 574 TestMarkDirty(resource_id, FILE_ERROR_OK, |
576 TEST_CACHE_STATE_PRESENT | | 575 TEST_CACHE_STATE_PRESENT | |
577 TEST_CACHE_STATE_DIRTY | | 576 TEST_CACHE_STATE_DIRTY | |
578 TEST_CACHE_STATE_PINNED); | 577 TEST_CACHE_STATE_PINNED); |
579 | 578 |
580 // Clear dirty state of the file. | 579 // Clear dirty state of the file. |
581 TestClearDirty(resource_id, md5, FILE_ERROR_OK, | 580 TestClearDirty(resource_id, md5, FILE_ERROR_OK, |
582 TEST_CACHE_STATE_PRESENT | TEST_CACHE_STATE_PINNED); | 581 TEST_CACHE_STATE_PRESENT | TEST_CACHE_STATE_PINNED); |
583 } | 582 } |
584 | 583 |
585 TEST_F(FileCacheTestOnUIThread, PinAndUnpinDirtyCache) { | 584 TEST_F(FileCacheTestOnUIThread, PinAndUnpinDirtyCache) { |
586 std::string resource_id("pdf:1a2b"); | 585 std::string resource_id("pdf:1a2b"); |
587 std::string md5("abcdef0123456789"); | 586 std::string md5("abcdef0123456789"); |
588 | 587 |
589 // First store a file to cache and mark it as dirty. | 588 // First store a file to cache and mark it as dirty. |
590 TestStoreToCache(resource_id, md5, dummy_file_path_, | 589 TestStoreToCache(resource_id, md5, dummy_file_path_, |
591 FILE_ERROR_OK, TEST_CACHE_STATE_PRESENT); | 590 FILE_ERROR_OK, TEST_CACHE_STATE_PRESENT); |
592 TestMarkDirty(resource_id, md5, FILE_ERROR_OK, | 591 TestMarkDirty(resource_id, FILE_ERROR_OK, |
593 TEST_CACHE_STATE_PRESENT | TEST_CACHE_STATE_DIRTY); | 592 TEST_CACHE_STATE_PRESENT | TEST_CACHE_STATE_DIRTY); |
594 | 593 |
595 // Verifies dirty file exists. | 594 // Verifies dirty file exists. |
596 base::FilePath dirty_path; | 595 base::FilePath dirty_path; |
597 FileError error = FILE_ERROR_FAILED; | 596 FileError error = FILE_ERROR_FAILED; |
598 cache_->GetFileOnUIThread( | 597 cache_->GetFileOnUIThread( |
599 resource_id, md5, | 598 resource_id, md5, |
600 google_apis::test_util::CreateCopyResultCallback(&error, &dirty_path)); | 599 google_apis::test_util::CreateCopyResultCallback(&error, &dirty_path)); |
601 test_util::RunBlockingPoolTask(); | 600 test_util::RunBlockingPoolTask(); |
602 EXPECT_EQ(FILE_ERROR_OK, error); | 601 EXPECT_EQ(FILE_ERROR_OK, error); |
(...skipping 18 matching lines...) Expand all Loading... |
621 | 620 |
622 TEST_F(FileCacheTestOnUIThread, DirtyCacheRepetitive) { | 621 TEST_F(FileCacheTestOnUIThread, DirtyCacheRepetitive) { |
623 std::string resource_id("pdf:1a2b"); | 622 std::string resource_id("pdf:1a2b"); |
624 std::string md5("abcdef0123456789"); | 623 std::string md5("abcdef0123456789"); |
625 | 624 |
626 // First store a file to cache. | 625 // First store a file to cache. |
627 TestStoreToCache(resource_id, md5, dummy_file_path_, | 626 TestStoreToCache(resource_id, md5, dummy_file_path_, |
628 FILE_ERROR_OK, TEST_CACHE_STATE_PRESENT); | 627 FILE_ERROR_OK, TEST_CACHE_STATE_PRESENT); |
629 | 628 |
630 // Mark the file dirty. | 629 // Mark the file dirty. |
631 TestMarkDirty(resource_id, md5, FILE_ERROR_OK, | 630 TestMarkDirty(resource_id, FILE_ERROR_OK, |
632 TEST_CACHE_STATE_PRESENT | TEST_CACHE_STATE_DIRTY); | 631 TEST_CACHE_STATE_PRESENT | TEST_CACHE_STATE_DIRTY); |
633 | 632 |
634 // Again, mark the file dirty. Nothing should change. | 633 // Again, mark the file dirty. Nothing should change. |
635 TestMarkDirty(resource_id, md5, FILE_ERROR_OK, | 634 TestMarkDirty(resource_id, FILE_ERROR_OK, |
636 TEST_CACHE_STATE_PRESENT | TEST_CACHE_STATE_DIRTY); | 635 TEST_CACHE_STATE_PRESENT | TEST_CACHE_STATE_DIRTY); |
637 | 636 |
638 // Clear dirty state of the file. | 637 // Clear dirty state of the file. |
639 TestClearDirty(resource_id, md5, FILE_ERROR_OK, TEST_CACHE_STATE_PRESENT); | 638 TestClearDirty(resource_id, md5, FILE_ERROR_OK, TEST_CACHE_STATE_PRESENT); |
640 | 639 |
641 // Again, clear dirty state of the file, which is no longer dirty. | 640 // Again, clear dirty state of the file, which is no longer dirty. |
642 TestClearDirty(resource_id, md5, FILE_ERROR_INVALID_OPERATION, | 641 TestClearDirty(resource_id, md5, FILE_ERROR_INVALID_OPERATION, |
643 TEST_CACHE_STATE_PRESENT); | 642 TEST_CACHE_STATE_PRESENT); |
644 } | 643 } |
645 | 644 |
646 TEST_F(FileCacheTestOnUIThread, DirtyCacheInvalid) { | 645 TEST_F(FileCacheTestOnUIThread, DirtyCacheInvalid) { |
647 std::string resource_id("pdf:1a2b"); | 646 std::string resource_id("pdf:1a2b"); |
648 std::string md5("abcdef0123456789"); | 647 std::string md5("abcdef0123456789"); |
649 | 648 |
650 // Mark a non-existent file dirty. | 649 // Mark a non-existent file dirty. |
651 TestMarkDirty(resource_id, md5, FILE_ERROR_NOT_FOUND, TEST_CACHE_STATE_NONE); | 650 TestMarkDirty(resource_id, FILE_ERROR_NOT_FOUND, TEST_CACHE_STATE_NONE); |
652 | 651 |
653 // Clear dirty state of a non-existent file. | 652 // Clear dirty state of a non-existent file. |
654 TestClearDirty(resource_id, md5, FILE_ERROR_NOT_FOUND, TEST_CACHE_STATE_NONE); | 653 TestClearDirty(resource_id, md5, FILE_ERROR_NOT_FOUND, TEST_CACHE_STATE_NONE); |
655 | 654 |
656 // Store a file to cache. | 655 // Store a file to cache. |
657 TestStoreToCache(resource_id, md5, dummy_file_path_, | 656 TestStoreToCache(resource_id, md5, dummy_file_path_, |
658 FILE_ERROR_OK, TEST_CACHE_STATE_PRESENT); | 657 FILE_ERROR_OK, TEST_CACHE_STATE_PRESENT); |
659 | 658 |
660 // Clear dirty state of a non-dirty existing file. | 659 // Clear dirty state of a non-dirty existing file. |
661 TestClearDirty(resource_id, md5, FILE_ERROR_INVALID_OPERATION, | 660 TestClearDirty(resource_id, md5, FILE_ERROR_INVALID_OPERATION, |
662 TEST_CACHE_STATE_PRESENT); | 661 TEST_CACHE_STATE_PRESENT); |
663 | 662 |
664 // Mark an existing file dirty, then store a new file to the same resource id | 663 // Mark an existing file dirty, then store a new file to the same resource id |
665 // but different md5, which should fail. | 664 // but different md5, which should fail. |
666 TestMarkDirty(resource_id, md5, FILE_ERROR_OK, | 665 TestMarkDirty(resource_id, FILE_ERROR_OK, |
667 TEST_CACHE_STATE_PRESENT | TEST_CACHE_STATE_DIRTY); | 666 TEST_CACHE_STATE_PRESENT | TEST_CACHE_STATE_DIRTY); |
668 md5 = "new_md5"; | 667 md5 = "new_md5"; |
669 TestStoreToCache(resource_id, md5, dummy_file_path_, | 668 TestStoreToCache(resource_id, md5, dummy_file_path_, |
670 FILE_ERROR_IN_USE, | 669 FILE_ERROR_IN_USE, |
671 TEST_CACHE_STATE_PRESENT | TEST_CACHE_STATE_DIRTY); | 670 TEST_CACHE_STATE_PRESENT | TEST_CACHE_STATE_DIRTY); |
672 } | 671 } |
673 | 672 |
674 TEST_F(FileCacheTestOnUIThread, RemoveFromDirtyCache) { | 673 TEST_F(FileCacheTestOnUIThread, RemoveFromDirtyCache) { |
675 std::string resource_id("pdf:1a2b"); | 674 std::string resource_id("pdf:1a2b"); |
676 std::string md5("abcdef0123456789"); | 675 std::string md5("abcdef0123456789"); |
677 | 676 |
678 // Store a file to cache, pin it, mark it dirty and commit it. | 677 // Store a file to cache, pin it, mark it dirty and commit it. |
679 TestStoreToCache(resource_id, md5, dummy_file_path_, | 678 TestStoreToCache(resource_id, md5, dummy_file_path_, |
680 FILE_ERROR_OK, TEST_CACHE_STATE_PRESENT); | 679 FILE_ERROR_OK, TEST_CACHE_STATE_PRESENT); |
681 TestPin(resource_id, FILE_ERROR_OK, | 680 TestPin(resource_id, FILE_ERROR_OK, |
682 TEST_CACHE_STATE_PRESENT | TEST_CACHE_STATE_PINNED); | 681 TEST_CACHE_STATE_PRESENT | TEST_CACHE_STATE_PINNED); |
683 TestMarkDirty(resource_id, md5, FILE_ERROR_OK, | 682 TestMarkDirty(resource_id, FILE_ERROR_OK, |
684 TEST_CACHE_STATE_PRESENT | | 683 TEST_CACHE_STATE_PRESENT | |
685 TEST_CACHE_STATE_PINNED | | 684 TEST_CACHE_STATE_PINNED | |
686 TEST_CACHE_STATE_DIRTY); | 685 TEST_CACHE_STATE_DIRTY); |
687 | 686 |
688 // Try to remove the file. Dirty caches can be removed at the level of | 687 // Try to remove the file. Dirty caches can be removed at the level of |
689 // FileCache::Remove. Upper layer cache clearance functions like | 688 // FileCache::Remove. Upper layer cache clearance functions like |
690 // FreeDiskSpaceIfNeededFor() and RemoveStaleCacheFiles() takes care of | 689 // FreeDiskSpaceIfNeededFor() and RemoveStaleCacheFiles() takes care of |
691 // securing dirty files. | 690 // securing dirty files. |
692 TestRemoveFromCache(resource_id, FILE_ERROR_OK); | 691 TestRemoveFromCache(resource_id, FILE_ERROR_OK); |
693 } | 692 } |
(...skipping 304 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
998 &contents)); | 997 &contents)); |
999 EXPECT_EQ("koo", contents); | 998 EXPECT_EQ("koo", contents); |
1000 contents.clear(); | 999 contents.clear(); |
1001 EXPECT_TRUE(file_util::ReadFileToString(file_directory.AppendASCII("id_kyu"), | 1000 EXPECT_TRUE(file_util::ReadFileToString(file_directory.AppendASCII("id_kyu"), |
1002 &contents)); | 1001 &contents)); |
1003 EXPECT_EQ("kyu", contents); | 1002 EXPECT_EQ("kyu", contents); |
1004 } | 1003 } |
1005 | 1004 |
1006 } // namespace internal | 1005 } // namespace internal |
1007 } // namespace drive | 1006 } // namespace drive |
OLD | NEW |