Index: chrome/browser/sync_file_system/drive_backend/metadata_database_unittest.cc |
diff --git a/chrome/browser/sync_file_system/drive_backend/metadata_database_unittest.cc b/chrome/browser/sync_file_system/drive_backend/metadata_database_unittest.cc |
index 0c1971113070988a005825233b1e79b0a001dbc7..b843f079704116887753a5c26773538d43ab4fb2 100644 |
--- a/chrome/browser/sync_file_system/drive_backend/metadata_database_unittest.cc |
+++ b/chrome/browser/sync_file_system/drive_backend/metadata_database_unittest.cc |
@@ -28,7 +28,11 @@ const int64 kInitialChangeID = 1234; |
const int64 kSyncRootTrackerID = 100; |
const char kSyncRootFolderID[] = "sync_root_folder_id"; |
+// This struct is used to setup initial state of the database in the test and |
+// also used to match to the modified content of the database as the |
+// expectation. |
struct TrackedFile { |
+ // Holds the latest remote metadata which may be not-yet-synced to |tracker|. |
FileMetadata metadata; |
FileTracker tracker; |
@@ -585,13 +589,22 @@ class MetadataDatabaseTest : public testing::Test { |
SyncStatusCode PopulateFolder(const std::string& folder_id, |
const FileIDList& listed_children) { |
SyncStatusCode status = SYNC_STATUS_UNKNOWN; |
- metadata_database_->PopulateFolder( |
+ metadata_database_->PopulateFolderByChildList( |
folder_id, listed_children, |
base::Bind(&SyncStatusResultCallback, &status)); |
message_loop_.RunUntilIdle(); |
return status; |
} |
+ SyncStatusCode UpdateTracker(const FileTracker& tracker) { |
+ SyncStatusCode status = SYNC_STATUS_UNKNOWN; |
+ metadata_database_->UpdateTracker( |
+ tracker.tracker_id(), tracker.synced_details(), |
+ base::Bind(&SyncStatusResultCallback, &status)); |
+ message_loop_.RunUntilIdle(); |
+ return status; |
+ } |
+ |
private: |
base::ScopedTempDir database_dir_; |
base::MessageLoop message_loop_; |
@@ -908,5 +921,56 @@ TEST_F(MetadataDatabaseTest, PopulateFolderTest_DisabledAppRoot) { |
VerifyReloadConsistency(); |
} |
+TEST_F(MetadataDatabaseTest, UpdateTrackerTest) { |
+ TrackedFile sync_root(CreateTrackedSyncRoot()); |
+ TrackedFile app_root(CreateTrackedAppRoot(sync_root, "app_root")); |
+ TrackedFile file(CreateTrackedFile(app_root, "file")); |
+ file.tracker.set_dirty(true); |
+ file.metadata.mutable_details()->set_title("renamed file");; |
+ |
+ TrackedFile inactive_file(CreateTrackedFile(app_root, "inactive_file")); |
+ inactive_file.tracker.set_active(false); |
+ inactive_file.tracker.set_dirty(true); |
+ inactive_file.metadata.mutable_details()->set_title("renamed inactive file"); |
+ inactive_file.metadata.mutable_details()->set_md5("modified_md5"); |
+ |
+ TrackedFile new_conflict(CreateTrackedFile(app_root, "new conflict file")); |
+ new_conflict.tracker.set_dirty(true); |
+ new_conflict.metadata.mutable_details()->set_title("renamed file"); |
+ |
+ const TrackedFile* tracked_files[] = { |
+ &sync_root, &app_root, &file, &inactive_file, &new_conflict |
+ }; |
+ |
+ SetUpDatabaseByTrackedFiles(tracked_files, arraysize(tracked_files)); |
+ EXPECT_EQ(SYNC_STATUS_OK, InitializeMetadataDatabase()); |
+ VerifyTrackedFiles(tracked_files, arraysize(tracked_files)); |
+ VerifyReloadConsistency(); |
+ |
+ *file.tracker.mutable_synced_details() = file.metadata.details(); |
+ file.tracker.set_dirty(false); |
+ EXPECT_EQ(SYNC_STATUS_OK, UpdateTracker(file.tracker)); |
+ VerifyTrackedFiles(tracked_files, arraysize(tracked_files)); |
+ VerifyReloadConsistency(); |
+ |
+ *inactive_file.tracker.mutable_synced_details() = |
+ inactive_file.metadata.details(); |
+ inactive_file.tracker.set_dirty(false); |
+ inactive_file.tracker.set_active(true); |
+ EXPECT_EQ(SYNC_STATUS_OK, UpdateTracker(inactive_file.tracker)); |
+ VerifyTrackedFiles(tracked_files, arraysize(tracked_files)); |
+ VerifyReloadConsistency(); |
+ |
+ *new_conflict.tracker.mutable_synced_details() = |
+ new_conflict.metadata.details(); |
+ new_conflict.tracker.set_dirty(false); |
+ new_conflict.tracker.set_active(true); |
+ file.tracker.set_dirty(true); |
+ file.tracker.set_active(false); |
+ EXPECT_EQ(SYNC_STATUS_OK, UpdateTracker(new_conflict.tracker)); |
+ VerifyTrackedFiles(tracked_files, arraysize(tracked_files)); |
+ VerifyReloadConsistency(); |
+} |
+ |
} // namespace drive_backend |
} // namespace sync_file_system |