diff options
Diffstat (limited to 'chrome/browser/sync/test_profile_sync_service.h')
-rw-r--r-- | chrome/browser/sync/test_profile_sync_service.h | 145 |
1 files changed, 19 insertions, 126 deletions
diff --git a/chrome/browser/sync/test_profile_sync_service.h b/chrome/browser/sync/test_profile_sync_service.h index 3cad8dc..b4115ad 100644 --- a/chrome/browser/sync/test_profile_sync_service.h +++ b/chrome/browser/sync/test_profile_sync_service.h @@ -22,6 +22,7 @@ #include "chrome/common/notification_service.h" #include "chrome/test/profile_mock.h" #include "chrome/test/sync/test_http_bridge_factory.h" +#include "chrome/test/sync/engine/test_id_factory.h" #include "testing/gmock/include/gmock/gmock.h" using browser_sync::ModelSafeRoutingInfo; @@ -33,6 +34,8 @@ using syncable::DirectoryManager; using syncable::ModelType; using syncable::ScopedDirLookup; +class TestProfileSyncService; + ACTION_P(CallOnPaused, core) { core->OnPaused(); }; @@ -60,7 +63,7 @@ class SyncBackendHostForProfileSyncTest : public SyncBackendHost { // this is false, configuring data types will require a syncer nudge. // |synchronous_init| causes initialization to block until the syncapi has // completed setting itself up and called us back. - SyncBackendHostForProfileSyncTest(SyncFrontend* frontend, + SyncBackendHostForProfileSyncTest(TestProfileSyncService* service, Profile* profile, const FilePath& profile_path, const DataTypeController::TypeMap& data_type_controllers, @@ -68,114 +71,33 @@ class SyncBackendHostForProfileSyncTest : public SyncBackendHost { int num_expected_resumes, int num_expected_pauses, bool set_initial_sync_ended_on_init, - bool synchronous_init) - : browser_sync::SyncBackendHost(frontend, profile, profile_path, - data_type_controllers), - initial_condition_setup_task_(initial_condition_setup_task), - set_initial_sync_ended_on_init_(set_initial_sync_ended_on_init), - synchronous_init_(synchronous_init) { - // By default, the RequestPause and RequestResume methods will - // send the confirmation notification and return true. - ON_CALL(*this, RequestPause()). - WillByDefault(testing::DoAll(CallOnPaused(core_), - testing::Return(true))); - ON_CALL(*this, RequestResume()). - WillByDefault(testing::DoAll(CallOnResumed(core_), - testing::Return(true))); - ON_CALL(*this, RequestNudge()).WillByDefault(testing::Invoke(this, - &SyncBackendHostForProfileSyncTest:: - SimulateSyncCycleCompletedInitialSyncEnded)); - - EXPECT_CALL(*this, RequestPause()).Times(num_expected_pauses); - EXPECT_CALL(*this, RequestResume()).Times(num_expected_resumes); - EXPECT_CALL(*this, RequestNudge()). - Times(set_initial_sync_ended_on_init ? 0 : 1); - } + bool synchronous_init); MOCK_METHOD0(RequestPause, bool()); MOCK_METHOD0(RequestResume, bool()); MOCK_METHOD0(RequestNudge, void()); - void SetInitialSyncEndedForEnabledTypes() { - UserShare* user_share = core_->syncapi()->GetUserShare(); - DirectoryManager* dir_manager = user_share->dir_manager.get(); - - ScopedDirLookup dir(dir_manager, user_share->name); - if (!dir.good()) - FAIL(); - - ModelSafeRoutingInfo enabled_types; - GetModelSafeRoutingInfo(&enabled_types); - for (ModelSafeRoutingInfo::const_iterator i = enabled_types.begin(); - i != enabled_types.end(); ++i) { - dir->set_initial_sync_ended_for_type(i->first, true); - } - } + void SetInitialSyncEndedForEnabledTypes(); - virtual void HandleInitializationCompletedOnFrontendLoop() { - set_syncapi_initialized(); // Need to do this asap so task below works. - - // Set up any nodes the test wants around before model association. - if (initial_condition_setup_task_) { - initial_condition_setup_task_->Run(); - } - - // Pretend we downloaded initial updates and set initial sync ended bits - // if we were asked to. - if (set_initial_sync_ended_on_init_) - SetInitialSyncEndedForEnabledTypes(); - - SyncBackendHost::HandleInitializationCompletedOnFrontendLoop(); - } + virtual void HandleInitializationCompletedOnFrontendLoop(); // Called when a nudge comes in. - void SimulateSyncCycleCompletedInitialSyncEnded() { - syncable::ModelTypeBitSet sync_ended; - ModelSafeRoutingInfo enabled_types; - GetModelSafeRoutingInfo(&enabled_types); - for (ModelSafeRoutingInfo::const_iterator i = enabled_types.begin(); - i != enabled_types.end(); ++i) { - sync_ended.set(i->first); - } - core_->HandleSyncCycleCompletedOnFrontendLoop(new SyncSessionSnapshot( - SyncerStatus(), ErrorCounters(), 0, 0, false, - sync_ended, false, false, 0, 0, false)); - } + void SimulateSyncCycleCompletedInitialSyncEnded(); virtual sync_api::HttpPostProviderFactory* MakeHttpBridgeFactory( URLRequestContextGetter* getter) { return new browser_sync::TestHttpBridgeFactory; } - virtual void InitCore(const Core::DoInitializeOptions& options) { - std::wstring user = L"testuser"; - core_loop()->PostTask(FROM_HERE, - NewRunnableMethod(core_.get(), - &SyncBackendHost::Core::DoInitializeForTest, - user, - options.http_bridge_factory, - options.delete_sync_data_folder)); + virtual void InitCore(const Core::DoInitializeOptions& options); - // TODO(akalin): Figure out a better way to do this. - if (synchronous_init_) { - // The SyncBackend posts a task to the current loop when - // initialization completes. - MessageLoop::current()->Run(); - } - } - - static void SetDefaultExpectationsForWorkerCreation(ProfileMock* profile) { - EXPECT_CALL(*profile, GetPasswordStore(testing::_)). - WillOnce(testing::Return((PasswordStore*)NULL)); - EXPECT_CALL(*profile, GetHistoryService(testing::_)). - WillOnce(testing::Return((HistoryService*)NULL)); - } + static void SetDefaultExpectationsForWorkerCreation(ProfileMock* profile); private: Task* initial_condition_setup_task_; bool set_initial_sync_ended_on_init_; bool synchronous_init_; - + TestProfileSyncService* test_service_; }; } // namespace browser_sync @@ -186,49 +108,16 @@ class TestProfileSyncService : public ProfileSyncService { Profile* profile, const std::string& test_user, bool synchronous_backend_initialization, - Task* initial_condition_setup_task) - : ProfileSyncService(factory, profile, - !test_user.empty() ? - test_user : ""), - synchronous_backend_initialization_( - synchronous_backend_initialization), - synchronous_sync_configuration_(false), - num_expected_resumes_(1), - num_expected_pauses_(1), - initial_condition_setup_task_(initial_condition_setup_task), - set_initial_sync_ended_on_init_(true) { - RegisterPreferences(); - SetSyncSetupCompleted(); - } + Task* initial_condition_setup_task); virtual ~TestProfileSyncService() { } - virtual void CreateBackend() { - backend_.reset(new browser_sync::SyncBackendHostForProfileSyncTest( - this, profile(), - profile()->GetPath(), data_type_controllers(), - initial_condition_setup_task_.release(), - num_expected_resumes_, num_expected_pauses_, - set_initial_sync_ended_on_init_, - synchronous_backend_initialization_)); - } + virtual void CreateBackend(); - virtual void OnBackendInitialized() { - ProfileSyncService::OnBackendInitialized(); - // TODO(akalin): Figure out a better way to do this. - if (synchronous_backend_initialization_) { - MessageLoop::current()->Quit(); - } - } + virtual void OnBackendInitialized(); virtual void Observe(NotificationType type, const NotificationSource& source, - const NotificationDetails& details) { - ProfileSyncService::Observe(type, source, details); - if (type == NotificationType::SYNC_CONFIGURE_DONE && - !synchronous_sync_configuration_) { - MessageLoop::current()->Quit(); - } - } + const NotificationDetails& details); void set_num_expected_resumes(int times) { num_expected_resumes_ = times; @@ -243,6 +132,8 @@ class TestProfileSyncService : public ProfileSyncService { synchronous_sync_configuration_ = true; } + browser_sync::TestIdFactory* id_factory() { return &id_factory_; } + private: // When testing under ChromiumOS, this method must not return an empty // value value in order for the profile sync service to start. @@ -261,6 +152,8 @@ class TestProfileSyncService : public ProfileSyncService { scoped_ptr<Task> initial_condition_setup_task_; bool set_initial_sync_ended_on_init_; + browser_sync::TestIdFactory id_factory_; + }; #endif // CHROME_BROWSER_SYNC_TEST_PROFILE_SYNC_SERVICE_H_ |