15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// found in the LICENSE file. 45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/bind.h" 65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/callback.h" 75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/memory/weak_ptr.h" 85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/run_loop.h" 95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/sync/glue/local_device_info_provider_mock.h" 105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/sync/profile_sync_components_factory_mock.h" 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/sync_driver/device_info_data_type_controller.h" 125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "content/public/test/test_browser_thread_bundle.h" 135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)using sync_driver::DataTypeController; 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciusing sync_driver::DeviceInfoDataTypeController; 175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace browser_sync { 195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace { 215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class DeviceInfoDataTypeControllerTest : public testing::Test { 235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) public: 245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DeviceInfoDataTypeControllerTest() 255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) : load_finished_(false), 265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) thread_bundle_(content::TestBrowserThreadBundle::DEFAULT), 275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) weak_ptr_factory_(this), 285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) last_type_(syncer::UNSPECIFIED) {} 295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual ~DeviceInfoDataTypeControllerTest() {} 305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual void SetUp() OVERRIDE { 325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) local_device_.reset(new LocalDeviceInfoProviderMock( 335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "cache_guid", 345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "Wayne Gretzky's Hacking Box", 355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "Chromium 10k", 365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "Chrome 10k", 375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) sync_pb::SyncEnums_DeviceType_TYPE_LINUX, 385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "device_id")); 395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) controller_ = new DeviceInfoDataTypeController( 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::MessageLoopProxy::current(), 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Closure(), 435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) &profile_sync_factory_, 446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) local_device_.get()); 455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) load_finished_ = false; 475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) last_type_ = syncer::UNSPECIFIED; 485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) last_error_ = syncer::SyncError(); 495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual void TearDown() OVERRIDE { 525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) controller_ = NULL; 535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) local_device_.reset(); 545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void Start() { 575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) controller_->LoadModels( 585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::Bind(&DeviceInfoDataTypeControllerTest::OnLoadFinished, 595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) weak_ptr_factory_.GetWeakPtr())); 605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void OnLoadFinished(syncer::ModelType type, syncer::SyncError error) { 635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) load_finished_ = true; 645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) last_type_ = type; 655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) last_error_ = error; 665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) testing::AssertionResult LoadResult() { 695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (!load_finished_) { 705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return testing::AssertionFailure() << "OnLoadFinished wasn't called"; 715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (last_error_.IsSet()) { 745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return testing::AssertionFailure() 755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) << "OnLoadFinished was called with a SyncError: " 765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) << last_error_.ToString(); 775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (last_type_ != syncer::DEVICE_INFO) { 805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return testing::AssertionFailure() 815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) << "OnLoadFinished was called with a wrong sync type: " 825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) << last_type_; 835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return testing::AssertionSuccess(); 865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) protected: 895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_refptr<DeviceInfoDataTypeController> controller_; 905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_ptr<LocalDeviceInfoProviderMock> local_device_; 915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) bool load_finished_; 925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) private: 945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) content::TestBrowserThreadBundle thread_bundle_; 955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ProfileSyncComponentsFactoryMock profile_sync_factory_; 965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::WeakPtrFactory<DeviceInfoDataTypeControllerTest> weak_ptr_factory_; 975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) syncer::ModelType last_type_; 985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) syncer::SyncError last_error_; 995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}; 1005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(DeviceInfoDataTypeControllerTest, StartModels) { 1025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Start(); 1035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ(DataTypeController::MODEL_LOADED, controller_->state()); 1045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(LoadResult()); 1055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 1065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(DeviceInfoDataTypeControllerTest, StartModelsDelayedByLocalDevice) { 1085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) local_device_->SetInitialized(false); 1095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Start(); 1105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_FALSE(load_finished_); 1115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ(DataTypeController::MODEL_STARTING, controller_->state()); 1125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) local_device_->SetInitialized(true); 1145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ(DataTypeController::MODEL_LOADED, controller_->state()); 1155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(LoadResult()); 1165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 1175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} // namespace 1195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} // namespace browser_sync 121