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

Unified Diff: sync/engine/get_updates_processor_unittest.cc

Issue 2130453004: [Sync] Move //sync to //components/sync. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase. Created 4 years, 5 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/get_updates_processor.cc ('k') | sync/engine/model_type_worker.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sync/engine/get_updates_processor_unittest.cc
diff --git a/sync/engine/get_updates_processor_unittest.cc b/sync/engine/get_updates_processor_unittest.cc
deleted file mode 100644
index 56239283afbbffd6459c2c53cca9c223ad2e6478..0000000000000000000000000000000000000000
--- a/sync/engine/get_updates_processor_unittest.cc
+++ /dev/null
@@ -1,517 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "sync/engine/get_updates_processor.h"
-
-#include <stdint.h>
-
-#include <string>
-
-#include "base/macros.h"
-#include "base/message_loop/message_loop.h"
-#include "base/stl_util.h"
-#include "sync/engine/get_updates_delegate.h"
-#include "sync/engine/update_handler.h"
-#include "sync/internal_api/public/base/model_type_test_util.h"
-#include "sync/protocol/sync.pb.h"
-#include "sync/sessions/debug_info_getter.h"
-#include "sync/sessions/nudge_tracker.h"
-#include "sync/sessions/status_controller.h"
-#include "sync/test/engine/fake_model_worker.h"
-#include "sync/test/engine/mock_update_handler.h"
-#include "sync/test/mock_invalidation.h"
-#include "sync/test/sessions/mock_debug_info_getter.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace syncer {
-
-namespace {
-
-std::unique_ptr<InvalidationInterface> BuildInvalidation(
- int64_t version,
- const std::string& payload) {
- return MockInvalidation::Build(version, payload);
-}
-
-} // namespace
-
-using sessions::MockDebugInfoGetter;
-
-// A test fixture for tests exercising download updates functions.
-class GetUpdatesProcessorTest : public ::testing::Test {
- protected:
- GetUpdatesProcessorTest() :
- kTestStartTime(base::TimeTicks::Now()),
- update_handler_deleter_(&update_handler_map_) {}
-
- void SetUp() override {
- AddUpdateHandler(AUTOFILL);
- AddUpdateHandler(BOOKMARKS);
- AddUpdateHandler(PREFERENCES);
- }
-
- ModelTypeSet enabled_types() {
- return enabled_types_;
- }
-
- std::unique_ptr<GetUpdatesProcessor> BuildGetUpdatesProcessor(
- const GetUpdatesDelegate& delegate) {
- return std::unique_ptr<GetUpdatesProcessor>(
- new GetUpdatesProcessor(&update_handler_map_, delegate));
- }
-
- void InitFakeUpdateResponse(sync_pb::GetUpdatesResponse* response) {
- ModelTypeSet types = enabled_types();
-
- for (ModelTypeSet::Iterator it = types.First(); it.Good(); it.Inc()) {
- sync_pb::DataTypeProgressMarker* marker =
- response->add_new_progress_marker();
- marker->set_data_type_id(GetSpecificsFieldNumberFromModelType(it.Get()));
- marker->set_token("foobarbaz");
- sync_pb::DataTypeContext* context = response->add_context_mutations();
- context->set_data_type_id(GetSpecificsFieldNumberFromModelType(it.Get()));
- context->set_version(1);
- context->set_context("context");
- }
-
- response->set_changes_remaining(0);
- }
-
- const base::TimeTicks kTestStartTime;
-
- protected:
- MockUpdateHandler* AddUpdateHandler(ModelType type) {
- enabled_types_.Put(type);
-
- MockUpdateHandler* handler = new MockUpdateHandler(type);
- update_handler_map_.insert(std::make_pair(type, handler));
-
- return handler;
- }
-
- private:
- ModelTypeSet enabled_types_;
- UpdateHandlerMap update_handler_map_;
- STLValueDeleter<UpdateHandlerMap> update_handler_deleter_;
- std::unique_ptr<GetUpdatesProcessor> get_updates_processor_;
-
- DISALLOW_COPY_AND_ASSIGN(GetUpdatesProcessorTest);
-};
-
-// Basic test to make sure nudges are expressed properly in the request.
-TEST_F(GetUpdatesProcessorTest, BookmarkNudge) {
- sessions::NudgeTracker nudge_tracker;
- nudge_tracker.RecordLocalChange(ModelTypeSet(BOOKMARKS));
-
- sync_pb::ClientToServerMessage message;
- NormalGetUpdatesDelegate normal_delegate(nudge_tracker);
- std::unique_ptr<GetUpdatesProcessor> processor(
- BuildGetUpdatesProcessor(normal_delegate));
- processor->PrepareGetUpdates(enabled_types(), &message);
-
- const sync_pb::GetUpdatesMessage& gu_msg = message.get_updates();
- EXPECT_EQ(sync_pb::GetUpdatesCallerInfo::LOCAL,
- gu_msg.caller_info().source());
- EXPECT_EQ(sync_pb::SyncEnums::GU_TRIGGER, gu_msg.get_updates_origin());
- for (int i = 0; i < gu_msg.from_progress_marker_size(); ++i) {
- syncer::ModelType type = GetModelTypeFromSpecificsFieldNumber(
- gu_msg.from_progress_marker(i).data_type_id());
-
- const sync_pb::DataTypeProgressMarker& progress_marker =
- gu_msg.from_progress_marker(i);
- const sync_pb::GetUpdateTriggers& gu_trigger =
- progress_marker.get_update_triggers();
-
- // We perform some basic tests of GU trigger and source fields here. The
- // more complicated scenarios are tested by the NudgeTracker tests.
- if (type == BOOKMARKS) {
- EXPECT_TRUE(progress_marker.has_notification_hint());
- EXPECT_EQ("", progress_marker.notification_hint());
- EXPECT_EQ(1, gu_trigger.local_modification_nudges());
- EXPECT_EQ(0, gu_trigger.datatype_refresh_nudges());
- } else {
- EXPECT_FALSE(progress_marker.has_notification_hint());
- EXPECT_EQ(0, gu_trigger.local_modification_nudges());
- EXPECT_EQ(0, gu_trigger.datatype_refresh_nudges());
- }
- }
-}
-
-// Basic test to ensure invalidation payloads are expressed in the request.
-TEST_F(GetUpdatesProcessorTest, NotifyMany) {
- sessions::NudgeTracker nudge_tracker;
- nudge_tracker.RecordRemoteInvalidation(
- AUTOFILL, BuildInvalidation(1, "autofill_payload"));
- nudge_tracker.RecordRemoteInvalidation(
- BOOKMARKS, BuildInvalidation(1, "bookmark_payload"));
- nudge_tracker.RecordRemoteInvalidation(
- PREFERENCES, BuildInvalidation(1, "preferences_payload"));
- ModelTypeSet notified_types;
- notified_types.Put(AUTOFILL);
- notified_types.Put(BOOKMARKS);
- notified_types.Put(PREFERENCES);
-
- sync_pb::ClientToServerMessage message;
- NormalGetUpdatesDelegate normal_delegate(nudge_tracker);
- std::unique_ptr<GetUpdatesProcessor> processor(
- BuildGetUpdatesProcessor(normal_delegate));
- processor->PrepareGetUpdates(enabled_types(), &message);
-
- const sync_pb::GetUpdatesMessage& gu_msg = message.get_updates();
- EXPECT_EQ(sync_pb::GetUpdatesCallerInfo::NOTIFICATION,
- gu_msg.caller_info().source());
- EXPECT_EQ(sync_pb::SyncEnums::GU_TRIGGER, gu_msg.get_updates_origin());
- for (int i = 0; i < gu_msg.from_progress_marker_size(); ++i) {
- syncer::ModelType type = GetModelTypeFromSpecificsFieldNumber(
- gu_msg.from_progress_marker(i).data_type_id());
-
- const sync_pb::DataTypeProgressMarker& progress_marker =
- gu_msg.from_progress_marker(i);
- const sync_pb::GetUpdateTriggers& gu_trigger =
- progress_marker.get_update_triggers();
-
- // We perform some basic tests of GU trigger and source fields here. The
- // more complicated scenarios are tested by the NudgeTracker tests.
- if (notified_types.Has(type)) {
- EXPECT_TRUE(progress_marker.has_notification_hint());
- EXPECT_FALSE(progress_marker.notification_hint().empty());
- EXPECT_EQ(1, gu_trigger.notification_hint_size());
- } else {
- EXPECT_FALSE(progress_marker.has_notification_hint());
- EXPECT_EQ(0, gu_trigger.notification_hint_size());
- }
- }
-}
-
-// Basic test to ensure initial sync requests are expressed in the request.
-TEST_F(GetUpdatesProcessorTest, InitialSyncRequest) {
- sessions::NudgeTracker nudge_tracker;
- nudge_tracker.RecordInitialSyncRequired(AUTOFILL);
- nudge_tracker.RecordInitialSyncRequired(PREFERENCES);
-
- ModelTypeSet initial_sync_types = ModelTypeSet(AUTOFILL, PREFERENCES);
-
- sync_pb::ClientToServerMessage message;
- NormalGetUpdatesDelegate normal_delegate(nudge_tracker);
- std::unique_ptr<GetUpdatesProcessor> processor(
- BuildGetUpdatesProcessor(normal_delegate));
- processor->PrepareGetUpdates(enabled_types(), &message);
-
- const sync_pb::GetUpdatesMessage& gu_msg = message.get_updates();
- EXPECT_EQ(sync_pb::GetUpdatesCallerInfo::DATATYPE_REFRESH,
- gu_msg.caller_info().source());
- EXPECT_EQ(sync_pb::SyncEnums::GU_TRIGGER, gu_msg.get_updates_origin());
- for (int i = 0; i < gu_msg.from_progress_marker_size(); ++i) {
- syncer::ModelType type = GetModelTypeFromSpecificsFieldNumber(
- gu_msg.from_progress_marker(i).data_type_id());
-
- const sync_pb::DataTypeProgressMarker& progress_marker =
- gu_msg.from_progress_marker(i);
- const sync_pb::GetUpdateTriggers& gu_trigger =
- progress_marker.get_update_triggers();
-
- // We perform some basic tests of GU trigger and source fields here. The
- // more complicated scenarios are tested by the NudgeTracker tests.
- if (initial_sync_types.Has(type)) {
- EXPECT_TRUE(gu_trigger.initial_sync_in_progress());
- } else {
- EXPECT_TRUE(gu_trigger.has_initial_sync_in_progress());
- EXPECT_FALSE(gu_trigger.initial_sync_in_progress());
- }
- }
-}
-
-TEST_F(GetUpdatesProcessorTest, ConfigureTest) {
- sync_pb::ClientToServerMessage message;
- ConfigureGetUpdatesDelegate configure_delegate(
- sync_pb::GetUpdatesCallerInfo::RECONFIGURATION);
- std::unique_ptr<GetUpdatesProcessor> processor(
- BuildGetUpdatesProcessor(configure_delegate));
- processor->PrepareGetUpdates(enabled_types(), &message);
-
- const sync_pb::GetUpdatesMessage& gu_msg = message.get_updates();
- EXPECT_EQ(sync_pb::SyncEnums::RECONFIGURATION, gu_msg.get_updates_origin());
- EXPECT_EQ(sync_pb::GetUpdatesCallerInfo::RECONFIGURATION,
- gu_msg.caller_info().source());
-
- ModelTypeSet progress_types;
- for (int i = 0; i < gu_msg.from_progress_marker_size(); ++i) {
- syncer::ModelType type = GetModelTypeFromSpecificsFieldNumber(
- gu_msg.from_progress_marker(i).data_type_id());
- progress_types.Put(type);
- }
- EXPECT_EQ(enabled_types(), progress_types);
-}
-
-TEST_F(GetUpdatesProcessorTest, PollTest) {
- sync_pb::ClientToServerMessage message;
- PollGetUpdatesDelegate poll_delegate;
- std::unique_ptr<GetUpdatesProcessor> processor(
- BuildGetUpdatesProcessor(poll_delegate));
- processor->PrepareGetUpdates(enabled_types(), &message);
-
- const sync_pb::GetUpdatesMessage& gu_msg = message.get_updates();
- EXPECT_EQ(sync_pb::SyncEnums::PERIODIC, gu_msg.get_updates_origin());
- EXPECT_EQ(sync_pb::GetUpdatesCallerInfo::PERIODIC,
- gu_msg.caller_info().source());
-
- ModelTypeSet progress_types;
- for (int i = 0; i < gu_msg.from_progress_marker_size(); ++i) {
- syncer::ModelType type = GetModelTypeFromSpecificsFieldNumber(
- gu_msg.from_progress_marker(i).data_type_id());
- progress_types.Put(type);
- }
- EXPECT_EQ(enabled_types(), progress_types);
-}
-
-TEST_F(GetUpdatesProcessorTest, RetryTest) {
- sessions::NudgeTracker nudge_tracker;
-
- // Schedule a retry.
- base::TimeTicks t1 = kTestStartTime;
- nudge_tracker.SetNextRetryTime(t1);
-
- // Get the nudge tracker to think the retry is due.
- nudge_tracker.SetSyncCycleStartTime(t1 + base::TimeDelta::FromSeconds(1));
-
- sync_pb::ClientToServerMessage message;
- NormalGetUpdatesDelegate normal_delegate(nudge_tracker);
- std::unique_ptr<GetUpdatesProcessor> processor(
- BuildGetUpdatesProcessor(normal_delegate));
- processor->PrepareGetUpdates(enabled_types(), &message);
-
- const sync_pb::GetUpdatesMessage& gu_msg = message.get_updates();
- EXPECT_EQ(sync_pb::SyncEnums::RETRY, gu_msg.get_updates_origin());
- EXPECT_EQ(sync_pb::GetUpdatesCallerInfo::RETRY,
- gu_msg.caller_info().source());
- EXPECT_TRUE(gu_msg.is_retry());
-
- ModelTypeSet progress_types;
- for (int i = 0; i < gu_msg.from_progress_marker_size(); ++i) {
- syncer::ModelType type = GetModelTypeFromSpecificsFieldNumber(
- gu_msg.from_progress_marker(i).data_type_id());
- progress_types.Put(type);
- }
- EXPECT_EQ(enabled_types(), progress_types);
-}
-
-TEST_F(GetUpdatesProcessorTest, NudgeWithRetryTest) {
- sessions::NudgeTracker nudge_tracker;
-
- // Schedule a retry.
- base::TimeTicks t1 = kTestStartTime;
- nudge_tracker.SetNextRetryTime(t1);
-
- // Get the nudge tracker to think the retry is due.
- nudge_tracker.SetSyncCycleStartTime(t1 + base::TimeDelta::FromSeconds(1));
-
- // Record a local change, too.
- nudge_tracker.RecordLocalChange(ModelTypeSet(BOOKMARKS));
-
- sync_pb::ClientToServerMessage message;
- NormalGetUpdatesDelegate normal_delegate(nudge_tracker);
- std::unique_ptr<GetUpdatesProcessor> processor(
- BuildGetUpdatesProcessor(normal_delegate));
- processor->PrepareGetUpdates(enabled_types(), &message);
-
- const sync_pb::GetUpdatesMessage& gu_msg = message.get_updates();
- EXPECT_NE(sync_pb::SyncEnums::RETRY, gu_msg.get_updates_origin());
- EXPECT_NE(sync_pb::GetUpdatesCallerInfo::RETRY,
- gu_msg.caller_info().source());
-
- EXPECT_TRUE(gu_msg.is_retry());
-}
-
-// Verify that a bogus response message is detected.
-TEST_F(GetUpdatesProcessorTest, InvalidResponse) {
- sync_pb::GetUpdatesResponse gu_response;
- InitFakeUpdateResponse(&gu_response);
-
- // This field is essential for making the client stop looping. If it's unset
- // then something is very wrong. The client should detect this.
- gu_response.clear_changes_remaining();
-
- sessions::NudgeTracker nudge_tracker;
- NormalGetUpdatesDelegate normal_delegate(nudge_tracker);
- sessions::StatusController status;
- std::unique_ptr<GetUpdatesProcessor> processor(
- BuildGetUpdatesProcessor(normal_delegate));
- SyncerError error = processor->ProcessResponse(gu_response,
- enabled_types(),
- &status);
- EXPECT_EQ(error, SERVER_RESPONSE_VALIDATION_FAILED);
-}
-
-// Verify that we correctly detect when there's more work to be done.
-TEST_F(GetUpdatesProcessorTest, MoreToDownloadResponse) {
- sync_pb::GetUpdatesResponse gu_response;
- InitFakeUpdateResponse(&gu_response);
- gu_response.set_changes_remaining(1);
-
- sessions::NudgeTracker nudge_tracker;
- NormalGetUpdatesDelegate normal_delegate(nudge_tracker);
- sessions::StatusController status;
- std::unique_ptr<GetUpdatesProcessor> processor(
- BuildGetUpdatesProcessor(normal_delegate));
- SyncerError error = processor->ProcessResponse(gu_response,
- enabled_types(),
- &status);
- EXPECT_EQ(error, SERVER_MORE_TO_DOWNLOAD);
-}
-
-// A simple scenario: No updates returned and nothing more to download.
-TEST_F(GetUpdatesProcessorTest, NormalResponseTest) {
- sync_pb::GetUpdatesResponse gu_response;
- InitFakeUpdateResponse(&gu_response);
- gu_response.set_changes_remaining(0);
-
- sessions::NudgeTracker nudge_tracker;
- NormalGetUpdatesDelegate normal_delegate(nudge_tracker);
- sessions::StatusController status;
- std::unique_ptr<GetUpdatesProcessor> processor(
- BuildGetUpdatesProcessor(normal_delegate));
- SyncerError error = processor->ProcessResponse(gu_response,
- enabled_types(),
- &status);
- EXPECT_EQ(error, SYNCER_OK);
-}
-
-// Variant of GetUpdatesProcessor test designed to test update application.
-//
-// Maintains two enabled types, but requests that updates be applied for only
-// one of them.
-class GetUpdatesProcessorApplyUpdatesTest : public GetUpdatesProcessorTest {
- public:
- GetUpdatesProcessorApplyUpdatesTest() {}
- ~GetUpdatesProcessorApplyUpdatesTest() override {}
-
- void SetUp() override {
- bookmarks_handler_ = AddUpdateHandler(BOOKMARKS);
- autofill_handler_ = AddUpdateHandler(AUTOFILL);
- }
-
- ModelTypeSet GetGuTypes() {
- return ModelTypeSet(AUTOFILL);
- }
-
- MockUpdateHandler* GetNonAppliedHandler() {
- return bookmarks_handler_;
- }
-
- MockUpdateHandler* GetAppliedHandler() {
- return autofill_handler_;
- }
-
- private:
- MockUpdateHandler* bookmarks_handler_;
- MockUpdateHandler* autofill_handler_;
-};
-
-// Verify that a normal cycle applies updates non-passively to the specified
-// types.
-TEST_F(GetUpdatesProcessorApplyUpdatesTest, Normal) {
- sessions::NudgeTracker nudge_tracker;
- NormalGetUpdatesDelegate normal_delegate(nudge_tracker);
- std::unique_ptr<GetUpdatesProcessor> processor(
- BuildGetUpdatesProcessor(normal_delegate));
-
- EXPECT_EQ(0, GetNonAppliedHandler()->GetApplyUpdatesCount());
- EXPECT_EQ(0, GetAppliedHandler()->GetApplyUpdatesCount());
-
- sessions::StatusController status;
- processor->ApplyUpdates(GetGuTypes(), &status);
-
- EXPECT_EQ(0, GetNonAppliedHandler()->GetApplyUpdatesCount());
- EXPECT_EQ(1, GetAppliedHandler()->GetApplyUpdatesCount());
-
- EXPECT_EQ(0, GetNonAppliedHandler()->GetPassiveApplyUpdatesCount());
- EXPECT_EQ(0, GetAppliedHandler()->GetPassiveApplyUpdatesCount());
-
- EXPECT_EQ(GetGuTypes(), status.get_updates_request_types());
-}
-
-// Verify that a configure cycle applies updates passively to the specified
-// types.
-TEST_F(GetUpdatesProcessorApplyUpdatesTest, Configure) {
- ConfigureGetUpdatesDelegate configure_delegate(
- sync_pb::GetUpdatesCallerInfo::RECONFIGURATION);
- std::unique_ptr<GetUpdatesProcessor> processor(
- BuildGetUpdatesProcessor(configure_delegate));
-
- EXPECT_EQ(0, GetNonAppliedHandler()->GetPassiveApplyUpdatesCount());
- EXPECT_EQ(0, GetAppliedHandler()->GetPassiveApplyUpdatesCount());
-
- sessions::StatusController status;
- processor->ApplyUpdates(GetGuTypes(), &status);
-
- EXPECT_EQ(0, GetNonAppliedHandler()->GetPassiveApplyUpdatesCount());
- EXPECT_EQ(1, GetAppliedHandler()->GetPassiveApplyUpdatesCount());
-
- EXPECT_EQ(0, GetNonAppliedHandler()->GetApplyUpdatesCount());
- EXPECT_EQ(0, GetAppliedHandler()->GetApplyUpdatesCount());
-
- EXPECT_EQ(GetGuTypes(), status.get_updates_request_types());
-}
-
-// Verify that a poll cycle applies updates non-passively to the specified
-// types.
-TEST_F(GetUpdatesProcessorApplyUpdatesTest, Poll) {
- PollGetUpdatesDelegate poll_delegate;
- std::unique_ptr<GetUpdatesProcessor> processor(
- BuildGetUpdatesProcessor(poll_delegate));
-
- EXPECT_EQ(0, GetNonAppliedHandler()->GetApplyUpdatesCount());
- EXPECT_EQ(0, GetAppliedHandler()->GetApplyUpdatesCount());
-
- sessions::StatusController status;
- processor->ApplyUpdates(GetGuTypes(), &status);
-
- EXPECT_EQ(0, GetNonAppliedHandler()->GetApplyUpdatesCount());
- EXPECT_EQ(1, GetAppliedHandler()->GetApplyUpdatesCount());
-
- EXPECT_EQ(0, GetNonAppliedHandler()->GetPassiveApplyUpdatesCount());
- EXPECT_EQ(0, GetAppliedHandler()->GetPassiveApplyUpdatesCount());
-
- EXPECT_EQ(GetGuTypes(), status.get_updates_request_types());
-}
-
-class DownloadUpdatesDebugInfoTest : public ::testing::Test {
- public:
- DownloadUpdatesDebugInfoTest() {}
- ~DownloadUpdatesDebugInfoTest() override {}
-
- sessions::StatusController* status() {
- return &status_;
- }
-
- sessions::DebugInfoGetter* debug_info_getter() {
- return &debug_info_getter_;
- }
-
- void AddDebugEvent() {
- debug_info_getter_.AddDebugEvent();
- }
-
- private:
- sessions::StatusController status_;
- MockDebugInfoGetter debug_info_getter_;
-};
-
-// Verify CopyClientDebugInfo when there are no events to upload.
-TEST_F(DownloadUpdatesDebugInfoTest, VerifyCopyClientDebugInfo_Empty) {
- sync_pb::DebugInfo debug_info;
- GetUpdatesProcessor::CopyClientDebugInfo(debug_info_getter(), &debug_info);
- EXPECT_EQ(0, debug_info.events_size());
-}
-
-TEST_F(DownloadUpdatesDebugInfoTest, VerifyCopyOverwrites) {
- sync_pb::DebugInfo debug_info;
- AddDebugEvent();
- GetUpdatesProcessor::CopyClientDebugInfo(debug_info_getter(), &debug_info);
- EXPECT_EQ(1, debug_info.events_size());
- GetUpdatesProcessor::CopyClientDebugInfo(debug_info_getter(), &debug_info);
- EXPECT_EQ(1, debug_info.events_size());
-}
-
-} // namespace syncer
« no previous file with comments | « sync/engine/get_updates_processor.cc ('k') | sync/engine/model_type_worker.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698