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 |