| 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
|
| index d914b7600bded1ddc82e0a7ada9b727eb0048eb5..64c2cec64d5f423607a1c801052b87cfc0a431f0 100644
|
| --- a/chrome/browser/sync/sessions/sync_session_unittest.cc
|
| +++ b/chrome/browser/sync/sessions/sync_session_unittest.cc
|
| @@ -10,9 +10,12 @@
|
| #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/directory_manager.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 "testing/gtest/include/gtest/gtest.h"
|
| @@ -27,13 +30,13 @@ class SyncSessionTest : public testing::Test,
|
| public SyncSession::Delegate,
|
| public ModelSafeWorkerRegistrar {
|
| public:
|
| - SyncSessionTest() : controller_invocations_allowed_(false) {
|
| - GetModelSafeRoutingInfo(&routes_);
|
| - }
|
| + SyncSessionTest() : controller_invocations_allowed_(false) {}
|
|
|
| SyncSession* MakeSession() {
|
| - return new SyncSession(context_.get(), this, SyncSourceInfo(), routes_,
|
| - std::vector<ModelSafeWorker*>());
|
| + std::vector<ModelSafeWorker*> workers;
|
| + GetWorkers(&workers);
|
| + return new SyncSession(context_.get(), this, SyncSourceInfo(),
|
| + routes_, workers);
|
| }
|
|
|
| virtual void SetUp() {
|
| @@ -41,7 +44,17 @@ class SyncSessionTest : public testing::Test,
|
| std::vector<SyncEngineEventListener*>(), NULL));
|
| routes_.clear();
|
| routes_[syncable::BOOKMARKS] = GROUP_UI;
|
| - routes_[syncable::AUTOFILL] = 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() {
|
| @@ -77,9 +90,15 @@ class SyncSessionTest : public testing::Test,
|
| }
|
|
|
| // ModelSafeWorkerRegistrar implementation.
|
| - virtual void GetWorkers(std::vector<ModelSafeWorker*>* out) OVERRIDE {}
|
| + 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->swap(routes_);
|
| + *out = routes_;
|
| }
|
|
|
| StatusController* status() { return session_->mutable_status_controller(); }
|
| @@ -106,9 +125,49 @@ class SyncSessionTest : public testing::Test,
|
| bool controller_invocations_allowed_;
|
| scoped_ptr<SyncSession> session_;
|
| scoped_ptr<SyncSessionContext> context_;
|
| + std::vector<scoped_refptr<ModelSafeWorker> > workers_;
|
| ModelSafeRoutingInfo routes_;
|
| };
|
|
|
| +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)->
|
| + AddConflictingItemById(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());
|
| @@ -288,9 +347,13 @@ TEST_F(SyncSessionTest, Coalesce) {
|
| 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;
|
| @@ -299,8 +362,23 @@ TEST_F(SyncSessionTest, Coalesce) {
|
| 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 =
|
| @@ -326,18 +404,37 @@ TEST_F(SyncSessionTest, RebaseRoutingInfoWithLatestRemoveOneType) {
|
| 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_UI;
|
| + 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);
|
|
|
| - two.RebaseRoutingInfoWithLatest(&one);
|
| + 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,
|
| @@ -353,7 +450,7 @@ TEST_F(SyncSessionTest, RebaseRoutingInfoWithLatestRemoveOneType) {
|
| 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(), 1U);
|
| + EXPECT_EQ(two.workers().size(), 2U);
|
|
|
| // Make sure the model safe routing info is reduced to one type.
|
| ModelSafeRoutingInfo::const_iterator it =
|
| @@ -375,10 +472,14 @@ TEST_F(SyncSessionTest, RebaseRoutingInfoWithLatestWithSameType) {
|
| 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;
|
| @@ -390,7 +491,18 @@ TEST_F(SyncSessionTest, RebaseRoutingInfoWithLatestWithSameType) {
|
| SyncSession second(context_.get(), this, source_second, routes_second,
|
| workers_second);
|
|
|
| - second.RebaseRoutingInfoWithLatest(&first);
|
| + 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,
|
| @@ -400,13 +512,17 @@ TEST_F(SyncSessionTest, RebaseRoutingInfoWithLatestWithSameType) {
|
| 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(), 2U);
|
| + EXPECT_EQ(second.workers().size(), 3U);
|
|
|
| // Make sure the model safe routing info is reduced to first type.
|
| ModelSafeRoutingInfo::const_iterator it1 =
|
|
|