| Index: components/sync_driver/frontend_data_type_controller_unittest.cc
|
| diff --git a/components/sync_driver/frontend_data_type_controller_unittest.cc b/components/sync_driver/frontend_data_type_controller_unittest.cc
|
| deleted file mode 100644
|
| index a64ccc86319016d686cbe0ed210bcae763e11005..0000000000000000000000000000000000000000
|
| --- a/components/sync_driver/frontend_data_type_controller_unittest.cc
|
| +++ /dev/null
|
| @@ -1,270 +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 "components/sync_driver/frontend_data_type_controller.h"
|
| -
|
| -#include <memory>
|
| -
|
| -#include "base/bind.h"
|
| -#include "base/bind_helpers.h"
|
| -#include "base/callback.h"
|
| -#include "base/location.h"
|
| -#include "base/message_loop/message_loop.h"
|
| -#include "base/run_loop.h"
|
| -#include "base/single_thread_task_runner.h"
|
| -#include "base/threading/thread_task_runner_handle.h"
|
| -#include "base/tracked_objects.h"
|
| -#include "components/sync_driver/change_processor_mock.h"
|
| -#include "components/sync_driver/data_type_controller_mock.h"
|
| -#include "components/sync_driver/fake_sync_client.h"
|
| -#include "components/sync_driver/fake_sync_service.h"
|
| -#include "components/sync_driver/frontend_data_type_controller_mock.h"
|
| -#include "components/sync_driver/model_associator_mock.h"
|
| -#include "components/sync_driver/sync_api_component_factory_mock.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -using browser_sync::FrontendDataTypeController;
|
| -using browser_sync::FrontendDataTypeControllerMock;
|
| -using sync_driver::ChangeProcessorMock;
|
| -using sync_driver::DataTypeController;
|
| -using sync_driver::ModelAssociatorMock;
|
| -using sync_driver::ModelLoadCallbackMock;
|
| -using sync_driver::StartCallbackMock;
|
| -using testing::_;
|
| -using testing::DoAll;
|
| -using testing::InvokeWithoutArgs;
|
| -using testing::Return;
|
| -using testing::SetArgumentPointee;
|
| -using testing::StrictMock;
|
| -
|
| -namespace {
|
| -
|
| -class FrontendDataTypeControllerFake : public FrontendDataTypeController {
|
| - public:
|
| - FrontendDataTypeControllerFake(
|
| - sync_driver::SyncClient* sync_client,
|
| - FrontendDataTypeControllerMock* mock)
|
| - : FrontendDataTypeController(base::ThreadTaskRunnerHandle::Get(),
|
| - base::Closure(),
|
| - sync_client),
|
| - mock_(mock),
|
| - sync_client_(sync_client) {}
|
| - syncer::ModelType type() const override { return syncer::BOOKMARKS; }
|
| -
|
| - private:
|
| - ~FrontendDataTypeControllerFake() override {}
|
| -
|
| - void CreateSyncComponents() override {
|
| - sync_driver::SyncApiComponentFactory::SyncComponents sync_components =
|
| - sync_client_->GetSyncApiComponentFactory()->
|
| - CreateBookmarkSyncComponents(nullptr, this);
|
| - model_associator_.reset(sync_components.model_associator);
|
| - change_processor_.reset(sync_components.change_processor);
|
| - }
|
| -
|
| - // We mock the following methods because their default implementations do
|
| - // nothing, but we still want to make sure they're called appropriately.
|
| - bool StartModels() override { return mock_->StartModels(); }
|
| - void CleanUpState() override { mock_->CleanUpState(); }
|
| - void RecordUnrecoverableError(const tracked_objects::Location& from_here,
|
| - const std::string& message) override {
|
| - mock_->RecordUnrecoverableError(from_here, message);
|
| - }
|
| - void RecordAssociationTime(base::TimeDelta time) override {
|
| - mock_->RecordAssociationTime(time);
|
| - }
|
| - void RecordStartFailure(DataTypeController::ConfigureResult result) override {
|
| - mock_->RecordStartFailure(result);
|
| - }
|
| -
|
| - FrontendDataTypeControllerMock* mock_;
|
| - sync_driver::SyncClient* sync_client_;
|
| -};
|
| -
|
| -class SyncFrontendDataTypeControllerTest : public testing::Test,
|
| - public sync_driver::FakeSyncClient {
|
| - public:
|
| - SyncFrontendDataTypeControllerTest()
|
| - : sync_driver::FakeSyncClient(&profile_sync_factory_),
|
| - service_() {}
|
| -
|
| - // FakeSyncClient overrides.
|
| - sync_driver::SyncService* GetSyncService() override {
|
| - return &service_;
|
| - }
|
| -
|
| - void SetUp() override {
|
| - dtc_mock_ = new StrictMock<FrontendDataTypeControllerMock>();
|
| - frontend_dtc_ =
|
| - new FrontendDataTypeControllerFake(this,
|
| - dtc_mock_.get());
|
| - }
|
| -
|
| - protected:
|
| - void SetStartExpectations() {
|
| - EXPECT_CALL(*dtc_mock_.get(), StartModels()).WillOnce(Return(true));
|
| - EXPECT_CALL(model_load_callback_, Run(_, _));
|
| - model_associator_ = new ModelAssociatorMock();
|
| - change_processor_ = new ChangeProcessorMock();
|
| - EXPECT_CALL(profile_sync_factory_, CreateBookmarkSyncComponents(_, _)).
|
| - WillOnce(Return(sync_driver::SyncApiComponentFactory::SyncComponents(
|
| - model_associator_, change_processor_)));
|
| - }
|
| -
|
| - void SetAssociateExpectations() {
|
| - EXPECT_CALL(*model_associator_, CryptoReadyIfNecessary()).
|
| - WillOnce(Return(true));
|
| - EXPECT_CALL(*model_associator_, SyncModelHasUserCreatedNodes(_)).
|
| - WillOnce(DoAll(SetArgumentPointee<0>(true), Return(true)));
|
| - EXPECT_CALL(*model_associator_, AssociateModels(_, _)).
|
| - WillOnce(Return(syncer::SyncError()));
|
| - EXPECT_CALL(*dtc_mock_.get(), RecordAssociationTime(_));
|
| - }
|
| -
|
| - void SetActivateExpectations(DataTypeController::ConfigureResult result) {
|
| - EXPECT_CALL(start_callback_, Run(result, _, _));
|
| - }
|
| -
|
| - void SetStopExpectations() {
|
| - EXPECT_CALL(*dtc_mock_.get(), CleanUpState());
|
| - EXPECT_CALL(*model_associator_, DisassociateModels()).
|
| - WillOnce(Return(syncer::SyncError()));
|
| - }
|
| -
|
| - void SetStartFailExpectations(DataTypeController::ConfigureResult result) {
|
| - if (DataTypeController::IsUnrecoverableResult(result))
|
| - EXPECT_CALL(*dtc_mock_.get(), RecordUnrecoverableError(_, _));
|
| - EXPECT_CALL(*dtc_mock_.get(), CleanUpState());
|
| - EXPECT_CALL(*dtc_mock_.get(), RecordStartFailure(result));
|
| - EXPECT_CALL(start_callback_, Run(result, _, _));
|
| - }
|
| -
|
| - void Start() {
|
| - frontend_dtc_->LoadModels(
|
| - base::Bind(&ModelLoadCallbackMock::Run,
|
| - base::Unretained(&model_load_callback_)));
|
| - frontend_dtc_->StartAssociating(
|
| - base::Bind(&StartCallbackMock::Run,
|
| - base::Unretained(&start_callback_)));
|
| - PumpLoop();
|
| - }
|
| -
|
| - void PumpLoop() { base::RunLoop().RunUntilIdle(); }
|
| -
|
| - base::MessageLoop message_loop_;
|
| - scoped_refptr<FrontendDataTypeControllerFake> frontend_dtc_;
|
| - SyncApiComponentFactoryMock profile_sync_factory_;
|
| - scoped_refptr<FrontendDataTypeControllerMock> dtc_mock_;
|
| - sync_driver::FakeSyncService service_;
|
| - ModelAssociatorMock* model_associator_;
|
| - ChangeProcessorMock* change_processor_;
|
| - StartCallbackMock start_callback_;
|
| - ModelLoadCallbackMock model_load_callback_;
|
| -};
|
| -
|
| -TEST_F(SyncFrontendDataTypeControllerTest, StartOk) {
|
| - SetStartExpectations();
|
| - SetAssociateExpectations();
|
| - SetActivateExpectations(DataTypeController::OK);
|
| - EXPECT_EQ(DataTypeController::NOT_RUNNING, frontend_dtc_->state());
|
| - Start();
|
| - EXPECT_EQ(DataTypeController::RUNNING, frontend_dtc_->state());
|
| -}
|
| -
|
| -TEST_F(SyncFrontendDataTypeControllerTest, StartFirstRun) {
|
| - SetStartExpectations();
|
| - EXPECT_CALL(*model_associator_, CryptoReadyIfNecessary()).
|
| - WillOnce(Return(true));
|
| - EXPECT_CALL(*model_associator_, SyncModelHasUserCreatedNodes(_)).
|
| - WillOnce(DoAll(SetArgumentPointee<0>(false), Return(true)));
|
| - EXPECT_CALL(*model_associator_, AssociateModels(_, _)).
|
| - WillOnce(Return(syncer::SyncError()));
|
| - EXPECT_CALL(*dtc_mock_.get(), RecordAssociationTime(_));
|
| - SetActivateExpectations(DataTypeController::OK_FIRST_RUN);
|
| - EXPECT_EQ(DataTypeController::NOT_RUNNING, frontend_dtc_->state());
|
| - Start();
|
| - EXPECT_EQ(DataTypeController::RUNNING, frontend_dtc_->state());
|
| -}
|
| -
|
| -TEST_F(SyncFrontendDataTypeControllerTest, StartStopBeforeAssociation) {
|
| - EXPECT_CALL(*dtc_mock_.get(), StartModels()).WillOnce(Return(true));
|
| - EXPECT_CALL(*dtc_mock_.get(), CleanUpState());
|
| - EXPECT_CALL(model_load_callback_, Run(_, _));
|
| - EXPECT_EQ(DataTypeController::NOT_RUNNING, frontend_dtc_->state());
|
| - base::ThreadTaskRunnerHandle::Get()->PostTask(
|
| - FROM_HERE, base::Bind(&FrontendDataTypeController::Stop, frontend_dtc_));
|
| - Start();
|
| - EXPECT_EQ(DataTypeController::NOT_RUNNING, frontend_dtc_->state());
|
| -}
|
| -
|
| -TEST_F(SyncFrontendDataTypeControllerTest, AbortDuringStartModels) {
|
| - EXPECT_CALL(*dtc_mock_.get(), StartModels()).WillOnce(Return(false));
|
| - EXPECT_CALL(*dtc_mock_.get(), CleanUpState());
|
| - EXPECT_EQ(DataTypeController::NOT_RUNNING, frontend_dtc_->state());
|
| - frontend_dtc_->LoadModels(
|
| - base::Bind(&ModelLoadCallbackMock::Run,
|
| - base::Unretained(&model_load_callback_)));
|
| - EXPECT_EQ(DataTypeController::MODEL_STARTING, frontend_dtc_->state());
|
| - frontend_dtc_->Stop();
|
| - EXPECT_EQ(DataTypeController::NOT_RUNNING, frontend_dtc_->state());
|
| -}
|
| -
|
| -TEST_F(SyncFrontendDataTypeControllerTest, StartAssociationFailed) {
|
| - SetStartExpectations();
|
| - EXPECT_CALL(*model_associator_, CryptoReadyIfNecessary()).
|
| - WillOnce(Return(true));
|
| - EXPECT_CALL(*model_associator_, SyncModelHasUserCreatedNodes(_)).
|
| - WillOnce(DoAll(SetArgumentPointee<0>(true), Return(true)));
|
| - EXPECT_CALL(*model_associator_, AssociateModels(_, _)).
|
| - WillOnce(Return(syncer::SyncError(FROM_HERE,
|
| - syncer::SyncError::DATATYPE_ERROR,
|
| - "error",
|
| - syncer::BOOKMARKS)));
|
| -
|
| - EXPECT_CALL(*dtc_mock_.get(), RecordAssociationTime(_));
|
| - SetStartFailExpectations(DataTypeController::ASSOCIATION_FAILED);
|
| - // Set up association to fail with an association failed error.
|
| - EXPECT_EQ(DataTypeController::NOT_RUNNING, frontend_dtc_->state());
|
| - Start();
|
| - EXPECT_EQ(DataTypeController::DISABLED, frontend_dtc_->state());
|
| -}
|
| -
|
| -TEST_F(SyncFrontendDataTypeControllerTest,
|
| - StartAssociationTriggersUnrecoverableError) {
|
| - SetStartExpectations();
|
| - SetStartFailExpectations(DataTypeController::UNRECOVERABLE_ERROR);
|
| - // Set up association to fail with an unrecoverable error.
|
| - EXPECT_CALL(*model_associator_, CryptoReadyIfNecessary()).
|
| - WillRepeatedly(Return(true));
|
| - EXPECT_CALL(*model_associator_, SyncModelHasUserCreatedNodes(_)).
|
| - WillRepeatedly(DoAll(SetArgumentPointee<0>(false), Return(false)));
|
| - EXPECT_EQ(DataTypeController::NOT_RUNNING, frontend_dtc_->state());
|
| - Start();
|
| - EXPECT_EQ(DataTypeController::NOT_RUNNING, frontend_dtc_->state());
|
| -}
|
| -
|
| -TEST_F(SyncFrontendDataTypeControllerTest, StartAssociationCryptoNotReady) {
|
| - SetStartExpectations();
|
| - SetStartFailExpectations(DataTypeController::NEEDS_CRYPTO);
|
| - // Set up association to fail with a NEEDS_CRYPTO error.
|
| - EXPECT_CALL(*model_associator_, CryptoReadyIfNecessary()).
|
| - WillRepeatedly(Return(false));
|
| - EXPECT_EQ(DataTypeController::NOT_RUNNING, frontend_dtc_->state());
|
| - Start();
|
| - EXPECT_EQ(DataTypeController::NOT_RUNNING, frontend_dtc_->state());
|
| -}
|
| -
|
| -TEST_F(SyncFrontendDataTypeControllerTest, Stop) {
|
| - SetStartExpectations();
|
| - SetAssociateExpectations();
|
| - SetActivateExpectations(DataTypeController::OK);
|
| - SetStopExpectations();
|
| - EXPECT_EQ(DataTypeController::NOT_RUNNING, frontend_dtc_->state());
|
| - Start();
|
| - EXPECT_EQ(DataTypeController::RUNNING, frontend_dtc_->state());
|
| - frontend_dtc_->Stop();
|
| - EXPECT_EQ(DataTypeController::NOT_RUNNING, frontend_dtc_->state());
|
| -}
|
| -
|
| -} // namespace
|
|
|