Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/sync_file_system/drive_backend/metadata_database.h" | 5 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/files/scoped_temp_dir.h" | 8 #include "base/files/scoped_temp_dir.h" |
| 9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
| 10 #include "base/strings/string_number_conversions.h" | 10 #include "base/strings/string_number_conversions.h" |
| (...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 160 ExpectEquivalent(*left_itr, *right_itr); | 160 ExpectEquivalent(*left_itr, *right_itr); |
| 161 ++left_itr; | 161 ++left_itr; |
| 162 ++right_itr; | 162 ++right_itr; |
| 163 } | 163 } |
| 164 } | 164 } |
| 165 | 165 |
| 166 base::FilePath CreateNormalizedPath(const base::FilePath::StringType& path) { | 166 base::FilePath CreateNormalizedPath(const base::FilePath::StringType& path) { |
| 167 return base::FilePath(path).NormalizePathSeparators(); | 167 return base::FilePath(path).NormalizePathSeparators(); |
| 168 } | 168 } |
| 169 | 169 |
| 170 struct IndexType { | |
| 171 bool enable_on_disk; | |
| 172 const char* scope; | |
| 173 } index_types[] = { | |
| 174 {false, "Using index on memory"}, | |
| 175 {true, "Using index on disk"} | |
| 176 }; | |
| 177 | |
| 170 } // namespace | 178 } // namespace |
| 171 | 179 |
| 172 class MetadataDatabaseTest : public testing::Test { | 180 class MetadataDatabaseTest : public testing::Test { |
| 173 public: | 181 public: |
| 174 MetadataDatabaseTest() | 182 MetadataDatabaseTest() |
| 175 : current_change_id_(kInitialChangeID), | 183 : current_change_id_(kInitialChangeID), |
| 176 next_tracker_id_(kSyncRootTrackerID + 1), | 184 next_tracker_id_(kSyncRootTrackerID + 1), |
| 177 next_file_id_number_(1), | 185 next_file_id_number_(1), |
| 178 next_md5_sequence_number_(1) {} | 186 next_md5_sequence_number_(1) {} |
| 179 | 187 |
| 180 virtual ~MetadataDatabaseTest() {} | 188 virtual ~MetadataDatabaseTest() {} |
| 181 | 189 |
| 182 virtual void SetUp() OVERRIDE { | 190 // TODO(peria): Change these methods to SetUp() and TearDown(), |
| 191 // after deleting on-memory index. | |
| 192 void SetUpEnv() { | |
| 183 ASSERT_TRUE(database_dir_.CreateUniqueTempDir()); | 193 ASSERT_TRUE(database_dir_.CreateUniqueTempDir()); |
| 184 in_memory_env_.reset(leveldb::NewMemEnv(leveldb::Env::Default())); | 194 in_memory_env_.reset(leveldb::NewMemEnv(leveldb::Env::Default())); |
| 185 } | 195 } |
| 186 | 196 void TearDownEnv() { |
| 187 virtual void TearDown() OVERRIDE { DropDatabase(); } | 197 DropDatabase(); |
| 198 in_memory_env_.reset(); | |
| 199 EXPECT_TRUE(database_dir_.Delete()); | |
| 200 } | |
| 188 | 201 |
| 189 protected: | 202 protected: |
| 190 std::string GenerateFileID() { | 203 std::string GenerateFileID() { |
| 191 return "file_id_" + base::Int64ToString(next_file_id_number_++); | 204 return "file_id_" + base::Int64ToString(next_file_id_number_++); |
| 192 } | 205 } |
| 193 | 206 |
| 194 int64 GetTrackerIDByFileID(const std::string& file_id) { | 207 int64 GetTrackerIDByFileID(const std::string& file_id) { |
| 195 TrackerIDSet trackers; | 208 TrackerIDSet trackers; |
| 196 if (metadata_database_->FindTrackersByFileID(file_id, &trackers)) { | 209 if (metadata_database_->FindTrackersByFileID(file_id, &trackers)) { |
| 197 EXPECT_FALSE(trackers.empty()); | 210 EXPECT_FALSE(trackers.empty()); |
| 198 return *trackers.begin(); | 211 return *trackers.begin(); |
| 199 } | 212 } |
| 200 return 0; | 213 return 0; |
| 201 } | 214 } |
| 202 | 215 |
| 203 SyncStatusCode InitializeMetadataDatabase() { | 216 SyncStatusCode InitializeMetadataDatabase(bool enable_on_disk_index) { |
| 204 SyncStatusCode status = SYNC_STATUS_UNKNOWN; | 217 SyncStatusCode status = SYNC_STATUS_UNKNOWN; |
| 205 MetadataDatabase::Create(base::ThreadTaskRunnerHandle::Get(), | 218 MetadataDatabase::CreateOnWorkerForTesting( |
| 206 database_dir_.path(), | 219 base::ThreadTaskRunnerHandle::Get(), |
| 207 in_memory_env_.get(), | 220 database_dir_.path(), |
| 208 CreateResultReceiver(&status, | 221 enable_on_disk_index, |
| 209 &metadata_database_)); | 222 in_memory_env_.get(), |
| 223 CreateResultReceiver(&status, &metadata_database_)); | |
| 210 message_loop_.RunUntilIdle(); | 224 message_loop_.RunUntilIdle(); |
| 211 return status; | 225 return status; |
| 212 } | 226 } |
| 213 | 227 |
| 214 void DropDatabase() { | 228 void DropDatabase() { |
| 215 metadata_database_.reset(); | 229 metadata_database_.reset(); |
| 216 message_loop_.RunUntilIdle(); | 230 message_loop_.RunUntilIdle(); |
| 217 } | 231 } |
| 218 | 232 |
| 219 void SetUpDatabaseByTrackedFiles(const TrackedFile** tracked_files, | 233 void SetUpDatabaseByTrackedFiles(const TrackedFile** tracked_files, |
| (...skipping 428 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 648 | 662 |
| 649 int64 current_change_id_; | 663 int64 current_change_id_; |
| 650 int64 next_tracker_id_; | 664 int64 next_tracker_id_; |
| 651 int64 next_file_id_number_; | 665 int64 next_file_id_number_; |
| 652 int64 next_md5_sequence_number_; | 666 int64 next_md5_sequence_number_; |
| 653 | 667 |
| 654 DISALLOW_COPY_AND_ASSIGN(MetadataDatabaseTest); | 668 DISALLOW_COPY_AND_ASSIGN(MetadataDatabaseTest); |
| 655 }; | 669 }; |
| 656 | 670 |
| 657 TEST_F(MetadataDatabaseTest, InitializationTest_Empty) { | 671 TEST_F(MetadataDatabaseTest, InitializationTest_Empty) { |
| 658 EXPECT_EQ(SYNC_STATUS_OK, InitializeMetadataDatabase()); | 672 for (size_t i = 0; i < arraysize(index_types); ++i) { |
|
tzik
2014/09/09 08:29:50
Could you split these tests to two?
peria
2014/09/10 05:40:12
Used parameterized test.
| |
| 659 DropDatabase(); | 673 SetUpEnv(); |
| 660 EXPECT_EQ(SYNC_STATUS_OK, InitializeMetadataDatabase()); | 674 SCOPED_TRACE(index_types[i].scope); |
| 661 | 675 |
| 662 DropDatabase(); | 676 EXPECT_EQ(SYNC_STATUS_OK, |
| 663 | 677 InitializeMetadataDatabase(index_types[i].enable_on_disk)); |
| 664 scoped_ptr<LevelDBWrapper> db = InitializeLevelDB(); | 678 DropDatabase(); |
| 665 db->Put(kServiceMetadataKey, "Unparsable string"); | 679 EXPECT_EQ(SYNC_STATUS_OK, |
| 666 EXPECT_TRUE(db->Commit().ok()); | 680 InitializeMetadataDatabase(index_types[i].enable_on_disk)); |
| 667 db.reset(); | 681 |
| 668 | 682 DropDatabase(); |
| 669 EXPECT_EQ(SYNC_STATUS_OK, InitializeMetadataDatabase()); | 683 |
| 684 scoped_ptr<LevelDBWrapper> db = InitializeLevelDB(); | |
| 685 db->Put(kServiceMetadataKey, "Unparsable string"); | |
| 686 EXPECT_TRUE(db->Commit().ok()); | |
| 687 db.reset(); | |
| 688 | |
| 689 EXPECT_EQ(SYNC_STATUS_OK, | |
| 690 InitializeMetadataDatabase(index_types[i].enable_on_disk)); | |
| 691 | |
| 692 TearDownEnv(); | |
| 693 } | |
| 670 } | 694 } |
| 671 | 695 |
| 672 TEST_F(MetadataDatabaseTest, InitializationTest_SimpleTree) { | 696 TEST_F(MetadataDatabaseTest, InitializationTest_SimpleTree) { |
| 673 TrackedFile sync_root(CreateTrackedSyncRoot()); | 697 for (size_t i = 0; i < arraysize(index_types); ++i) { |
| 674 TrackedFile app_root(CreateTrackedFolder(sync_root, "app_id")); | 698 SetUpEnv(); |
| 675 app_root.tracker.set_app_id(app_root.metadata.details().title()); | 699 SCOPED_TRACE(index_types[i].scope); |
| 676 app_root.tracker.set_tracker_kind(TRACKER_KIND_APP_ROOT); | 700 |
| 677 | 701 TrackedFile sync_root(CreateTrackedSyncRoot()); |
| 678 TrackedFile file(CreateTrackedFile(app_root, "file")); | 702 TrackedFile app_root(CreateTrackedFolder(sync_root, "app_id")); |
| 679 TrackedFile folder(CreateTrackedFolder(app_root, "folder")); | 703 app_root.tracker.set_app_id(app_root.metadata.details().title()); |
| 680 TrackedFile file_in_folder(CreateTrackedFile(folder, "file_in_folder")); | 704 app_root.tracker.set_tracker_kind(TRACKER_KIND_APP_ROOT); |
| 681 TrackedFile orphaned_file(CreateTrackedFile(sync_root, "orphaned_file")); | 705 |
| 682 orphaned_file.metadata.mutable_details()->clear_parent_folder_ids(); | 706 TrackedFile file(CreateTrackedFile(app_root, "file")); |
| 683 orphaned_file.tracker.set_parent_tracker_id(0); | 707 TrackedFile folder(CreateTrackedFolder(app_root, "folder")); |
| 684 | 708 TrackedFile file_in_folder(CreateTrackedFile(folder, "file_in_folder")); |
| 685 const TrackedFile* tracked_files[] = { | 709 TrackedFile orphaned_file(CreateTrackedFile(sync_root, "orphaned_file")); |
| 686 &sync_root, &app_root, &file, &folder, &file_in_folder, &orphaned_file | 710 orphaned_file.metadata.mutable_details()->clear_parent_folder_ids(); |
| 687 }; | 711 orphaned_file.tracker.set_parent_tracker_id(0); |
| 688 | 712 |
| 689 SetUpDatabaseByTrackedFiles(tracked_files, arraysize(tracked_files)); | 713 const TrackedFile* tracked_files[] = { |
| 690 EXPECT_EQ(SYNC_STATUS_OK, InitializeMetadataDatabase()); | 714 &sync_root, &app_root, &file, &folder, &file_in_folder, &orphaned_file |
| 691 | 715 }; |
| 692 orphaned_file.should_be_absent = true; | 716 |
| 693 VerifyTrackedFiles(tracked_files, arraysize(tracked_files)); | 717 SetUpDatabaseByTrackedFiles(tracked_files, arraysize(tracked_files)); |
| 718 EXPECT_EQ(SYNC_STATUS_OK, | |
| 719 InitializeMetadataDatabase(index_types[i].enable_on_disk)); | |
| 720 | |
| 721 orphaned_file.should_be_absent = true; | |
| 722 VerifyTrackedFiles(tracked_files, arraysize(tracked_files)); | |
| 723 | |
| 724 TearDownEnv(); | |
| 725 } | |
| 694 } | 726 } |
| 695 | 727 |
| 696 TEST_F(MetadataDatabaseTest, AppManagementTest) { | 728 TEST_F(MetadataDatabaseTest, AppManagementTest) { |
| 697 TrackedFile sync_root(CreateTrackedSyncRoot()); | 729 for (size_t i = 0; i < arraysize(index_types); ++i) { |
| 698 TrackedFile app_root(CreateTrackedFolder(sync_root, "app_id")); | 730 SetUpEnv(); |
| 699 app_root.tracker.set_app_id(app_root.metadata.details().title()); | 731 SCOPED_TRACE(index_types[i].scope); |
| 700 app_root.tracker.set_tracker_kind(TRACKER_KIND_APP_ROOT); | 732 |
| 701 | 733 TrackedFile sync_root(CreateTrackedSyncRoot()); |
| 702 TrackedFile file(CreateTrackedFile(app_root, "file")); | 734 TrackedFile app_root(CreateTrackedFolder(sync_root, "app_id")); |
| 703 TrackedFile folder(CreateTrackedFolder(sync_root, "folder")); | 735 app_root.tracker.set_app_id(app_root.metadata.details().title()); |
| 704 folder.tracker.set_active(false); | 736 app_root.tracker.set_tracker_kind(TRACKER_KIND_APP_ROOT); |
| 705 | 737 |
| 706 const TrackedFile* tracked_files[] = { | 738 TrackedFile file(CreateTrackedFile(app_root, "file")); |
| 707 &sync_root, &app_root, &file, &folder, | 739 TrackedFile folder(CreateTrackedFolder(sync_root, "folder")); |
| 708 }; | 740 folder.tracker.set_active(false); |
| 709 SetUpDatabaseByTrackedFiles(tracked_files, arraysize(tracked_files)); | 741 |
| 710 EXPECT_EQ(SYNC_STATUS_OK, InitializeMetadataDatabase()); | 742 const TrackedFile* tracked_files[] = { |
| 711 VerifyTrackedFiles(tracked_files, arraysize(tracked_files)); | 743 &sync_root, &app_root, &file, &folder, |
| 712 | 744 }; |
| 713 folder.tracker.set_app_id("foo"); | 745 SetUpDatabaseByTrackedFiles(tracked_files, arraysize(tracked_files)); |
| 714 EXPECT_EQ(SYNC_STATUS_OK, RegisterApp( | 746 EXPECT_EQ(SYNC_STATUS_OK, |
| 715 folder.tracker.app_id(), folder.metadata.file_id())); | 747 InitializeMetadataDatabase(index_types[i].enable_on_disk)); |
| 716 folder.tracker.set_tracker_kind(TRACKER_KIND_APP_ROOT); | 748 VerifyTrackedFiles(tracked_files, arraysize(tracked_files)); |
| 717 folder.tracker.set_active(true); | 749 |
| 718 folder.tracker.set_dirty(true); | 750 folder.tracker.set_app_id("foo"); |
| 719 folder.tracker.set_needs_folder_listing(true); | 751 EXPECT_EQ(SYNC_STATUS_OK, RegisterApp( |
| 720 VerifyTrackedFile(folder); | 752 folder.tracker.app_id(), folder.metadata.file_id())); |
| 721 VerifyReloadConsistency(); | 753 folder.tracker.set_tracker_kind(TRACKER_KIND_APP_ROOT); |
| 722 | 754 folder.tracker.set_active(true); |
| 723 EXPECT_EQ(SYNC_STATUS_OK, DisableApp(folder.tracker.app_id())); | 755 folder.tracker.set_dirty(true); |
| 724 folder.tracker.set_tracker_kind(TRACKER_KIND_DISABLED_APP_ROOT); | 756 folder.tracker.set_needs_folder_listing(true); |
| 725 VerifyTrackedFile(folder); | 757 VerifyTrackedFile(folder); |
| 726 VerifyReloadConsistency(); | 758 VerifyReloadConsistency(); |
| 727 | 759 |
| 728 EXPECT_EQ(SYNC_STATUS_OK, EnableApp(folder.tracker.app_id())); | 760 EXPECT_EQ(SYNC_STATUS_OK, DisableApp(folder.tracker.app_id())); |
| 729 folder.tracker.set_tracker_kind(TRACKER_KIND_APP_ROOT); | 761 folder.tracker.set_tracker_kind(TRACKER_KIND_DISABLED_APP_ROOT); |
| 730 VerifyTrackedFile(folder); | 762 VerifyTrackedFile(folder); |
| 731 VerifyReloadConsistency(); | 763 VerifyReloadConsistency(); |
| 732 | 764 |
| 733 EXPECT_EQ(SYNC_STATUS_OK, UnregisterApp(folder.tracker.app_id())); | 765 EXPECT_EQ(SYNC_STATUS_OK, EnableApp(folder.tracker.app_id())); |
| 734 folder.tracker.set_app_id(std::string()); | 766 folder.tracker.set_tracker_kind(TRACKER_KIND_APP_ROOT); |
| 735 folder.tracker.set_tracker_kind(TRACKER_KIND_REGULAR); | 767 VerifyTrackedFile(folder); |
| 736 folder.tracker.set_active(false); | 768 VerifyReloadConsistency(); |
| 737 VerifyTrackedFile(folder); | 769 |
| 738 VerifyReloadConsistency(); | 770 EXPECT_EQ(SYNC_STATUS_OK, UnregisterApp(folder.tracker.app_id())); |
| 739 | 771 folder.tracker.set_app_id(std::string()); |
| 740 EXPECT_EQ(SYNC_STATUS_OK, UnregisterApp(app_root.tracker.app_id())); | 772 folder.tracker.set_tracker_kind(TRACKER_KIND_REGULAR); |
| 741 app_root.tracker.set_app_id(std::string()); | 773 folder.tracker.set_active(false); |
| 742 app_root.tracker.set_tracker_kind(TRACKER_KIND_REGULAR); | 774 VerifyTrackedFile(folder); |
| 743 app_root.tracker.set_active(false); | 775 VerifyReloadConsistency(); |
| 744 app_root.tracker.set_dirty(true); | 776 |
| 745 file.should_be_absent = true; | 777 EXPECT_EQ(SYNC_STATUS_OK, UnregisterApp(app_root.tracker.app_id())); |
| 746 VerifyTrackedFile(app_root); | 778 app_root.tracker.set_app_id(std::string()); |
| 747 VerifyTrackedFile(file); | 779 app_root.tracker.set_tracker_kind(TRACKER_KIND_REGULAR); |
| 748 VerifyReloadConsistency(); | 780 app_root.tracker.set_active(false); |
| 781 app_root.tracker.set_dirty(true); | |
| 782 file.should_be_absent = true; | |
| 783 VerifyTrackedFile(app_root); | |
| 784 VerifyTrackedFile(file); | |
| 785 VerifyReloadConsistency(); | |
| 786 | |
| 787 TearDownEnv(); | |
| 788 } | |
| 749 } | 789 } |
| 750 | 790 |
| 751 TEST_F(MetadataDatabaseTest, BuildPathTest) { | 791 TEST_F(MetadataDatabaseTest, BuildPathTest) { |
| 752 FileMetadata sync_root(CreateSyncRootMetadata()); | 792 for (size_t i = 0; i < arraysize(index_types); ++i) { |
| 753 FileTracker sync_root_tracker(CreateSyncRootTracker(sync_root)); | 793 SetUpEnv(); |
| 754 | 794 SCOPED_TRACE(index_types[i].scope); |
| 755 FileMetadata app_root(CreateFolderMetadata(sync_root, "app_id")); | 795 |
| 756 FileTracker app_root_tracker( | 796 FileMetadata sync_root(CreateSyncRootMetadata()); |
| 757 CreateTracker(sync_root_tracker, app_root)); | 797 FileTracker sync_root_tracker(CreateSyncRootTracker(sync_root)); |
| 758 app_root_tracker.set_app_id(app_root.details().title()); | 798 |
| 759 app_root_tracker.set_tracker_kind(TRACKER_KIND_APP_ROOT); | 799 FileMetadata app_root(CreateFolderMetadata(sync_root, "app_id")); |
| 760 | 800 FileTracker app_root_tracker( |
| 761 FileMetadata folder(CreateFolderMetadata(app_root, "folder")); | 801 CreateTracker(sync_root_tracker, app_root)); |
| 762 FileTracker folder_tracker(CreateTracker(app_root_tracker, folder)); | 802 app_root_tracker.set_app_id(app_root.details().title()); |
| 763 | 803 app_root_tracker.set_tracker_kind(TRACKER_KIND_APP_ROOT); |
| 764 FileMetadata file(CreateFileMetadata(folder, "file")); | 804 |
| 765 FileTracker file_tracker(CreateTracker(folder_tracker, file)); | 805 FileMetadata folder(CreateFolderMetadata(app_root, "folder")); |
| 766 | 806 FileTracker folder_tracker(CreateTracker(app_root_tracker, folder)); |
| 767 FileMetadata inactive_folder(CreateFolderMetadata(app_root, "folder")); | 807 |
| 768 FileTracker inactive_folder_tracker(CreateTracker(app_root_tracker, | 808 FileMetadata file(CreateFileMetadata(folder, "file")); |
| 769 inactive_folder)); | 809 FileTracker file_tracker(CreateTracker(folder_tracker, file)); |
| 770 inactive_folder_tracker.set_active(false); | 810 |
| 771 | 811 FileMetadata inactive_folder(CreateFolderMetadata(app_root, "folder")); |
| 772 { | 812 FileTracker inactive_folder_tracker(CreateTracker(app_root_tracker, |
| 773 scoped_ptr<LevelDBWrapper> db = InitializeLevelDB(); | 813 inactive_folder)); |
| 774 ASSERT_TRUE(db); | 814 inactive_folder_tracker.set_active(false); |
| 775 | 815 |
| 776 EXPECT_TRUE(PutFileToDB(db.get(), sync_root).ok()); | 816 { |
| 777 EXPECT_TRUE(PutTrackerToDB(db.get(), sync_root_tracker).ok()); | 817 scoped_ptr<LevelDBWrapper> db = InitializeLevelDB(); |
| 778 EXPECT_TRUE(PutFileToDB(db.get(), app_root).ok()); | 818 ASSERT_TRUE(db); |
| 779 EXPECT_TRUE(PutTrackerToDB(db.get(), app_root_tracker).ok()); | 819 |
| 780 EXPECT_TRUE(PutFileToDB(db.get(), folder).ok()); | 820 EXPECT_TRUE(PutFileToDB(db.get(), sync_root).ok()); |
| 781 EXPECT_TRUE(PutTrackerToDB(db.get(), folder_tracker).ok()); | 821 EXPECT_TRUE(PutTrackerToDB(db.get(), sync_root_tracker).ok()); |
| 782 EXPECT_TRUE(PutFileToDB(db.get(), file).ok()); | 822 EXPECT_TRUE(PutFileToDB(db.get(), app_root).ok()); |
| 783 EXPECT_TRUE(PutTrackerToDB(db.get(), file_tracker).ok()); | 823 EXPECT_TRUE(PutTrackerToDB(db.get(), app_root_tracker).ok()); |
| 784 } | 824 EXPECT_TRUE(PutFileToDB(db.get(), folder).ok()); |
| 785 | 825 EXPECT_TRUE(PutTrackerToDB(db.get(), folder_tracker).ok()); |
| 786 EXPECT_EQ(SYNC_STATUS_OK, InitializeMetadataDatabase()); | 826 EXPECT_TRUE(PutFileToDB(db.get(), file).ok()); |
| 787 | 827 EXPECT_TRUE(PutTrackerToDB(db.get(), file_tracker).ok()); |
| 788 base::FilePath path; | 828 } |
| 789 EXPECT_FALSE(metadata_database()->BuildPathForTracker( | 829 |
| 790 sync_root_tracker.tracker_id(), &path)); | 830 EXPECT_EQ(SYNC_STATUS_OK, |
| 791 EXPECT_TRUE(metadata_database()->BuildPathForTracker( | 831 InitializeMetadataDatabase(index_types[i].enable_on_disk)); |
| 792 app_root_tracker.tracker_id(), &path)); | 832 |
| 793 EXPECT_EQ(base::FilePath(FPL("/")).NormalizePathSeparators(), path); | 833 base::FilePath path; |
| 794 EXPECT_TRUE(metadata_database()->BuildPathForTracker( | 834 EXPECT_FALSE(metadata_database()->BuildPathForTracker( |
| 795 file_tracker.tracker_id(), &path)); | 835 sync_root_tracker.tracker_id(), &path)); |
| 796 EXPECT_EQ(base::FilePath(FPL("/folder/file")).NormalizePathSeparators(), | 836 EXPECT_TRUE(metadata_database()->BuildPathForTracker( |
| 797 path); | 837 app_root_tracker.tracker_id(), &path)); |
| 838 EXPECT_EQ(base::FilePath(FPL("/")).NormalizePathSeparators(), path); | |
| 839 EXPECT_TRUE(metadata_database()->BuildPathForTracker( | |
| 840 file_tracker.tracker_id(), &path)); | |
| 841 EXPECT_EQ(base::FilePath(FPL("/folder/file")).NormalizePathSeparators(), | |
| 842 path); | |
| 843 | |
| 844 TearDownEnv(); | |
| 845 } | |
| 798 } | 846 } |
| 799 | 847 |
| 800 TEST_F(MetadataDatabaseTest, FindNearestActiveAncestorTest) { | 848 TEST_F(MetadataDatabaseTest, FindNearestActiveAncestorTest) { |
| 801 const std::string kAppID = "app_id"; | 849 for (size_t i = 0; i < arraysize(index_types); ++i) { |
| 802 | 850 SetUpEnv(); |
| 803 FileMetadata sync_root(CreateSyncRootMetadata()); | 851 SCOPED_TRACE(index_types[i].scope); |
| 804 FileTracker sync_root_tracker(CreateSyncRootTracker(sync_root)); | 852 |
| 805 | 853 const std::string kAppID = "app_id"; |
| 806 FileMetadata app_root(CreateFolderMetadata(sync_root, kAppID)); | 854 |
| 807 FileTracker app_root_tracker( | 855 FileMetadata sync_root(CreateSyncRootMetadata()); |
| 808 CreateTracker(sync_root_tracker, app_root)); | 856 FileTracker sync_root_tracker(CreateSyncRootTracker(sync_root)); |
| 809 app_root_tracker.set_app_id(app_root.details().title()); | 857 |
| 810 app_root_tracker.set_tracker_kind(TRACKER_KIND_APP_ROOT); | 858 FileMetadata app_root(CreateFolderMetadata(sync_root, kAppID)); |
| 811 | 859 FileTracker app_root_tracker( |
| 812 // Create directory structure like this: "/folder1/folder2/file" | 860 CreateTracker(sync_root_tracker, app_root)); |
| 813 FileMetadata folder1(CreateFolderMetadata(app_root, "folder1")); | 861 app_root_tracker.set_app_id(app_root.details().title()); |
| 814 FileTracker folder_tracker1(CreateTracker(app_root_tracker, folder1)); | 862 app_root_tracker.set_tracker_kind(TRACKER_KIND_APP_ROOT); |
| 815 FileMetadata folder2(CreateFolderMetadata(folder1, "folder2")); | 863 |
| 816 FileTracker folder_tracker2(CreateTracker(folder_tracker1, folder2)); | 864 // Create directory structure like this: "/folder1/folder2/file" |
| 817 FileMetadata file(CreateFileMetadata(folder2, "file")); | 865 FileMetadata folder1(CreateFolderMetadata(app_root, "folder1")); |
| 818 FileTracker file_tracker(CreateTracker(folder_tracker2, file)); | 866 FileTracker folder_tracker1(CreateTracker(app_root_tracker, folder1)); |
| 819 | 867 FileMetadata folder2(CreateFolderMetadata(folder1, "folder2")); |
| 820 FileMetadata inactive_folder(CreateFolderMetadata(app_root, "folder1")); | 868 FileTracker folder_tracker2(CreateTracker(folder_tracker1, folder2)); |
| 821 FileTracker inactive_folder_tracker(CreateTracker(app_root_tracker, | 869 FileMetadata file(CreateFileMetadata(folder2, "file")); |
| 822 inactive_folder)); | 870 FileTracker file_tracker(CreateTracker(folder_tracker2, file)); |
| 823 inactive_folder_tracker.set_active(false); | 871 |
| 824 | 872 FileMetadata inactive_folder(CreateFolderMetadata(app_root, "folder1")); |
| 825 { | 873 FileTracker inactive_folder_tracker(CreateTracker(app_root_tracker, |
| 826 scoped_ptr<LevelDBWrapper> db = InitializeLevelDB(); | 874 inactive_folder)); |
| 827 ASSERT_TRUE(db); | 875 inactive_folder_tracker.set_active(false); |
| 828 | 876 |
| 829 EXPECT_TRUE(PutFileToDB(db.get(), sync_root).ok()); | 877 { |
| 830 EXPECT_TRUE(PutTrackerToDB(db.get(), sync_root_tracker).ok()); | 878 scoped_ptr<LevelDBWrapper> db = InitializeLevelDB(); |
| 831 EXPECT_TRUE(PutFileToDB(db.get(), app_root).ok()); | 879 ASSERT_TRUE(db); |
| 832 EXPECT_TRUE(PutTrackerToDB(db.get(), app_root_tracker).ok()); | 880 |
| 833 EXPECT_TRUE(PutFileToDB(db.get(), folder1).ok()); | 881 EXPECT_TRUE(PutFileToDB(db.get(), sync_root).ok()); |
| 834 EXPECT_TRUE(PutTrackerToDB(db.get(), folder_tracker1).ok()); | 882 EXPECT_TRUE(PutTrackerToDB(db.get(), sync_root_tracker).ok()); |
| 835 EXPECT_TRUE(PutFileToDB(db.get(), folder2).ok()); | 883 EXPECT_TRUE(PutFileToDB(db.get(), app_root).ok()); |
| 836 EXPECT_TRUE(PutTrackerToDB(db.get(), folder_tracker2).ok()); | 884 EXPECT_TRUE(PutTrackerToDB(db.get(), app_root_tracker).ok()); |
| 837 EXPECT_TRUE(PutFileToDB(db.get(), file).ok()); | 885 EXPECT_TRUE(PutFileToDB(db.get(), folder1).ok()); |
| 838 EXPECT_TRUE(PutTrackerToDB(db.get(), file_tracker).ok()); | 886 EXPECT_TRUE(PutTrackerToDB(db.get(), folder_tracker1).ok()); |
| 839 EXPECT_TRUE(PutFileToDB(db.get(), inactive_folder).ok()); | 887 EXPECT_TRUE(PutFileToDB(db.get(), folder2).ok()); |
| 840 EXPECT_TRUE(PutTrackerToDB(db.get(), inactive_folder_tracker).ok()); | 888 EXPECT_TRUE(PutTrackerToDB(db.get(), folder_tracker2).ok()); |
| 841 } | 889 EXPECT_TRUE(PutFileToDB(db.get(), file).ok()); |
| 842 | 890 EXPECT_TRUE(PutTrackerToDB(db.get(), file_tracker).ok()); |
| 843 EXPECT_EQ(SYNC_STATUS_OK, InitializeMetadataDatabase()); | 891 EXPECT_TRUE(PutFileToDB(db.get(), inactive_folder).ok()); |
| 844 | 892 EXPECT_TRUE(PutTrackerToDB(db.get(), inactive_folder_tracker).ok()); |
| 845 { | 893 } |
| 846 base::FilePath path; | 894 |
| 847 FileTracker tracker; | 895 EXPECT_EQ(SYNC_STATUS_OK, |
| 848 EXPECT_FALSE(metadata_database()->FindNearestActiveAncestor( | 896 InitializeMetadataDatabase(index_types[i].enable_on_disk)); |
| 849 "non_registered_app_id", | 897 |
| 850 CreateNormalizedPath(FPL("folder1/folder2/file")), | 898 { |
| 851 &tracker, &path)); | 899 base::FilePath path; |
| 852 } | 900 FileTracker tracker; |
| 853 | 901 EXPECT_FALSE(metadata_database()->FindNearestActiveAncestor( |
| 854 { | 902 "non_registered_app_id", |
| 855 base::FilePath path; | 903 CreateNormalizedPath(FPL("folder1/folder2/file")), |
| 856 FileTracker tracker; | 904 &tracker, &path)); |
| 857 EXPECT_TRUE(metadata_database()->FindNearestActiveAncestor( | 905 } |
| 858 kAppID, CreateNormalizedPath(FPL("")), &tracker, &path)); | 906 |
| 859 EXPECT_EQ(app_root_tracker.tracker_id(), tracker.tracker_id()); | 907 { |
| 860 EXPECT_EQ(CreateNormalizedPath(FPL("")), path); | 908 base::FilePath path; |
| 861 } | 909 FileTracker tracker; |
| 862 | 910 EXPECT_TRUE(metadata_database()->FindNearestActiveAncestor( |
| 863 { | 911 kAppID, CreateNormalizedPath(FPL("")), &tracker, &path)); |
| 864 base::FilePath path; | 912 EXPECT_EQ(app_root_tracker.tracker_id(), tracker.tracker_id()); |
| 865 FileTracker tracker; | 913 EXPECT_EQ(CreateNormalizedPath(FPL("")), path); |
| 866 EXPECT_TRUE(metadata_database()->FindNearestActiveAncestor( | 914 } |
| 867 kAppID, CreateNormalizedPath(FPL("folder1/folder2")), | 915 |
| 868 &tracker, &path)); | 916 { |
| 869 EXPECT_EQ(folder_tracker2.tracker_id(), tracker.tracker_id()); | 917 base::FilePath path; |
| 870 EXPECT_EQ(CreateNormalizedPath(FPL("folder1/folder2")), path); | 918 FileTracker tracker; |
| 871 } | 919 EXPECT_TRUE(metadata_database()->FindNearestActiveAncestor( |
| 872 | 920 kAppID, CreateNormalizedPath(FPL("folder1/folder2")), |
| 873 { | 921 &tracker, &path)); |
| 874 base::FilePath path; | 922 EXPECT_EQ(folder_tracker2.tracker_id(), tracker.tracker_id()); |
| 875 FileTracker tracker; | 923 EXPECT_EQ(CreateNormalizedPath(FPL("folder1/folder2")), path); |
| 876 EXPECT_TRUE(metadata_database()->FindNearestActiveAncestor( | 924 } |
| 877 kAppID, CreateNormalizedPath(FPL("folder1/folder2/file")), | 925 |
| 878 &tracker, &path)); | 926 { |
| 879 EXPECT_EQ(file_tracker.tracker_id(), tracker.tracker_id()); | 927 base::FilePath path; |
| 880 EXPECT_EQ(CreateNormalizedPath(FPL("folder1/folder2/file")), path); | 928 FileTracker tracker; |
| 881 } | 929 EXPECT_TRUE(metadata_database()->FindNearestActiveAncestor( |
| 882 | 930 kAppID, CreateNormalizedPath(FPL("folder1/folder2/file")), |
| 883 { | 931 &tracker, &path)); |
| 884 base::FilePath path; | 932 EXPECT_EQ(file_tracker.tracker_id(), tracker.tracker_id()); |
| 885 FileTracker tracker; | 933 EXPECT_EQ(CreateNormalizedPath(FPL("folder1/folder2/file")), path); |
| 886 EXPECT_TRUE(metadata_database()->FindNearestActiveAncestor( | 934 } |
| 887 kAppID, | 935 |
| 888 CreateNormalizedPath(FPL("folder1/folder2/folder3/folder4/file")), | 936 { |
| 889 &tracker, &path)); | 937 base::FilePath path; |
| 890 EXPECT_EQ(folder_tracker2.tracker_id(), tracker.tracker_id()); | 938 FileTracker tracker; |
| 891 EXPECT_EQ(CreateNormalizedPath(FPL("folder1/folder2")), path); | 939 EXPECT_TRUE(metadata_database()->FindNearestActiveAncestor( |
| 892 } | 940 kAppID, |
| 893 | 941 CreateNormalizedPath(FPL("folder1/folder2/folder3/folder4/file")), |
| 894 { | 942 &tracker, &path)); |
| 895 base::FilePath path; | 943 EXPECT_EQ(folder_tracker2.tracker_id(), tracker.tracker_id()); |
| 896 FileTracker tracker; | 944 EXPECT_EQ(CreateNormalizedPath(FPL("folder1/folder2")), path); |
| 897 EXPECT_TRUE(metadata_database()->FindNearestActiveAncestor( | 945 } |
| 898 kAppID, CreateNormalizedPath(FPL("folder1/folder2/file/folder4/file")), | 946 |
| 899 &tracker, &path)); | 947 { |
| 900 EXPECT_EQ(folder_tracker2.tracker_id(), tracker.tracker_id()); | 948 base::FilePath path; |
| 901 EXPECT_EQ(CreateNormalizedPath(FPL("folder1/folder2")), path); | 949 FileTracker tracker; |
| 950 EXPECT_TRUE(metadata_database()->FindNearestActiveAncestor( | |
| 951 kAppID, | |
| 952 CreateNormalizedPath(FPL("folder1/folder2/file/folder4/file")), | |
| 953 &tracker, &path)); | |
| 954 EXPECT_EQ(folder_tracker2.tracker_id(), tracker.tracker_id()); | |
| 955 EXPECT_EQ(CreateNormalizedPath(FPL("folder1/folder2")), path); | |
| 956 } | |
| 957 | |
| 958 TearDownEnv(); | |
| 902 } | 959 } |
| 903 } | 960 } |
| 904 | 961 |
| 905 TEST_F(MetadataDatabaseTest, UpdateByChangeListTest) { | 962 TEST_F(MetadataDatabaseTest, UpdateByChangeListTest) { |
| 906 TrackedFile sync_root(CreateTrackedSyncRoot()); | 963 for (size_t i = 0; i < arraysize(index_types); ++i) { |
| 907 TrackedFile app_root(CreateTrackedFolder(sync_root, "app_id")); | 964 SetUpEnv(); |
| 908 TrackedFile disabled_app_root(CreateTrackedFolder(sync_root, "disabled_app")); | 965 SCOPED_TRACE(index_types[i].scope); |
| 909 TrackedFile file(CreateTrackedFile(app_root, "file")); | 966 |
| 910 TrackedFile renamed_file(CreateTrackedFile(app_root, "to be renamed")); | 967 TrackedFile sync_root(CreateTrackedSyncRoot()); |
| 911 TrackedFile folder(CreateTrackedFolder(app_root, "folder")); | 968 TrackedFile app_root(CreateTrackedFolder(sync_root, "app_id")); |
| 912 TrackedFile reorganized_file( | 969 TrackedFile disabled_app_root( |
| 913 CreateTrackedFile(app_root, "to be reorganized")); | 970 CreateTrackedFolder(sync_root, "disabled_app")); |
| 914 TrackedFile updated_file( | 971 TrackedFile file(CreateTrackedFile(app_root, "file")); |
| 915 CreateTrackedFile(app_root, "to be updated")); | 972 TrackedFile renamed_file(CreateTrackedFile(app_root, "to be renamed")); |
| 916 TrackedFile noop_file(CreateTrackedFile(app_root, "has noop change")); | 973 TrackedFile folder(CreateTrackedFolder(app_root, "folder")); |
| 917 TrackedFile new_file(CreateTrackedFile(app_root, "to be added later")); | 974 TrackedFile reorganized_file( |
| 918 new_file.should_be_absent = true; | 975 CreateTrackedFile(app_root, "to be reorganized")); |
| 919 | 976 TrackedFile updated_file( |
| 920 const TrackedFile* tracked_files[] = { | 977 CreateTrackedFile(app_root, "to be updated")); |
| 921 &sync_root, &app_root, &disabled_app_root, | 978 TrackedFile noop_file(CreateTrackedFile(app_root, "has noop change")); |
| 922 &file, &renamed_file, &folder, &reorganized_file, &updated_file, &noop_file, | 979 TrackedFile new_file(CreateTrackedFile(app_root, "to be added later")); |
| 923 &new_file, | 980 new_file.should_be_absent = true; |
| 924 }; | 981 |
| 925 | 982 const TrackedFile* tracked_files[] = { |
| 926 SetUpDatabaseByTrackedFiles(tracked_files, arraysize(tracked_files)); | 983 &sync_root, &app_root, &disabled_app_root, |
| 927 EXPECT_EQ(SYNC_STATUS_OK, InitializeMetadataDatabase()); | 984 &file, &renamed_file, &folder, &reorganized_file, &updated_file, |
| 928 | 985 &noop_file, &new_file, |
| 929 ApplyRenameChangeToMetadata("renamed", &renamed_file.metadata); | 986 }; |
| 930 ApplyReorganizeChangeToMetadata(folder.metadata.file_id(), | 987 |
| 931 &reorganized_file.metadata); | 988 SetUpDatabaseByTrackedFiles(tracked_files, arraysize(tracked_files)); |
| 932 ApplyContentChangeToMetadata(&updated_file.metadata); | 989 EXPECT_EQ(SYNC_STATUS_OK, |
| 933 | 990 InitializeMetadataDatabase(index_types[i].enable_on_disk)); |
| 934 // Update change ID. | 991 |
| 935 ApplyNoopChangeToMetadata(&noop_file.metadata); | 992 ApplyRenameChangeToMetadata("renamed", &renamed_file.metadata); |
| 936 | 993 ApplyReorganizeChangeToMetadata(folder.metadata.file_id(), |
| 937 ScopedVector<google_apis::ChangeResource> changes; | 994 &reorganized_file.metadata); |
| 938 PushToChangeList( | 995 ApplyContentChangeToMetadata(&updated_file.metadata); |
| 939 CreateChangeResourceFromMetadata(renamed_file.metadata), &changes); | 996 |
| 940 PushToChangeList( | 997 // Update change ID. |
| 941 CreateChangeResourceFromMetadata(reorganized_file.metadata), &changes); | 998 ApplyNoopChangeToMetadata(&noop_file.metadata); |
| 942 PushToChangeList( | 999 |
| 943 CreateChangeResourceFromMetadata(updated_file.metadata), &changes); | 1000 ScopedVector<google_apis::ChangeResource> changes; |
| 944 PushToChangeList( | 1001 PushToChangeList( |
| 945 CreateChangeResourceFromMetadata(noop_file.metadata), &changes); | 1002 CreateChangeResourceFromMetadata(renamed_file.metadata), &changes); |
| 946 PushToChangeList( | 1003 PushToChangeList( |
| 947 CreateChangeResourceFromMetadata(new_file.metadata), &changes); | 1004 CreateChangeResourceFromMetadata(reorganized_file.metadata), &changes); |
| 948 EXPECT_EQ(SYNC_STATUS_OK, UpdateByChangeList(changes.Pass())); | 1005 PushToChangeList( |
| 949 | 1006 CreateChangeResourceFromMetadata(updated_file.metadata), &changes); |
| 950 renamed_file.tracker.set_dirty(true); | 1007 PushToChangeList( |
| 951 reorganized_file.tracker.set_dirty(true); | 1008 CreateChangeResourceFromMetadata(noop_file.metadata), &changes); |
| 952 updated_file.tracker.set_dirty(true); | 1009 PushToChangeList( |
| 953 noop_file.tracker.set_dirty(true); | 1010 CreateChangeResourceFromMetadata(new_file.metadata), &changes); |
| 954 new_file.tracker.mutable_synced_details()->set_missing(true); | 1011 EXPECT_EQ(SYNC_STATUS_OK, UpdateByChangeList(changes.Pass())); |
| 955 new_file.tracker.mutable_synced_details()->clear_md5(); | 1012 |
| 956 new_file.tracker.set_active(false); | 1013 renamed_file.tracker.set_dirty(true); |
| 957 new_file.tracker.set_dirty(true); | 1014 reorganized_file.tracker.set_dirty(true); |
| 958 ResetTrackerID(&new_file.tracker); | 1015 updated_file.tracker.set_dirty(true); |
| 959 EXPECT_NE(0, new_file.tracker.tracker_id()); | 1016 noop_file.tracker.set_dirty(true); |
| 960 | 1017 new_file.tracker.mutable_synced_details()->set_missing(true); |
| 961 new_file.should_be_absent = false; | 1018 new_file.tracker.mutable_synced_details()->clear_md5(); |
| 962 | 1019 new_file.tracker.set_active(false); |
| 963 VerifyTrackedFiles(tracked_files, arraysize(tracked_files)); | 1020 new_file.tracker.set_dirty(true); |
| 964 VerifyReloadConsistency(); | 1021 ResetTrackerID(&new_file.tracker); |
| 1022 EXPECT_NE(0, new_file.tracker.tracker_id()); | |
| 1023 | |
| 1024 new_file.should_be_absent = false; | |
| 1025 | |
| 1026 VerifyTrackedFiles(tracked_files, arraysize(tracked_files)); | |
| 1027 VerifyReloadConsistency(); | |
| 1028 | |
| 1029 TearDownEnv(); | |
| 1030 } | |
| 965 } | 1031 } |
| 966 | 1032 |
| 967 TEST_F(MetadataDatabaseTest, PopulateFolderTest_RegularFolder) { | 1033 TEST_F(MetadataDatabaseTest, PopulateFolderTest_RegularFolder) { |
| 968 TrackedFile sync_root(CreateTrackedSyncRoot()); | 1034 for (size_t i = 0; i < arraysize(index_types); ++i) { |
| 969 TrackedFile app_root(CreateTrackedAppRoot(sync_root, "app_id")); | 1035 SetUpEnv(); |
| 970 app_root.tracker.set_app_id(app_root.metadata.details().title()); | 1036 SCOPED_TRACE(index_types[i].scope); |
| 971 | 1037 |
| 972 TrackedFile folder_to_populate( | 1038 TrackedFile sync_root(CreateTrackedSyncRoot()); |
| 973 CreateTrackedFolder(app_root, "folder_to_populate")); | 1039 TrackedFile app_root(CreateTrackedAppRoot(sync_root, "app_id")); |
| 974 folder_to_populate.tracker.set_needs_folder_listing(true); | 1040 app_root.tracker.set_app_id(app_root.metadata.details().title()); |
| 975 folder_to_populate.tracker.set_dirty(true); | 1041 |
| 976 | 1042 TrackedFile folder_to_populate( |
| 977 TrackedFile known_file(CreateTrackedFile(folder_to_populate, "known_file")); | 1043 CreateTrackedFolder(app_root, "folder_to_populate")); |
| 978 TrackedFile new_file(CreateTrackedFile(folder_to_populate, "new_file")); | 1044 folder_to_populate.tracker.set_needs_folder_listing(true); |
| 979 new_file.should_be_absent = true; | 1045 folder_to_populate.tracker.set_dirty(true); |
| 980 | 1046 |
| 981 const TrackedFile* tracked_files[] = { | 1047 TrackedFile known_file(CreateTrackedFile(folder_to_populate, "known_file")); |
| 982 &sync_root, &app_root, &folder_to_populate, &known_file, &new_file | 1048 TrackedFile new_file(CreateTrackedFile(folder_to_populate, "new_file")); |
| 983 }; | 1049 new_file.should_be_absent = true; |
| 984 | 1050 |
| 985 SetUpDatabaseByTrackedFiles(tracked_files, arraysize(tracked_files)); | 1051 const TrackedFile* tracked_files[] = { |
| 986 EXPECT_EQ(SYNC_STATUS_OK, InitializeMetadataDatabase()); | 1052 &sync_root, &app_root, &folder_to_populate, &known_file, &new_file |
| 987 VerifyTrackedFiles(tracked_files, arraysize(tracked_files)); | 1053 }; |
| 988 | 1054 |
| 989 FileIDList listed_children; | 1055 SetUpDatabaseByTrackedFiles(tracked_files, arraysize(tracked_files)); |
| 990 listed_children.push_back(known_file.metadata.file_id()); | 1056 EXPECT_EQ(SYNC_STATUS_OK, |
| 991 listed_children.push_back(new_file.metadata.file_id()); | 1057 InitializeMetadataDatabase(index_types[i].enable_on_disk)); |
| 992 | 1058 VerifyTrackedFiles(tracked_files, arraysize(tracked_files)); |
| 993 EXPECT_EQ(SYNC_STATUS_OK, | 1059 |
| 994 PopulateFolder(folder_to_populate.metadata.file_id(), | 1060 FileIDList listed_children; |
| 995 listed_children)); | 1061 listed_children.push_back(known_file.metadata.file_id()); |
| 996 | 1062 listed_children.push_back(new_file.metadata.file_id()); |
| 997 folder_to_populate.tracker.set_dirty(false); | 1063 |
| 998 folder_to_populate.tracker.set_needs_folder_listing(false); | 1064 EXPECT_EQ(SYNC_STATUS_OK, |
| 999 ResetTrackerID(&new_file.tracker); | 1065 PopulateFolder(folder_to_populate.metadata.file_id(), |
| 1000 new_file.tracker.set_dirty(true); | 1066 listed_children)); |
| 1001 new_file.tracker.set_active(false); | 1067 |
| 1002 new_file.tracker.clear_synced_details(); | 1068 folder_to_populate.tracker.set_dirty(false); |
| 1003 new_file.should_be_absent = false; | 1069 folder_to_populate.tracker.set_needs_folder_listing(false); |
| 1004 new_file.tracker_only = true; | 1070 ResetTrackerID(&new_file.tracker); |
| 1005 VerifyTrackedFiles(tracked_files, arraysize(tracked_files)); | 1071 new_file.tracker.set_dirty(true); |
| 1006 VerifyReloadConsistency(); | 1072 new_file.tracker.set_active(false); |
| 1073 new_file.tracker.clear_synced_details(); | |
| 1074 new_file.should_be_absent = false; | |
| 1075 new_file.tracker_only = true; | |
| 1076 VerifyTrackedFiles(tracked_files, arraysize(tracked_files)); | |
| 1077 VerifyReloadConsistency(); | |
| 1078 | |
| 1079 TearDownEnv(); | |
| 1080 } | |
| 1007 } | 1081 } |
| 1008 | 1082 |
| 1009 TEST_F(MetadataDatabaseTest, PopulateFolderTest_InactiveFolder) { | 1083 TEST_F(MetadataDatabaseTest, PopulateFolderTest_InactiveFolder) { |
| 1010 TrackedFile sync_root(CreateTrackedSyncRoot()); | 1084 for (size_t i = 0; i < arraysize(index_types); ++i) { |
| 1011 TrackedFile app_root(CreateTrackedAppRoot(sync_root, "app_id")); | 1085 SetUpEnv(); |
| 1012 | 1086 SCOPED_TRACE(index_types[i].scope); |
| 1013 TrackedFile inactive_folder(CreateTrackedFolder(app_root, "inactive_folder")); | 1087 |
| 1014 inactive_folder.tracker.set_active(false); | 1088 TrackedFile sync_root(CreateTrackedSyncRoot()); |
| 1015 inactive_folder.tracker.set_dirty(true); | 1089 TrackedFile app_root(CreateTrackedAppRoot(sync_root, "app_id")); |
| 1016 | 1090 |
| 1017 TrackedFile new_file( | 1091 TrackedFile inactive_folder( |
| 1018 CreateTrackedFile(inactive_folder, "file_in_inactive_folder")); | 1092 CreateTrackedFolder(app_root, "inactive_folder")); |
| 1019 new_file.should_be_absent = true; | 1093 inactive_folder.tracker.set_active(false); |
| 1020 | 1094 inactive_folder.tracker.set_dirty(true); |
| 1021 const TrackedFile* tracked_files[] = { | 1095 |
| 1022 &sync_root, &app_root, &inactive_folder, &new_file, | 1096 TrackedFile new_file( |
| 1023 }; | 1097 CreateTrackedFile(inactive_folder, "file_in_inactive_folder")); |
| 1024 | 1098 new_file.should_be_absent = true; |
| 1025 SetUpDatabaseByTrackedFiles(tracked_files, arraysize(tracked_files)); | 1099 |
| 1026 EXPECT_EQ(SYNC_STATUS_OK, InitializeMetadataDatabase()); | 1100 const TrackedFile* tracked_files[] = { |
| 1027 VerifyTrackedFiles(tracked_files, arraysize(tracked_files)); | 1101 &sync_root, &app_root, &inactive_folder, &new_file, |
| 1028 | 1102 }; |
| 1029 FileIDList listed_children; | 1103 |
| 1030 listed_children.push_back(new_file.metadata.file_id()); | 1104 SetUpDatabaseByTrackedFiles(tracked_files, arraysize(tracked_files)); |
| 1031 | 1105 EXPECT_EQ(SYNC_STATUS_OK, |
| 1032 EXPECT_EQ(SYNC_STATUS_OK, | 1106 InitializeMetadataDatabase(index_types[i].enable_on_disk)); |
| 1033 PopulateFolder(inactive_folder.metadata.file_id(), | 1107 VerifyTrackedFiles(tracked_files, arraysize(tracked_files)); |
| 1034 listed_children)); | 1108 |
| 1035 VerifyTrackedFiles(tracked_files, arraysize(tracked_files)); | 1109 FileIDList listed_children; |
| 1036 VerifyReloadConsistency(); | 1110 listed_children.push_back(new_file.metadata.file_id()); |
| 1111 | |
| 1112 EXPECT_EQ(SYNC_STATUS_OK, | |
| 1113 PopulateFolder(inactive_folder.metadata.file_id(), | |
| 1114 listed_children)); | |
| 1115 VerifyTrackedFiles(tracked_files, arraysize(tracked_files)); | |
| 1116 VerifyReloadConsistency(); | |
| 1117 | |
| 1118 TearDownEnv(); | |
| 1119 } | |
| 1037 } | 1120 } |
| 1038 | 1121 |
| 1039 TEST_F(MetadataDatabaseTest, PopulateFolderTest_DisabledAppRoot) { | 1122 TEST_F(MetadataDatabaseTest, PopulateFolderTest_DisabledAppRoot) { |
| 1040 TrackedFile sync_root(CreateTrackedSyncRoot()); | 1123 for (size_t i = 0; i < arraysize(index_types); ++i) { |
| 1041 TrackedFile disabled_app_root( | 1124 SetUpEnv(); |
| 1042 CreateTrackedAppRoot(sync_root, "disabled_app")); | 1125 SCOPED_TRACE(index_types[i].scope); |
| 1043 disabled_app_root.tracker.set_dirty(true); | 1126 |
| 1044 disabled_app_root.tracker.set_needs_folder_listing(true); | 1127 TrackedFile sync_root(CreateTrackedSyncRoot()); |
| 1045 | 1128 TrackedFile disabled_app_root( |
| 1046 TrackedFile known_file(CreateTrackedFile(disabled_app_root, "known_file")); | 1129 CreateTrackedAppRoot(sync_root, "disabled_app")); |
| 1047 TrackedFile file(CreateTrackedFile(disabled_app_root, "file")); | 1130 disabled_app_root.tracker.set_dirty(true); |
| 1048 file.should_be_absent = true; | 1131 disabled_app_root.tracker.set_needs_folder_listing(true); |
| 1049 | 1132 |
| 1050 const TrackedFile* tracked_files[] = { | 1133 TrackedFile known_file(CreateTrackedFile(disabled_app_root, "known_file")); |
| 1051 &sync_root, &disabled_app_root, &disabled_app_root, &known_file, &file, | 1134 TrackedFile file(CreateTrackedFile(disabled_app_root, "file")); |
| 1052 }; | 1135 file.should_be_absent = true; |
| 1053 | 1136 |
| 1054 SetUpDatabaseByTrackedFiles(tracked_files, arraysize(tracked_files)); | 1137 const TrackedFile* tracked_files[] = { |
| 1055 EXPECT_EQ(SYNC_STATUS_OK, InitializeMetadataDatabase()); | 1138 &sync_root, &disabled_app_root, &disabled_app_root, &known_file, &file, |
| 1056 VerifyTrackedFiles(tracked_files, arraysize(tracked_files)); | 1139 }; |
| 1057 | 1140 |
| 1058 FileIDList disabled_app_children; | 1141 SetUpDatabaseByTrackedFiles(tracked_files, arraysize(tracked_files)); |
| 1059 disabled_app_children.push_back(file.metadata.file_id()); | 1142 EXPECT_EQ(SYNC_STATUS_OK, |
| 1060 EXPECT_EQ(SYNC_STATUS_OK, PopulateFolder( | 1143 InitializeMetadataDatabase(index_types[i].enable_on_disk)); |
| 1061 disabled_app_root.metadata.file_id(), disabled_app_children)); | 1144 VerifyTrackedFiles(tracked_files, arraysize(tracked_files)); |
| 1062 ResetTrackerID(&file.tracker); | 1145 |
| 1063 file.tracker.clear_synced_details(); | 1146 FileIDList disabled_app_children; |
| 1064 file.tracker.set_dirty(true); | 1147 disabled_app_children.push_back(file.metadata.file_id()); |
| 1065 file.tracker.set_active(false); | 1148 EXPECT_EQ(SYNC_STATUS_OK, PopulateFolder( |
| 1066 file.should_be_absent = false; | 1149 disabled_app_root.metadata.file_id(), disabled_app_children)); |
| 1067 file.tracker_only = true; | 1150 ResetTrackerID(&file.tracker); |
| 1068 | 1151 file.tracker.clear_synced_details(); |
| 1069 disabled_app_root.tracker.set_dirty(false); | 1152 file.tracker.set_dirty(true); |
| 1070 disabled_app_root.tracker.set_needs_folder_listing(false); | 1153 file.tracker.set_active(false); |
| 1071 VerifyTrackedFiles(tracked_files, arraysize(tracked_files)); | 1154 file.should_be_absent = false; |
| 1072 VerifyReloadConsistency(); | 1155 file.tracker_only = true; |
| 1156 | |
| 1157 disabled_app_root.tracker.set_dirty(false); | |
| 1158 disabled_app_root.tracker.set_needs_folder_listing(false); | |
| 1159 VerifyTrackedFiles(tracked_files, arraysize(tracked_files)); | |
| 1160 VerifyReloadConsistency(); | |
| 1161 | |
| 1162 TearDownEnv(); | |
| 1163 } | |
| 1073 } | 1164 } |
| 1074 | 1165 |
| 1075 // TODO(tzik): Fix expectation and re-enable this test. | 1166 // TODO(tzik): Fix expectation and re-enable this test. |
| 1076 TEST_F(MetadataDatabaseTest, DISABLED_UpdateTrackerTest) { | 1167 TEST_F(MetadataDatabaseTest, DISABLED_UpdateTrackerTest) { |
| 1077 TrackedFile sync_root(CreateTrackedSyncRoot()); | 1168 for (size_t i = 0; i < arraysize(index_types); ++i) { |
| 1078 TrackedFile app_root(CreateTrackedAppRoot(sync_root, "app_root")); | 1169 SetUpEnv(); |
| 1079 TrackedFile file(CreateTrackedFile(app_root, "file")); | 1170 SCOPED_TRACE(index_types[i].scope); |
| 1080 file.tracker.set_dirty(true); | 1171 |
| 1081 file.metadata.mutable_details()->set_title("renamed file"); | 1172 TrackedFile sync_root(CreateTrackedSyncRoot()); |
| 1082 | 1173 TrackedFile app_root(CreateTrackedAppRoot(sync_root, "app_root")); |
| 1083 TrackedFile inactive_file(CreateTrackedFile(app_root, "inactive_file")); | 1174 TrackedFile file(CreateTrackedFile(app_root, "file")); |
| 1084 inactive_file.tracker.set_active(false); | 1175 file.tracker.set_dirty(true); |
| 1085 inactive_file.tracker.set_dirty(true); | 1176 file.metadata.mutable_details()->set_title("renamed file"); |
| 1086 inactive_file.metadata.mutable_details()->set_title("renamed inactive file"); | 1177 |
| 1087 inactive_file.metadata.mutable_details()->set_md5("modified_md5"); | 1178 TrackedFile inactive_file(CreateTrackedFile(app_root, "inactive_file")); |
| 1088 | 1179 inactive_file.tracker.set_active(false); |
| 1089 TrackedFile new_conflict(CreateTrackedFile(app_root, "new conflict file")); | 1180 inactive_file.tracker.set_dirty(true); |
| 1090 new_conflict.tracker.set_dirty(true); | 1181 inactive_file.metadata.mutable_details()->set_title( |
| 1091 new_conflict.metadata.mutable_details()->set_title("renamed file"); | 1182 "renamed inactive file"); |
| 1092 | 1183 inactive_file.metadata.mutable_details()->set_md5("modified_md5"); |
| 1093 const TrackedFile* tracked_files[] = { | 1184 |
| 1094 &sync_root, &app_root, &file, &inactive_file, &new_conflict | 1185 TrackedFile new_conflict(CreateTrackedFile(app_root, "new conflict file")); |
| 1095 }; | 1186 new_conflict.tracker.set_dirty(true); |
| 1096 | 1187 new_conflict.metadata.mutable_details()->set_title("renamed file"); |
| 1097 SetUpDatabaseByTrackedFiles(tracked_files, arraysize(tracked_files)); | 1188 |
| 1098 EXPECT_EQ(SYNC_STATUS_OK, InitializeMetadataDatabase()); | 1189 const TrackedFile* tracked_files[] = { |
| 1099 VerifyTrackedFiles(tracked_files, arraysize(tracked_files)); | 1190 &sync_root, &app_root, &file, &inactive_file, &new_conflict |
| 1100 VerifyReloadConsistency(); | 1191 }; |
| 1101 | 1192 |
| 1102 *file.tracker.mutable_synced_details() = file.metadata.details(); | 1193 SetUpDatabaseByTrackedFiles(tracked_files, arraysize(tracked_files)); |
| 1103 file.tracker.set_dirty(false); | 1194 EXPECT_EQ(SYNC_STATUS_OK, |
| 1104 EXPECT_EQ(SYNC_STATUS_OK, UpdateTracker(file.tracker)); | 1195 InitializeMetadataDatabase(index_types[i].enable_on_disk)); |
| 1105 VerifyTrackedFiles(tracked_files, arraysize(tracked_files)); | 1196 VerifyTrackedFiles(tracked_files, arraysize(tracked_files)); |
| 1106 VerifyReloadConsistency(); | 1197 VerifyReloadConsistency(); |
| 1107 | 1198 |
| 1108 *inactive_file.tracker.mutable_synced_details() = | 1199 *file.tracker.mutable_synced_details() = file.metadata.details(); |
| 1109 inactive_file.metadata.details(); | 1200 file.tracker.set_dirty(false); |
| 1110 inactive_file.tracker.set_dirty(false); | 1201 EXPECT_EQ(SYNC_STATUS_OK, UpdateTracker(file.tracker)); |
| 1111 inactive_file.tracker.set_active(true); | 1202 VerifyTrackedFiles(tracked_files, arraysize(tracked_files)); |
| 1112 EXPECT_EQ(SYNC_STATUS_OK, UpdateTracker(inactive_file.tracker)); | 1203 VerifyReloadConsistency(); |
| 1113 VerifyTrackedFiles(tracked_files, arraysize(tracked_files)); | 1204 |
| 1114 VerifyReloadConsistency(); | 1205 *inactive_file.tracker.mutable_synced_details() = |
| 1115 | 1206 inactive_file.metadata.details(); |
| 1116 *new_conflict.tracker.mutable_synced_details() = | 1207 inactive_file.tracker.set_dirty(false); |
| 1117 new_conflict.metadata.details(); | 1208 inactive_file.tracker.set_active(true); |
| 1118 new_conflict.tracker.set_dirty(false); | 1209 EXPECT_EQ(SYNC_STATUS_OK, UpdateTracker(inactive_file.tracker)); |
| 1119 new_conflict.tracker.set_active(true); | 1210 VerifyTrackedFiles(tracked_files, arraysize(tracked_files)); |
| 1120 file.tracker.set_dirty(true); | 1211 VerifyReloadConsistency(); |
| 1121 file.tracker.set_active(false); | 1212 |
| 1122 EXPECT_EQ(SYNC_STATUS_OK, UpdateTracker(new_conflict.tracker)); | 1213 *new_conflict.tracker.mutable_synced_details() = |
| 1123 VerifyTrackedFiles(tracked_files, arraysize(tracked_files)); | 1214 new_conflict.metadata.details(); |
| 1124 VerifyReloadConsistency(); | 1215 new_conflict.tracker.set_dirty(false); |
| 1216 new_conflict.tracker.set_active(true); | |
| 1217 file.tracker.set_dirty(true); | |
| 1218 file.tracker.set_active(false); | |
| 1219 EXPECT_EQ(SYNC_STATUS_OK, UpdateTracker(new_conflict.tracker)); | |
| 1220 VerifyTrackedFiles(tracked_files, arraysize(tracked_files)); | |
| 1221 VerifyReloadConsistency(); | |
| 1222 | |
| 1223 TearDownEnv(); | |
| 1224 } | |
| 1125 } | 1225 } |
| 1126 | 1226 |
| 1127 TEST_F(MetadataDatabaseTest, PopulateInitialDataTest) { | 1227 TEST_F(MetadataDatabaseTest, PopulateInitialDataTest) { |
| 1128 TrackedFile sync_root(CreateTrackedSyncRoot()); | 1228 for (size_t i = 0; i < arraysize(index_types); ++i) { |
| 1129 TrackedFile app_root(CreateTrackedFolder(sync_root, "app_root")); | 1229 SetUpEnv(); |
| 1130 app_root.tracker.set_active(false); | 1230 SCOPED_TRACE(index_types[i].scope); |
| 1131 | 1231 |
| 1132 const TrackedFile* tracked_files[] = { | 1232 TrackedFile sync_root(CreateTrackedSyncRoot()); |
| 1133 &sync_root, &app_root | 1233 TrackedFile app_root(CreateTrackedFolder(sync_root, "app_root")); |
| 1134 }; | 1234 app_root.tracker.set_active(false); |
| 1135 | 1235 |
| 1136 scoped_ptr<google_apis::FileResource> sync_root_folder( | 1236 const TrackedFile* tracked_files[] = { |
| 1137 CreateFileResourceFromMetadata(sync_root.metadata)); | 1237 &sync_root, &app_root |
| 1138 scoped_ptr<google_apis::FileResource> app_root_folder( | 1238 }; |
| 1139 CreateFileResourceFromMetadata(app_root.metadata)); | 1239 |
| 1140 | 1240 scoped_ptr<google_apis::FileResource> sync_root_folder( |
| 1141 ScopedVector<google_apis::FileResource> app_root_folders; | 1241 CreateFileResourceFromMetadata(sync_root.metadata)); |
| 1142 app_root_folders.push_back(app_root_folder.release()); | 1242 scoped_ptr<google_apis::FileResource> app_root_folder( |
| 1143 | 1243 CreateFileResourceFromMetadata(app_root.metadata)); |
| 1144 EXPECT_EQ(SYNC_STATUS_OK, InitializeMetadataDatabase()); | 1244 |
| 1145 EXPECT_EQ(SYNC_STATUS_OK, PopulateInitialData( | 1245 ScopedVector<google_apis::FileResource> app_root_folders; |
| 1146 current_change_id(), | 1246 app_root_folders.push_back(app_root_folder.release()); |
| 1147 *sync_root_folder, | 1247 |
| 1148 app_root_folders)); | 1248 EXPECT_EQ(SYNC_STATUS_OK, |
| 1149 | 1249 InitializeMetadataDatabase(index_types[i].enable_on_disk)); |
| 1150 ResetTrackerID(&sync_root.tracker); | 1250 EXPECT_EQ(SYNC_STATUS_OK, PopulateInitialData( |
| 1151 ResetTrackerID(&app_root.tracker); | 1251 current_change_id(), |
| 1152 app_root.tracker.set_parent_tracker_id(sync_root.tracker.tracker_id()); | 1252 *sync_root_folder, |
| 1153 | 1253 app_root_folders)); |
| 1154 VerifyTrackedFiles(tracked_files, arraysize(tracked_files)); | 1254 |
| 1155 VerifyReloadConsistency(); | 1255 ResetTrackerID(&sync_root.tracker); |
| 1256 ResetTrackerID(&app_root.tracker); | |
| 1257 app_root.tracker.set_parent_tracker_id(sync_root.tracker.tracker_id()); | |
| 1258 | |
| 1259 VerifyTrackedFiles(tracked_files, arraysize(tracked_files)); | |
| 1260 VerifyReloadConsistency(); | |
| 1261 | |
| 1262 TearDownEnv(); | |
| 1263 } | |
| 1156 } | 1264 } |
| 1157 | 1265 |
| 1158 TEST_F(MetadataDatabaseTest, DumpFiles) { | 1266 TEST_F(MetadataDatabaseTest, DumpFiles) { |
| 1159 TrackedFile sync_root(CreateTrackedSyncRoot()); | 1267 for (size_t i = 0; i < arraysize(index_types); ++i) { |
| 1160 TrackedFile app_root(CreateTrackedAppRoot(sync_root, "app_id")); | 1268 SetUpEnv(); |
| 1161 app_root.tracker.set_app_id(app_root.metadata.details().title()); | 1269 SCOPED_TRACE(index_types[i].scope); |
| 1162 | 1270 |
| 1163 TrackedFile folder_0(CreateTrackedFolder(app_root, "folder_0")); | 1271 TrackedFile sync_root(CreateTrackedSyncRoot()); |
| 1164 TrackedFile file_0(CreateTrackedFile(folder_0, "file_0")); | 1272 TrackedFile app_root(CreateTrackedAppRoot(sync_root, "app_id")); |
| 1165 | 1273 app_root.tracker.set_app_id(app_root.metadata.details().title()); |
| 1166 const TrackedFile* tracked_files[] = { | 1274 |
| 1167 &sync_root, &app_root, &folder_0, &file_0 | 1275 TrackedFile folder_0(CreateTrackedFolder(app_root, "folder_0")); |
| 1168 }; | 1276 TrackedFile file_0(CreateTrackedFile(folder_0, "file_0")); |
| 1169 | 1277 |
| 1170 SetUpDatabaseByTrackedFiles(tracked_files, arraysize(tracked_files)); | 1278 const TrackedFile* tracked_files[] = { |
| 1171 EXPECT_EQ(SYNC_STATUS_OK, InitializeMetadataDatabase()); | 1279 &sync_root, &app_root, &folder_0, &file_0 |
| 1172 VerifyTrackedFiles(tracked_files, arraysize(tracked_files)); | 1280 }; |
| 1173 | 1281 |
| 1174 scoped_ptr<base::ListValue> files = | 1282 SetUpDatabaseByTrackedFiles(tracked_files, arraysize(tracked_files)); |
| 1175 metadata_database()->DumpFiles(app_root.tracker.app_id()); | 1283 EXPECT_EQ(SYNC_STATUS_OK, |
| 1176 ASSERT_EQ(2u, files->GetSize()); | 1284 InitializeMetadataDatabase(index_types[i].enable_on_disk)); |
| 1177 | 1285 VerifyTrackedFiles(tracked_files, arraysize(tracked_files)); |
| 1178 base::DictionaryValue* file = NULL; | 1286 |
| 1179 std::string str; | 1287 scoped_ptr<base::ListValue> files = |
| 1180 | 1288 metadata_database()->DumpFiles(app_root.tracker.app_id()); |
| 1181 ASSERT_TRUE(files->GetDictionary(0, &file)); | 1289 ASSERT_EQ(2u, files->GetSize()); |
| 1182 EXPECT_TRUE(file->GetString("title", &str) && str == "folder_0"); | 1290 |
| 1183 EXPECT_TRUE(file->GetString("type", &str) && str == "folder"); | 1291 base::DictionaryValue* file = NULL; |
| 1184 EXPECT_TRUE(file->HasKey("details")); | 1292 std::string str; |
| 1185 | 1293 |
| 1186 ASSERT_TRUE(files->GetDictionary(1, &file)); | 1294 ASSERT_TRUE(files->GetDictionary(0, &file)); |
| 1187 EXPECT_TRUE(file->GetString("title", &str) && str == "file_0"); | 1295 EXPECT_TRUE(file->GetString("title", &str) && str == "folder_0"); |
| 1188 EXPECT_TRUE(file->GetString("type", &str) && str == "file"); | 1296 EXPECT_TRUE(file->GetString("type", &str) && str == "folder"); |
| 1189 EXPECT_TRUE(file->HasKey("details")); | 1297 EXPECT_TRUE(file->HasKey("details")); |
| 1298 | |
| 1299 ASSERT_TRUE(files->GetDictionary(1, &file)); | |
| 1300 EXPECT_TRUE(file->GetString("title", &str) && str == "file_0"); | |
| 1301 EXPECT_TRUE(file->GetString("type", &str) && str == "file"); | |
| 1302 EXPECT_TRUE(file->HasKey("details")); | |
| 1303 | |
| 1304 TearDownEnv(); | |
| 1305 } | |
| 1190 } | 1306 } |
| 1191 | 1307 |
| 1192 } // namespace drive_backend | 1308 } // namespace drive_backend |
| 1193 } // namespace sync_file_system | 1309 } // namespace sync_file_system |
| OLD | NEW |