| Index: components/sync_driver/model_association_manager_unittest.cc
|
| diff --git a/components/sync_driver/model_association_manager_unittest.cc b/components/sync_driver/model_association_manager_unittest.cc
|
| deleted file mode 100644
|
| index f5737526c9286aab5798825f6e624f6d92afcdbc..0000000000000000000000000000000000000000
|
| --- a/components/sync_driver/model_association_manager_unittest.cc
|
| +++ /dev/null
|
| @@ -1,527 +0,0 @@
|
| -// Copyright 2014 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/model_association_manager.h"
|
| -
|
| -#include "base/callback.h"
|
| -#include "base/message_loop/message_loop.h"
|
| -#include "components/sync_driver/fake_data_type_controller.h"
|
| -#include "testing/gmock/include/gmock/gmock.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -using ::testing::_;
|
| -
|
| -namespace sync_driver {
|
| -
|
| -class MockModelAssociationManagerDelegate :
|
| - public ModelAssociationManagerDelegate {
|
| - public:
|
| - MockModelAssociationManagerDelegate() {}
|
| - ~MockModelAssociationManagerDelegate() {}
|
| - MOCK_METHOD0(OnAllDataTypesReadyForConfigure, void());
|
| - MOCK_METHOD2(OnSingleDataTypeAssociationDone,
|
| - void(syncer::ModelType type,
|
| - const syncer::DataTypeAssociationStats& association_stats));
|
| - MOCK_METHOD2(OnSingleDataTypeWillStop,
|
| - void(syncer::ModelType, const syncer::SyncError& error));
|
| - MOCK_METHOD1(OnModelAssociationDone, void(
|
| - const DataTypeManager::ConfigureResult& result));
|
| -};
|
| -
|
| -FakeDataTypeController* GetController(
|
| - const DataTypeController::TypeMap& controllers,
|
| - syncer::ModelType model_type) {
|
| - DataTypeController::TypeMap::const_iterator it =
|
| - controllers.find(model_type);
|
| - if (it == controllers.end()) {
|
| - return NULL;
|
| - }
|
| - return static_cast<FakeDataTypeController*>(it->second.get());
|
| -}
|
| -
|
| -ACTION_P(VerifyResult, expected_result) {
|
| - EXPECT_EQ(arg0.status, expected_result.status);
|
| - EXPECT_EQ(expected_result.requested_types, arg0.requested_types);
|
| -}
|
| -
|
| -class SyncModelAssociationManagerTest : public testing::Test {
|
| - public:
|
| - SyncModelAssociationManagerTest() {
|
| - }
|
| -
|
| - protected:
|
| - base::MessageLoopForUI ui_loop_;
|
| - MockModelAssociationManagerDelegate delegate_;
|
| - DataTypeController::TypeMap controllers_;
|
| -};
|
| -
|
| -// Start a type and make sure ModelAssociationManager callst the |Start|
|
| -// method and calls the callback when it is done.
|
| -TEST_F(SyncModelAssociationManagerTest, SimpleModelStart) {
|
| - controllers_[syncer::BOOKMARKS] =
|
| - new FakeDataTypeController(syncer::BOOKMARKS);
|
| - controllers_[syncer::APPS] =
|
| - new FakeDataTypeController(syncer::APPS);
|
| - ModelAssociationManager model_association_manager(&controllers_,
|
| - &delegate_);
|
| - syncer::ModelTypeSet types(syncer::BOOKMARKS, syncer::APPS);
|
| - DataTypeManager::ConfigureResult expected_result(DataTypeManager::OK, types);
|
| - EXPECT_CALL(delegate_, OnAllDataTypesReadyForConfigure());
|
| - EXPECT_CALL(delegate_, OnModelAssociationDone(_)).
|
| - WillOnce(VerifyResult(expected_result));
|
| -
|
| - EXPECT_EQ(GetController(controllers_, syncer::BOOKMARKS)->state(),
|
| - DataTypeController::NOT_RUNNING);
|
| - EXPECT_EQ(GetController(controllers_, syncer::APPS)->state(),
|
| - DataTypeController::NOT_RUNNING);
|
| -
|
| - // Initialize() kicks off model loading.
|
| - model_association_manager.Initialize(types);
|
| -
|
| - EXPECT_EQ(GetController(controllers_, syncer::BOOKMARKS)->state(),
|
| - DataTypeController::MODEL_LOADED);
|
| - EXPECT_EQ(GetController(controllers_, syncer::APPS)->state(),
|
| - DataTypeController::MODEL_LOADED);
|
| -
|
| - model_association_manager.StartAssociationAsync(types);
|
| -
|
| - EXPECT_EQ(GetController(controllers_, syncer::BOOKMARKS)->state(),
|
| - DataTypeController::ASSOCIATING);
|
| - EXPECT_EQ(GetController(controllers_, syncer::APPS)->state(),
|
| - DataTypeController::ASSOCIATING);
|
| - GetController(controllers_, syncer::BOOKMARKS)->FinishStart(
|
| - DataTypeController::OK);
|
| - GetController(controllers_, syncer::APPS)->FinishStart(
|
| - DataTypeController::OK);
|
| -}
|
| -
|
| -// Start a type and call stop before it finishes associating.
|
| -TEST_F(SyncModelAssociationManagerTest, StopModelBeforeFinish) {
|
| - controllers_[syncer::BOOKMARKS] =
|
| - new FakeDataTypeController(syncer::BOOKMARKS);
|
| - ModelAssociationManager model_association_manager(
|
| - &controllers_,
|
| - &delegate_);
|
| -
|
| - syncer::ModelTypeSet types;
|
| - types.Put(syncer::BOOKMARKS);
|
| -
|
| - DataTypeManager::ConfigureResult expected_result(DataTypeManager::ABORTED,
|
| - types);
|
| -
|
| - EXPECT_CALL(delegate_, OnModelAssociationDone(_)).
|
| - WillOnce(VerifyResult(expected_result));
|
| - EXPECT_CALL(delegate_,
|
| - OnSingleDataTypeWillStop(syncer::BOOKMARKS, _));
|
| -
|
| - model_association_manager.Initialize(types);
|
| - model_association_manager.StartAssociationAsync(types);
|
| -
|
| - EXPECT_EQ(GetController(controllers_, syncer::BOOKMARKS)->state(),
|
| - DataTypeController::ASSOCIATING);
|
| - model_association_manager.Stop();
|
| - EXPECT_EQ(GetController(controllers_, syncer::BOOKMARKS)->state(),
|
| - DataTypeController::NOT_RUNNING);
|
| -}
|
| -
|
| -// Start a type, let it finish and then call stop.
|
| -TEST_F(SyncModelAssociationManagerTest, StopAfterFinish) {
|
| - controllers_[syncer::BOOKMARKS] =
|
| - new FakeDataTypeController(syncer::BOOKMARKS);
|
| - ModelAssociationManager model_association_manager(
|
| - &controllers_,
|
| - &delegate_);
|
| - syncer::ModelTypeSet types;
|
| - types.Put(syncer::BOOKMARKS);
|
| - DataTypeManager::ConfigureResult expected_result(DataTypeManager::OK, types);
|
| - EXPECT_CALL(delegate_, OnModelAssociationDone(_)).
|
| - WillOnce(VerifyResult(expected_result));
|
| - EXPECT_CALL(delegate_,
|
| - OnSingleDataTypeWillStop(syncer::BOOKMARKS, _));
|
| -
|
| - model_association_manager.Initialize(types);
|
| - model_association_manager.StartAssociationAsync(types);
|
| -
|
| - EXPECT_EQ(GetController(controllers_, syncer::BOOKMARKS)->state(),
|
| - DataTypeController::ASSOCIATING);
|
| - GetController(controllers_, syncer::BOOKMARKS)->FinishStart(
|
| - DataTypeController::OK);
|
| -
|
| - model_association_manager.Stop();
|
| - EXPECT_EQ(GetController(controllers_, syncer::BOOKMARKS)->state(),
|
| - DataTypeController::NOT_RUNNING);
|
| -}
|
| -
|
| -// Make a type fail model association and verify correctness.
|
| -TEST_F(SyncModelAssociationManagerTest, TypeFailModelAssociation) {
|
| - controllers_[syncer::BOOKMARKS] =
|
| - new FakeDataTypeController(syncer::BOOKMARKS);
|
| - ModelAssociationManager model_association_manager(
|
| - &controllers_,
|
| - &delegate_);
|
| - syncer::ModelTypeSet types;
|
| - types.Put(syncer::BOOKMARKS);
|
| - DataTypeManager::ConfigureResult expected_result(DataTypeManager::OK, types);
|
| - EXPECT_CALL(delegate_,
|
| - OnSingleDataTypeWillStop(syncer::BOOKMARKS, _));
|
| - EXPECT_CALL(delegate_, OnModelAssociationDone(_)).
|
| - WillOnce(VerifyResult(expected_result));
|
| -
|
| - model_association_manager.Initialize(types);
|
| - model_association_manager.StartAssociationAsync(types);
|
| -
|
| - EXPECT_EQ(GetController(controllers_, syncer::BOOKMARKS)->state(),
|
| - DataTypeController::ASSOCIATING);
|
| - GetController(controllers_, syncer::BOOKMARKS)->FinishStart(
|
| - DataTypeController::ASSOCIATION_FAILED);
|
| - EXPECT_EQ(GetController(controllers_, syncer::BOOKMARKS)->state(),
|
| - DataTypeController::NOT_RUNNING);
|
| -}
|
| -
|
| -// Ensure configuring stops when a type returns a unrecoverable error.
|
| -TEST_F(SyncModelAssociationManagerTest, TypeReturnUnrecoverableError) {
|
| - controllers_[syncer::BOOKMARKS] =
|
| - new FakeDataTypeController(syncer::BOOKMARKS);
|
| - ModelAssociationManager model_association_manager(
|
| - &controllers_,
|
| - &delegate_);
|
| - syncer::ModelTypeSet types;
|
| - types.Put(syncer::BOOKMARKS);
|
| - DataTypeManager::ConfigureResult expected_result(
|
| - DataTypeManager::UNRECOVERABLE_ERROR, types);
|
| - EXPECT_CALL(delegate_,
|
| - OnSingleDataTypeWillStop(syncer::BOOKMARKS, _));
|
| - EXPECT_CALL(delegate_, OnModelAssociationDone(_)).
|
| - WillOnce(VerifyResult(expected_result));
|
| -
|
| - model_association_manager.Initialize(types);
|
| -
|
| - model_association_manager.StartAssociationAsync(types);
|
| -
|
| - EXPECT_EQ(GetController(controllers_, syncer::BOOKMARKS)->state(),
|
| - DataTypeController::ASSOCIATING);
|
| - GetController(controllers_, syncer::BOOKMARKS)->FinishStart(
|
| - DataTypeController::UNRECOVERABLE_ERROR);
|
| -}
|
| -
|
| -TEST_F(SyncModelAssociationManagerTest, SlowTypeAsFailedType) {
|
| - controllers_[syncer::BOOKMARKS] =
|
| - new FakeDataTypeController(syncer::BOOKMARKS);
|
| - controllers_[syncer::APPS] =
|
| - new FakeDataTypeController(syncer::APPS);
|
| - GetController(controllers_, syncer::BOOKMARKS)->SetDelayModelLoad();
|
| - ModelAssociationManager model_association_manager(&controllers_,
|
| - &delegate_);
|
| - syncer::ModelTypeSet types;
|
| - types.Put(syncer::BOOKMARKS);
|
| - types.Put(syncer::APPS);
|
| -
|
| - DataTypeManager::ConfigureResult expected_result_partially_done(
|
| - DataTypeManager::OK, types);
|
| -
|
| - EXPECT_CALL(delegate_, OnModelAssociationDone(_)).
|
| - WillOnce(VerifyResult(expected_result_partially_done));
|
| -
|
| - model_association_manager.Initialize(types);
|
| - model_association_manager.StartAssociationAsync(types);
|
| - GetController(controllers_, syncer::APPS)->FinishStart(
|
| - DataTypeController::OK);
|
| -
|
| - EXPECT_CALL(delegate_,
|
| - OnSingleDataTypeWillStop(syncer::BOOKMARKS, _));
|
| - model_association_manager.GetTimerForTesting()->user_task().Run();
|
| -
|
| - EXPECT_EQ(DataTypeController::NOT_RUNNING,
|
| - GetController(controllers_, syncer::BOOKMARKS)->state());
|
| -}
|
| -
|
| -TEST_F(SyncModelAssociationManagerTest, StartMultipleTimes) {
|
| - controllers_[syncer::BOOKMARKS] =
|
| - new FakeDataTypeController(syncer::BOOKMARKS);
|
| - controllers_[syncer::APPS] =
|
| - new FakeDataTypeController(syncer::APPS);
|
| - ModelAssociationManager model_association_manager(&controllers_,
|
| - &delegate_);
|
| - syncer::ModelTypeSet types;
|
| - types.Put(syncer::BOOKMARKS);
|
| - types.Put(syncer::APPS);
|
| -
|
| - DataTypeManager::ConfigureResult result_1st(
|
| - DataTypeManager::OK,
|
| - syncer::ModelTypeSet(syncer::BOOKMARKS));
|
| - DataTypeManager::ConfigureResult result_2nd(
|
| - DataTypeManager::OK,
|
| - syncer::ModelTypeSet(syncer::APPS));
|
| - EXPECT_CALL(delegate_, OnModelAssociationDone(_)).
|
| - Times(2).
|
| - WillOnce(VerifyResult(result_1st)).
|
| - WillOnce(VerifyResult(result_2nd));
|
| -
|
| - model_association_manager.Initialize(types);
|
| -
|
| - // Start BOOKMARKS first.
|
| - model_association_manager.StartAssociationAsync(
|
| - syncer::ModelTypeSet(syncer::BOOKMARKS));
|
| - EXPECT_EQ(GetController(controllers_, syncer::BOOKMARKS)->state(),
|
| - DataTypeController::ASSOCIATING);
|
| - EXPECT_EQ(GetController(controllers_, syncer::APPS)->state(),
|
| - DataTypeController::MODEL_LOADED);
|
| -
|
| - // Finish BOOKMARKS association.
|
| - GetController(controllers_, syncer::BOOKMARKS)->FinishStart(
|
| - DataTypeController::OK);
|
| - EXPECT_EQ(GetController(controllers_, syncer::BOOKMARKS)->state(),
|
| - DataTypeController::RUNNING);
|
| - EXPECT_EQ(GetController(controllers_, syncer::APPS)->state(),
|
| - DataTypeController::MODEL_LOADED);
|
| -
|
| - // Start APPS next.
|
| - model_association_manager.StartAssociationAsync(
|
| - syncer::ModelTypeSet(syncer::APPS));
|
| - EXPECT_EQ(GetController(controllers_, syncer::APPS)->state(),
|
| - DataTypeController::ASSOCIATING);
|
| - GetController(controllers_, syncer::APPS)->FinishStart(
|
| - DataTypeController::OK);
|
| - EXPECT_EQ(GetController(controllers_, syncer::APPS)->state(),
|
| - DataTypeController::RUNNING);
|
| -}
|
| -
|
| -// Test that model that failed to load between initialization and association
|
| -// is reported and stopped properly.
|
| -TEST_F(SyncModelAssociationManagerTest, ModelLoadFailBeforeAssociationStart) {
|
| - controllers_[syncer::BOOKMARKS] =
|
| - new FakeDataTypeController(syncer::BOOKMARKS);
|
| - GetController(controllers_, syncer::BOOKMARKS)->SetModelLoadError(
|
| - syncer::SyncError(FROM_HERE, syncer::SyncError::DATATYPE_ERROR,
|
| - "", syncer::BOOKMARKS));
|
| - ModelAssociationManager model_association_manager(
|
| - &controllers_,
|
| - &delegate_);
|
| - syncer::ModelTypeSet types;
|
| - types.Put(syncer::BOOKMARKS);
|
| - DataTypeManager::ConfigureResult expected_result(DataTypeManager::OK, types);
|
| - EXPECT_CALL(delegate_,
|
| - OnSingleDataTypeWillStop(syncer::BOOKMARKS, _));
|
| - EXPECT_CALL(delegate_, OnModelAssociationDone(_)).
|
| - WillOnce(VerifyResult(expected_result));
|
| -
|
| - model_association_manager.Initialize(types);
|
| - EXPECT_EQ(DataTypeController::NOT_RUNNING,
|
| - GetController(controllers_, syncer::BOOKMARKS)->state());
|
| - model_association_manager.StartAssociationAsync(types);
|
| - EXPECT_EQ(DataTypeController::NOT_RUNNING,
|
| - GetController(controllers_, syncer::BOOKMARKS)->state());
|
| -}
|
| -
|
| -// Test that a runtime error is handled by stopping the type.
|
| -TEST_F(SyncModelAssociationManagerTest, StopAfterConfiguration) {
|
| - controllers_[syncer::BOOKMARKS] =
|
| - new FakeDataTypeController(syncer::BOOKMARKS);
|
| - ModelAssociationManager model_association_manager(
|
| - &controllers_,
|
| - &delegate_);
|
| - syncer::ModelTypeSet types;
|
| - types.Put(syncer::BOOKMARKS);
|
| - DataTypeManager::ConfigureResult expected_result(DataTypeManager::OK, types);
|
| - EXPECT_CALL(delegate_, OnModelAssociationDone(_)).
|
| - WillOnce(VerifyResult(expected_result));
|
| -
|
| - model_association_manager.Initialize(types);
|
| - model_association_manager.StartAssociationAsync(types);
|
| -
|
| - EXPECT_EQ(GetController(controllers_, syncer::BOOKMARKS)->state(),
|
| - DataTypeController::ASSOCIATING);
|
| - GetController(controllers_, syncer::BOOKMARKS)->FinishStart(
|
| - DataTypeController::OK);
|
| - EXPECT_EQ(GetController(controllers_, syncer::BOOKMARKS)->state(),
|
| - DataTypeController::RUNNING);
|
| -
|
| - testing::Mock::VerifyAndClearExpectations(&delegate_);
|
| - EXPECT_CALL(delegate_,
|
| - OnSingleDataTypeWillStop(syncer::BOOKMARKS, _));
|
| - syncer::SyncError error(FROM_HERE,
|
| - syncer::SyncError::DATATYPE_ERROR,
|
| - "error",
|
| - syncer::BOOKMARKS);
|
| - GetController(controllers_, syncer::BOOKMARKS)
|
| - ->OnSingleDataTypeUnrecoverableError(error);
|
| -}
|
| -
|
| -TEST_F(SyncModelAssociationManagerTest, AbortDuringAssociation) {
|
| - controllers_[syncer::BOOKMARKS] =
|
| - new FakeDataTypeController(syncer::BOOKMARKS);
|
| - controllers_[syncer::APPS] =
|
| - new FakeDataTypeController(syncer::APPS);
|
| - ModelAssociationManager model_association_manager(&controllers_,
|
| - &delegate_);
|
| - syncer::ModelTypeSet types;
|
| - types.Put(syncer::BOOKMARKS);
|
| - types.Put(syncer::APPS);
|
| -
|
| - syncer::ModelTypeSet expected_types_unfinished;
|
| - expected_types_unfinished.Put(syncer::BOOKMARKS);
|
| - DataTypeManager::ConfigureResult expected_result_partially_done(
|
| - DataTypeManager::OK, types);
|
| -
|
| - EXPECT_CALL(delegate_, OnModelAssociationDone(_)).
|
| - WillOnce(VerifyResult(expected_result_partially_done));
|
| -
|
| - model_association_manager.Initialize(types);
|
| - model_association_manager.StartAssociationAsync(types);
|
| - GetController(controllers_, syncer::APPS)->FinishStart(
|
| - DataTypeController::OK);
|
| - EXPECT_EQ(GetController(controllers_, syncer::APPS)->state(),
|
| - DataTypeController::RUNNING);
|
| - EXPECT_EQ(GetController(controllers_, syncer::BOOKMARKS)->state(),
|
| - DataTypeController::ASSOCIATING);
|
| -
|
| - EXPECT_CALL(delegate_,
|
| - OnSingleDataTypeWillStop(syncer::BOOKMARKS, _));
|
| - model_association_manager.GetTimerForTesting()->user_task().Run();
|
| -
|
| - EXPECT_EQ(DataTypeController::NOT_RUNNING,
|
| - GetController(controllers_, syncer::BOOKMARKS)->state());
|
| -}
|
| -
|
| -// Test that OnAllDataTypesReadyForConfigure is called when all datatypes that
|
| -// require LoadModels before configuration are loaded.
|
| -TEST_F(SyncModelAssociationManagerTest, OnAllDataTypesReadyForConfigure) {
|
| - // Create two controllers with delayed model load.
|
| - controllers_[syncer::BOOKMARKS] =
|
| - new FakeDataTypeController(syncer::BOOKMARKS);
|
| - controllers_[syncer::APPS] = new FakeDataTypeController(syncer::APPS);
|
| - GetController(controllers_, syncer::BOOKMARKS)->SetDelayModelLoad();
|
| - GetController(controllers_, syncer::APPS)->SetDelayModelLoad();
|
| -
|
| - // APPS controller requires LoadModels complete before configure.
|
| - GetController(controllers_, syncer::APPS)
|
| - ->SetShouldLoadModelBeforeConfigure(true);
|
| -
|
| - ModelAssociationManager model_association_manager(&controllers_, &delegate_);
|
| - syncer::ModelTypeSet types(syncer::BOOKMARKS, syncer::APPS);
|
| - DataTypeManager::ConfigureResult expected_result(DataTypeManager::OK, types);
|
| - // OnAllDataTypesReadyForConfigure shouldn't be called, APPS data type is not
|
| - // loaded yet.
|
| - EXPECT_CALL(delegate_, OnAllDataTypesReadyForConfigure()).Times(0);
|
| -
|
| - model_association_manager.Initialize(types);
|
| -
|
| - EXPECT_EQ(GetController(controllers_, syncer::BOOKMARKS)->state(),
|
| - DataTypeController::MODEL_STARTING);
|
| - EXPECT_EQ(GetController(controllers_, syncer::APPS)->state(),
|
| - DataTypeController::MODEL_STARTING);
|
| -
|
| - testing::Mock::VerifyAndClearExpectations(&delegate_);
|
| -
|
| - EXPECT_CALL(delegate_, OnAllDataTypesReadyForConfigure());
|
| - // Finish loading APPS. This should trigger OnAllDataTypesReadyForConfigure
|
| - // even though BOOKMARKS is not loaded yet.
|
| - GetController(controllers_, syncer::APPS)->SimulateModelLoadFinishing();
|
| - EXPECT_EQ(GetController(controllers_, syncer::BOOKMARKS)->state(),
|
| - DataTypeController::MODEL_STARTING);
|
| - EXPECT_EQ(GetController(controllers_, syncer::APPS)->state(),
|
| - DataTypeController::MODEL_LOADED);
|
| -
|
| - // Call ModelAssociationManager::Initialize with reduced set of datatypes.
|
| - // All datatypes in reduced set are already loaded.
|
| - // OnAllDataTypesReadyForConfigure() should be called.
|
| - testing::Mock::VerifyAndClearExpectations(&delegate_);
|
| -
|
| - EXPECT_CALL(delegate_, OnAllDataTypesReadyForConfigure());
|
| - syncer::ModelTypeSet reduced_types(syncer::APPS);
|
| - model_association_manager.Initialize(reduced_types);
|
| -}
|
| -
|
| -// Test that OnAllDataTypesReadyForConfigure() is called correctly after
|
| -// LoadModels fails for one of datatypes.
|
| -TEST_F(SyncModelAssociationManagerTest,
|
| - OnAllDataTypesReadyForConfigure_FailedLoadModels) {
|
| - controllers_[syncer::APPS] = new FakeDataTypeController(syncer::APPS);
|
| - GetController(controllers_, syncer::APPS)->SetDelayModelLoad();
|
| -
|
| - // APPS controller requires LoadModels complete before configure.
|
| - GetController(controllers_, syncer::APPS)
|
| - ->SetShouldLoadModelBeforeConfigure(true);
|
| -
|
| - ModelAssociationManager model_association_manager(&controllers_, &delegate_);
|
| - syncer::ModelTypeSet types(syncer::APPS);
|
| - DataTypeManager::ConfigureResult expected_result(DataTypeManager::OK, types);
|
| - // OnAllDataTypesReadyForConfigure shouldn't be called, APPS data type is not
|
| - // loaded yet.
|
| - EXPECT_CALL(delegate_, OnAllDataTypesReadyForConfigure()).Times(0);
|
| -
|
| - model_association_manager.Initialize(types);
|
| -
|
| - EXPECT_EQ(GetController(controllers_, syncer::APPS)->state(),
|
| - DataTypeController::MODEL_STARTING);
|
| -
|
| - testing::Mock::VerifyAndClearExpectations(&delegate_);
|
| -
|
| - EXPECT_CALL(delegate_, OnAllDataTypesReadyForConfigure());
|
| - // Simulate model load error for APPS and finish loading it. This should
|
| - // trigger OnAllDataTypesReadyForConfigure.
|
| - GetController(controllers_, syncer::APPS)
|
| - ->SetModelLoadError(syncer::SyncError(
|
| - FROM_HERE, syncer::SyncError::DATATYPE_ERROR, "", syncer::APPS));
|
| - GetController(controllers_, syncer::APPS)->SimulateModelLoadFinishing();
|
| - EXPECT_EQ(GetController(controllers_, syncer::APPS)->state(),
|
| - DataTypeController::NOT_RUNNING);
|
| -}
|
| -
|
| -// Test that if one of the types fails while another is still being loaded then
|
| -// OnAllDataTypesReadyForConfgiure is still called correctly.
|
| -TEST_F(SyncModelAssociationManagerTest,
|
| - OnAllDataTypesReadyForConfigure_TypeFailedAfterLoadModels) {
|
| - // Create two controllers with delayed model load. Both should block
|
| - // configuration.
|
| - controllers_[syncer::BOOKMARKS] =
|
| - new FakeDataTypeController(syncer::BOOKMARKS);
|
| - controllers_[syncer::APPS] = new FakeDataTypeController(syncer::APPS);
|
| - GetController(controllers_, syncer::BOOKMARKS)->SetDelayModelLoad();
|
| - GetController(controllers_, syncer::APPS)->SetDelayModelLoad();
|
| -
|
| - GetController(controllers_, syncer::BOOKMARKS)
|
| - ->SetShouldLoadModelBeforeConfigure(true);
|
| - GetController(controllers_, syncer::APPS)
|
| - ->SetShouldLoadModelBeforeConfigure(true);
|
| -
|
| - ModelAssociationManager model_association_manager(&controllers_, &delegate_);
|
| - syncer::ModelTypeSet types(syncer::BOOKMARKS, syncer::APPS);
|
| - DataTypeManager::ConfigureResult expected_result(DataTypeManager::OK, types);
|
| -
|
| - // Apps will finish loading but bookmarks won't.
|
| - // OnAllDataTypesReadyForConfigure shouldn't be called.
|
| - EXPECT_CALL(delegate_, OnAllDataTypesReadyForConfigure()).Times(0);
|
| -
|
| - model_association_manager.Initialize(types);
|
| -
|
| - GetController(controllers_, syncer::APPS)->SimulateModelLoadFinishing();
|
| -
|
| - EXPECT_EQ(GetController(controllers_, syncer::BOOKMARKS)->state(),
|
| - DataTypeController::MODEL_STARTING);
|
| - EXPECT_EQ(GetController(controllers_, syncer::APPS)->state(),
|
| - DataTypeController::MODEL_LOADED);
|
| -
|
| - testing::Mock::VerifyAndClearExpectations(&delegate_);
|
| -
|
| - EXPECT_CALL(delegate_, OnAllDataTypesReadyForConfigure()).Times(0);
|
| -
|
| - EXPECT_CALL(delegate_, OnSingleDataTypeWillStop(syncer::APPS, _));
|
| - // Apps datatype reports failure.
|
| - syncer::SyncError error(FROM_HERE, syncer::SyncError::DATATYPE_ERROR, "error",
|
| - syncer::APPS);
|
| - GetController(controllers_, syncer::APPS)
|
| - ->OnSingleDataTypeUnrecoverableError(error);
|
| -
|
| - testing::Mock::VerifyAndClearExpectations(&delegate_);
|
| -
|
| - EXPECT_CALL(delegate_, OnAllDataTypesReadyForConfigure());
|
| - // Finish loading BOOKMARKS. This should trigger
|
| - // OnAllDataTypesReadyForConfigure().
|
| - GetController(controllers_, syncer::BOOKMARKS)->SimulateModelLoadFinishing();
|
| - EXPECT_EQ(GetController(controllers_, syncer::BOOKMARKS)->state(),
|
| - DataTypeController::MODEL_LOADED);
|
| -}
|
| -
|
| -} // namespace sync_driver
|
|
|