| Index: chrome/browser/sync/sessions/sync_session_unittest.cc
|
| diff --git a/chrome/browser/sync/sessions/sync_session_unittest.cc b/chrome/browser/sync/sessions/sync_session_unittest.cc
|
| deleted file mode 100644
|
| index d3fccff3cd63a967fc28a3de8c0e31480ce04a38..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/sync/sessions/sync_session_unittest.cc
|
| +++ /dev/null
|
| @@ -1,596 +0,0 @@
|
| -// Copyright (c) 2012 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 "chrome/browser/sync/sessions/sync_session.h"
|
| -
|
| -#include "base/compiler_specific.h"
|
| -#include "base/location.h"
|
| -#include "base/memory/ref_counted.h"
|
| -#include "base/message_loop.h"
|
| -#include "chrome/browser/sync/engine/conflict_resolver.h"
|
| -#include "chrome/browser/sync/engine/syncer_types.h"
|
| -#include "chrome/browser/sync/sessions/session_state.h"
|
| -#include "chrome/browser/sync/sessions/status_controller.h"
|
| -#include "chrome/browser/sync/syncable/model_type.h"
|
| -#include "chrome/browser/sync/syncable/syncable.h"
|
| -#include "chrome/browser/sync/syncable/syncable_id.h"
|
| -#include "chrome/browser/sync/test/engine/fake_model_worker.h"
|
| -#include "chrome/browser/sync/test/engine/test_directory_setter_upper.h"
|
| -#include "chrome/browser/sync/test/fake_extensions_activity_monitor.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -using syncable::WriteTransaction;
|
| -
|
| -namespace browser_sync {
|
| -namespace sessions {
|
| -namespace {
|
| -
|
| -class SyncSessionTest : public testing::Test,
|
| - public SyncSession::Delegate,
|
| - public ModelSafeWorkerRegistrar {
|
| - public:
|
| - SyncSessionTest() : controller_invocations_allowed_(false) {}
|
| -
|
| - SyncSession* MakeSession() {
|
| - std::vector<ModelSafeWorker*> workers;
|
| - GetWorkers(&workers);
|
| - return new SyncSession(context_.get(), this, SyncSourceInfo(),
|
| - routes_, workers);
|
| - }
|
| -
|
| - virtual void SetUp() {
|
| - context_.reset(
|
| - new SyncSessionContext(
|
| - NULL, NULL, this, &extensions_activity_monitor_,
|
| - std::vector<SyncEngineEventListener*>(), NULL));
|
| - routes_.clear();
|
| - routes_[syncable::BOOKMARKS] = GROUP_UI;
|
| - routes_[syncable::AUTOFILL] = GROUP_DB;
|
| - scoped_refptr<ModelSafeWorker> passive_worker(
|
| - new FakeModelWorker(GROUP_PASSIVE));
|
| - scoped_refptr<ModelSafeWorker> ui_worker(
|
| - new FakeModelWorker(GROUP_UI));
|
| - scoped_refptr<ModelSafeWorker> db_worker(
|
| - new FakeModelWorker(GROUP_DB));
|
| - workers_.clear();
|
| - workers_.push_back(passive_worker);
|
| - workers_.push_back(ui_worker);
|
| - workers_.push_back(db_worker);
|
| - session_.reset(MakeSession());
|
| - }
|
| - virtual void TearDown() {
|
| - session_.reset();
|
| - context_.reset();
|
| - }
|
| -
|
| - virtual void OnSilencedUntil(const base::TimeTicks& silenced_until) OVERRIDE {
|
| - FailControllerInvocationIfDisabled("OnSilencedUntil");
|
| - }
|
| - virtual bool IsSyncingCurrentlySilenced() OVERRIDE {
|
| - FailControllerInvocationIfDisabled("IsSyncingCurrentlySilenced");
|
| - return false;
|
| - }
|
| - virtual void OnReceivedLongPollIntervalUpdate(
|
| - const base::TimeDelta& new_interval) OVERRIDE {
|
| - FailControllerInvocationIfDisabled("OnReceivedLongPollIntervalUpdate");
|
| - }
|
| - virtual void OnReceivedShortPollIntervalUpdate(
|
| - const base::TimeDelta& new_interval) OVERRIDE {
|
| - FailControllerInvocationIfDisabled("OnReceivedShortPollIntervalUpdate");
|
| - }
|
| - virtual void OnReceivedSessionsCommitDelay(
|
| - const base::TimeDelta& new_delay) OVERRIDE {
|
| - FailControllerInvocationIfDisabled("OnReceivedSessionsCommitDelay");
|
| - }
|
| - virtual void OnShouldStopSyncingPermanently() OVERRIDE {
|
| - FailControllerInvocationIfDisabled("OnShouldStopSyncingPermanently");
|
| - }
|
| - virtual void OnSyncProtocolError(
|
| - const sessions::SyncSessionSnapshot& snapshot) {
|
| - FailControllerInvocationIfDisabled("SyncProtocolError");
|
| - }
|
| -
|
| - // ModelSafeWorkerRegistrar implementation.
|
| - virtual void GetWorkers(std::vector<ModelSafeWorker*>* out) OVERRIDE {
|
| - out->clear();
|
| - for (std::vector<scoped_refptr<ModelSafeWorker> >::const_iterator it =
|
| - workers_.begin(); it != workers_.end(); ++it) {
|
| - out->push_back(it->get());
|
| - }
|
| - }
|
| - virtual void GetModelSafeRoutingInfo(ModelSafeRoutingInfo* out) OVERRIDE {
|
| - *out = routes_;
|
| - }
|
| -
|
| - StatusController* status() { return session_->mutable_status_controller(); }
|
| - protected:
|
| - void FailControllerInvocationIfDisabled(const std::string& msg) {
|
| - if (!controller_invocations_allowed_)
|
| - FAIL() << msg;
|
| - }
|
| -
|
| - syncable::ModelTypeSet ParamsMeaningAllEnabledTypes() {
|
| - syncable::ModelTypeSet request_params(
|
| - syncable::BOOKMARKS, syncable::AUTOFILL);
|
| - return request_params;
|
| - }
|
| -
|
| - syncable::ModelTypeSet ParamsMeaningJustOneEnabledType() {
|
| - return syncable::ModelTypeSet(syncable::AUTOFILL);
|
| - }
|
| -
|
| - MessageLoop message_loop_;
|
| - bool controller_invocations_allowed_;
|
| - scoped_ptr<SyncSession> session_;
|
| - scoped_ptr<SyncSessionContext> context_;
|
| - std::vector<scoped_refptr<ModelSafeWorker> > workers_;
|
| - ModelSafeRoutingInfo routes_;
|
| - FakeExtensionsActivityMonitor extensions_activity_monitor_;
|
| -};
|
| -
|
| -TEST_F(SyncSessionTest, EnabledGroupsEmpty) {
|
| - routes_.clear();
|
| - workers_.clear();
|
| - scoped_ptr<SyncSession> session(MakeSession());
|
| - std::set<ModelSafeGroup> expected_enabled_groups;
|
| - expected_enabled_groups.insert(GROUP_PASSIVE);
|
| - EXPECT_EQ(expected_enabled_groups, session->GetEnabledGroups());
|
| -}
|
| -
|
| -TEST_F(SyncSessionTest, EnabledGroups) {
|
| - scoped_ptr<SyncSession> session(MakeSession());
|
| - std::set<ModelSafeGroup> expected_enabled_groups;
|
| - expected_enabled_groups.insert(GROUP_PASSIVE);
|
| - expected_enabled_groups.insert(GROUP_UI);
|
| - expected_enabled_groups.insert(GROUP_DB);
|
| - EXPECT_EQ(expected_enabled_groups, session->GetEnabledGroups());
|
| -}
|
| -
|
| -TEST_F(SyncSessionTest, EnabledGroupsWithConflictsEmpty) {
|
| - scoped_ptr<SyncSession> session(MakeSession());
|
| - // Auto-create conflict progress. This shouldn't put that group in
|
| - // conflict.
|
| - session->mutable_status_controller()->
|
| - GetUnrestrictedMutableConflictProgressForTest(GROUP_PASSIVE);
|
| - EXPECT_TRUE(session->GetEnabledGroupsWithConflicts().empty());
|
| -}
|
| -
|
| -TEST_F(SyncSessionTest, EnabledGroupsWithConflicts) {
|
| - scoped_ptr<SyncSession> session(MakeSession());
|
| - // Put GROUP_UI in conflict.
|
| - session->mutable_status_controller()->
|
| - GetUnrestrictedMutableConflictProgressForTest(GROUP_UI)->
|
| - AddSimpleConflictingItemById(syncable::Id());
|
| - std::set<ModelSafeGroup> expected_enabled_groups_with_conflicts;
|
| - expected_enabled_groups_with_conflicts.insert(GROUP_UI);
|
| - EXPECT_EQ(expected_enabled_groups_with_conflicts,
|
| - session->GetEnabledGroupsWithConflicts());
|
| -}
|
| -
|
| -TEST_F(SyncSessionTest, ScopedContextHelpers) {
|
| - ConflictResolver resolver;
|
| - EXPECT_FALSE(context_->resolver());
|
| - {
|
| - ScopedSessionContextConflictResolver s_resolver(context_.get(), &resolver);
|
| - EXPECT_EQ(&resolver, context_->resolver());
|
| - }
|
| - EXPECT_FALSE(context_->resolver());
|
| -}
|
| -
|
| -TEST_F(SyncSessionTest, SetWriteTransaction) {
|
| - TestDirectorySetterUpper dir_maker;
|
| - dir_maker.SetUp();
|
| - syncable::Directory* directory = dir_maker.directory();
|
| -
|
| - scoped_ptr<SyncSession> session(MakeSession());
|
| - EXPECT_TRUE(NULL == session->write_transaction());
|
| - {
|
| - WriteTransaction trans(FROM_HERE, syncable::UNITTEST, directory);
|
| - sessions::ScopedSetSessionWriteTransaction set_trans(session.get(), &trans);
|
| - EXPECT_TRUE(&trans == session->write_transaction());
|
| - }
|
| -}
|
| -
|
| -TEST_F(SyncSessionTest, MoreToSyncIfUnsyncedGreaterThanCommitted) {
|
| - // If any forward progress was made during the session, and the number of
|
| - // unsynced handles still exceeds the number of commit ids we added, there is
|
| - // more to sync. For example, this occurs if we had more commit ids
|
| - // than could fit in a single commit batch.
|
| - EXPECT_FALSE(session_->HasMoreToSync());
|
| - OrderedCommitSet commit_set(routes_);
|
| - commit_set.AddCommitItem(0, syncable::Id(), syncable::BOOKMARKS);
|
| - status()->set_commit_set(commit_set);
|
| - EXPECT_FALSE(session_->HasMoreToSync());
|
| -
|
| - std::vector<int64> unsynced_handles;
|
| - unsynced_handles.push_back(1);
|
| - unsynced_handles.push_back(2);
|
| - status()->set_unsynced_handles(unsynced_handles);
|
| - EXPECT_FALSE(session_->HasMoreToSync());
|
| - status()->increment_num_successful_commits();
|
| - EXPECT_TRUE(session_->HasMoreToSync());
|
| -}
|
| -
|
| -TEST_F(SyncSessionTest, MoreToDownloadIfDownloadFailed) {
|
| - status()->set_updates_request_types(ParamsMeaningAllEnabledTypes());
|
| -
|
| - // When DownloadUpdatesCommand fails, these should be false.
|
| - EXPECT_FALSE(status()->ServerSaysNothingMoreToDownload());
|
| - EXPECT_FALSE(status()->download_updates_succeeded());
|
| -
|
| - // Download updates has its own loop in the syncer; it shouldn't factor
|
| - // into HasMoreToSync.
|
| - EXPECT_FALSE(session_->HasMoreToSync());
|
| -}
|
| -
|
| -TEST_F(SyncSessionTest, MoreToDownloadIfGotChangesRemaining) {
|
| - status()->set_updates_request_types(ParamsMeaningAllEnabledTypes());
|
| -
|
| - // When the server returns changes_remaining, that means there's
|
| - // more to download.
|
| - status()->mutable_updates_response()->mutable_get_updates()
|
| - ->set_changes_remaining(1000L);
|
| - EXPECT_FALSE(status()->ServerSaysNothingMoreToDownload());
|
| - EXPECT_TRUE(status()->download_updates_succeeded());
|
| -
|
| - // Download updates has its own loop in the syncer; it shouldn't factor
|
| - // into HasMoreToSync.
|
| - EXPECT_FALSE(session_->HasMoreToSync());
|
| -}
|
| -
|
| -TEST_F(SyncSessionTest, MoreToDownloadIfGotNoChangesRemaining) {
|
| - status()->set_updates_request_types(ParamsMeaningAllEnabledTypes());
|
| -
|
| - // When the server returns a timestamp, that means we're up to date.
|
| - status()->mutable_updates_response()->mutable_get_updates()
|
| - ->set_changes_remaining(0);
|
| - EXPECT_TRUE(status()->ServerSaysNothingMoreToDownload());
|
| - EXPECT_TRUE(status()->download_updates_succeeded());
|
| -
|
| - // Download updates has its own loop in the syncer; it shouldn't factor
|
| - // into HasMoreToSync.
|
| - EXPECT_FALSE(session_->HasMoreToSync());
|
| -}
|
| -
|
| -TEST_F(SyncSessionTest, MoreToDownloadIfGotNoChangesRemainingForSubset) {
|
| - status()->set_updates_request_types(ParamsMeaningJustOneEnabledType());
|
| -
|
| - // When the server returns a timestamp, that means we're up to date for that
|
| - // type. But there may still be more to download if there are other
|
| - // datatypes that we didn't request on this go-round.
|
| - status()->mutable_updates_response()->mutable_get_updates()
|
| - ->set_changes_remaining(0);
|
| -
|
| - EXPECT_TRUE(status()->ServerSaysNothingMoreToDownload());
|
| - EXPECT_TRUE(status()->download_updates_succeeded());
|
| -
|
| - // Download updates has its own loop in the syncer; it shouldn't factor
|
| - // into HasMoreToSync.
|
| - EXPECT_FALSE(session_->HasMoreToSync());
|
| -}
|
| -
|
| -TEST_F(SyncSessionTest, MoreToDownloadIfGotChangesRemainingAndEntries) {
|
| - status()->set_updates_request_types(ParamsMeaningAllEnabledTypes());
|
| - // The actual entry count should not factor into the HasMoreToSync
|
| - // determination.
|
| - status()->mutable_updates_response()->mutable_get_updates()->add_entries();
|
| - status()->mutable_updates_response()->mutable_get_updates()
|
| - ->set_changes_remaining(1000000L);;
|
| - EXPECT_FALSE(status()->ServerSaysNothingMoreToDownload());
|
| - EXPECT_TRUE(status()->download_updates_succeeded());
|
| -
|
| - // Download updates has its own loop in the syncer; it shouldn't factor
|
| - // into HasMoreToSync.
|
| - EXPECT_FALSE(session_->HasMoreToSync());
|
| -}
|
| -
|
| -TEST_F(SyncSessionTest, MoreToDownloadIfGotNoChangesRemainingAndEntries) {
|
| - status()->set_updates_request_types(ParamsMeaningAllEnabledTypes());
|
| - // The actual entry count should not factor into the HasMoreToSync
|
| - // determination.
|
| - status()->mutable_updates_response()->mutable_get_updates()->add_entries();
|
| - status()->mutable_updates_response()->mutable_get_updates()
|
| - ->set_changes_remaining(0);
|
| - EXPECT_TRUE(status()->ServerSaysNothingMoreToDownload());
|
| - EXPECT_TRUE(status()->download_updates_succeeded());
|
| -
|
| - // Download updates has its own loop in the syncer; it shouldn't factor
|
| - // into HasMoreToSync.
|
| - EXPECT_FALSE(session_->HasMoreToSync());
|
| -}
|
| -
|
| -TEST_F(SyncSessionTest, MoreToSyncIfConflictsResolved) {
|
| - // Conflict resolution happens after get updates and commit,
|
| - // so we need to loop back and get updates / commit again now
|
| - // that we have made forward progress.
|
| - status()->update_conflicts_resolved(true);
|
| - EXPECT_TRUE(session_->HasMoreToSync());
|
| -}
|
| -
|
| -TEST_F(SyncSessionTest, ResetTransientState) {
|
| - status()->update_conflicts_resolved(true);
|
| - status()->increment_num_successful_commits();
|
| - EXPECT_TRUE(session_->HasMoreToSync());
|
| - session_->PrepareForAnotherSyncCycle();
|
| - EXPECT_EQ(sync_pb::GetUpdatesCallerInfo::SYNC_CYCLE_CONTINUATION,
|
| - session_->source().updates_source);
|
| - EXPECT_FALSE(status()->conflicts_resolved());
|
| - EXPECT_FALSE(session_->HasMoreToSync());
|
| - EXPECT_FALSE(status()->TestAndClearIsDirty());
|
| -}
|
| -
|
| -TEST_F(SyncSessionTest, Coalesce) {
|
| - std::vector<ModelSafeWorker*> workers_one, workers_two;
|
| - ModelSafeRoutingInfo routes_one, routes_two;
|
| - syncable::ModelTypePayloadMap one_type =
|
| - syncable::ModelTypePayloadMapFromEnumSet(
|
| - ParamsMeaningJustOneEnabledType(),
|
| - std::string());
|
| - syncable::ModelTypePayloadMap all_types =
|
| - syncable::ModelTypePayloadMapFromEnumSet(
|
| - ParamsMeaningAllEnabledTypes(),
|
| - std::string());
|
| - SyncSourceInfo source_one(sync_pb::GetUpdatesCallerInfo::PERIODIC, one_type);
|
| - SyncSourceInfo source_two(sync_pb::GetUpdatesCallerInfo::LOCAL, all_types);
|
| -
|
| - scoped_refptr<ModelSafeWorker> passive_worker(
|
| - new FakeModelWorker(GROUP_PASSIVE));
|
| - scoped_refptr<ModelSafeWorker> db_worker(new FakeModelWorker(GROUP_DB));
|
| - scoped_refptr<ModelSafeWorker> ui_worker(new FakeModelWorker(GROUP_UI));
|
| - workers_one.push_back(passive_worker);
|
| - workers_one.push_back(db_worker);
|
| - workers_two.push_back(passive_worker);
|
| - workers_two.push_back(db_worker);
|
| - workers_two.push_back(ui_worker);
|
| - routes_one[syncable::AUTOFILL] = GROUP_DB;
|
| - routes_two[syncable::AUTOFILL] = GROUP_DB;
|
| - routes_two[syncable::BOOKMARKS] = GROUP_UI;
|
| - SyncSession one(context_.get(), this, source_one, routes_one, workers_one);
|
| - SyncSession two(context_.get(), this, source_two, routes_two, workers_two);
|
| -
|
| - std::set<ModelSafeGroup> expected_enabled_groups_one;
|
| - expected_enabled_groups_one.insert(GROUP_PASSIVE);
|
| - expected_enabled_groups_one.insert(GROUP_DB);
|
| -
|
| - std::set<ModelSafeGroup> expected_enabled_groups_two;
|
| - expected_enabled_groups_two.insert(GROUP_PASSIVE);
|
| - expected_enabled_groups_two.insert(GROUP_DB);
|
| - expected_enabled_groups_two.insert(GROUP_UI);
|
| -
|
| - EXPECT_EQ(expected_enabled_groups_one, one.GetEnabledGroups());
|
| - EXPECT_EQ(expected_enabled_groups_two, two.GetEnabledGroups());
|
| -
|
| - one.Coalesce(two);
|
| -
|
| - EXPECT_EQ(expected_enabled_groups_two, one.GetEnabledGroups());
|
| - EXPECT_EQ(expected_enabled_groups_two, two.GetEnabledGroups());
|
| -
|
| - EXPECT_EQ(two.source().updates_source, one.source().updates_source);
|
| - EXPECT_EQ(all_types, one.source().types);
|
| - std::vector<ModelSafeWorker*>::const_iterator it_db =
|
| - std::find(one.workers().begin(), one.workers().end(), db_worker);
|
| - std::vector<ModelSafeWorker*>::const_iterator it_ui =
|
| - std::find(one.workers().begin(), one.workers().end(), ui_worker);
|
| - EXPECT_NE(it_db, one.workers().end());
|
| - EXPECT_NE(it_ui, one.workers().end());
|
| - EXPECT_EQ(routes_two, one.routing_info());
|
| -}
|
| -
|
| -TEST_F(SyncSessionTest, RebaseRoutingInfoWithLatestRemoveOneType) {
|
| - std::vector<ModelSafeWorker*> workers_one, workers_two;
|
| - ModelSafeRoutingInfo routes_one, routes_two;
|
| - syncable::ModelTypePayloadMap one_type =
|
| - syncable::ModelTypePayloadMapFromEnumSet(
|
| - ParamsMeaningJustOneEnabledType(),
|
| - std::string());
|
| - syncable::ModelTypePayloadMap all_types =
|
| - syncable::ModelTypePayloadMapFromEnumSet(
|
| - ParamsMeaningAllEnabledTypes(),
|
| - std::string());
|
| - SyncSourceInfo source_one(sync_pb::GetUpdatesCallerInfo::PERIODIC, one_type);
|
| - SyncSourceInfo source_two(sync_pb::GetUpdatesCallerInfo::LOCAL, all_types);
|
| -
|
| - scoped_refptr<ModelSafeWorker> passive_worker(
|
| - new FakeModelWorker(GROUP_PASSIVE));
|
| - scoped_refptr<ModelSafeWorker> db_worker(new FakeModelWorker(GROUP_DB));
|
| - scoped_refptr<ModelSafeWorker> ui_worker(new FakeModelWorker(GROUP_UI));
|
| - workers_one.push_back(passive_worker);
|
| - workers_one.push_back(db_worker);
|
| - workers_two.push_back(passive_worker);
|
| - workers_two.push_back(db_worker);
|
| - workers_two.push_back(ui_worker);
|
| - routes_one[syncable::AUTOFILL] = GROUP_DB;
|
| - routes_two[syncable::AUTOFILL] = GROUP_DB;
|
| - routes_two[syncable::BOOKMARKS] = GROUP_UI;
|
| - SyncSession one(context_.get(), this, source_one, routes_one, workers_one);
|
| - SyncSession two(context_.get(), this, source_two, routes_two, workers_two);
|
| -
|
| - std::set<ModelSafeGroup> expected_enabled_groups_one;
|
| - expected_enabled_groups_one.insert(GROUP_PASSIVE);
|
| - expected_enabled_groups_one.insert(GROUP_DB);
|
| -
|
| - std::set<ModelSafeGroup> expected_enabled_groups_two;
|
| - expected_enabled_groups_two.insert(GROUP_PASSIVE);
|
| - expected_enabled_groups_two.insert(GROUP_DB);
|
| - expected_enabled_groups_two.insert(GROUP_UI);
|
| -
|
| - EXPECT_EQ(expected_enabled_groups_one, one.GetEnabledGroups());
|
| - EXPECT_EQ(expected_enabled_groups_two, two.GetEnabledGroups());
|
| -
|
| - two.RebaseRoutingInfoWithLatest(one);
|
| -
|
| - EXPECT_EQ(expected_enabled_groups_one, one.GetEnabledGroups());
|
| - EXPECT_EQ(expected_enabled_groups_one, two.GetEnabledGroups());
|
| -
|
| - // Make sure the source has not been touched.
|
| - EXPECT_EQ(two.source().updates_source,
|
| - sync_pb::GetUpdatesCallerInfo::LOCAL);
|
| -
|
| - // Make sure the payload is reduced to one.
|
| - EXPECT_EQ(one_type, two.source().types);
|
| -
|
| - // Make sure the workers are udpated.
|
| - std::vector<ModelSafeWorker*>::const_iterator it_db =
|
| - std::find(two.workers().begin(), two.workers().end(), db_worker);
|
| - std::vector<ModelSafeWorker*>::const_iterator it_ui =
|
| - std::find(two.workers().begin(), two.workers().end(), ui_worker);
|
| - EXPECT_NE(it_db, two.workers().end());
|
| - EXPECT_EQ(it_ui, two.workers().end());
|
| - EXPECT_EQ(two.workers().size(), 2U);
|
| -
|
| - // Make sure the model safe routing info is reduced to one type.
|
| - ModelSafeRoutingInfo::const_iterator it =
|
| - two.routing_info().find(syncable::AUTOFILL);
|
| - // Note that attempting to use EXPECT_NE would fail for an Android build due
|
| - // to seeming incompatibility with gtest and stlport.
|
| - EXPECT_TRUE(it != two.routing_info().end());
|
| - EXPECT_EQ(it->second, GROUP_DB);
|
| - EXPECT_EQ(two.routing_info().size(), 1U);
|
| -}
|
| -
|
| -TEST_F(SyncSessionTest, RebaseRoutingInfoWithLatestWithSameType) {
|
| - std::vector<ModelSafeWorker*> workers_first, workers_second;
|
| - ModelSafeRoutingInfo routes_first, routes_second;
|
| - syncable::ModelTypePayloadMap all_types =
|
| - syncable::ModelTypePayloadMapFromEnumSet(
|
| - ParamsMeaningAllEnabledTypes(),
|
| - std::string());
|
| - SyncSourceInfo source_first(sync_pb::GetUpdatesCallerInfo::PERIODIC,
|
| - all_types);
|
| - SyncSourceInfo source_second(sync_pb::GetUpdatesCallerInfo::LOCAL,
|
| - all_types);
|
| -
|
| - scoped_refptr<ModelSafeWorker> passive_worker(
|
| - new FakeModelWorker(GROUP_PASSIVE));
|
| - scoped_refptr<FakeModelWorker> db_worker(new FakeModelWorker(GROUP_DB));
|
| - scoped_refptr<FakeModelWorker> ui_worker(new FakeModelWorker(GROUP_UI));
|
| - workers_first.push_back(passive_worker);
|
| - workers_first.push_back(db_worker);
|
| - workers_first.push_back(ui_worker);
|
| - workers_second.push_back(passive_worker);
|
| - workers_second.push_back(db_worker);
|
| - workers_second.push_back(ui_worker);
|
| - routes_first[syncable::AUTOFILL] = GROUP_DB;
|
| - routes_first[syncable::BOOKMARKS] = GROUP_UI;
|
| - routes_second[syncable::AUTOFILL] = GROUP_DB;
|
| - routes_second[syncable::BOOKMARKS] = GROUP_UI;
|
| - SyncSession first(context_.get(), this, source_first, routes_first,
|
| - workers_first);
|
| - SyncSession second(context_.get(), this, source_second, routes_second,
|
| - workers_second);
|
| -
|
| - std::set<ModelSafeGroup> expected_enabled_groups;
|
| - expected_enabled_groups.insert(GROUP_PASSIVE);
|
| - expected_enabled_groups.insert(GROUP_DB);
|
| - expected_enabled_groups.insert(GROUP_UI);
|
| -
|
| - EXPECT_EQ(expected_enabled_groups, first.GetEnabledGroups());
|
| - EXPECT_EQ(expected_enabled_groups, second.GetEnabledGroups());
|
| -
|
| - second.RebaseRoutingInfoWithLatest(first);
|
| -
|
| - EXPECT_EQ(expected_enabled_groups, first.GetEnabledGroups());
|
| - EXPECT_EQ(expected_enabled_groups, second.GetEnabledGroups());
|
| -
|
| - // Make sure the source has not been touched.
|
| - EXPECT_EQ(second.source().updates_source,
|
| - sync_pb::GetUpdatesCallerInfo::LOCAL);
|
| -
|
| - // Make sure our payload is still the same.
|
| - EXPECT_EQ(all_types, second.source().types);
|
| -
|
| - // Make sure the workers are still the same.
|
| - std::vector<ModelSafeWorker*>::const_iterator it_passive =
|
| - std::find(second.workers().begin(), second.workers().end(),
|
| - passive_worker);
|
| - std::vector<ModelSafeWorker*>::const_iterator it_db =
|
| - std::find(second.workers().begin(), second.workers().end(), db_worker);
|
| - std::vector<ModelSafeWorker*>::const_iterator it_ui =
|
| - std::find(second.workers().begin(), second.workers().end(), ui_worker);
|
| - EXPECT_NE(it_passive, second.workers().end());
|
| - EXPECT_NE(it_db, second.workers().end());
|
| - EXPECT_NE(it_ui, second.workers().end());
|
| - EXPECT_EQ(second.workers().size(), 3U);
|
| -
|
| - // Make sure the model safe routing info is reduced to first type.
|
| - ModelSafeRoutingInfo::const_iterator it1 =
|
| - second.routing_info().find(syncable::AUTOFILL);
|
| - ModelSafeRoutingInfo::const_iterator it2 =
|
| - second.routing_info().find(syncable::BOOKMARKS);
|
| -
|
| - // Note that attempting to use EXPECT_NE would fail for an Android build due
|
| - // to seeming incompatibility with gtest and stlport.
|
| - EXPECT_TRUE(it1 != second.routing_info().end());
|
| - EXPECT_EQ(it1->second, GROUP_DB);
|
| -
|
| - // Note that attempting to use EXPECT_NE would fail for an Android build due
|
| - // to seeming incompatibility with gtest and stlport.
|
| - EXPECT_TRUE(it2 != second.routing_info().end());
|
| - EXPECT_EQ(it2->second, GROUP_UI);
|
| - EXPECT_EQ(second.routing_info().size(), 2U);
|
| -}
|
| -
|
| -
|
| -TEST_F(SyncSessionTest, MakeTypePayloadMapFromBitSet) {
|
| - syncable::ModelTypeSet types;
|
| - std::string payload = "test";
|
| - syncable::ModelTypePayloadMap types_with_payloads =
|
| - syncable::ModelTypePayloadMapFromEnumSet(types, payload);
|
| - EXPECT_TRUE(types_with_payloads.empty());
|
| -
|
| - types.Put(syncable::BOOKMARKS);
|
| - types.Put(syncable::PASSWORDS);
|
| - types.Put(syncable::AUTOFILL);
|
| - payload = "test2";
|
| - types_with_payloads =
|
| - syncable::ModelTypePayloadMapFromEnumSet(types, payload);
|
| -
|
| - ASSERT_EQ(3U, types_with_payloads.size());
|
| - EXPECT_EQ(types_with_payloads[syncable::BOOKMARKS], payload);
|
| - EXPECT_EQ(types_with_payloads[syncable::PASSWORDS], payload);
|
| - EXPECT_EQ(types_with_payloads[syncable::AUTOFILL], payload);
|
| -}
|
| -
|
| -TEST_F(SyncSessionTest, MakeTypePayloadMapFromRoutingInfo) {
|
| - std::string payload = "test";
|
| - syncable::ModelTypePayloadMap types_with_payloads
|
| - = syncable::ModelTypePayloadMapFromRoutingInfo(routes_, payload);
|
| - ASSERT_EQ(routes_.size(), types_with_payloads.size());
|
| - for (ModelSafeRoutingInfo::iterator iter = routes_.begin();
|
| - iter != routes_.end();
|
| - ++iter) {
|
| - EXPECT_EQ(payload, types_with_payloads[iter->first]);
|
| - }
|
| -}
|
| -
|
| -TEST_F(SyncSessionTest, CoalescePayloads) {
|
| - syncable::ModelTypePayloadMap original;
|
| - std::string empty_payload;
|
| - std::string payload1 = "payload1";
|
| - std::string payload2 = "payload2";
|
| - std::string payload3 = "payload3";
|
| - original[syncable::BOOKMARKS] = empty_payload;
|
| - original[syncable::PASSWORDS] = payload1;
|
| - original[syncable::AUTOFILL] = payload2;
|
| - original[syncable::THEMES] = payload3;
|
| -
|
| - syncable::ModelTypePayloadMap update;
|
| - update[syncable::BOOKMARKS] = empty_payload; // Same.
|
| - update[syncable::PASSWORDS] = empty_payload; // Overwrite with empty.
|
| - update[syncable::AUTOFILL] = payload1; // Overwrite with non-empty.
|
| - update[syncable::SESSIONS] = payload2; // New.
|
| - // Themes untouched.
|
| -
|
| - CoalescePayloads(&original, update);
|
| - ASSERT_EQ(5U, original.size());
|
| - EXPECT_EQ(empty_payload, original[syncable::BOOKMARKS]);
|
| - EXPECT_EQ(payload1, original[syncable::PASSWORDS]);
|
| - EXPECT_EQ(payload1, original[syncable::AUTOFILL]);
|
| - EXPECT_EQ(payload2, original[syncable::SESSIONS]);
|
| - EXPECT_EQ(payload3, original[syncable::THEMES]);
|
| -}
|
| -
|
| -} // namespace
|
| -} // namespace sessions
|
| -} // namespace browser_sync
|
|
|