| Index: chrome/browser/sync/backend_migrator_unittest.cc
|
| diff --git a/chrome/browser/sync/backend_migrator_unittest.cc b/chrome/browser/sync/backend_migrator_unittest.cc
|
| index d42957504908a7896762c4e0818b888b94ac15d8..c6d7d5d55269192044176701d7d2e1ba4c6299a9 100644
|
| --- a/chrome/browser/sync/backend_migrator_unittest.cc
|
| +++ b/chrome/browser/sync/backend_migrator_unittest.cc
|
| @@ -4,6 +4,7 @@
|
|
|
| #include "chrome/browser/sync/backend_migrator.h"
|
|
|
| +#include "base/message_loop.h"
|
| #include "chrome/browser/sync/glue/data_type_manager_mock.h"
|
| #include "chrome/browser/sync/profile_sync_service_mock.h"
|
| #include "chrome/browser/sync/sessions/session_state.h"
|
| @@ -41,30 +42,12 @@ class BackendMigratorTest : public TestingBrowserProcessTest {
|
| WillByDefault(SetArgumentPointee<0>(preferred_types_));
|
| }
|
|
|
| - void ReturnEmptyProgressMarkersInSnapshot() {
|
| - ReturnNonEmptyProgressMarkersInSnapshot(syncable::ModelTypeSet());
|
| - }
|
| -
|
| - void ReturnNonEmptyProgressMarkersInSnapshot(
|
| - const syncable::ModelTypeSet& for_types) {
|
| - std::string download_progress_markers[syncable::MODEL_TYPE_COUNT];
|
| - for (syncable::ModelTypeSet::const_iterator it = for_types.begin();
|
| - it != for_types.end(); ++it) {
|
| - download_progress_markers[*it] = "foobar";
|
| - }
|
| -
|
| - snap_.reset(new SyncSessionSnapshot(SyncerStatus(), ErrorCounters(),
|
| - 0, false, syncable::ModelTypeBitSet(), download_progress_markers,
|
| - false, false, 0, 0, 0, false, sessions::SyncSourceInfo(), 0,
|
| - base::Time::Now()));
|
| - EXPECT_CALL(service_, GetLastSessionSnapshot())
|
| - .WillOnce(Return(snap_.get()));
|
| - }
|
| -
|
| void SendConfigureDone(DataTypeManager::ConfigureStatus status,
|
| - const syncable::ModelTypeSet& types) {
|
| + const syncable::ModelTypeSet& requested_types,
|
| + const syncable::ModelTypeSet& purged_types) {
|
| if (status == DataTypeManager::OK) {
|
| - DataTypeManager::ConfigureResult result(status, types);
|
| + DataTypeManager::ConfigureResult result(
|
| + status, requested_types, purged_types);
|
| NotificationService::current()->Notify(
|
| chrome::NOTIFICATION_SYNC_CONFIGURE_DONE,
|
| Source<DataTypeManager>(&manager_),
|
| @@ -72,7 +55,8 @@ class BackendMigratorTest : public TestingBrowserProcessTest {
|
| } else {
|
| DataTypeManager::ConfigureResult result(
|
| status,
|
| - types,
|
| + requested_types,
|
| + purged_types,
|
| syncable::ModelTypeSet(),
|
| FROM_HERE);
|
| NotificationService::current()->Notify(
|
| @@ -80,6 +64,7 @@ class BackendMigratorTest : public TestingBrowserProcessTest {
|
| Source<DataTypeManager>(&manager_),
|
| Details<const DataTypeManager::ConfigureResult>(&result));
|
| }
|
| + message_loop_.RunAllPending();
|
| }
|
|
|
| ProfileSyncService* service() { return &service_; }
|
| @@ -93,6 +78,7 @@ class BackendMigratorTest : public TestingBrowserProcessTest {
|
| }
|
| private:
|
| scoped_ptr<SyncSessionSnapshot> snap_;
|
| + MessageLoop message_loop_;
|
| syncable::ModelTypeSet preferred_types_;
|
| NiceMock<ProfileSyncServiceMock> service_;
|
| NiceMock<DataTypeManagerMock> manager_;
|
| @@ -109,21 +95,17 @@ TEST_F(BackendMigratorTest, Sanity) {
|
|
|
| EXPECT_CALL(*manager(), state())
|
| .WillOnce(Return(DataTypeManager::CONFIGURED));
|
| - EXPECT_CALL(*manager(), Configure(_, sync_api::CONFIGURE_REASON_MIGRATION));
|
| + EXPECT_CALL(*manager(), Configure(_, sync_api::CONFIGURE_REASON_MIGRATION))
|
| + .Times(2);
|
|
|
| migrator.MigrateTypes(to_migrate);
|
| EXPECT_EQ(BackendMigrator::DISABLING_TYPES, migrator.state());
|
|
|
| - SendConfigureDone(DataTypeManager::OK, difference);
|
| - EXPECT_EQ(BackendMigrator::WAITING_FOR_PURGE, migrator.state());
|
| -
|
| - ReturnEmptyProgressMarkersInSnapshot();
|
| - EXPECT_CALL(*manager(), Configure(preferred_types(),
|
| - sync_api::CONFIGURE_REASON_MIGRATION));
|
| - migrator.OnStateChanged();
|
| + SendConfigureDone(DataTypeManager::OK, difference, to_migrate);
|
| EXPECT_EQ(BackendMigrator::REENABLING_TYPES, migrator.state());
|
|
|
| - SendConfigureDone(DataTypeManager::OK, preferred_types());
|
| + SendConfigureDone(DataTypeManager::OK, preferred_types(),
|
| + syncable::ModelTypeSet());
|
| EXPECT_EQ(BackendMigrator::IDLE, migrator.state());
|
| }
|
|
|
| @@ -145,16 +127,11 @@ TEST_F(BackendMigratorTest, MigrateNigori) {
|
| migrator.MigrateTypes(to_migrate);
|
| EXPECT_EQ(BackendMigrator::DISABLING_TYPES, migrator.state());
|
|
|
| - SendConfigureDone(DataTypeManager::OK, difference);
|
| - EXPECT_EQ(BackendMigrator::WAITING_FOR_PURGE, migrator.state());
|
| -
|
| - ReturnEmptyProgressMarkersInSnapshot();
|
| - EXPECT_CALL(*manager(), Configure(preferred_types(),
|
| - sync_api::CONFIGURE_REASON_MIGRATION));
|
| - migrator.OnStateChanged();
|
| + SendConfigureDone(DataTypeManager::OK, difference, to_migrate);
|
| EXPECT_EQ(BackendMigrator::REENABLING_TYPES, migrator.state());
|
|
|
| - SendConfigureDone(DataTypeManager::OK, preferred_types());
|
| + SendConfigureDone(DataTypeManager::OK, preferred_types(),
|
| + syncable::ModelTypeSet());
|
| EXPECT_EQ(BackendMigrator::IDLE, migrator.state());
|
| }
|
|
|
| @@ -176,7 +153,8 @@ TEST_F(BackendMigratorTest, WaitToStart) {
|
| EXPECT_CALL(*manager(), state())
|
| .WillOnce(Return(DataTypeManager::CONFIGURED));
|
| EXPECT_CALL(*manager(), Configure(_, sync_api::CONFIGURE_REASON_MIGRATION));
|
| - SendConfigureDone(DataTypeManager::OK, syncable::ModelTypeSet());
|
| + SendConfigureDone(DataTypeManager::OK, syncable::ModelTypeSet(),
|
| + syncable::ModelTypeSet());
|
|
|
| EXPECT_EQ(BackendMigrator::DISABLING_TYPES, migrator.state());
|
| }
|
| @@ -185,15 +163,17 @@ TEST_F(BackendMigratorTest, WaitToStart) {
|
| // is in progress.
|
| TEST_F(BackendMigratorTest, RestartMigration) {
|
| BackendMigrator migrator(service(), manager());
|
| - syncable::ModelTypeSet to_migrate1, to_migrate2, bookmarks;
|
| + syncable::ModelTypeSet to_migrate1, to_migrate2, to_migrate_union, bookmarks;
|
| to_migrate1.insert(syncable::PREFERENCES);
|
| to_migrate2.insert(syncable::AUTOFILL);
|
| + to_migrate_union.insert(syncable::PREFERENCES);
|
| + to_migrate_union.insert(syncable::AUTOFILL);
|
| bookmarks.insert(syncable::BOOKMARKS);
|
|
|
| EXPECT_CALL(*manager(), state())
|
| .WillOnce(Return(DataTypeManager::CONFIGURED));
|
| EXPECT_CALL(*manager(), Configure(_, sync_api::CONFIGURE_REASON_MIGRATION))
|
| - .Times(1);
|
| + .Times(2);
|
| migrator.MigrateTypes(to_migrate1);
|
|
|
| EXPECT_EQ(BackendMigrator::DISABLING_TYPES, migrator.state());
|
| @@ -205,15 +185,13 @@ TEST_F(BackendMigratorTest, RestartMigration) {
|
| std::inserter(difference1, difference1.end()));
|
|
|
| Mock::VerifyAndClearExpectations(manager());
|
| - EXPECT_CALL(*manager(), state())
|
| - .WillOnce(Return(DataTypeManager::CONFIGURED));
|
| - EXPECT_CALL(*manager(), Configure(bookmarks,
|
| - sync_api::CONFIGURE_REASON_MIGRATION));
|
| - SendConfigureDone(DataTypeManager::OK, difference1);
|
| + EXPECT_CALL(*manager(), Configure(_, sync_api::CONFIGURE_REASON_MIGRATION))
|
| + .Times(2);
|
| + SendConfigureDone(DataTypeManager::OK, difference1, to_migrate1);
|
| EXPECT_EQ(BackendMigrator::DISABLING_TYPES, migrator.state());
|
|
|
| - SendConfigureDone(DataTypeManager::OK, bookmarks);
|
| - EXPECT_EQ(BackendMigrator::WAITING_FOR_PURGE, migrator.state());
|
| + SendConfigureDone(DataTypeManager::OK, bookmarks, to_migrate_union);
|
| + EXPECT_EQ(BackendMigrator::REENABLING_TYPES, migrator.state());
|
| }
|
|
|
| // Test that an external invocation of Configure(...) during a migration results
|
| @@ -234,17 +212,17 @@ TEST_F(BackendMigratorTest, InterruptedWhileDisablingTypes) {
|
| EXPECT_EQ(BackendMigrator::DISABLING_TYPES, migrator.state());
|
|
|
| Mock::VerifyAndClearExpectations(manager());
|
| - EXPECT_CALL(*manager(), state())
|
| - .WillOnce(Return(DataTypeManager::CONFIGURED));
|
| EXPECT_CALL(*manager(), Configure(difference,
|
| sync_api::CONFIGURE_REASON_MIGRATION));
|
| - SendConfigureDone(DataTypeManager::OK, preferred_types());
|
| + SendConfigureDone(DataTypeManager::OK, preferred_types(),
|
| + syncable::ModelTypeSet());
|
|
|
| EXPECT_EQ(BackendMigrator::DISABLING_TYPES, migrator.state());
|
| }
|
|
|
| -// Test that spurious OnStateChanged events don't confuse the migrator while
|
| -// it's waiting for disabled types to have been purged from the sync db.
|
| +// Test that spurious OnConfigureDone events don't confuse the
|
| +// migrator while it's waiting for disabled types to have been purged
|
| +// from the sync db.
|
| TEST_F(BackendMigratorTest, WaitingForPurge) {
|
| BackendMigrator migrator(service(), manager());
|
| syncable::ModelTypeSet to_migrate, difference;
|
| @@ -254,27 +232,21 @@ TEST_F(BackendMigratorTest, WaitingForPurge) {
|
|
|
| EXPECT_CALL(*manager(), state())
|
| .WillOnce(Return(DataTypeManager::CONFIGURED));
|
| - EXPECT_CALL(*manager(), Configure(_, sync_api::CONFIGURE_REASON_MIGRATION));
|
| + EXPECT_CALL(*manager(), Configure(_, sync_api::CONFIGURE_REASON_MIGRATION))
|
| + .Times(2);
|
| +
|
| migrator.MigrateTypes(to_migrate);
|
| - SendConfigureDone(DataTypeManager::OK, difference);
|
| - EXPECT_EQ(BackendMigrator::WAITING_FOR_PURGE, migrator.state());
|
| + EXPECT_EQ(BackendMigrator::DISABLING_TYPES, migrator.state());
|
|
|
| - ReturnNonEmptyProgressMarkersInSnapshot(to_migrate);
|
| - migrator.OnStateChanged();
|
| - EXPECT_EQ(BackendMigrator::WAITING_FOR_PURGE, migrator.state());
|
| + SendConfigureDone(DataTypeManager::OK, difference, syncable::ModelTypeSet());
|
| + EXPECT_EQ(BackendMigrator::DISABLING_TYPES, migrator.state());
|
|
|
| syncable::ModelTypeSet prefs;
|
| prefs.insert(syncable::PREFERENCES);
|
| - ReturnNonEmptyProgressMarkersInSnapshot(prefs);
|
| - migrator.OnStateChanged();
|
| - EXPECT_EQ(BackendMigrator::WAITING_FOR_PURGE, migrator.state());
|
| + SendConfigureDone(DataTypeManager::OK, difference, prefs);
|
| + EXPECT_EQ(BackendMigrator::DISABLING_TYPES, migrator.state());
|
|
|
| - syncable::ModelTypeSet bookmarks;
|
| - bookmarks.insert(syncable::BOOKMARKS);
|
| - ReturnNonEmptyProgressMarkersInSnapshot(bookmarks);
|
| - EXPECT_CALL(*manager(), Configure(preferred_types(),
|
| - sync_api::CONFIGURE_REASON_MIGRATION));
|
| - migrator.OnStateChanged();
|
| + SendConfigureDone(DataTypeManager::OK, difference, to_migrate);
|
| EXPECT_EQ(BackendMigrator::REENABLING_TYPES, migrator.state());
|
| }
|
|
|
| @@ -285,21 +257,15 @@ TEST_F(BackendMigratorTest, MigratedTypeDisabledByUserDuringMigration) {
|
|
|
| EXPECT_CALL(*manager(), state())
|
| .WillOnce(Return(DataTypeManager::CONFIGURED));
|
| - EXPECT_CALL(*manager(), Configure(_, sync_api::CONFIGURE_REASON_MIGRATION));
|
| + EXPECT_CALL(*manager(), Configure(_, sync_api::CONFIGURE_REASON_MIGRATION))
|
| + .Times(2);
|
| migrator.MigrateTypes(to_migrate);
|
|
|
| RemovePreferredType(syncable::PREFERENCES);
|
| - SendConfigureDone(DataTypeManager::OK, preferred_types());
|
| - EXPECT_EQ(BackendMigrator::WAITING_FOR_PURGE, migrator.state());
|
| -
|
| - Mock::VerifyAndClearExpectations(manager());
|
| - ReturnEmptyProgressMarkersInSnapshot();
|
| - EXPECT_CALL(*manager(), Configure(preferred_types(),
|
| - sync_api::CONFIGURE_REASON_MIGRATION));
|
| - migrator.OnStateChanged();
|
| -
|
| + SendConfigureDone(DataTypeManager::OK, preferred_types(), to_migrate);
|
| EXPECT_EQ(BackendMigrator::REENABLING_TYPES, migrator.state());
|
| - SendConfigureDone(DataTypeManager::OK, preferred_types());
|
| + SendConfigureDone(DataTypeManager::OK, preferred_types(),
|
| + syncable::ModelTypeSet());
|
| EXPECT_EQ(BackendMigrator::IDLE, migrator.state());
|
| }
|
|
|
| @@ -313,7 +279,8 @@ TEST_F(BackendMigratorTest, ConfigureFailure) {
|
| EXPECT_CALL(*manager(), Configure(_, sync_api::CONFIGURE_REASON_MIGRATION))
|
| .Times(1);
|
| migrator.MigrateTypes(to_migrate);
|
| - SendConfigureDone(DataTypeManager::ABORTED, syncable::ModelTypeSet());
|
| + SendConfigureDone(DataTypeManager::ABORTED, syncable::ModelTypeSet(),
|
| + syncable::ModelTypeSet());
|
| EXPECT_EQ(BackendMigrator::IDLE, migrator.state());
|
| }
|
|
|
|
|