| 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 |