| 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
|
| deleted file mode 100644
|
| index 6b9749581dd88aaee5003fac237c16561c4e7a18..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/sync/glue/model_association_manager_unittest.cc
|
| +++ /dev/null
|
| @@ -1,389 +0,0 @@
|
| -// Copyright (c) 2012 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 "base/callback.h"
|
| -#include "base/message_loop/message_loop.h"
|
| -#include "chrome/browser/sync/glue/model_association_manager.h"
|
| -#include "components/sync_driver/fake_data_type_controller.h"
|
| -#include "content/public/test/test_browser_thread.h"
|
| -#include "testing/gmock/include/gmock/gmock.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -using ::testing::_;
|
| -namespace browser_sync {
|
| -class MockModelAssociationResultProcessor :
|
| - public ModelAssociationResultProcessor {
|
| - public:
|
| - MockModelAssociationResultProcessor() {}
|
| - ~MockModelAssociationResultProcessor() {}
|
| - MOCK_METHOD2(OnSingleDataTypeAssociationDone,
|
| - void(syncer::ModelType type,
|
| - const syncer::DataTypeAssociationStats& association_stats));
|
| - 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 (FakeDataTypeController*)(it->second.get());
|
| -}
|
| -
|
| -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.failed_data_types.size(),
|
| - expected_result.failed_data_types.size());
|
| -
|
| - if (arg0.failed_data_types.size() ==
|
| - expected_result.failed_data_types.size()) {
|
| - std::map<syncer::ModelType, syncer::SyncError>::const_iterator it1, it2;
|
| - 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).first, (*it2).first);
|
| - }
|
| - }
|
| -
|
| - EXPECT_TRUE(arg0.unfinished_data_types.Equals(
|
| - expected_result.unfinished_data_types));
|
| -}
|
| -
|
| -class SyncModelAssociationManagerTest : public testing::Test {
|
| - public:
|
| - SyncModelAssociationManagerTest() :
|
| - ui_thread_(content::BrowserThread::UI, &ui_loop_) {
|
| - }
|
| -
|
| - protected:
|
| - base::MessageLoopForUI ui_loop_;
|
| - content::TestBrowserThread ui_thread_;
|
| - MockModelAssociationResultProcessor result_processor_;
|
| - 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_,
|
| - &result_processor_);
|
| - syncer::ModelTypeSet types(syncer::BOOKMARKS, syncer::APPS);
|
| - DataTypeManager::ConfigureResult expected_result(
|
| - DataTypeManager::OK,
|
| - types,
|
| - std::map<syncer::ModelType, syncer::SyncError>(),
|
| - syncer::ModelTypeSet(),
|
| - syncer::ModelTypeSet());
|
| - EXPECT_CALL(result_processor_, 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_,
|
| - &result_processor_);
|
| -
|
| - syncer::ModelTypeSet types;
|
| - types.Put(syncer::BOOKMARKS);
|
| -
|
| - std::map<syncer::ModelType, syncer::SyncError> errors;
|
| - syncer::SyncError error(FROM_HERE,
|
| - syncer::SyncError::DATATYPE_ERROR,
|
| - "Failed",
|
| - syncer::BOOKMARKS);
|
| - errors[syncer::BOOKMARKS] = error;
|
| -
|
| - DataTypeManager::ConfigureResult expected_result(
|
| - DataTypeManager::ABORTED,
|
| - types,
|
| - errors,
|
| - syncer::ModelTypeSet(syncer::BOOKMARKS),
|
| - syncer::ModelTypeSet());
|
| -
|
| - EXPECT_CALL(result_processor_, OnModelAssociationDone(_)).
|
| - WillOnce(VerifyResult(expected_result));
|
| -
|
| - 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_,
|
| - &result_processor_);
|
| - syncer::ModelTypeSet types;
|
| - types.Put(syncer::BOOKMARKS);
|
| - DataTypeManager::ConfigureResult expected_result(
|
| - DataTypeManager::OK,
|
| - types,
|
| - std::map<syncer::ModelType, syncer::SyncError>(),
|
| - syncer::ModelTypeSet(),
|
| - syncer::ModelTypeSet());
|
| - EXPECT_CALL(result_processor_, 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);
|
| -
|
| - 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_,
|
| - &result_processor_);
|
| - syncer::ModelTypeSet types;
|
| - types.Put(syncer::BOOKMARKS);
|
| - std::map<syncer::ModelType, syncer::SyncError> errors;
|
| - syncer::SyncError error(FROM_HERE,
|
| - syncer::SyncError::DATATYPE_ERROR,
|
| - "Failed",
|
| - syncer::BOOKMARKS);
|
| - errors[syncer::BOOKMARKS] = error;
|
| - DataTypeManager::ConfigureResult expected_result(
|
| - DataTypeManager::PARTIAL_SUCCESS,
|
| - types,
|
| - errors,
|
| - syncer::ModelTypeSet(),
|
| - syncer::ModelTypeSet());
|
| - EXPECT_CALL(result_processor_, 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_,
|
| - &result_processor_);
|
| - syncer::ModelTypeSet types;
|
| - types.Put(syncer::BOOKMARKS);
|
| - std::map<syncer::ModelType, syncer::SyncError> errors;
|
| - syncer::SyncError error(FROM_HERE,
|
| - syncer::SyncError::DATATYPE_ERROR,
|
| - "Failed",
|
| - syncer::BOOKMARKS);
|
| - errors[syncer::BOOKMARKS] = error;
|
| - DataTypeManager::ConfigureResult expected_result(
|
| - DataTypeManager::UNRECOVERABLE_ERROR,
|
| - types,
|
| - errors,
|
| - syncer::ModelTypeSet(),
|
| - syncer::ModelTypeSet());
|
| - EXPECT_CALL(result_processor_, 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_,
|
| - &result_processor_);
|
| - syncer::ModelTypeSet types;
|
| - types.Put(syncer::BOOKMARKS);
|
| - types.Put(syncer::APPS);
|
| -
|
| - std::map<syncer::ModelType, syncer::SyncError> errors;
|
| - syncer::SyncError error(FROM_HERE,
|
| - syncer::SyncError::DATATYPE_ERROR,
|
| - "Association timed out.",
|
| - syncer::BOOKMARKS);
|
| - errors[syncer::BOOKMARKS] = error;
|
| -
|
| - syncer::ModelTypeSet expected_types_unfinished;
|
| - expected_types_unfinished.Put(syncer::BOOKMARKS);
|
| - DataTypeManager::ConfigureResult expected_result_partially_done(
|
| - DataTypeManager::PARTIAL_SUCCESS,
|
| - types,
|
| - errors,
|
| - expected_types_unfinished,
|
| - syncer::ModelTypeSet());
|
| -
|
| - EXPECT_CALL(result_processor_, OnModelAssociationDone(_)).
|
| - WillOnce(VerifyResult(expected_result_partially_done));
|
| -
|
| - model_association_manager.Initialize(types);
|
| - model_association_manager.StartAssociationAsync(types);
|
| - GetController(controllers_, syncer::APPS)->FinishStart(
|
| - DataTypeController::OK);
|
| -
|
| - 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_,
|
| - &result_processor_);
|
| - syncer::ModelTypeSet types;
|
| - types.Put(syncer::BOOKMARKS);
|
| - types.Put(syncer::APPS);
|
| -
|
| - DataTypeManager::ConfigureResult result_1st(
|
| - DataTypeManager::OK,
|
| - syncer::ModelTypeSet(syncer::BOOKMARKS),
|
| - std::map<syncer::ModelType, syncer::SyncError>(),
|
| - syncer::ModelTypeSet(),
|
| - syncer::ModelTypeSet());
|
| - DataTypeManager::ConfigureResult result_2nd(
|
| - DataTypeManager::OK,
|
| - syncer::ModelTypeSet(syncer::APPS),
|
| - std::map<syncer::ModelType, syncer::SyncError>(),
|
| - syncer::ModelTypeSet(),
|
| - syncer::ModelTypeSet());
|
| - EXPECT_CALL(result_processor_, 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_,
|
| - &result_processor_);
|
| - syncer::ModelTypeSet types;
|
| - types.Put(syncer::BOOKMARKS);
|
| - std::map<syncer::ModelType, syncer::SyncError> errors;
|
| - syncer::SyncError error(FROM_HERE,
|
| - syncer::SyncError::DATATYPE_ERROR,
|
| - "Failed",
|
| - syncer::BOOKMARKS);
|
| - errors[syncer::BOOKMARKS] = error;
|
| - DataTypeManager::ConfigureResult expected_result(
|
| - DataTypeManager::PARTIAL_SUCCESS,
|
| - types,
|
| - errors,
|
| - syncer::ModelTypeSet(),
|
| - syncer::ModelTypeSet());
|
| - EXPECT_CALL(result_processor_, OnModelAssociationDone(_)).
|
| - WillOnce(VerifyResult(expected_result));
|
| -
|
| - model_association_manager.Initialize(types);
|
| - EXPECT_EQ(DataTypeController::DISABLED,
|
| - GetController(controllers_, syncer::BOOKMARKS)->state());
|
| - model_association_manager.StartAssociationAsync(types);
|
| - EXPECT_EQ(DataTypeController::NOT_RUNNING,
|
| - GetController(controllers_, syncer::BOOKMARKS)->state());
|
| -}
|
| -
|
| -} // namespace browser_sync
|
|
|