| Index: components/sync_driver/backend_migrator_unittest.cc
|
| diff --git a/components/sync_driver/backend_migrator_unittest.cc b/components/sync_driver/backend_migrator_unittest.cc
|
| deleted file mode 100644
|
| index 2a84b90949ab94a6468ec8fac2db1aad83672806..0000000000000000000000000000000000000000
|
| --- a/components/sync_driver/backend_migrator_unittest.cc
|
| +++ /dev/null
|
| @@ -1,332 +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 "components/sync_driver/backend_migrator.h"
|
| -
|
| -#include "base/message_loop/message_loop.h"
|
| -#include "base/run_loop.h"
|
| -#include "base/tracked_objects.h"
|
| -#include "components/sync/base/model_type_test_util.h"
|
| -#include "components/sync/core/test/test_user_share.h"
|
| -#include "components/sync/core/write_transaction.h"
|
| -#include "components/sync/protocol/sync.pb.h"
|
| -#include "components/sync/syncable/directory.h" // TODO(tim): Remove. Bug 131130.
|
| -#include "components/sync_driver/data_type_manager_mock.h"
|
| -#include "components/sync_driver/fake_sync_service.h"
|
| -#include "testing/gmock/include/gmock/gmock.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -using ::testing::_;
|
| -using ::testing::Eq;
|
| -using ::testing::Mock;
|
| -using ::testing::NiceMock;
|
| -using ::testing::Return;
|
| -using sync_driver::DataTypeManager;
|
| -using sync_driver::DataTypeManagerMock;
|
| -
|
| -namespace browser_sync {
|
| -
|
| -using syncer::sessions::SyncSessionSnapshot;
|
| -
|
| -class SyncBackendMigratorTest : public testing::Test {
|
| - public:
|
| - SyncBackendMigratorTest() { }
|
| - virtual ~SyncBackendMigratorTest() { }
|
| -
|
| - virtual void SetUp() {
|
| - test_user_share_.SetUp();
|
| - Mock::VerifyAndClear(manager());
|
| - preferred_types_.Put(syncer::BOOKMARKS);
|
| - preferred_types_.Put(syncer::PREFERENCES);
|
| - preferred_types_.Put(syncer::AUTOFILL);
|
| -
|
| - migrator_.reset(
|
| - new BackendMigrator(
|
| - "Profile0", test_user_share_.user_share(), service(), manager(),
|
| - base::Closure()));
|
| - SetUnsyncedTypes(syncer::ModelTypeSet());
|
| - }
|
| -
|
| - virtual void TearDown() {
|
| - migrator_.reset();
|
| - test_user_share_.TearDown();
|
| - }
|
| -
|
| - // Marks all types in |unsynced_types| as unsynced and all other
|
| - // types as synced.
|
| - void SetUnsyncedTypes(syncer::ModelTypeSet unsynced_types) {
|
| - syncer::WriteTransaction trans(FROM_HERE,
|
| - test_user_share_.user_share());
|
| - for (int i = syncer::FIRST_REAL_MODEL_TYPE;
|
| - i < syncer::MODEL_TYPE_COUNT; ++i) {
|
| - syncer::ModelType type = syncer::ModelTypeFromInt(i);
|
| - sync_pb::DataTypeProgressMarker progress_marker;
|
| - if (!unsynced_types.Has(type)) {
|
| - progress_marker.set_token("dummy");
|
| - }
|
| - trans.GetDirectory()->SetDownloadProgress(type, progress_marker);
|
| - }
|
| - }
|
| -
|
| - void SendConfigureDone(DataTypeManager::ConfigureStatus status,
|
| - syncer::ModelTypeSet requested_types) {
|
| - if (status == DataTypeManager::OK) {
|
| - DataTypeManager::ConfigureResult result(status, requested_types);
|
| - migrator_->OnConfigureDone(result);
|
| - } else {
|
| - DataTypeManager::ConfigureResult result(
|
| - status,
|
| - requested_types);
|
| - migrator_->OnConfigureDone(result);
|
| - }
|
| - base::RunLoop run_loop;
|
| - run_loop.RunUntilIdle();
|
| - }
|
| -
|
| - sync_driver::SyncService* service() { return &service_; }
|
| - DataTypeManagerMock* manager() { return &manager_; }
|
| - syncer::ModelTypeSet preferred_types() { return preferred_types_; }
|
| - BackendMigrator* migrator() { return migrator_.get(); }
|
| - void RemovePreferredType(syncer::ModelType type) {
|
| - preferred_types_.Remove(type);
|
| - }
|
| -
|
| - private:
|
| - base::MessageLoop message_loop_;
|
| - syncer::ModelTypeSet preferred_types_;
|
| - sync_driver::FakeSyncService service_;
|
| - NiceMock<DataTypeManagerMock> manager_;
|
| - syncer::TestUserShare test_user_share_;
|
| - std::unique_ptr<BackendMigrator> migrator_;
|
| -};
|
| -
|
| -class MockMigrationObserver : public MigrationObserver {
|
| - public:
|
| - virtual ~MockMigrationObserver() {}
|
| -
|
| - MOCK_METHOD0(OnMigrationStateChange, void());
|
| -};
|
| -
|
| -// Test that in the normal case a migration does transition through each state
|
| -// and wind up back in IDLE.
|
| -TEST_F(SyncBackendMigratorTest, Sanity) {
|
| - MockMigrationObserver migration_observer;
|
| - migrator()->AddMigrationObserver(&migration_observer);
|
| - EXPECT_CALL(migration_observer, OnMigrationStateChange()).Times(4);
|
| -
|
| - syncer::ModelTypeSet to_migrate, difference;
|
| - to_migrate.Put(syncer::PREFERENCES);
|
| - difference.Put(syncer::AUTOFILL);
|
| - difference.Put(syncer::BOOKMARKS);
|
| -
|
| - EXPECT_CALL(*manager(), state())
|
| - .WillOnce(Return(DataTypeManager::CONFIGURED));
|
| - EXPECT_CALL(
|
| - *manager(),
|
| - PurgeForMigration(_, syncer::CONFIGURE_REASON_MIGRATION)).Times(1);
|
| - EXPECT_CALL(
|
| - *manager(),
|
| - Configure(_, syncer::CONFIGURE_REASON_MIGRATION)).Times(1);
|
| -
|
| - migrator()->MigrateTypes(to_migrate);
|
| - EXPECT_EQ(BackendMigrator::DISABLING_TYPES, migrator()->state());
|
| -
|
| - SetUnsyncedTypes(to_migrate);
|
| - SendConfigureDone(DataTypeManager::OK, difference);
|
| - EXPECT_EQ(BackendMigrator::REENABLING_TYPES, migrator()->state());
|
| -
|
| - SetUnsyncedTypes(syncer::ModelTypeSet());
|
| - SendConfigureDone(DataTypeManager::OK, preferred_types());
|
| - EXPECT_EQ(BackendMigrator::IDLE, migrator()->state());
|
| -
|
| - migrator()->RemoveMigrationObserver(&migration_observer);
|
| -}
|
| -
|
| -// Test that in the normal case with Nigori a migration transitions through
|
| -// each state and wind up back in IDLE.
|
| -TEST_F(SyncBackendMigratorTest, MigrateNigori) {
|
| - syncer::ModelTypeSet to_migrate, difference;
|
| - to_migrate.Put(syncer::NIGORI);
|
| - difference.Put(syncer::AUTOFILL);
|
| - difference.Put(syncer::BOOKMARKS);
|
| -
|
| - EXPECT_CALL(*manager(), state())
|
| - .WillOnce(Return(DataTypeManager::CONFIGURED));
|
| -
|
| - EXPECT_CALL(*manager(), PurgeForMigration(_,
|
| - syncer::CONFIGURE_REASON_MIGRATION));
|
| -
|
| - migrator()->MigrateTypes(to_migrate);
|
| - EXPECT_EQ(BackendMigrator::DISABLING_TYPES, migrator()->state());
|
| -
|
| - SetUnsyncedTypes(to_migrate);
|
| - SendConfigureDone(DataTypeManager::OK, difference);
|
| - EXPECT_EQ(BackendMigrator::REENABLING_TYPES, migrator()->state());
|
| -
|
| - SetUnsyncedTypes(syncer::ModelTypeSet());
|
| - SendConfigureDone(DataTypeManager::OK, preferred_types());
|
| - EXPECT_EQ(BackendMigrator::IDLE, migrator()->state());
|
| -}
|
| -
|
| -
|
| -// Test that the migrator waits for the data type manager to be idle before
|
| -// starting a migration.
|
| -TEST_F(SyncBackendMigratorTest, WaitToStart) {
|
| - syncer::ModelTypeSet to_migrate;
|
| - to_migrate.Put(syncer::PREFERENCES);
|
| -
|
| - EXPECT_CALL(*manager(), state())
|
| - .WillOnce(Return(DataTypeManager::CONFIGURING));
|
| - EXPECT_CALL(*manager(), Configure(_, _)).Times(0);
|
| - migrator()->MigrateTypes(to_migrate);
|
| - EXPECT_EQ(BackendMigrator::WAITING_TO_START, migrator()->state());
|
| -
|
| - Mock::VerifyAndClearExpectations(manager());
|
| - EXPECT_CALL(*manager(), state())
|
| - .WillOnce(Return(DataTypeManager::CONFIGURED));
|
| - EXPECT_CALL(*manager(),
|
| - PurgeForMigration(_, syncer::CONFIGURE_REASON_MIGRATION));
|
| - SetUnsyncedTypes(syncer::ModelTypeSet());
|
| - SendConfigureDone(DataTypeManager::OK, syncer::ModelTypeSet());
|
| -
|
| - EXPECT_EQ(BackendMigrator::DISABLING_TYPES, migrator()->state());
|
| -}
|
| -
|
| -// Test that the migrator can cope with a migration request while a migration
|
| -// is in progress.
|
| -TEST_F(SyncBackendMigratorTest, RestartMigration) {
|
| - syncer::ModelTypeSet to_migrate1, to_migrate2, to_migrate_union, bookmarks;
|
| - to_migrate1.Put(syncer::PREFERENCES);
|
| - to_migrate2.Put(syncer::AUTOFILL);
|
| - to_migrate_union.Put(syncer::PREFERENCES);
|
| - to_migrate_union.Put(syncer::AUTOFILL);
|
| - bookmarks.Put(syncer::BOOKMARKS);
|
| -
|
| - EXPECT_CALL(*manager(), state())
|
| - .WillOnce(Return(DataTypeManager::CONFIGURED));
|
| - EXPECT_CALL(
|
| - *manager(),
|
| - PurgeForMigration(_, syncer::CONFIGURE_REASON_MIGRATION)).Times(2);
|
| - migrator()->MigrateTypes(to_migrate1);
|
| -
|
| - EXPECT_EQ(BackendMigrator::DISABLING_TYPES, migrator()->state());
|
| - migrator()->MigrateTypes(to_migrate2);
|
| -
|
| - const syncer::ModelTypeSet difference1 =
|
| - Difference(preferred_types(), to_migrate1);
|
| -
|
| - Mock::VerifyAndClearExpectations(manager());
|
| - EXPECT_CALL(
|
| - *manager(),
|
| - PurgeForMigration(_, syncer::CONFIGURE_REASON_MIGRATION)).Times(1);
|
| - EXPECT_CALL(*manager(), Configure(_, syncer::CONFIGURE_REASON_MIGRATION))
|
| - .Times(1);
|
| - SetUnsyncedTypes(to_migrate1);
|
| - SendConfigureDone(DataTypeManager::OK, difference1);
|
| - EXPECT_EQ(BackendMigrator::DISABLING_TYPES, migrator()->state());
|
| -
|
| - SetUnsyncedTypes(to_migrate_union);
|
| - SendConfigureDone(DataTypeManager::OK, bookmarks);
|
| - EXPECT_EQ(BackendMigrator::REENABLING_TYPES, migrator()->state());
|
| -}
|
| -
|
| -// Test that an external invocation of Configure(...) during a migration results
|
| -// in a migration reattempt.
|
| -TEST_F(SyncBackendMigratorTest, InterruptedWhileDisablingTypes) {
|
| - syncer::ModelTypeSet to_migrate;
|
| - syncer::ModelTypeSet difference;
|
| - to_migrate.Put(syncer::PREFERENCES);
|
| - difference.Put(syncer::AUTOFILL);
|
| - difference.Put(syncer::BOOKMARKS);
|
| -
|
| - EXPECT_CALL(*manager(), state())
|
| - .WillOnce(Return(DataTypeManager::CONFIGURED));
|
| - EXPECT_CALL(*manager(), PurgeForMigration(HasModelTypes(to_migrate),
|
| - syncer::CONFIGURE_REASON_MIGRATION));
|
| - migrator()->MigrateTypes(to_migrate);
|
| - EXPECT_EQ(BackendMigrator::DISABLING_TYPES, migrator()->state());
|
| -
|
| - Mock::VerifyAndClearExpectations(manager());
|
| - EXPECT_CALL(*manager(), PurgeForMigration(HasModelTypes(to_migrate),
|
| - syncer::CONFIGURE_REASON_MIGRATION));
|
| - SetUnsyncedTypes(syncer::ModelTypeSet());
|
| - SendConfigureDone(DataTypeManager::OK, preferred_types());
|
| -
|
| - EXPECT_EQ(BackendMigrator::DISABLING_TYPES, migrator()->state());
|
| -}
|
| -
|
| -// 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(SyncBackendMigratorTest, WaitingForPurge) {
|
| - syncer::ModelTypeSet to_migrate, difference;
|
| - to_migrate.Put(syncer::PREFERENCES);
|
| - to_migrate.Put(syncer::AUTOFILL);
|
| - difference.Put(syncer::BOOKMARKS);
|
| -
|
| - EXPECT_CALL(*manager(), state())
|
| - .WillOnce(Return(DataTypeManager::CONFIGURED));
|
| - EXPECT_CALL(
|
| - *manager(),
|
| - PurgeForMigration(_, syncer::CONFIGURE_REASON_MIGRATION)).Times(1);
|
| - EXPECT_CALL(
|
| - *manager(),
|
| - Configure(_, syncer::CONFIGURE_REASON_MIGRATION)).Times(1);
|
| -
|
| - migrator()->MigrateTypes(to_migrate);
|
| - EXPECT_EQ(BackendMigrator::DISABLING_TYPES, migrator()->state());
|
| -
|
| - SendConfigureDone(DataTypeManager::OK, difference);
|
| - EXPECT_EQ(BackendMigrator::DISABLING_TYPES, migrator()->state());
|
| -
|
| - syncer::ModelTypeSet prefs;
|
| - prefs.Put(syncer::PREFERENCES);
|
| - SetUnsyncedTypes(prefs);
|
| - SendConfigureDone(DataTypeManager::OK, difference);
|
| - EXPECT_EQ(BackendMigrator::DISABLING_TYPES, migrator()->state());
|
| -
|
| - SetUnsyncedTypes(to_migrate);
|
| - SendConfigureDone(DataTypeManager::OK, difference);
|
| - EXPECT_EQ(BackendMigrator::REENABLING_TYPES, migrator()->state());
|
| -}
|
| -
|
| -TEST_F(SyncBackendMigratorTest, MigratedTypeDisabledByUserDuringMigration) {
|
| - syncer::ModelTypeSet to_migrate;
|
| - to_migrate.Put(syncer::PREFERENCES);
|
| -
|
| - EXPECT_CALL(*manager(), state())
|
| - .WillOnce(Return(DataTypeManager::CONFIGURED));
|
| - EXPECT_CALL(
|
| - *manager(),
|
| - PurgeForMigration(_, syncer::CONFIGURE_REASON_MIGRATION)).Times(1);
|
| - EXPECT_CALL(
|
| - *manager(),
|
| - Configure(_, syncer::CONFIGURE_REASON_MIGRATION)).Times(1);
|
| - migrator()->MigrateTypes(to_migrate);
|
| -
|
| - RemovePreferredType(syncer::PREFERENCES);
|
| - SetUnsyncedTypes(to_migrate);
|
| - SendConfigureDone(DataTypeManager::OK, preferred_types());
|
| - EXPECT_EQ(BackendMigrator::REENABLING_TYPES, migrator()->state());
|
| - SetUnsyncedTypes(syncer::ModelTypeSet());
|
| - SendConfigureDone(DataTypeManager::OK, preferred_types());
|
| - EXPECT_EQ(BackendMigrator::IDLE, migrator()->state());
|
| -}
|
| -
|
| -TEST_F(SyncBackendMigratorTest, ConfigureFailure) {
|
| - syncer::ModelTypeSet to_migrate;
|
| - to_migrate.Put(syncer::PREFERENCES);
|
| -
|
| - EXPECT_CALL(*manager(), state())
|
| - .WillOnce(Return(DataTypeManager::CONFIGURED));
|
| - EXPECT_CALL(
|
| - *manager(),
|
| - PurgeForMigration(_, syncer::CONFIGURE_REASON_MIGRATION)).Times(1);
|
| - migrator()->MigrateTypes(to_migrate);
|
| - SetUnsyncedTypes(syncer::ModelTypeSet());
|
| - SendConfigureDone(DataTypeManager::ABORTED, syncer::ModelTypeSet());
|
| - EXPECT_EQ(BackendMigrator::IDLE, migrator()->state());
|
| -}
|
| -
|
| -}; // namespace browser_sync
|
|
|