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_system.h" | 5 #include "chrome/browser/chromeos/drive/file_system.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 618 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
629 ASSERT_TRUE( | 629 ASSERT_TRUE( |
630 LoadChangeFeed("chromeos/gdata/delta_file_deleted_in_directory.json")); | 630 LoadChangeFeed("chromeos/gdata/delta_file_deleted_in_directory.json")); |
631 EXPECT_TRUE( | 631 EXPECT_TRUE( |
632 EntryExists(base::FilePath(FILE_PATH_LITERAL("drive/root/Directory 1")))); | 632 EntryExists(base::FilePath(FILE_PATH_LITERAL("drive/root/Directory 1")))); |
633 EXPECT_FALSE(EntryExists(base::FilePath( | 633 EXPECT_FALSE(EntryExists(base::FilePath( |
634 FILE_PATH_LITERAL("drive/root/Directory 1/Added file.gdoc")))); | 634 FILE_PATH_LITERAL("drive/root/Directory 1/Added file.gdoc")))); |
635 } | 635 } |
636 | 636 |
637 TEST_F(FileSystemTest, ChangeFeed_AddFileToNewDirectory) { | 637 TEST_F(FileSystemTest, ChangeFeed_AddFileToNewDirectory) { |
638 ASSERT_TRUE(LoadRootFeedDocument()); | 638 ASSERT_TRUE(LoadRootFeedDocument()); |
639 // Add file to a new directory. | 639 ASSERT_FALSE(EntryExists(base::FilePath( |
| 640 FILE_PATH_LITERAL("drive/root/New Directory/New File.txt")))); |
| 641 |
640 EXPECT_CALL(*mock_directory_observer_, OnDirectoryChanged( | 642 EXPECT_CALL(*mock_directory_observer_, OnDirectoryChanged( |
641 Eq(base::FilePath(FILE_PATH_LITERAL("drive/root"))))).Times(1); | 643 Eq(base::FilePath(FILE_PATH_LITERAL("drive/root"))))).Times(1); |
642 EXPECT_CALL(*mock_directory_observer_, OnDirectoryChanged( | 644 EXPECT_CALL(*mock_directory_observer_, OnDirectoryChanged( |
643 Eq(base::FilePath(FILE_PATH_LITERAL("drive/root/New Directory"))))) | 645 Eq(base::FilePath(FILE_PATH_LITERAL("drive/root/New Directory"))))) |
644 .Times(1); | 646 .Times(1); |
645 | 647 |
646 ASSERT_TRUE( | 648 // This adds "drive/root/New Directory" and then |
647 LoadChangeFeed("chromeos/gdata/delta_file_added_in_new_directory.json")); | 649 // "drive/root/New Directory/New File.txt" on the server. |
| 650 google_apis::GDataErrorCode error = google_apis::GDATA_OTHER_ERROR; |
| 651 scoped_ptr<google_apis::ResourceEntry> entry; |
| 652 fake_drive_service_->AddNewDirectory( |
| 653 fake_drive_service_->GetRootResourceId(), |
| 654 "New Directory", |
| 655 google_apis::test_util::CreateCopyResultCallback(&error, &entry)); |
| 656 google_apis::test_util::RunBlockingPoolTask(); |
| 657 ASSERT_EQ(google_apis::HTTP_CREATED, error); |
648 | 658 |
| 659 error = google_apis::GDATA_OTHER_ERROR; |
| 660 fake_drive_service_->AddNewFile( |
| 661 "text/plain", |
| 662 "hello world", |
| 663 entry->resource_id(), |
| 664 "New File.txt", |
| 665 false, |
| 666 google_apis::test_util::CreateCopyResultCallback(&error, &entry)); |
| 667 google_apis::test_util::RunBlockingPoolTask(); |
| 668 ASSERT_EQ(google_apis::HTTP_CREATED, error); |
| 669 |
| 670 // Load the change list. |
| 671 file_system_->CheckForUpdates(); |
| 672 google_apis::test_util::RunBlockingPoolTask(); |
| 673 |
| 674 // Verify that the update is reflected. |
649 EXPECT_TRUE( | 675 EXPECT_TRUE( |
650 EntryExists(base::FilePath( | 676 EntryExists(base::FilePath( |
651 FILE_PATH_LITERAL("drive/root/New Directory")))); | 677 FILE_PATH_LITERAL("drive/root/New Directory")))); |
652 EXPECT_TRUE(EntryExists(base::FilePath( | 678 EXPECT_TRUE(EntryExists(base::FilePath( |
653 FILE_PATH_LITERAL("drive/root/New Directory/File in new dir.gdoc")))); | 679 FILE_PATH_LITERAL("drive/root/New Directory/New File.txt")))); |
654 } | 680 } |
655 | 681 |
656 TEST_F(FileSystemTest, ChangeFeed_AddFileToNewButDeletedDirectory) { | 682 TEST_F(FileSystemTest, ChangeFeed_AddFileToNewButDeletedDirectory) { |
657 ASSERT_TRUE(LoadRootFeedDocument()); | 683 ASSERT_TRUE(LoadRootFeedDocument()); |
658 | 684 |
659 // This feed contains the following updates: | 685 // This feed contains the following updates: |
660 // 1) A new PDF file is added to a new directory | 686 // 1) A new PDF file is added to a new directory |
661 // 2) but the new directory is marked "deleted" (i.e. moved to Trash) | 687 // 2) but the new directory is marked "deleted" (i.e. moved to Trash) |
662 // Hence, the PDF file should be just ignored. | 688 // Hence, the PDF file should be just ignored. |
663 ASSERT_TRUE(LoadChangeFeed( | 689 ASSERT_TRUE(LoadChangeFeed( |
664 "chromeos/gdata/delta_file_added_in_new_but_deleted_directory.json")); | 690 "chromeos/gdata/delta_file_added_in_new_but_deleted_directory.json")); |
665 } | 691 } |
666 | 692 |
667 TEST_F(FileSystemTest, ChangeFeed_DirectoryMovedFromRootToDirectory) { | 693 TEST_F(FileSystemTest, ChangeFeed_DirectoryMovedFromRootToDirectory) { |
668 ASSERT_TRUE(LoadRootFeedDocument()); | 694 ASSERT_TRUE(LoadRootFeedDocument()); |
| 695 ASSERT_TRUE(EntryExists(base::FilePath(FILE_PATH_LITERAL( |
| 696 "drive/root/Directory 1")))); |
669 | 697 |
670 EXPECT_TRUE(EntryExists(base::FilePath(FILE_PATH_LITERAL( | |
671 "drive/root/Directory 2 excludeDir-test")))); | |
672 EXPECT_TRUE(EntryExists(base::FilePath(FILE_PATH_LITERAL( | |
673 "drive/root/Directory 1")))); | |
674 EXPECT_TRUE(EntryExists(base::FilePath(FILE_PATH_LITERAL( | |
675 "drive/root/Directory 1/SubDirectory File 1.txt")))); | |
676 EXPECT_TRUE(EntryExists(base::FilePath(FILE_PATH_LITERAL( | |
677 "drive/root/Directory 1/Sub Directory Folder")))); | |
678 EXPECT_TRUE(EntryExists(base::FilePath(FILE_PATH_LITERAL( | |
679 "drive/root/Directory 1/Sub Directory Folder/" | |
680 "Sub Sub Directory Folder")))); | |
681 | |
682 // This will move "Directory 1" from "drive/root/" to | |
683 // "drive/root/Directory 2/". | |
684 EXPECT_CALL(*mock_directory_observer_, OnDirectoryChanged( | 698 EXPECT_CALL(*mock_directory_observer_, OnDirectoryChanged( |
685 Eq(base::FilePath(FILE_PATH_LITERAL("drive/root"))))).Times(1); | 699 Eq(base::FilePath(FILE_PATH_LITERAL("drive/root"))))).Times(1); |
686 EXPECT_CALL(*mock_directory_observer_, OnDirectoryChanged( | 700 EXPECT_CALL(*mock_directory_observer_, OnDirectoryChanged( |
687 Eq(base::FilePath(FILE_PATH_LITERAL("drive/root/Directory 1"))))) | 701 Eq(base::FilePath(FILE_PATH_LITERAL("drive/root/Directory 1"))))) |
688 .Times(1); | 702 .Times(1); |
689 EXPECT_CALL(*mock_directory_observer_, OnDirectoryChanged( | 703 EXPECT_CALL(*mock_directory_observer_, OnDirectoryChanged( |
690 Eq(base::FilePath(FILE_PATH_LITERAL( | 704 Eq(base::FilePath(FILE_PATH_LITERAL( |
691 "drive/root/Directory 2 excludeDir-test"))))).Times(1); | 705 "drive/root/Directory 2 excludeDir-test"))))).Times(1); |
692 EXPECT_CALL(*mock_directory_observer_, OnDirectoryChanged( | 706 EXPECT_CALL(*mock_directory_observer_, OnDirectoryChanged( |
693 Eq(base::FilePath(FILE_PATH_LITERAL( | 707 Eq(base::FilePath(FILE_PATH_LITERAL( |
694 "drive/root/Directory 2 excludeDir-test/Directory 1"))))).Times(1); | 708 "drive/root/Directory 2 excludeDir-test/Directory 1"))))).Times(1); |
695 ASSERT_TRUE(LoadChangeFeed( | |
696 "chromeos/gdata/delta_dir_moved_from_root_to_directory.json")); | |
697 | 709 |
698 EXPECT_TRUE(EntryExists(base::FilePath(FILE_PATH_LITERAL( | 710 // This will move "Directory 1" from "drive/root/" to |
699 "drive/root/Directory 2 excludeDir-test")))); | 711 // "drive/root/Directory 2 excludeDir-test/" on the server. |
| 712 google_apis::GDataErrorCode error = google_apis::GDATA_OTHER_ERROR; |
| 713 fake_drive_service_->AddResourceToDirectory( |
| 714 "folder:sub_dir_folder_2_self_link", |
| 715 "folder:1_folder_resource_id", |
| 716 google_apis::test_util::CreateCopyResultCallback(&error)); |
| 717 google_apis::test_util::RunBlockingPoolTask(); |
| 718 ASSERT_EQ(google_apis::HTTP_SUCCESS, error); |
| 719 |
| 720 error = google_apis::GDATA_OTHER_ERROR; |
| 721 fake_drive_service_->RemoveResourceFromDirectory( |
| 722 fake_drive_service_->GetRootResourceId(), |
| 723 "folder:1_folder_resource_id", |
| 724 google_apis::test_util::CreateCopyResultCallback(&error)); |
| 725 google_apis::test_util::RunBlockingPoolTask(); |
| 726 ASSERT_EQ(google_apis::HTTP_SUCCESS, error); |
| 727 |
| 728 // Load the change list. |
| 729 file_system_->CheckForUpdates(); |
| 730 google_apis::test_util::RunBlockingPoolTask(); |
| 731 |
| 732 // Verify that the update is reflected. |
700 EXPECT_FALSE(EntryExists(base::FilePath(FILE_PATH_LITERAL( | 733 EXPECT_FALSE(EntryExists(base::FilePath(FILE_PATH_LITERAL( |
701 "drive/root/Directory 1")))); | 734 "drive/root/Directory 1")))); |
702 EXPECT_TRUE(EntryExists(base::FilePath(FILE_PATH_LITERAL( | 735 EXPECT_TRUE(EntryExists(base::FilePath(FILE_PATH_LITERAL( |
703 "drive/root/Directory 2 excludeDir-test/Directory 1")))); | 736 "drive/root/Directory 2 excludeDir-test/Directory 1")))); |
704 EXPECT_TRUE(EntryExists(base::FilePath(FILE_PATH_LITERAL( | 737 EXPECT_TRUE(EntryExists(base::FilePath(FILE_PATH_LITERAL( |
705 "drive/root/Directory 2 excludeDir-test/Directory 1/" | 738 "drive/root/Directory 2 excludeDir-test/Directory 1/" |
706 "SubDirectory File 1.txt")))); | 739 "SubDirectory File 1.txt")))); |
707 EXPECT_TRUE(EntryExists(base::FilePath(FILE_PATH_LITERAL( | 740 EXPECT_TRUE(EntryExists(base::FilePath(FILE_PATH_LITERAL( |
708 "drive/root/Directory 2 excludeDir-test/Directory 1/" | 741 "drive/root/Directory 2 excludeDir-test/Directory 1/" |
709 "Sub Directory Folder")))); | 742 "Sub Directory Folder")))); |
710 EXPECT_TRUE(EntryExists(base::FilePath(FILE_PATH_LITERAL( | 743 EXPECT_TRUE(EntryExists(base::FilePath(FILE_PATH_LITERAL( |
711 "drive/root/Directory 2 excludeDir-test/Directory 1/Sub Directory Folder/" | 744 "drive/root/Directory 2 excludeDir-test/Directory 1/Sub Directory Folder/" |
712 "Sub Sub Directory Folder")))); | 745 "Sub Sub Directory Folder")))); |
713 } | 746 } |
714 | 747 |
715 TEST_F(FileSystemTest, ChangeFeed_FileMovedFromDirectoryToRoot) { | 748 TEST_F(FileSystemTest, ChangeFeed_FileMovedFromDirectoryToRoot) { |
716 ASSERT_TRUE(LoadRootFeedDocument()); | 749 ASSERT_TRUE(LoadRootFeedDocument()); |
717 | 750 ASSERT_TRUE(EntryExists(base::FilePath(FILE_PATH_LITERAL( |
718 EXPECT_TRUE(EntryExists(base::FilePath(FILE_PATH_LITERAL( | |
719 "drive/root/Directory 1")))); | |
720 EXPECT_TRUE(EntryExists(base::FilePath(FILE_PATH_LITERAL( | |
721 "drive/root/Directory 1/Sub Directory Folder")))); | |
722 EXPECT_TRUE(EntryExists(base::FilePath(FILE_PATH_LITERAL( | |
723 "drive/root/Directory 1/Sub Directory Folder/" | |
724 "Sub Sub Directory Folder")))); | |
725 EXPECT_TRUE(EntryExists(base::FilePath(FILE_PATH_LITERAL( | |
726 "drive/root/Directory 1/SubDirectory File 1.txt")))); | 751 "drive/root/Directory 1/SubDirectory File 1.txt")))); |
727 | 752 |
728 EXPECT_CALL(*mock_directory_observer_, OnDirectoryChanged( | 753 EXPECT_CALL(*mock_directory_observer_, OnDirectoryChanged( |
729 Eq(base::FilePath(FILE_PATH_LITERAL("drive/root"))))).Times(1); | 754 Eq(base::FilePath(FILE_PATH_LITERAL("drive/root"))))).Times(1); |
730 EXPECT_CALL(*mock_directory_observer_, OnDirectoryChanged( | 755 EXPECT_CALL(*mock_directory_observer_, OnDirectoryChanged( |
731 Eq(base::FilePath(FILE_PATH_LITERAL("drive/root/Directory 1"))))) | 756 Eq(base::FilePath(FILE_PATH_LITERAL("drive/root/Directory 1"))))) |
732 .Times(1); | 757 .Times(1); |
733 ASSERT_TRUE(LoadChangeFeed( | |
734 "chromeos/gdata/delta_file_moved_from_directory_to_root.json")); | |
735 | 758 |
736 EXPECT_TRUE(EntryExists(base::FilePath(FILE_PATH_LITERAL( | 759 // This will move "drive/root/Directory 1/SubDirectory File 1.txt" |
737 "drive/root/Directory 1")))); | 760 // to "drive/root/SubDirectory File 1.txt" on the server. |
738 EXPECT_TRUE(EntryExists(base::FilePath(FILE_PATH_LITERAL( | 761 google_apis::GDataErrorCode error = google_apis::GDATA_OTHER_ERROR; |
739 "drive/root/Directory 1/Sub Directory Folder")))); | 762 fake_drive_service_->AddResourceToDirectory( |
740 EXPECT_TRUE(EntryExists(base::FilePath(FILE_PATH_LITERAL( | 763 fake_drive_service_->GetRootResourceId(), |
741 "drive/root/Directory 1/Sub Directory Folder/" | 764 "file:subdirectory_file_1_id", |
742 "Sub Sub Directory Folder")))); | 765 google_apis::test_util::CreateCopyResultCallback(&error)); |
| 766 google_apis::test_util::RunBlockingPoolTask(); |
| 767 ASSERT_EQ(google_apis::HTTP_SUCCESS, error); |
| 768 |
| 769 error = google_apis::GDATA_OTHER_ERROR; |
| 770 fake_drive_service_->RemoveResourceFromDirectory( |
| 771 "folder:1_folder_resource_id", |
| 772 "file:subdirectory_file_1_id", |
| 773 google_apis::test_util::CreateCopyResultCallback(&error)); |
| 774 google_apis::test_util::RunBlockingPoolTask(); |
| 775 ASSERT_EQ(google_apis::HTTP_SUCCESS, error); |
| 776 |
| 777 // Load the change list. |
| 778 file_system_->CheckForUpdates(); |
| 779 google_apis::test_util::RunBlockingPoolTask(); |
| 780 |
| 781 // Verify that the update is reflected. |
743 EXPECT_FALSE(EntryExists(base::FilePath(FILE_PATH_LITERAL( | 782 EXPECT_FALSE(EntryExists(base::FilePath(FILE_PATH_LITERAL( |
744 "drive/root/Directory 1/SubDirectory File 1.txt")))); | 783 "drive/root/Directory 1/SubDirectory File 1.txt")))); |
745 EXPECT_TRUE(EntryExists(base::FilePath(FILE_PATH_LITERAL( | 784 EXPECT_TRUE(EntryExists(base::FilePath(FILE_PATH_LITERAL( |
746 "drive/root/SubDirectory File 1.txt")))); | 785 "drive/root/SubDirectory File 1.txt")))); |
747 } | 786 } |
748 | 787 |
749 TEST_F(FileSystemTest, ChangeFeed_FileRenamedInDirectory) { | 788 TEST_F(FileSystemTest, ChangeFeed_FileRenamedInDirectory) { |
750 ASSERT_TRUE(LoadRootFeedDocument()); | 789 ASSERT_TRUE(LoadRootFeedDocument()); |
751 | 790 ASSERT_TRUE(EntryExists(base::FilePath(FILE_PATH_LITERAL( |
752 EXPECT_TRUE(EntryExists(base::FilePath(FILE_PATH_LITERAL( | |
753 "drive/root/Directory 1")))); | |
754 EXPECT_TRUE(EntryExists(base::FilePath(FILE_PATH_LITERAL( | |
755 "drive/root/Directory 1/SubDirectory File 1.txt")))); | 791 "drive/root/Directory 1/SubDirectory File 1.txt")))); |
756 | 792 |
757 EXPECT_CALL(*mock_directory_observer_, OnDirectoryChanged( | 793 EXPECT_CALL(*mock_directory_observer_, OnDirectoryChanged( |
758 Eq(base::FilePath(FILE_PATH_LITERAL("drive/root"))))).Times(1); | |
759 EXPECT_CALL(*mock_directory_observer_, OnDirectoryChanged( | |
760 Eq(base::FilePath(FILE_PATH_LITERAL("drive/root/Directory 1"))))) | 794 Eq(base::FilePath(FILE_PATH_LITERAL("drive/root/Directory 1"))))) |
761 .Times(1); | 795 .Times(1); |
762 ASSERT_TRUE(LoadChangeFeed( | |
763 "chromeos/gdata/delta_file_renamed_in_directory.json")); | |
764 | 796 |
765 EXPECT_TRUE(EntryExists(base::FilePath(FILE_PATH_LITERAL( | 797 // Rename on the server. |
766 "drive/root/Directory 1")))); | 798 google_apis::GDataErrorCode error = google_apis::GDATA_OTHER_ERROR; |
| 799 fake_drive_service_->RenameResource( |
| 800 "file:subdirectory_file_1_id", |
| 801 "New SubDirectory File 1.txt", |
| 802 google_apis::test_util::CreateCopyResultCallback(&error)); |
| 803 google_apis::test_util::RunBlockingPoolTask(); |
| 804 ASSERT_EQ(google_apis::HTTP_SUCCESS, error); |
| 805 |
| 806 // Load the change list. |
| 807 file_system_->CheckForUpdates(); |
| 808 google_apis::test_util::RunBlockingPoolTask(); |
| 809 |
| 810 // Verify that the update is reflected. |
767 EXPECT_FALSE(EntryExists(base::FilePath(FILE_PATH_LITERAL( | 811 EXPECT_FALSE(EntryExists(base::FilePath(FILE_PATH_LITERAL( |
768 "drive/root/Directory 1/SubDirectory File 1.txt")))); | 812 "drive/root/Directory 1/SubDirectory File 1.txt")))); |
769 EXPECT_TRUE(EntryExists(base::FilePath(FILE_PATH_LITERAL( | 813 EXPECT_TRUE(EntryExists(base::FilePath(FILE_PATH_LITERAL( |
770 "drive/root/Directory 1/New SubDirectory File 1.txt")))); | 814 "drive/root/Directory 1/New SubDirectory File 1.txt")))); |
771 } | 815 } |
772 | 816 |
773 TEST_F(FileSystemTest, CachedFeedLoadingThenServerFeedLoading) { | 817 TEST_F(FileSystemTest, CachedFeedLoadingThenServerFeedLoading) { |
774 ASSERT_TRUE(SetUpTestFileSystem(USE_SERVER_TIMESTAMP)); | 818 ASSERT_TRUE(SetUpTestFileSystem(USE_SERVER_TIMESTAMP)); |
775 | 819 |
776 // Kicks loading of cached file system and query for server update. | 820 // Kicks loading of cached file system and query for server update. |
(...skipping 897 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1674 entry->resource_id(), | 1718 entry->resource_id(), |
1675 entry->file_specific_info().file_md5(), | 1719 entry->file_specific_info().file_md5(), |
1676 google_apis::test_util::CreateCopyResultCallback(&success, &cache_entry)); | 1720 google_apis::test_util::CreateCopyResultCallback(&success, &cache_entry)); |
1677 google_apis::test_util::RunBlockingPoolTask(); | 1721 google_apis::test_util::RunBlockingPoolTask(); |
1678 | 1722 |
1679 EXPECT_TRUE(success); | 1723 EXPECT_TRUE(success); |
1680 EXPECT_FALSE(cache_entry.is_mounted()); | 1724 EXPECT_FALSE(cache_entry.is_mounted()); |
1681 } | 1725 } |
1682 | 1726 |
1683 } // namespace drive | 1727 } // namespace drive |
OLD | NEW |