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

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

Issue 23582013: [SyncFS] Add MetadataDatabase::PopulateInitialData (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 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 | Annotate | Revision Log
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/message_loop/message_loop_proxy.h" 10 #include "base/message_loop/message_loop_proxy.h"
(...skipping 373 matching lines...) Expand 10 before | Expand all | Expand 10 after
384 } 384 }
385 385
386 TrackedFile CreateTrackedFolder(const TrackedFile& parent, 386 TrackedFile CreateTrackedFolder(const TrackedFile& parent,
387 const std::string& title) { 387 const std::string& title) {
388 TrackedFile folder; 388 TrackedFile folder;
389 folder.metadata = CreateFolderMetadata(parent.metadata, title); 389 folder.metadata = CreateFolderMetadata(parent.metadata, title);
390 folder.tracker = CreateTracker(parent.tracker, folder.metadata); 390 folder.tracker = CreateTracker(parent.tracker, folder.metadata);
391 return folder; 391 return folder;
392 } 392 }
393 393
394 scoped_ptr<google_apis::ChangeResource> CreateChangeResourceFromMetadata( 394 scoped_ptr<google_apis::FileResource> CreateFileResourceFromMetadata(
395 const FileMetadata& file) { 395 const FileMetadata& file) {
396 scoped_ptr<google_apis::ChangeResource> change(
397 new google_apis::ChangeResource);
398 change->set_change_id(file.details().change_id());
399 change->set_file_id(file.file_id());
400 change->set_deleted(file.details().deleted());
401 if (change->is_deleted())
402 return change.Pass();
403
404 scoped_ptr<google_apis::FileResource> file_resource( 396 scoped_ptr<google_apis::FileResource> file_resource(
405 new google_apis::FileResource); 397 new google_apis::FileResource);
406 ScopedVector<google_apis::ParentReference> parents; 398 ScopedVector<google_apis::ParentReference> parents;
407 for (int i = 0; i < file.details().parent_folder_ids_size(); ++i) { 399 for (int i = 0; i < file.details().parent_folder_ids_size(); ++i) {
408 scoped_ptr<google_apis::ParentReference> parent( 400 scoped_ptr<google_apis::ParentReference> parent(
409 new google_apis::ParentReference); 401 new google_apis::ParentReference);
410 parent->set_file_id(file.details().parent_folder_ids(i)); 402 parent->set_file_id(file.details().parent_folder_ids(i));
411 parents.push_back(parent.release()); 403 parents.push_back(parent.release());
412 } 404 }
413 405
414 file_resource->set_file_id(file.file_id()); 406 file_resource->set_file_id(file.file_id());
415 file_resource->set_parents(&parents); 407 file_resource->set_parents(&parents);
416 file_resource->set_title(file.details().title()); 408 file_resource->set_title(file.details().title());
417 if (file.details().file_kind() == FILE_KIND_FOLDER) 409 if (file.details().file_kind() == FILE_KIND_FOLDER)
418 file_resource->set_mime_type("application/vnd.google-apps.folder"); 410 file_resource->set_mime_type("application/vnd.google-apps.folder");
419 else if (file.details().file_kind() == FILE_KIND_FILE) 411 else if (file.details().file_kind() == FILE_KIND_FILE)
420 file_resource->set_mime_type("text/plain"); 412 file_resource->set_mime_type("text/plain");
421 else 413 else
422 file_resource->set_mime_type("application/vnd.google-apps.document"); 414 file_resource->set_mime_type("application/vnd.google-apps.document");
423 file_resource->set_md5_checksum(file.details().md5()); 415 file_resource->set_md5_checksum(file.details().md5());
424 file_resource->set_etag(file.details().etag()); 416 file_resource->set_etag(file.details().etag());
425 file_resource->set_created_date(base::Time::FromInternalValue( 417 file_resource->set_created_date(base::Time::FromInternalValue(
426 file.details().creation_time())); 418 file.details().creation_time()));
427 file_resource->set_modified_date(base::Time::FromInternalValue( 419 file_resource->set_modified_date(base::Time::FromInternalValue(
428 file.details().modification_time())); 420 file.details().modification_time()));
429 421
430 change->set_file(file_resource.Pass()); 422 return file_resource.Pass();
423 }
424
425 scoped_ptr<google_apis::ChangeResource> CreateChangeResourceFromMetadata(
426 const FileMetadata& file) {
427 scoped_ptr<google_apis::ChangeResource> change(
428 new google_apis::ChangeResource);
429 change->set_change_id(file.details().change_id());
430 change->set_file_id(file.file_id());
431 change->set_deleted(file.details().deleted());
432 if (change->is_deleted())
433 return change.Pass();
434
435 change->set_file(CreateFileResourceFromMetadata(file));
431 return change.Pass(); 436 return change.Pass();
432 } 437 }
433 438
434 void ApplyRenameChangeToMetadata(const std::string& new_title, 439 void ApplyRenameChangeToMetadata(const std::string& new_title,
435 FileMetadata* file) { 440 FileMetadata* file) {
436 FileDetails* details = file->mutable_details(); 441 FileDetails* details = file->mutable_details();
437 details->set_title(new_title); 442 details->set_title(new_title);
438 details->set_change_id(next_change_id_++); 443 details->set_change_id(next_change_id_++);
439 } 444 }
440 445
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
598 603
599 SyncStatusCode UpdateTracker(const FileTracker& tracker) { 604 SyncStatusCode UpdateTracker(const FileTracker& tracker) {
600 SyncStatusCode status = SYNC_STATUS_UNKNOWN; 605 SyncStatusCode status = SYNC_STATUS_UNKNOWN;
601 metadata_database_->UpdateTracker( 606 metadata_database_->UpdateTracker(
602 tracker.tracker_id(), tracker.synced_details(), 607 tracker.tracker_id(), tracker.synced_details(),
603 base::Bind(&SyncStatusResultCallback, &status)); 608 base::Bind(&SyncStatusResultCallback, &status));
604 message_loop_.RunUntilIdle(); 609 message_loop_.RunUntilIdle();
605 return status; 610 return status;
606 } 611 }
607 612
613 SyncStatusCode PopulateInitialData(
614 int64 largest_change_id,
615 const google_apis::FileResource& sync_root_folder,
616 const ScopedVector<google_apis::FileResource>& app_root_folders) {
617 SyncStatusCode status = SYNC_STATUS_UNKNOWN;
618 metadata_database_->PopulateInitialData(
619 largest_change_id,
620 sync_root_folder,
621 app_root_folders,
622 base::Bind(&SyncStatusResultCallback, &status));
623 message_loop_.RunUntilIdle();
624 return status;
625 }
626
627 void ResetTrackerID(FileTracker* tracker) {
628 tracker->set_tracker_id(GetTrackerIDByFileID(tracker->file_id()));
629 }
630
608 private: 631 private:
609 base::ScopedTempDir database_dir_; 632 base::ScopedTempDir database_dir_;
610 base::MessageLoop message_loop_; 633 base::MessageLoop message_loop_;
611 634
612 scoped_ptr<MetadataDatabase> metadata_database_; 635 scoped_ptr<MetadataDatabase> metadata_database_;
613 636
614 int64 next_change_id_; 637 int64 next_change_id_;
615 int64 next_tracker_id_; 638 int64 next_tracker_id_;
616 int64 next_file_id_number_; 639 int64 next_file_id_number_;
617 int64 next_md5_sequence_number_; 640 int64 next_md5_sequence_number_;
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
795 CreateChangeResourceFromMetadata(new_file.metadata), &changes); 818 CreateChangeResourceFromMetadata(new_file.metadata), &changes);
796 EXPECT_EQ(SYNC_STATUS_OK, UpdateByChangeList(changes.Pass())); 819 EXPECT_EQ(SYNC_STATUS_OK, UpdateByChangeList(changes.Pass()));
797 820
798 renamed_file.tracker.set_dirty(true); 821 renamed_file.tracker.set_dirty(true);
799 reorganized_file.tracker.set_dirty(true); 822 reorganized_file.tracker.set_dirty(true);
800 updated_file.tracker.set_dirty(true); 823 updated_file.tracker.set_dirty(true);
801 noop_file.tracker.set_dirty(true); 824 noop_file.tracker.set_dirty(true);
802 new_file.tracker.clear_synced_details(); 825 new_file.tracker.clear_synced_details();
803 new_file.tracker.set_active(false); 826 new_file.tracker.set_active(false);
804 new_file.tracker.set_dirty(true); 827 new_file.tracker.set_dirty(true);
805 new_file.tracker.set_tracker_id( 828 ResetTrackerID(&new_file.tracker);
806 GetTrackerIDByFileID(new_file.metadata.file_id()));
807 EXPECT_NE(0, new_file.tracker.tracker_id()); 829 EXPECT_NE(0, new_file.tracker.tracker_id());
808 830
809 new_file.should_be_absent = false; 831 new_file.should_be_absent = false;
810 832
811 VerifyTrackedFiles(tracked_files, arraysize(tracked_files)); 833 VerifyTrackedFiles(tracked_files, arraysize(tracked_files));
812 VerifyReloadConsistency(); 834 VerifyReloadConsistency();
813 } 835 }
814 836
815 TEST_F(MetadataDatabaseTest, PopulateFolderTest_RegularFolder) { 837 TEST_F(MetadataDatabaseTest, PopulateFolderTest_RegularFolder) {
816 TrackedFile sync_root(CreateTrackedSyncRoot()); 838 TrackedFile sync_root(CreateTrackedSyncRoot());
(...skipping 20 matching lines...) Expand all
837 FileIDList listed_children; 859 FileIDList listed_children;
838 listed_children.push_back(known_file.metadata.file_id()); 860 listed_children.push_back(known_file.metadata.file_id());
839 listed_children.push_back(new_file.metadata.file_id()); 861 listed_children.push_back(new_file.metadata.file_id());
840 862
841 EXPECT_EQ(SYNC_STATUS_OK, 863 EXPECT_EQ(SYNC_STATUS_OK,
842 PopulateFolder(folder_to_populate.metadata.file_id(), 864 PopulateFolder(folder_to_populate.metadata.file_id(),
843 listed_children)); 865 listed_children));
844 866
845 folder_to_populate.tracker.set_dirty(false); 867 folder_to_populate.tracker.set_dirty(false);
846 folder_to_populate.tracker.set_needs_folder_listing(false); 868 folder_to_populate.tracker.set_needs_folder_listing(false);
847 new_file.tracker.set_tracker_id( 869 ResetTrackerID(&new_file.tracker);
848 GetTrackerIDByFileID(new_file.metadata.file_id()));
849 new_file.tracker.set_dirty(true); 870 new_file.tracker.set_dirty(true);
850 new_file.tracker.set_active(false); 871 new_file.tracker.set_active(false);
851 new_file.tracker.clear_synced_details(); 872 new_file.tracker.clear_synced_details();
852 new_file.should_be_absent = false; 873 new_file.should_be_absent = false;
853 new_file.tracker_only = true; 874 new_file.tracker_only = true;
854 VerifyTrackedFiles(tracked_files, arraysize(tracked_files)); 875 VerifyTrackedFiles(tracked_files, arraysize(tracked_files));
855 VerifyReloadConsistency(); 876 VerifyReloadConsistency();
856 } 877 }
857 878
858 TEST_F(MetadataDatabaseTest, PopulateFolderTest_InactiveFolder) { 879 TEST_F(MetadataDatabaseTest, PopulateFolderTest_InactiveFolder) {
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
901 }; 922 };
902 923
903 SetUpDatabaseByTrackedFiles(tracked_files, arraysize(tracked_files)); 924 SetUpDatabaseByTrackedFiles(tracked_files, arraysize(tracked_files));
904 EXPECT_EQ(SYNC_STATUS_OK, InitializeMetadataDatabase()); 925 EXPECT_EQ(SYNC_STATUS_OK, InitializeMetadataDatabase());
905 VerifyTrackedFiles(tracked_files, arraysize(tracked_files)); 926 VerifyTrackedFiles(tracked_files, arraysize(tracked_files));
906 927
907 FileIDList disabled_app_children; 928 FileIDList disabled_app_children;
908 disabled_app_children.push_back(file.metadata.file_id()); 929 disabled_app_children.push_back(file.metadata.file_id());
909 EXPECT_EQ(SYNC_STATUS_OK, PopulateFolder( 930 EXPECT_EQ(SYNC_STATUS_OK, PopulateFolder(
910 disabled_app_root.metadata.file_id(), disabled_app_children)); 931 disabled_app_root.metadata.file_id(), disabled_app_children));
911 file.tracker.set_tracker_id(GetTrackerIDByFileID(file.metadata.file_id())); 932 ResetTrackerID(&file.tracker);
912 file.tracker.clear_synced_details(); 933 file.tracker.clear_synced_details();
913 file.tracker.set_dirty(true); 934 file.tracker.set_dirty(true);
914 file.tracker.set_active(false); 935 file.tracker.set_active(false);
915 file.should_be_absent = false; 936 file.should_be_absent = false;
916 file.tracker_only = true; 937 file.tracker_only = true;
917 938
918 disabled_app_root.tracker.set_dirty(false); 939 disabled_app_root.tracker.set_dirty(false);
919 disabled_app_root.tracker.set_needs_folder_listing(false); 940 disabled_app_root.tracker.set_needs_folder_listing(false);
920 VerifyTrackedFiles(tracked_files, arraysize(tracked_files)); 941 VerifyTrackedFiles(tracked_files, arraysize(tracked_files));
921 VerifyReloadConsistency(); 942 VerifyReloadConsistency();
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
965 new_conflict.metadata.details(); 986 new_conflict.metadata.details();
966 new_conflict.tracker.set_dirty(false); 987 new_conflict.tracker.set_dirty(false);
967 new_conflict.tracker.set_active(true); 988 new_conflict.tracker.set_active(true);
968 file.tracker.set_dirty(true); 989 file.tracker.set_dirty(true);
969 file.tracker.set_active(false); 990 file.tracker.set_active(false);
970 EXPECT_EQ(SYNC_STATUS_OK, UpdateTracker(new_conflict.tracker)); 991 EXPECT_EQ(SYNC_STATUS_OK, UpdateTracker(new_conflict.tracker));
971 VerifyTrackedFiles(tracked_files, arraysize(tracked_files)); 992 VerifyTrackedFiles(tracked_files, arraysize(tracked_files));
972 VerifyReloadConsistency(); 993 VerifyReloadConsistency();
973 } 994 }
974 995
996 TEST_F(MetadataDatabaseTest, PopulateInitialDataTest) {
997 TrackedFile sync_root(CreateTrackedSyncRoot());
998 TrackedFile app_root(CreateTrackedFolder(sync_root, "app_root"));
999 app_root.tracker.set_active(false);
1000
1001 const TrackedFile* tracked_files[] = {
1002 &sync_root, &app_root
1003 };
1004
1005 int64 largest_change_id = 42;
1006 scoped_ptr<google_apis::FileResource> sync_root_folder(
1007 CreateFileResourceFromMetadata(sync_root.metadata));
1008 scoped_ptr<google_apis::FileResource> app_root_folder(
1009 CreateFileResourceFromMetadata(app_root.metadata));
1010
1011 ScopedVector<google_apis::FileResource> app_root_folders;
1012 app_root_folders.push_back(app_root_folder.release());
1013
1014 EXPECT_EQ(SYNC_STATUS_OK, InitializeMetadataDatabase());
1015 EXPECT_EQ(SYNC_STATUS_OK, PopulateInitialData(
1016 largest_change_id,
1017 *sync_root_folder,
1018 app_root_folders));
1019
1020 ResetTrackerID(&sync_root.tracker);
1021 ResetTrackerID(&app_root.tracker);
1022 app_root.tracker.set_parent_tracker_id(sync_root.tracker.tracker_id());
1023
1024 VerifyTrackedFiles(tracked_files, arraysize(tracked_files));
1025 VerifyReloadConsistency();
1026 }
1027
975 } // namespace drive_backend 1028 } // namespace drive_backend
976 } // namespace sync_file_system 1029 } // namespace sync_file_system
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698