Chromium Code Reviews| 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 |