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

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 race condition 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 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());
}

Powered by Google App Engine
This is Rietveld 408576698