Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(48)

Side by Side Diff: chrome/browser/sync_file_system/drive_backend/metadata_database_unittest.cc

Issue 552723002: [SyncFS] Test MetadataDatabaseTest using both on-memory and on-disk indexes (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698