Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3078)

Unified Diff: chrome/browser/sync/backend_migrator_unittest.cc

Issue 7655055: [Sync] Make BackendMigrator not wait for full sync cycles (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix mac test Created 9 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 94983926a234e55f0929e13dc916010b71a8ff27..0ea877adc49e1eb7d4f65e66465bf0872921f3d9 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"
@@ -40,30 +41,12 @@ class BackendMigratorTest : public testing::Test {
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_),
@@ -71,7 +54,8 @@ class BackendMigratorTest : public testing::Test {
} else {
DataTypeManager::ConfigureResult result(
status,
- types,
+ requested_types,
+ purged_types,
syncable::ModelTypeSet(),
FROM_HERE);
NotificationService::current()->Notify(
@@ -79,6 +63,7 @@ class BackendMigratorTest : public testing::Test {
Source<DataTypeManager>(&manager_),
Details<const DataTypeManager::ConfigureResult>(&result));
}
+ message_loop_.RunAllPending();
}
ProfileSyncService* service() { return &service_; }
@@ -92,15 +77,27 @@ class BackendMigratorTest : public testing::Test {
}
private:
scoped_ptr<SyncSessionSnapshot> snap_;
+ MessageLoop message_loop_;
syncable::ModelTypeSet preferred_types_;
NiceMock<ProfileSyncServiceMock> service_;
NiceMock<DataTypeManagerMock> manager_;
};
+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(BackendMigratorTest, Sanity) {
- BackendMigrator migrator(service(), manager());
+ BackendMigrator migrator("Profile0", service(), manager());
+ MockMigrationObserver migration_observer;
+ migrator.AddMigrationObserver(&migration_observer);
+ EXPECT_CALL(migration_observer, OnMigrationStateChange()).Times(4);
+
syncable::ModelTypeSet to_migrate, difference;
to_migrate.insert(syncable::PREFERENCES);
difference.insert(syncable::AUTOFILL);
@@ -108,28 +105,26 @@ 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());
+
+ 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(BackendMigratorTest, MigrateNigori) {
- BackendMigrator migrator(service(), manager());
+ BackendMigrator migrator("Profile0", service(), manager());
syncable::ModelTypeSet to_migrate, difference;
to_migrate.insert(syncable::NIGORI);
difference.insert(syncable::AUTOFILL);
@@ -144,16 +139,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());
}
@@ -161,7 +151,7 @@ TEST_F(BackendMigratorTest, MigrateNigori) {
// Test that the migrator waits for the data type manager to be idle before
// starting a migration.
TEST_F(BackendMigratorTest, WaitToStart) {
- BackendMigrator migrator(service(), manager());
+ BackendMigrator migrator("Profile0", service(), manager());
syncable::ModelTypeSet to_migrate;
to_migrate.insert(syncable::PREFERENCES);
@@ -175,7 +165,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());
}
@@ -183,16 +174,18 @@ TEST_F(BackendMigratorTest, WaitToStart) {
// Test that the migrator can cope with a migration request while a migration
// is in progress.
TEST_F(BackendMigratorTest, RestartMigration) {
- BackendMigrator migrator(service(), manager());
- syncable::ModelTypeSet to_migrate1, to_migrate2, bookmarks;
+ BackendMigrator migrator("Profile0", service(), manager());
+ 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());
@@ -204,21 +197,19 @@ 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
// in a migration reattempt.
TEST_F(BackendMigratorTest, InterruptedWhileDisablingTypes) {
- BackendMigrator migrator(service(), manager());
+ BackendMigrator migrator("Profile0", service(), manager());
syncable::ModelTypeSet to_migrate;
syncable::ModelTypeSet difference;
to_migrate.insert(syncable::PREFERENCES);
@@ -233,19 +224,19 @@ 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());
+ BackendMigrator migrator("Profile0", service(), manager());
syncable::ModelTypeSet to_migrate, difference;
to_migrate.insert(syncable::PREFERENCES);
to_migrate.insert(syncable::AUTOFILL);
@@ -253,57 +244,45 @@ 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());
}
TEST_F(BackendMigratorTest, MigratedTypeDisabledByUserDuringMigration) {
- BackendMigrator migrator(service(), manager());
+ BackendMigrator migrator("Profile0", service(), manager());
syncable::ModelTypeSet to_migrate;
to_migrate.insert(syncable::PREFERENCES);
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());
}
TEST_F(BackendMigratorTest, ConfigureFailure) {
- BackendMigrator migrator(service(), manager());
+ BackendMigrator migrator("Profile0", service(), manager());
syncable::ModelTypeSet to_migrate;
to_migrate.insert(syncable::PREFERENCES);
@@ -312,7 +291,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());
}

Powered by Google App Engine
This is Rietveld 408576698