| Index: sync/internal_api/syncapi_unittest.cc
|
| diff --git a/sync/internal_api/syncapi_unittest.cc b/sync/internal_api/syncapi_unittest.cc
|
| index f5eb675e17e30bf054dab6918b9fadbfac026a06..0beeae944ff1b50b44e15234a4ee9aeba857a5b4 100644
|
| --- a/sync/internal_api/syncapi_unittest.cc
|
| +++ b/sync/internal_api/syncapi_unittest.cc
|
| @@ -771,7 +771,7 @@ class SyncManagerTest : public testing::Test,
|
| base::MessageLoopProxy::current(),
|
| scoped_ptr<HttpPostProviderFactory>(
|
| new TestHttpPostProviderFactory()),
|
| - routing_info, workers,
|
| + ModelSafeRoutingInfo(), workers,
|
| &extensions_activity_monitor_, this,
|
| credentials,
|
| scoped_ptr<SyncNotifier>(sync_notifier_mock_),
|
| @@ -919,6 +919,22 @@ class SyncManagerTest : public testing::Test,
|
| TestInternalComponentsFactory::IN_MEMORY);
|
| }
|
|
|
| + void SetProgressMarkerForType(ModelType type, bool set) {
|
| + if (set) {
|
| + sync_pb::DataTypeProgressMarker marker;
|
| + marker.set_token("token");
|
| + marker.set_data_type_id(GetSpecificsFieldNumberFromModelType(type));
|
| + sync_manager_.directory()->SetDownloadProgress(type, marker);
|
| + } else {
|
| + sync_pb::DataTypeProgressMarker marker;
|
| + sync_manager_.directory()->SetDownloadProgress(type, marker);
|
| + }
|
| + }
|
| +
|
| + void SetInitialSyncEndedForType(ModelType type, bool value) {
|
| + sync_manager_.directory()->set_initial_sync_ended_for_type(type, value);
|
| + }
|
| +
|
| private:
|
| // Needed by |sync_manager_|.
|
| MessageLoop message_loop_;
|
| @@ -2509,18 +2525,24 @@ class MockSyncScheduler : public FakeSyncScheduler {
|
|
|
| class ComponentsFactory : public TestInternalComponentsFactory {
|
| public:
|
| - ComponentsFactory(SyncScheduler* scheduler_to_use)
|
| + ComponentsFactory(SyncScheduler* scheduler_to_use,
|
| + sessions::SyncSessionContext** session_context)
|
| : TestInternalComponentsFactory(
|
| TestInternalComponentsFactory::IN_MEMORY),
|
| - scheduler_to_use_(scheduler_to_use) {}
|
| + scheduler_to_use_(scheduler_to_use),
|
| + session_context_(session_context) {}
|
| virtual ~ComponentsFactory() {}
|
|
|
| virtual scoped_ptr<SyncScheduler> BuildScheduler(
|
| const std::string& name,
|
| sessions::SyncSessionContext* context) OVERRIDE {
|
| + *session_context_ = context;
|
| return scheduler_to_use_.Pass();
|
| }
|
| +
|
| + private:
|
| scoped_ptr<SyncScheduler> scheduler_to_use_;
|
| + sessions::SyncSessionContext** session_context_;
|
| };
|
|
|
| class SyncManagerTestWithMockScheduler : public SyncManagerTest {
|
| @@ -2528,24 +2550,42 @@ class SyncManagerTestWithMockScheduler : public SyncManagerTest {
|
| SyncManagerTestWithMockScheduler() : scheduler_(NULL) {}
|
| virtual InternalComponentsFactory* GetFactory() OVERRIDE {
|
| scheduler_ = new MockSyncScheduler();
|
| - return new ComponentsFactory(scheduler_);
|
| + return new ComponentsFactory(scheduler_, &session_context_);
|
| + }
|
| +
|
| + MockSyncScheduler* scheduler() { return scheduler_; }
|
| + sessions::SyncSessionContext* session_context() {
|
| + return session_context_;
|
| }
|
| +
|
| + private:
|
| MockSyncScheduler* scheduler_;
|
| + sessions::SyncSessionContext* session_context_;
|
| };
|
|
|
| // Test that the configuration params are properly created and sent to
|
| -// ScheduleConfigure. No callback should be invoked.
|
| +// ScheduleConfigure. No callback should be invoked. Any disabled datatypes
|
| +// should be purged.
|
| TEST_F(SyncManagerTestWithMockScheduler, BasicConfiguration) {
|
| ConfigureReason reason = CONFIGURE_REASON_RECONFIGURATION;
|
| ModelTypeSet types_to_download(BOOKMARKS, PREFERENCES);
|
| ModelSafeRoutingInfo new_routing_info;
|
| GetModelSafeRoutingInfo(&new_routing_info);
|
| + ModelTypeSet enabled_types = GetRoutingInfoTypes(new_routing_info);
|
| + ModelTypeSet disabled_types = Difference(ModelTypeSet::All(), enabled_types);
|
|
|
| ConfigurationParams params;
|
| - EXPECT_CALL(*scheduler_, Start(SyncScheduler::CONFIGURATION_MODE));
|
| - EXPECT_CALL(*scheduler_, ScheduleConfiguration(_)).
|
| + EXPECT_CALL(*scheduler(), Start(SyncScheduler::CONFIGURATION_MODE));
|
| + EXPECT_CALL(*scheduler(), ScheduleConfiguration(_)).
|
| WillOnce(DoAll(SaveArg<0>(¶ms), Return(true)));
|
|
|
| + // Set data for all types.
|
| + for (ModelTypeSet::Iterator iter = ModelTypeSet::All().First(); iter.Good();
|
| + iter.Inc()) {
|
| + SetProgressMarkerForType(iter.Get(), true);
|
| + SetInitialSyncEndedForType(iter.Get(), true);
|
| + }
|
| +
|
| CallbackCounter ready_task_counter, retry_task_counter;
|
| sync_manager_.ConfigureSyncer(
|
| reason,
|
| @@ -2561,6 +2601,70 @@ TEST_F(SyncManagerTestWithMockScheduler, BasicConfiguration) {
|
| params.source);
|
| EXPECT_TRUE(types_to_download.Equals(params.types_to_download));
|
| EXPECT_EQ(new_routing_info, params.routing_info);
|
| +
|
| + // Verify all the disabled types were purged.
|
| + EXPECT_TRUE(sync_manager_.InitialSyncEndedTypes().Equals(
|
| + enabled_types));
|
| + EXPECT_TRUE(sync_manager_.GetTypesWithEmptyProgressMarkerToken(
|
| + ModelTypeSet::All()).Equals(disabled_types));
|
| +}
|
| +
|
| +// Test that on a reconfiguration (configuration where the session context
|
| +// already has routing info), only those recently disabled types are purged.
|
| +TEST_F(SyncManagerTestWithMockScheduler, ReConfiguration) {
|
| + ConfigureReason reason = CONFIGURE_REASON_RECONFIGURATION;
|
| + ModelTypeSet types_to_download(BOOKMARKS, PREFERENCES);
|
| + ModelTypeSet disabled_types = ModelTypeSet(THEMES, SESSIONS);
|
| + ModelSafeRoutingInfo old_routing_info;
|
| + ModelSafeRoutingInfo new_routing_info;
|
| + GetModelSafeRoutingInfo(&old_routing_info);
|
| + new_routing_info = old_routing_info;
|
| + new_routing_info.erase(THEMES);
|
| + new_routing_info.erase(SESSIONS);
|
| + ModelTypeSet enabled_types = GetRoutingInfoTypes(new_routing_info);
|
| +
|
| + ConfigurationParams params;
|
| + EXPECT_CALL(*scheduler(), Start(SyncScheduler::CONFIGURATION_MODE));
|
| + EXPECT_CALL(*scheduler(), ScheduleConfiguration(_)).
|
| + WillOnce(DoAll(SaveArg<0>(¶ms), Return(true)));
|
| +
|
| + // Set data for all types except those recently disabled (so we can verify
|
| + // only those recently disabled are purged) .
|
| + for (ModelTypeSet::Iterator iter = ModelTypeSet::All().First(); iter.Good();
|
| + iter.Inc()) {
|
| + if (!disabled_types.Has(iter.Get())) {
|
| + SetProgressMarkerForType(iter.Get(), true);
|
| + SetInitialSyncEndedForType(iter.Get(), true);
|
| + } else {
|
| + SetProgressMarkerForType(iter.Get(), false);
|
| + SetInitialSyncEndedForType(iter.Get(), false);
|
| + }
|
| + }
|
| +
|
| + // Set the context to have the old routing info.
|
| + session_context()->set_routing_info(old_routing_info);
|
| +
|
| + CallbackCounter ready_task_counter, retry_task_counter;
|
| + sync_manager_.ConfigureSyncer(
|
| + reason,
|
| + types_to_download,
|
| + new_routing_info,
|
| + base::Bind(&CallbackCounter::Callback,
|
| + base::Unretained(&ready_task_counter)),
|
| + base::Bind(&CallbackCounter::Callback,
|
| + base::Unretained(&retry_task_counter)));
|
| + EXPECT_EQ(0, ready_task_counter.times_called());
|
| + EXPECT_EQ(0, retry_task_counter.times_called());
|
| + EXPECT_EQ(sync_pb::GetUpdatesCallerInfo::RECONFIGURATION,
|
| + params.source);
|
| + EXPECT_TRUE(types_to_download.Equals(params.types_to_download));
|
| + EXPECT_EQ(new_routing_info, params.routing_info);
|
| +
|
| + // Verify only the recently disabled types were purged.
|
| + EXPECT_TRUE(sync_manager_.InitialSyncEndedTypes().Equals(
|
| + Difference(ModelTypeSet::All(), disabled_types)));
|
| + EXPECT_TRUE(sync_manager_.GetTypesWithEmptyProgressMarkerToken(
|
| + ModelTypeSet::All()).Equals(disabled_types));
|
| }
|
|
|
| // Test that the retry callback is invoked on configuration failure.
|
| @@ -2571,8 +2675,8 @@ TEST_F(SyncManagerTestWithMockScheduler, ConfigurationRetry) {
|
| GetModelSafeRoutingInfo(&new_routing_info);
|
|
|
| ConfigurationParams params;
|
| - EXPECT_CALL(*scheduler_, Start(SyncScheduler::CONFIGURATION_MODE));
|
| - EXPECT_CALL(*scheduler_, ScheduleConfiguration(_)).
|
| + EXPECT_CALL(*scheduler(), Start(SyncScheduler::CONFIGURATION_MODE));
|
| + EXPECT_CALL(*scheduler(), ScheduleConfiguration(_)).
|
| WillOnce(DoAll(SaveArg<0>(¶ms), Return(false)));
|
|
|
| CallbackCounter ready_task_counter, retry_task_counter;
|
| @@ -2634,4 +2738,44 @@ TEST_F(SyncManagerTest, PurgePartiallySyncedTypes) {
|
| EXPECT_FALSE(partial_types.Has(PREFERENCES));
|
| }
|
|
|
| +// Test CleanipDisabledTypes properly purges all disabled types as specified
|
| +// by the previous and current enabled params. Enabled partial types should not
|
| +// be purged.
|
| +TEST_F(SyncManagerTest, PurgeDisabledTypes) {
|
| + ModelSafeRoutingInfo routing_info;
|
| + GetModelSafeRoutingInfo(&routing_info);
|
| + ModelTypeSet enabled_types = GetRoutingInfoTypes(routing_info);
|
| + ModelTypeSet disabled_types = Difference(ModelTypeSet::All(), enabled_types);
|
| + ModelTypeSet partial_enabled_types(PASSWORDS);
|
| +
|
| + // Set data for all non-partial types.
|
| + for (ModelTypeSet::Iterator iter = ModelTypeSet::All().First(); iter.Good();
|
| + iter.Inc()) {
|
| + SetProgressMarkerForType(iter.Get(), true);
|
| + if (!partial_enabled_types.Has(iter.Get()))
|
| + SetInitialSyncEndedForType(iter.Get(), true);
|
| + }
|
| +
|
| + // Verify all the enabled types remain after cleanup, and all the disabled
|
| + // types were purged.
|
| + sync_manager_.PurgeDisabledTypes(ModelTypeSet::All(), enabled_types);
|
| + EXPECT_TRUE(enabled_types.Equals(
|
| + Union(sync_manager_.InitialSyncEndedTypes(), partial_enabled_types)));
|
| + EXPECT_TRUE(disabled_types.Equals(
|
| + sync_manager_.GetTypesWithEmptyProgressMarkerToken(ModelTypeSet::All())));
|
| +
|
| + // Disable some more types.
|
| + disabled_types.Put(BOOKMARKS);
|
| + disabled_types.Put(PREFERENCES);
|
| + ModelTypeSet new_enabled_types =
|
| + Difference(ModelTypeSet::All(), disabled_types);
|
| +
|
| + // Verify only the non-disabled types remain after cleanup.
|
| + sync_manager_.PurgeDisabledTypes(enabled_types, new_enabled_types);
|
| + EXPECT_TRUE(new_enabled_types.Equals(
|
| + Union(sync_manager_.InitialSyncEndedTypes(), partial_enabled_types)));
|
| + EXPECT_TRUE(disabled_types.Equals(
|
| + sync_manager_.GetTypesWithEmptyProgressMarkerToken(ModelTypeSet::All())));
|
| +}
|
| +
|
| } // namespace
|
|
|