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

Unified Diff: sync/engine/directory_update_handler_unittest.cc

Issue 232003005: [Sync] Add support for retrying a getupdates due to a context change (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address comments Created 6 years, 8 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 | « sync/engine/directory_update_handler.cc ('k') | sync/engine/get_updates_processor.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sync/engine/directory_update_handler_unittest.cc
diff --git a/sync/engine/directory_update_handler_unittest.cc b/sync/engine/directory_update_handler_unittest.cc
index 6d1b35a1994301102e13fbfcefd298a9233f63da..ec8cc35f390e2bd6c74abbd8c0f9108f7ed35c61 100644
--- a/sync/engine/directory_update_handler_unittest.cc
+++ b/sync/engine/directory_update_handler_unittest.cc
@@ -195,14 +195,14 @@ TEST_F(DirectoryUpdateHandlerProcessUpdateTest,
// Test the receipt of a non-bookmark item.
TEST_F(DirectoryUpdateHandlerProcessUpdateTest, ReceiveNonBookmarkItem) {
- DirectoryUpdateHandler handler(dir(), PREFERENCES, ui_worker());
+ DirectoryUpdateHandler handler(dir(), AUTOFILL, ui_worker());
sync_pb::GetUpdatesResponse gu_response;
sessions::StatusController status;
std::string root = syncable::GetNullId().GetServerId();
syncable::Id server_id = syncable::Id::CreateFromServerId("xyz");
scoped_ptr<sync_pb::SyncEntity> e =
- CreateUpdate(SyncableIdToProto(server_id), root, PREFERENCES);
+ CreateUpdate(SyncableIdToProto(server_id), root, AUTOFILL);
e->set_server_defined_unique_tag("9PGRuKdX5sHyGMB17CvYTXuC43I=");
// Add it to the applicable updates list.
@@ -283,7 +283,9 @@ TEST_F(DirectoryUpdateHandlerProcessUpdateTest, GarbageCollectionByVersion) {
updates.push_back(e2.get());
// Process and apply updates.
- handler.ProcessGetUpdatesResponse(progress, context, updates, &status);
+ EXPECT_EQ(
+ SYNCER_OK,
+ handler.ProcessGetUpdatesResponse(progress, context, updates, &status));
handler.ApplyUpdates(&status);
// Verify none is deleted because they are unapplied during GC.
@@ -293,14 +295,93 @@ TEST_F(DirectoryUpdateHandlerProcessUpdateTest, GarbageCollectionByVersion) {
// Process and apply again. Old entry is deleted but not root.
progress.mutable_gc_directive()->set_version_watermark(kDefaultVersion + 20);
- handler.ProcessGetUpdatesResponse(
- progress, context, SyncEntityList(), &status);
+ EXPECT_EQ(SYNCER_OK,
+ handler.ProcessGetUpdatesResponse(
+ progress, context, SyncEntityList(), &status));
handler.ApplyUpdates(&status);
EXPECT_TRUE(EntryExists(type_root->id_string()));
EXPECT_FALSE(EntryExists(e1->id_string()));
EXPECT_TRUE(EntryExists(e2->id_string()));
}
+TEST_F(DirectoryUpdateHandlerProcessUpdateTest, ContextVersion) {
+ DirectoryUpdateHandler handler(dir(), SYNCED_NOTIFICATIONS, ui_worker());
+ sessions::StatusController status;
+ int field_number = GetSpecificsFieldNumberFromModelType(SYNCED_NOTIFICATIONS);
+
+ sync_pb::DataTypeProgressMarker progress;
+ progress.set_data_type_id(
+ GetSpecificsFieldNumberFromModelType(SYNCED_NOTIFICATIONS));
+ progress.set_token("token");
+
+ sync_pb::DataTypeContext old_context;
+ old_context.set_version(1);
+ old_context.set_context("data");
+ old_context.set_data_type_id(field_number);
+
+ scoped_ptr<sync_pb::SyncEntity> type_root =
+ CreateUpdate(SyncableIdToProto(syncable::Id::CreateFromServerId("root")),
+ syncable::GetNullId().GetServerId(),
+ SYNCED_NOTIFICATIONS);
+ type_root->set_server_defined_unique_tag(
+ ModelTypeToRootTag(SYNCED_NOTIFICATIONS));
+ type_root->set_folder(true);
+ scoped_ptr<sync_pb::SyncEntity> e1 =
+ CreateUpdate(SyncableIdToProto(syncable::Id::CreateFromServerId("e1")),
+ type_root->id_string(),
+ SYNCED_NOTIFICATIONS);
+
+ SyncEntityList updates;
+ updates.push_back(type_root.get());
+ updates.push_back(e1.get());
+
+ // The first response should be processed fine.
+ EXPECT_EQ(SYNCER_OK,
+ handler.ProcessGetUpdatesResponse(
+ progress, old_context, updates, &status));
+ handler.ApplyUpdates(&status);
+
+ EXPECT_TRUE(EntryExists(type_root->id_string()));
+ EXPECT_TRUE(EntryExists(e1->id_string()));
+
+ {
+ sync_pb::DataTypeContext dir_context;
+ syncable::ReadTransaction trans(FROM_HERE, dir());
+ trans.directory()->GetDataTypeContext(
+ &trans, SYNCED_NOTIFICATIONS, &dir_context);
+ EXPECT_EQ(old_context.SerializeAsString(), dir_context.SerializeAsString());
+ }
+
+ sync_pb::DataTypeContext new_context;
rlarocque 2014/04/10 20:02:36 Could this second half be made into a separate tes
Nicolas Zea 2014/04/10 20:44:21 Not really. The first half is mainly setting up th
+ new_context.set_version(0);
+ new_context.set_context("old");
+ new_context.set_data_type_id(field_number);
+
+ scoped_ptr<sync_pb::SyncEntity> e2 =
+ CreateUpdate(SyncableIdToProto(syncable::Id::CreateFromServerId("e2")),
+ type_root->id_string(),
+ SYNCED_NOTIFICATIONS);
+ updates.clear();
+ updates.push_back(e2.get());
+
+ // The second response, with an old context version, should result in an
+ // error and the updates should be dropped.
+ EXPECT_EQ(DATATYPE_TRIGGERED_RETRY,
+ handler.ProcessGetUpdatesResponse(
+ progress, new_context, updates, &status));
+ handler.ApplyUpdates(&status);
+
+ EXPECT_FALSE(EntryExists(e2->id_string()));
+
+ {
+ sync_pb::DataTypeContext dir_context;
+ syncable::ReadTransaction trans(FROM_HERE, dir());
+ trans.directory()->GetDataTypeContext(
+ &trans, SYNCED_NOTIFICATIONS, &dir_context);
+ EXPECT_EQ(old_context.SerializeAsString(), dir_context.SerializeAsString());
+ }
+}
+
// A test harness for tests that focus on applying updates.
//
// Update application is performed when we want to take updates that were
« no previous file with comments | « sync/engine/directory_update_handler.cc ('k') | sync/engine/get_updates_processor.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698