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

Unified Diff: chrome/browser/sync/glue/device_info_sync_service_unittest.cc

Issue 566623003: Refactor syncable DEVICE_INFO type from ChangeProcessor to SyncableService - part 3. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: More CR feedback addressed in DeviceInfoSyncService. 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/sync/glue/device_info_sync_service.cc ('k') | chrome/browser/sync/glue/sync_backend_host.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/sync/glue/device_info_sync_service_unittest.cc
diff --git a/chrome/browser/sync/glue/device_info_sync_service_unittest.cc b/chrome/browser/sync/glue/device_info_sync_service_unittest.cc
index 6fe3a8ee61947e1da28ef3ab8bd7e54c36b13854..edf4e51c8bd79c35e8be49cf8f803b9f884c6f21 100644
--- a/chrome/browser/sync/glue/device_info_sync_service_unittest.cc
+++ b/chrome/browser/sync/glue/device_info_sync_service_unittest.cc
@@ -11,6 +11,7 @@
#include "sync/api/sync_change_processor_wrapper_for_test.h"
#include "sync/api/sync_error_factory_mock.h"
#include "sync/internal_api/public/attachments/attachment_service_proxy_for_test.h"
+#include "sync/util/time.h"
#include "testing/gtest/include/gtest/gtest.h"
using syncer::AttachmentIdList;
@@ -112,7 +113,8 @@ class DeviceInfoSyncServiceTest : public testing::Test,
}
SyncData CreateRemoteData(const std::string& client_id,
- const std::string& client_name) {
+ const std::string& client_name,
+ int64 backup_timestamp = 0) {
sync_pb::EntitySpecifics entity;
sync_pb::DeviceInfoSpecifics& specifics = *entity.mutable_device_info();
@@ -123,6 +125,10 @@ class DeviceInfoSyncServiceTest : public testing::Test,
specifics.set_device_type(sync_pb::SyncEnums_DeviceType_TYPE_LINUX);
specifics.set_signin_scoped_device_id("device_id");
+ if (backup_timestamp != 0) {
+ specifics.set_backup_timestamp(backup_timestamp);
+ }
+
return SyncData::CreateRemoteData(1,
entity,
base::Time(),
@@ -400,6 +406,152 @@ TEST_F(DeviceInfoSyncServiceTest, ProcessChangesAfterUnsubscribing) {
EXPECT_EQ(0, num_device_info_changed_callbacks_);
}
+// Verifies setting backup timestamp after the initial sync.
+TEST_F(DeviceInfoSyncServiceTest, UpdateLocalDeviceBackupTime) {
+ // Shouldn't have backuptime initially.
+ base::Time backup_time = sync_service_->GetLocalDeviceBackupTime();
+ EXPECT_TRUE(backup_time.is_null());
+
+ // Perform the initial sync with empty data.
+ SyncMergeResult merge_result =
+ sync_service_->MergeDataAndStartSyncing(syncer::DEVICE_INFO,
+ SyncDataList(),
+ PassProcessor(),
+ CreateAndPassSyncErrorFactory());
+
+ // Should have local device after the initial sync.
+ EXPECT_EQ(1U, sync_processor_->change_list_size());
+ EXPECT_EQ(SyncChange::ACTION_ADD, sync_processor_->change_type_at(0));
+
+ // Shouldn't have backup time initially.
+ EXPECT_EQ("guid_1", sync_processor_->cache_guid_at(0));
+ EXPECT_FALSE(sync_processor_->device_info_at(0).has_backup_timestamp());
+
+ sync_service_->UpdateLocalDeviceBackupTime(base::Time::FromTimeT(1000));
+
+ // Should have local device info updated with the specified backup timestamp.
+ EXPECT_EQ(1U, sync_processor_->change_list_size());
+ EXPECT_EQ(SyncChange::ACTION_UPDATE, sync_processor_->change_type_at(0));
+ EXPECT_EQ("guid_1", sync_processor_->cache_guid_at(0));
+ EXPECT_TRUE(sync_processor_->device_info_at(0).has_backup_timestamp());
+
+ backup_time = syncer::ProtoTimeToTime(
+ sync_processor_->device_info_at(0).backup_timestamp());
+ EXPECT_EQ(1000, backup_time.ToTimeT());
+
+ // Also verify that we get the same backup time directly from the service.
+ backup_time = sync_service_->GetLocalDeviceBackupTime();
+ EXPECT_EQ(1000, backup_time.ToTimeT());
+}
+
+// Verifies setting backup timestamp prior to the initial sync.
+TEST_F(DeviceInfoSyncServiceTest, UpdateLocalDeviceBackupTimeBeforeSync) {
+ // Set the backup timestamp.
+ sync_service_->UpdateLocalDeviceBackupTime(base::Time::FromTimeT(2000));
+ // Verify that we get it back.
+ base::Time backup_time = sync_service_->GetLocalDeviceBackupTime();
+ EXPECT_EQ(2000, backup_time.ToTimeT());
+
+ // Now perform the initial sync with empty data.
+ SyncMergeResult merge_result =
+ sync_service_->MergeDataAndStartSyncing(syncer::DEVICE_INFO,
+ SyncDataList(),
+ PassProcessor(),
+ CreateAndPassSyncErrorFactory());
+
+ // Should have local device after the initial sync.
+ // Should have the backup timestamp set.
+ EXPECT_EQ(1U, sync_processor_->change_list_size());
+ EXPECT_EQ(SyncChange::ACTION_ADD, sync_processor_->change_type_at(0));
+ EXPECT_EQ("guid_1", sync_processor_->cache_guid_at(0));
+ EXPECT_TRUE(sync_processor_->device_info_at(0).has_backup_timestamp());
+
+ backup_time = syncer::ProtoTimeToTime(
+ sync_processor_->device_info_at(0).backup_timestamp());
+ EXPECT_EQ(2000, backup_time.ToTimeT());
+}
+
+// Verifies that the backup timestamp that comes in the intial sync data
+// gets preserved when there are no changes to the local device.
+TEST_F(DeviceInfoSyncServiceTest, PreserveBackupTimeWithMatchingLocalDevice) {
+ base::Time backup_time = base::Time::FromTimeT(3000);
+ SyncDataList sync_data;
+ sync_data.push_back(CreateRemoteData(
+ "guid_1", "client_1", syncer::TimeToProtoTime(backup_time)));
+
+ SyncMergeResult merge_result =
+ sync_service_->MergeDataAndStartSyncing(syncer::DEVICE_INFO,
+ sync_data,
+ PassProcessor(),
+ CreateAndPassSyncErrorFactory());
+
+ // Everything is matching so there should be no updates.
+ EXPECT_EQ(0U, sync_processor_->change_list_size());
+
+ // Verify that we get back the same time.
+ backup_time = sync_service_->GetLocalDeviceBackupTime();
+ EXPECT_EQ(3000, backup_time.ToTimeT());
+}
+
+// Verifies that the backup timestamp that comes in the intial sync data
+// gets merged with the local device data.
+TEST_F(DeviceInfoSyncServiceTest, MergeBackupTimeWithMatchingLocalDevice) {
+ base::Time backup_time = base::Time::FromTimeT(4000);
+ SyncDataList sync_data;
+ sync_data.push_back(CreateRemoteData(
+ "guid_1", "foo_1", syncer::TimeToProtoTime(backup_time)));
+
+ SyncMergeResult merge_result =
+ sync_service_->MergeDataAndStartSyncing(syncer::DEVICE_INFO,
+ sync_data,
+ PassProcessor(),
+ CreateAndPassSyncErrorFactory());
+
+ // Should be one change because of the client name mismatch.
+ // However the backup time passed in the initial data should be merged into
+ // the change.
+ EXPECT_EQ(1U, sync_processor_->change_list_size());
+
+ EXPECT_EQ(SyncChange::ACTION_UPDATE, sync_processor_->change_type_at(0));
+ EXPECT_EQ("guid_1", sync_processor_->cache_guid_at(0));
+ EXPECT_EQ("client_1", sync_processor_->client_name_at(0));
+
+ backup_time = syncer::ProtoTimeToTime(
+ sync_processor_->device_info_at(0).backup_timestamp());
+ EXPECT_EQ(4000, backup_time.ToTimeT());
+}
+
+// Verifies that mismatching backup timestamp generates an update even
+// when the rest of local device data is matching.
+TEST_F(DeviceInfoSyncServiceTest,
+ MergeMismatchingBackupTimeWithMatchingLocalDevice) {
+ base::Time backup_time = base::Time::FromTimeT(5000);
+ SyncDataList sync_data;
+ sync_data.push_back(CreateRemoteData(
+ "guid_1", "client_1", syncer::TimeToProtoTime(backup_time)));
+
+ // Set the backup timestamp different than the one in the sync data.
+ sync_service_->UpdateLocalDeviceBackupTime(base::Time::FromTimeT(6000));
+
+ SyncMergeResult merge_result =
+ sync_service_->MergeDataAndStartSyncing(syncer::DEVICE_INFO,
+ sync_data,
+ PassProcessor(),
+ CreateAndPassSyncErrorFactory());
+
+ // Should generate and update due to timestamp mismatch.
+ // The locally set timestamp wins.
+ EXPECT_EQ(1U, sync_processor_->change_list_size());
+
+ EXPECT_EQ(SyncChange::ACTION_UPDATE, sync_processor_->change_type_at(0));
+ EXPECT_EQ("guid_1", sync_processor_->cache_guid_at(0));
+ EXPECT_EQ("client_1", sync_processor_->client_name_at(0));
+
+ backup_time = syncer::ProtoTimeToTime(
+ sync_processor_->device_info_at(0).backup_timestamp());
+ EXPECT_EQ(6000, backup_time.ToTimeT());
+}
+
} // namespace
} // namespace browser_sync
« no previous file with comments | « chrome/browser/sync/glue/device_info_sync_service.cc ('k') | chrome/browser/sync/glue/sync_backend_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698