Index: chrome/browser/sync/glue/data_type_manager_impl_unittest.cc |
diff --git a/chrome/browser/sync/glue/data_type_manager_impl_unittest.cc b/chrome/browser/sync/glue/data_type_manager_impl_unittest.cc |
index a341d61f199388e2adb32e0ec916e5b5dc7d5ba7..999c684f5dfac0f1a47e47d9b3e214426dacc7df 100644 |
--- a/chrome/browser/sync/glue/data_type_manager_impl_unittest.cc |
+++ b/chrome/browser/sync/glue/data_type_manager_impl_unittest.cc |
@@ -41,6 +41,19 @@ DataTypeManager::ConfigureStatus GetStatus( |
return result.status; |
} |
+syncer::ModelTypeSet PriorityTypes() { |
+ syncer::ModelTypeSet result = syncer::ControlTypes(); |
+ result.Put(syncer::MANAGED_USERS); |
+ return result; |
+} |
+ |
+// Helper for unioning with control types. |
+syncer::ModelTypeSet AddPriorityTypesTo(syncer::ModelTypeSet types) { |
+ syncer::ModelTypeSet result = PriorityTypes(); |
+ result.PutAll(types); |
+ return result; |
+} |
+ |
// Fake BackendDataTypeConfigurer implementation that simply stores away the |
// callback passed into ConfigureDataTypes. |
class FakeBackendDataTypeConfigurer : public BackendDataTypeConfigurer { |
@@ -124,6 +137,8 @@ FakeDataTypeEncryptionHandler::GetEncryptedDataTypes() const { |
return encrypted_types_; |
} |
+} // namespace |
+ |
class TestDataTypeManager : public DataTypeManagerImpl { |
public: |
TestDataTypeManager( |
@@ -139,26 +154,19 @@ class TestDataTypeManager : public DataTypeManagerImpl { |
encryption_handler, |
configurer, |
observer, |
- failed_data_types_handler) {} |
+ failed_data_types_handler), |
+ custom_priority_types_(PriorityTypes()) {} |
- void set_priority_list(const TypeSetPriorityList& list) { |
- priority_list_ = list; |
+ void set_priority_types(const syncer::ModelTypeSet& priority_types) { |
+ custom_priority_types_ = priority_types; |
} |
- protected: |
- virtual TypeSetPriorityList PrioritizeTypes( |
- const syncer::ModelTypeSet& types) OVERRIDE { |
- TypeSetPriorityList result; |
- if (priority_list_.empty()) { |
- result.push(types); |
- } else { |
- result = priority_list_; |
- } |
- return result; |
+ private: |
+ virtual syncer::ModelTypeSet GetPriorityTypes() const OVERRIDE { |
+ return custom_priority_types_; |
} |
- private: |
- TypeSetPriorityList priority_list_; |
+ syncer::ModelTypeSet custom_priority_types_; |
}; |
// The actual test harness class, parametrized on nigori state (i.e., tests are |
@@ -264,6 +272,7 @@ TEST_F(SyncDataTypeManagerImplTest, NoControllers) { |
// downloading, finish starting the controller, and then stop the DTM. |
TEST_F(SyncDataTypeManagerImplTest, ConfigureOne) { |
AddController(BOOKMARKS); |
+ dtm_->set_priority_types(AddPriorityTypesTo(syncer::ModelTypeSet(BOOKMARKS))); |
SetConfigureStartExpectation(); |
SetConfigureDoneExpectation(DataTypeManager::OK); |
@@ -286,6 +295,8 @@ TEST_F(SyncDataTypeManagerImplTest, ConfigureOne) { |
TEST_F(SyncDataTypeManagerImplTest, ConfigureSlowLoadingType) { |
AddController(BOOKMARKS); |
AddController(APPS); |
+ dtm_->set_priority_types( |
+ AddPriorityTypesTo(syncer::ModelTypeSet(BOOKMARKS, APPS))); |
GetController(BOOKMARKS)->SetDelayModelLoad(); |
@@ -331,6 +342,7 @@ TEST_F(SyncDataTypeManagerImplTest, ConfigureSlowLoadingType) { |
// download callback even after the DTM is stopped and destroyed. |
TEST_F(SyncDataTypeManagerImplTest, ConfigureOneStopWhileDownloadPending) { |
AddController(BOOKMARKS); |
+ dtm_->set_priority_types(AddPriorityTypesTo(syncer::ModelTypeSet(BOOKMARKS))); |
{ |
SetConfigureStartExpectation(); |
@@ -352,6 +364,7 @@ TEST_F(SyncDataTypeManagerImplTest, ConfigureOneStopWhileDownloadPending) { |
// controller even after the DTM is stopped and destroyed. |
TEST_F(SyncDataTypeManagerImplTest, ConfigureOneStopWhileStartingModel) { |
AddController(BOOKMARKS); |
+ dtm_->set_priority_types(AddPriorityTypesTo(syncer::ModelTypeSet(BOOKMARKS))); |
{ |
SetConfigureStartExpectation(); |
@@ -378,6 +391,8 @@ TEST_F(SyncDataTypeManagerImplTest, ConfigureOneStopWhileStartingModel) { |
// destroyed. |
TEST_F(SyncDataTypeManagerImplTest, ConfigureOneStopWhileAssociating) { |
AddController(BOOKMARKS); |
+ dtm_->set_priority_types(AddPriorityTypesTo(syncer::ModelTypeSet(BOOKMARKS))); |
+ |
{ |
SetConfigureStartExpectation(); |
SetConfigureDoneExpectation(DataTypeManager::ABORTED); |
@@ -405,6 +420,7 @@ TEST_F(SyncDataTypeManagerImplTest, ConfigureOneStopWhileAssociating) { |
// 5) Stop the DTM. |
TEST_F(SyncDataTypeManagerImplTest, OneWaitingForCrypto) { |
AddController(PASSWORDS); |
+ dtm_->set_priority_types(AddPriorityTypesTo(syncer::ModelTypeSet(PASSWORDS))); |
SetConfigureStartExpectation(); |
SetConfigureDoneExpectation(DataTypeManager::PARTIAL_SUCCESS); |
@@ -445,6 +461,8 @@ TEST_F(SyncDataTypeManagerImplTest, OneWaitingForCrypto) { |
TEST_F(SyncDataTypeManagerImplTest, ConfigureOneThenBoth) { |
AddController(BOOKMARKS); |
AddController(PREFERENCES); |
+ dtm_->set_priority_types( |
+ AddPriorityTypesTo(syncer::ModelTypeSet(BOOKMARKS, PREFERENCES))); |
SetConfigureStartExpectation(); |
SetConfigureDoneExpectation(DataTypeManager::OK); |
@@ -494,6 +512,8 @@ TEST_F(SyncDataTypeManagerImplTest, ConfigureOneThenBoth) { |
TEST_F(SyncDataTypeManagerImplTest, ConfigureOneThenSwitch) { |
AddController(BOOKMARKS); |
AddController(PREFERENCES); |
+ dtm_->set_priority_types( |
+ AddPriorityTypesTo(syncer::ModelTypeSet(BOOKMARKS, PREFERENCES))); |
SetConfigureStartExpectation(); |
SetConfigureDoneExpectation(DataTypeManager::OK); |
@@ -543,6 +563,8 @@ TEST_F(SyncDataTypeManagerImplTest, ConfigureOneThenSwitch) { |
TEST_F(SyncDataTypeManagerImplTest, ConfigureWhileOneInFlight) { |
AddController(BOOKMARKS); |
AddController(PREFERENCES); |
+ dtm_->set_priority_types( |
+ AddPriorityTypesTo(syncer::ModelTypeSet(BOOKMARKS, PREFERENCES))); |
SetConfigureStartExpectation(); |
SetConfigureDoneExpectation(DataTypeManager::OK); |
@@ -581,6 +603,7 @@ TEST_F(SyncDataTypeManagerImplTest, ConfigureWhileOneInFlight) { |
// The unrecoverable error should cause the DTM to stop. |
TEST_F(SyncDataTypeManagerImplTest, OneFailingController) { |
AddController(BOOKMARKS); |
+ dtm_->set_priority_types(AddPriorityTypesTo(syncer::ModelTypeSet(BOOKMARKS))); |
SetConfigureStartExpectation(); |
SetConfigureDoneExpectation(DataTypeManager::UNRECOVERABLE_ERROR); |
@@ -607,6 +630,8 @@ TEST_F(SyncDataTypeManagerImplTest, OneFailingController) { |
TEST_F(SyncDataTypeManagerImplTest, SecondControllerFails) { |
AddController(BOOKMARKS); |
AddController(PREFERENCES); |
+ dtm_->set_priority_types( |
+ AddPriorityTypesTo(syncer::ModelTypeSet(BOOKMARKS, PREFERENCES))); |
SetConfigureStartExpectation(); |
SetConfigureDoneExpectation(DataTypeManager::UNRECOVERABLE_ERROR); |
@@ -645,6 +670,8 @@ TEST_F(SyncDataTypeManagerImplTest, SecondControllerFails) { |
TEST_F(SyncDataTypeManagerImplTest, OneControllerFailsAssociation) { |
AddController(BOOKMARKS); |
AddController(PREFERENCES); |
+ dtm_->set_priority_types( |
+ AddPriorityTypesTo(syncer::ModelTypeSet(BOOKMARKS, PREFERENCES))); |
SetConfigureStartExpectation(); |
SetConfigureDoneExpectation(DataTypeManager::PARTIAL_SUCCESS); |
@@ -686,6 +713,8 @@ TEST_F(SyncDataTypeManagerImplTest, OneControllerFailsAssociation) { |
TEST_F(SyncDataTypeManagerImplTest, ConfigureWhileDownloadPending) { |
AddController(BOOKMARKS); |
AddController(PREFERENCES); |
+ dtm_->set_priority_types( |
+ AddPriorityTypesTo(syncer::ModelTypeSet(BOOKMARKS, PREFERENCES))); |
SetConfigureStartExpectation(); |
SetConfigureDoneExpectation(DataTypeManager::OK); |
@@ -731,6 +760,8 @@ TEST_F(SyncDataTypeManagerImplTest, ConfigureWhileDownloadPending) { |
TEST_F(SyncDataTypeManagerImplTest, ConfigureWhileDownloadPendingWithFailure) { |
AddController(BOOKMARKS); |
AddController(PREFERENCES); |
+ dtm_->set_priority_types( |
+ AddPriorityTypesTo(syncer::ModelTypeSet(BOOKMARKS, PREFERENCES))); |
SetConfigureStartExpectation(); |
SetConfigureDoneExpectation(DataTypeManager::OK); |
@@ -766,6 +797,7 @@ TEST_F(SyncDataTypeManagerImplTest, ConfigureWhileDownloadPendingWithFailure) { |
// operations that would be invoked by the BackendMigrator. |
TEST_F(SyncDataTypeManagerImplTest, MigrateAll) { |
AddController(BOOKMARKS); |
+ dtm_->set_priority_types(AddPriorityTypesTo(syncer::ModelTypeSet(BOOKMARKS))); |
SetConfigureStartExpectation(); |
SetConfigureDoneExpectation(DataTypeManager::OK); |
@@ -808,6 +840,8 @@ TEST_F(SyncDataTypeManagerImplTest, MigrateAll) { |
TEST_F(SyncDataTypeManagerImplTest, ConfigureDuringPurge) { |
AddController(BOOKMARKS); |
AddController(PREFERENCES); |
+ dtm_->set_priority_types( |
+ AddPriorityTypesTo(syncer::ModelTypeSet(BOOKMARKS, PREFERENCES))); |
// Initial configure. |
SetConfigureStartExpectation(); |
@@ -855,18 +889,19 @@ TEST_F(SyncDataTypeManagerImplTest, ConfigureDuringPurge) { |
TEST_F(SyncDataTypeManagerImplTest, PrioritizedConfiguration) { |
AddController(BOOKMARKS); |
AddController(PREFERENCES); |
+ dtm_->set_priority_types( |
+ AddPriorityTypesTo(syncer::ModelTypeSet(BOOKMARKS, PREFERENCES))); |
- TypeSetPriorityList priority_list; |
- priority_list.push(ModelTypeSet(PREFERENCES)); |
- priority_list.push(ModelTypeSet(BOOKMARKS)); |
- dtm_->set_priority_list(priority_list); |
+ dtm_->set_priority_types( |
+ AddPriorityTypesTo(syncer::ModelTypeSet(PREFERENCES))); |
// Initial configure. |
SetConfigureStartExpectation(); |
SetConfigureDoneExpectation(DataTypeManager::OK); |
// Initially only PREFERENCES is configured. |
- configurer_.set_expected_configure_types(ModelTypeSet(PREFERENCES)); |
+ configurer_.set_expected_configure_types( |
+ AddPriorityTypesTo(ModelTypeSet(PREFERENCES))); |
Configure(dtm_.get(), ModelTypeSet(BOOKMARKS, PREFERENCES)); |
EXPECT_EQ(DataTypeManager::DOWNLOAD_PENDING, dtm_->state()); |
@@ -888,17 +923,16 @@ TEST_F(SyncDataTypeManagerImplTest, PrioritizedConfigurationReconfigure) { |
AddController(PREFERENCES); |
AddController(APPS); |
- TypeSetPriorityList priority_list; |
- priority_list.push(ModelTypeSet(PREFERENCES)); |
- priority_list.push(ModelTypeSet(BOOKMARKS)); |
- dtm_->set_priority_list(priority_list); |
+ dtm_->set_priority_types( |
+ AddPriorityTypesTo(syncer::ModelTypeSet(PREFERENCES))); |
// Initial configure. |
SetConfigureStartExpectation(); |
SetConfigureDoneExpectation(DataTypeManager::OK); |
// Reconfigure while associating PREFERENCES and downloading BOOKMARKS. |
- configurer_.set_expected_configure_types(ModelTypeSet(PREFERENCES)); |
+ configurer_.set_expected_configure_types( |
+ AddPriorityTypesTo(ModelTypeSet(PREFERENCES))); |
Configure(dtm_.get(), ModelTypeSet(BOOKMARKS, PREFERENCES)); |
EXPECT_EQ(DataTypeManager::DOWNLOAD_PENDING, dtm_->state()); |
@@ -907,14 +941,13 @@ TEST_F(SyncDataTypeManagerImplTest, PrioritizedConfigurationReconfigure) { |
EXPECT_EQ(DataTypeManager::CONFIGURING, dtm_->state()); |
// Enable syncing for APPS. |
- priority_list.back() = ModelTypeSet(BOOKMARKS, APPS); |
- dtm_->set_priority_list(priority_list); |
Configure(dtm_.get(), ModelTypeSet(BOOKMARKS, PREFERENCES, APPS)); |
EXPECT_EQ(DataTypeManager::CONFIGURING, dtm_->state()); |
// Reconfiguration starts after downloading and association of previous |
// types finish. |
- configurer_.set_expected_configure_types(ModelTypeSet(PREFERENCES)); |
+ configurer_.set_expected_configure_types( |
+ AddPriorityTypesTo(ModelTypeSet(PREFERENCES))); |
FinishDownload(*dtm_, ModelTypeSet(BOOKMARKS), ModelTypeSet()); |
GetController(PREFERENCES)->FinishStart(DataTypeController::OK); |
EXPECT_EQ(DataTypeManager::DOWNLOAD_PENDING, dtm_->state()); |
@@ -937,17 +970,16 @@ TEST_F(SyncDataTypeManagerImplTest, PrioritizedConfigurationStop) { |
AddController(BOOKMARKS); |
AddController(PREFERENCES); |
- TypeSetPriorityList priority_list; |
- priority_list.push(ModelTypeSet(PREFERENCES)); |
- priority_list.push(ModelTypeSet(BOOKMARKS)); |
- dtm_->set_priority_list(priority_list); |
+ dtm_->set_priority_types( |
+ AddPriorityTypesTo(syncer::ModelTypeSet(PREFERENCES))); |
// Initial configure. |
SetConfigureStartExpectation(); |
SetConfigureDoneExpectation(DataTypeManager::ABORTED); |
// Initially only PREFERENCES is configured. |
- configurer_.set_expected_configure_types(ModelTypeSet(PREFERENCES)); |
+ configurer_.set_expected_configure_types( |
+ AddPriorityTypesTo(ModelTypeSet(PREFERENCES))); |
Configure(dtm_.get(), ModelTypeSet(BOOKMARKS, PREFERENCES)); |
EXPECT_EQ(DataTypeManager::DOWNLOAD_PENDING, dtm_->state()); |
@@ -972,17 +1004,16 @@ TEST_F(SyncDataTypeManagerImplTest, PrioritizedConfigurationDownloadError) { |
AddController(BOOKMARKS); |
AddController(PREFERENCES); |
- TypeSetPriorityList priority_list; |
- priority_list.push(ModelTypeSet(PREFERENCES)); |
- priority_list.push(ModelTypeSet(BOOKMARKS)); |
- dtm_->set_priority_list(priority_list); |
+ dtm_->set_priority_types( |
+ AddPriorityTypesTo(syncer::ModelTypeSet(PREFERENCES))); |
// Initial configure. |
SetConfigureStartExpectation(); |
SetConfigureDoneExpectation(DataTypeManager::UNRECOVERABLE_ERROR); |
// Initially only PREFERENCES is configured. |
- configurer_.set_expected_configure_types(ModelTypeSet(PREFERENCES)); |
+ configurer_.set_expected_configure_types( |
+ AddPriorityTypesTo(ModelTypeSet(PREFERENCES))); |
Configure(dtm_.get(), ModelTypeSet(BOOKMARKS, PREFERENCES)); |
EXPECT_EQ(DataTypeManager::DOWNLOAD_PENDING, dtm_->state()); |
@@ -1004,21 +1035,20 @@ TEST_F(SyncDataTypeManagerImplTest, PrioritizedConfigurationDownloadError) { |
EXPECT_EQ(DataTypeController::NOT_RUNNING, GetController(BOOKMARKS)->state()); |
} |
-TEST_F(SyncDataTypeManagerImplTest, PrioritizedConfigurationAssociationError) { |
- AddController(BOOKMARKS); |
- AddController(PREFERENCES); |
+TEST_F(SyncDataTypeManagerImplTest, HighPriorityAssociationFailure) { |
+ AddController(PREFERENCES); // Will fail. |
+ AddController(BOOKMARKS); // Will succeed. |
- TypeSetPriorityList priority_list; |
- priority_list.push(ModelTypeSet(PREFERENCES)); |
- priority_list.push(ModelTypeSet(BOOKMARKS)); |
- dtm_->set_priority_list(priority_list); |
+ dtm_->set_priority_types( |
+ AddPriorityTypesTo(syncer::ModelTypeSet(PREFERENCES))); |
// Initial configure. |
SetConfigureStartExpectation(); |
- SetConfigureDoneExpectation(DataTypeManager::UNRECOVERABLE_ERROR); |
+ SetConfigureDoneExpectation(DataTypeManager::PARTIAL_SUCCESS); |
// Initially only PREFERENCES is configured. |
- configurer_.set_expected_configure_types(ModelTypeSet(PREFERENCES)); |
+ configurer_.set_expected_configure_types( |
+ AddPriorityTypesTo(ModelTypeSet(PREFERENCES))); |
Configure(dtm_.get(), ModelTypeSet(BOOKMARKS, PREFERENCES)); |
EXPECT_EQ(DataTypeManager::DOWNLOAD_PENDING, dtm_->state()); |
@@ -1034,13 +1064,76 @@ TEST_F(SyncDataTypeManagerImplTest, PrioritizedConfigurationAssociationError) { |
// Make PREFERENCES association fail. |
GetController(PREFERENCES)->FinishStart( |
- DataTypeController::UNRECOVERABLE_ERROR); |
- EXPECT_EQ(DataTypeManager::STOPPED, dtm_->state()); |
+ DataTypeController::ASSOCIATION_FAILED); |
+ EXPECT_EQ(DataTypeManager::CONFIGURING, dtm_->state()); |
+ |
+ // Reconfigure without PREFERENCES after the BOOKMARKS download completes, |
+ // then reconfigure with BOOKMARKS. |
+ configurer_.set_expected_configure_types(PriorityTypes()); |
+ FinishDownload(*dtm_, ModelTypeSet(BOOKMARKS), ModelTypeSet()); |
+ configurer_.set_expected_configure_types(ModelTypeSet(BOOKMARKS)); |
+ FinishDownload(*dtm_, ModelTypeSet(), ModelTypeSet()); |
+ |
+ // Reconfigure with BOOKMARKS. |
+ FinishDownload(*dtm_, ModelTypeSet(BOOKMARKS), ModelTypeSet()); |
+ EXPECT_EQ(DataTypeController::ASSOCIATING, |
+ GetController(BOOKMARKS)->state()); |
+ GetController(BOOKMARKS)->FinishStart(DataTypeController::OK); |
+ |
+ EXPECT_EQ(DataTypeManager::CONFIGURED, dtm_->state()); |
EXPECT_EQ(DataTypeController::NOT_RUNNING, |
GetController(PREFERENCES)->state()); |
- EXPECT_EQ(DataTypeController::NOT_RUNNING, GetController(BOOKMARKS)->state()); |
+ EXPECT_EQ(DataTypeController::RUNNING, GetController(BOOKMARKS)->state()); |
} |
-} // namespace |
+TEST_F(SyncDataTypeManagerImplTest, LowPriorityAssociationFailure) { |
+ AddController(PREFERENCES); // Will succeed. |
+ AddController(BOOKMARKS); // Will fail. |
+ |
+ dtm_->set_priority_types( |
+ AddPriorityTypesTo(syncer::ModelTypeSet(PREFERENCES))); |
+ |
+ // Initial configure. |
+ SetConfigureStartExpectation(); |
+ SetConfigureDoneExpectation(DataTypeManager::PARTIAL_SUCCESS); |
+ |
+ // Initially only PREFERENCES is configured. |
+ configurer_.set_expected_configure_types( |
+ AddPriorityTypesTo(ModelTypeSet(PREFERENCES))); |
+ Configure(dtm_.get(), ModelTypeSet(BOOKMARKS, PREFERENCES)); |
+ EXPECT_EQ(DataTypeManager::DOWNLOAD_PENDING, dtm_->state()); |
+ |
+ // BOOKMARKS is configured after download of PREFERENCES finishes. |
+ configurer_.set_expected_configure_types(ModelTypeSet(BOOKMARKS)); |
+ FinishDownload(*dtm_, ModelTypeSet(PREFERENCES), ModelTypeSet()); |
+ EXPECT_EQ(DataTypeManager::CONFIGURING, dtm_->state()); |
+ |
+ // PERFERENCES controller is associating while BOOKMARKS is downloading. |
+ EXPECT_EQ(DataTypeController::ASSOCIATING, |
+ GetController(PREFERENCES)->state()); |
+ EXPECT_EQ(DataTypeController::NOT_RUNNING, GetController(BOOKMARKS)->state()); |
+ |
+ // BOOKMARKS finishes downloading and PREFERENCES finishes associating. |
+ FinishDownload(*dtm_, ModelTypeSet(BOOKMARKS), ModelTypeSet()); |
+ GetController(PREFERENCES)->FinishStart(DataTypeController::OK); |
+ EXPECT_EQ(DataTypeController::RUNNING, GetController(PREFERENCES)->state()); |
+ |
+ // Make BOOKMARKS association fail, which triggers reconfigure with only |
+ // PREFERENCES. |
+ configurer_.set_expected_configure_types( |
+ AddPriorityTypesTo(ModelTypeSet(PREFERENCES))); |
+ GetController(BOOKMARKS)->FinishStart( |
+ DataTypeController::ASSOCIATION_FAILED); |
+ EXPECT_EQ(DataTypeController::NOT_RUNNING, |
+ GetController(BOOKMARKS)->state()); |
+ EXPECT_EQ(DataTypeManager::DOWNLOAD_PENDING, dtm_->state()); |
+ |
+ // Finish configuration with only PREFERENCES. |
+ FinishDownload(*dtm_, ModelTypeSet(PREFERENCES), ModelTypeSet()); |
+ EXPECT_EQ(DataTypeManager::CONFIGURED, dtm_->state()); |
+ EXPECT_EQ(DataTypeController::RUNNING, GetController(PREFERENCES)->state()); |
+ EXPECT_EQ(DataTypeController::NOT_RUNNING, |
+ GetController(BOOKMARKS)->state()); |
+} |
} // namespace browser_sync |