Index: chrome/browser/sync/glue/model_association_manager_unittest.cc |
diff --git a/chrome/browser/sync/glue/model_association_manager_unittest.cc b/chrome/browser/sync/glue/model_association_manager_unittest.cc |
index 48b93ee803d98b47f0a02cb31d750cef2dd6eaeb..589230d1237d594b264a9c90dc7e9a7be5f4d81e 100755 |
--- a/chrome/browser/sync/glue/model_association_manager_unittest.cc |
+++ b/chrome/browser/sync/glue/model_association_manager_unittest.cc |
@@ -18,6 +18,7 @@ class MockModelAssociationResultProcessor : |
~MockModelAssociationResultProcessor() {} |
MOCK_METHOD1(OnModelAssociationDone, void( |
const DataTypeManager::ConfigureResult& result)); |
+ MOCK_METHOD0(OnTypesLoaded, void()); |
}; |
scoped_refptr<FakeDataTypeController> GetController( |
@@ -35,17 +36,21 @@ scoped_refptr<FakeDataTypeController> GetController( |
ACTION_P(VerifyResult, expected_result) { |
EXPECT_EQ(arg0.status, expected_result.status); |
EXPECT_TRUE(arg0.requested_types.Equals(expected_result.requested_types)); |
- EXPECT_EQ(arg0.errors.size(), expected_result.errors.size()); |
+ EXPECT_EQ(arg0.failed_data_types.size(), |
+ expected_result.failed_data_types.size()); |
- if (arg0.errors.size() == expected_result.errors.size()) { |
+ if (arg0.failed_data_types.size() == |
+ expected_result.failed_data_types.size()) { |
std::list<SyncError>::const_iterator it1, it2; |
- for (it1 = arg0.errors.begin(), |
- it2 = expected_result.errors.begin(); |
- it1 != arg0.errors.end(); |
+ for (it1 = arg0.failed_data_types.begin(), |
+ it2 = expected_result.failed_data_types.begin(); |
+ it1 != arg0.failed_data_types.end(); |
++it1, ++it2) { |
EXPECT_EQ((*it1).type(), (*it2).type()); |
} |
} |
+ |
+ EXPECT_TRUE(arg0.waiting_to_start.Equals(expected_result.waiting_to_start)); |
} |
class ModelAssociationManagerTest : public testing::Test { |
@@ -73,7 +78,8 @@ TEST_F(ModelAssociationManagerTest, SimpleModelStart) { |
DataTypeManager::ConfigureResult expected_result( |
DataTypeManager::OK, |
types, |
- std::list<SyncError>()); |
+ std::list<SyncError>(), |
+ syncable::ModelTypeSet()); |
EXPECT_CALL(result_processor_, OnModelAssociationDone(_)). |
WillOnce(VerifyResult(expected_result)); |
@@ -100,7 +106,8 @@ TEST_F(ModelAssociationManagerTest, StopModelBeforeFinish) { |
DataTypeManager::ConfigureResult expected_result( |
DataTypeManager::ABORTED, |
types, |
- std::list<SyncError>()); |
+ std::list<SyncError>(), |
+ syncable::ModelTypeSet()); |
EXPECT_CALL(result_processor_, OnModelAssociationDone(_)). |
WillOnce(VerifyResult(expected_result)); |
@@ -127,7 +134,8 @@ TEST_F(ModelAssociationManagerTest, StopAfterFinish) { |
DataTypeManager::ConfigureResult expected_result( |
DataTypeManager::OK, |
types, |
- std::list<SyncError>()); |
+ std::list<SyncError>(), |
+ syncable::ModelTypeSet()); |
EXPECT_CALL(result_processor_, OnModelAssociationDone(_)). |
WillOnce(VerifyResult(expected_result)); |
@@ -159,7 +167,8 @@ TEST_F(ModelAssociationManagerTest, TypeFailModelAssociation) { |
DataTypeManager::ConfigureResult expected_result( |
DataTypeManager::PARTIAL_SUCCESS, |
types, |
- errors); |
+ errors, |
+ syncable::ModelTypeSet()); |
EXPECT_CALL(result_processor_, OnModelAssociationDone(_)). |
WillOnce(VerifyResult(expected_result)); |
@@ -187,7 +196,8 @@ TEST_F(ModelAssociationManagerTest, TypeReturnUnrecoverableError) { |
DataTypeManager::ConfigureResult expected_result( |
DataTypeManager::UNRECOVERABLE_ERROR, |
types, |
- errors); |
+ errors, |
+ syncable::ModelTypeSet()); |
EXPECT_CALL(result_processor_, OnModelAssociationDone(_)). |
WillOnce(VerifyResult(expected_result)); |
@@ -201,4 +211,63 @@ TEST_F(ModelAssociationManagerTest, TypeReturnUnrecoverableError) { |
DataTypeController::UNRECOVERABLE_ERROR); |
} |
+// Start 2 types. One of which timeout loading. Ensure that type is |
+// fully configured eventually. |
+TEST_F(ModelAssociationManagerTest, ModelStartWithSlowLoadingType) { |
+ controllers_[syncable::BOOKMARKS] = |
+ new FakeDataTypeController(syncable::BOOKMARKS); |
+ controllers_[syncable::APPS] = |
+ new FakeDataTypeController(syncable::APPS); |
+ GetController(controllers_, syncable::BOOKMARKS)->SetDelayModelLoad(); |
+ ModelAssociationManager model_association_manager(&controllers_, |
+ &result_processor_); |
+ syncable::ModelTypeSet types; |
+ types.Put(syncable::BOOKMARKS); |
+ types.Put(syncable::APPS); |
+ |
+ syncable::ModelTypeSet expected_types_waiting_to_load; |
+ expected_types_waiting_to_load.Put(syncable::BOOKMARKS); |
+ DataTypeManager::ConfigureResult expected_result_partially_done( |
+ DataTypeManager::PARTIAL_SUCCESS, |
+ types, |
+ std::list<SyncError>(), |
+ expected_types_waiting_to_load); |
+ |
+ DataTypeManager::ConfigureResult expected_result_done( |
+ DataTypeManager::OK, |
+ types, |
+ std::list<SyncError>(), |
+ syncable::ModelTypeSet()); |
+ |
+ |
+ EXPECT_CALL(result_processor_, OnModelAssociationDone(_)). |
+ WillOnce(VerifyResult(expected_result_partially_done)); |
+ EXPECT_CALL(result_processor_, OnTypesLoaded()); |
+ |
+ model_association_manager.Initialize(types); |
+ model_association_manager.StopDisabledTypes(); |
+ model_association_manager.StartAssociationAsync(); |
+ |
+ model_association_manager.TestSimulateDataTypeLoadTimeout(); |
+ |
+ GetController(controllers_, syncable::APPS)->FinishStart( |
+ DataTypeController::OK); |
+ |
+ GetController(controllers_, syncable::BOOKMARKS)->FinishModelLoad(); |
+ |
+ EXPECT_CALL(result_processor_, OnModelAssociationDone(_)). |
+ WillOnce(VerifyResult(expected_result_done)); |
+ |
+ // Do it once more to associate bookmarks. |
+ model_association_manager.Initialize(types); |
+ model_association_manager.StopDisabledTypes(); |
+ model_association_manager.StartAssociationAsync(); |
+ |
+ GetController(controllers_, syncable::BOOKMARKS)->FinishModelLoad(); |
+ |
+ GetController(controllers_, syncable::BOOKMARKS)->FinishStart( |
+ DataTypeController::OK); |
+} |
+ |
+ |
} // namespace browser_sync |