Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(91)

Unified Diff: components/browser_sync/browser/profile_sync_service_startup_unittest.cc

Issue 2345843003: [Sync] Merge //components/browser_sync into one directory. (Closed)
Patch Set: Address comment + rebase. Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/browser_sync/browser/profile_sync_service_startup_unittest.cc
diff --git a/components/browser_sync/browser/profile_sync_service_startup_unittest.cc b/components/browser_sync/browser/profile_sync_service_startup_unittest.cc
deleted file mode 100644
index 51f605eb6081b2f2e03ba0aee979e078a36db873..0000000000000000000000000000000000000000
--- a/components/browser_sync/browser/profile_sync_service_startup_unittest.cc
+++ /dev/null
@@ -1,486 +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 <memory>
-#include <utility>
-
-#include "base/files/file_util.h"
-#include "base/strings/utf_string_conversions.h"
-#include "base/threading/thread_task_runner_handle.h"
-#include "build/build_config.h"
-#include "components/browser_sync/browser/profile_sync_service.h"
-#include "components/browser_sync/browser/profile_sync_test_util.h"
-#include "components/prefs/pref_service.h"
-#include "components/signin/core/browser/account_tracker_service.h"
-#include "components/signin/core/browser/fake_profile_oauth2_token_service.h"
-#include "components/signin/core/browser/profile_oauth2_token_service.h"
-#include "components/signin/core/browser/signin_manager.h"
-#include "components/signin/core/common/signin_pref_names.h"
-#include "components/sync/driver/data_type_manager.h"
-#include "components/sync/driver/data_type_manager_mock.h"
-#include "components/sync/driver/fake_data_type_controller.h"
-#include "components/sync/driver/glue/sync_backend_host_mock.h"
-#include "components/sync/driver/pref_names.h"
-#include "components/sync/driver/sync_api_component_factory_mock.h"
-#include "components/sync/driver/sync_prefs.h"
-#include "components/sync/driver/sync_service_observer.h"
-#include "components/syncable_prefs/pref_service_syncable.h"
-#include "google_apis/gaia/gaia_auth_consumer.h"
-#include "google_apis/gaia/gaia_constants.h"
-#include "google_apis/gaia/oauth2_token_service.h"
-#include "net/url_request/url_request_test_util.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-using browser_sync::SyncBackendHostMock;
-using sync_driver::DataTypeManager;
-using sync_driver::DataTypeManagerMock;
-using testing::_;
-using testing::AnyNumber;
-using testing::DoAll;
-using testing::Mock;
-using testing::Return;
-
-namespace {
-
-const char kGaiaId[] = "12345";
-const char kEmail[] = "test_user@gmail.com";
-const char kDummyPassword[] = "";
-
-class SyncServiceObserverMock : public sync_driver::SyncServiceObserver {
- public:
- SyncServiceObserverMock();
- virtual ~SyncServiceObserverMock();
-
- MOCK_METHOD0(OnStateChanged, void());
-};
-
-SyncServiceObserverMock::SyncServiceObserverMock() {}
-
-SyncServiceObserverMock::~SyncServiceObserverMock() {}
-
-} // namespace
-
-ACTION_P(InvokeOnConfigureStart, sync_service) {
- sync_service->OnConfigureStart();
-}
-
-ACTION_P3(InvokeOnConfigureDone, sync_service, error_callback, result) {
- DataTypeManager::ConfigureResult configure_result =
- static_cast<DataTypeManager::ConfigureResult>(result);
- if (result.status == sync_driver::DataTypeManager::ABORTED)
- error_callback.Run(&configure_result);
- sync_service->OnConfigureDone(configure_result);
-}
-
-class ProfileSyncServiceStartupTest : public testing::Test {
- public:
- ProfileSyncServiceStartupTest() {
- profile_sync_service_bundle_.auth_service()
- ->set_auto_post_fetch_response_on_message_loop(true);
- }
-
- ~ProfileSyncServiceStartupTest() override {
- sync_service_->RemoveObserver(&observer_);
- sync_service_->Shutdown();
- }
-
- void CreateSyncService(
- ProfileSyncService::StartBehavior start_behavior) {
- component_factory_ = profile_sync_service_bundle_.component_factory();
- browser_sync::ProfileSyncServiceBundle::SyncClientBuilder builder(
- &profile_sync_service_bundle_);
- ProfileSyncService::InitParams init_params =
- profile_sync_service_bundle_.CreateBasicInitParams(start_behavior,
- builder.Build());
-
- sync_service_.reset(new ProfileSyncService(std::move(init_params)));
- sync_service_->RegisterDataTypeController(
- base::MakeUnique<sync_driver::FakeDataTypeController>(
- syncer::BOOKMARKS));
- sync_service_->AddObserver(&observer_);
- }
-
- void IssueTestTokens(const std::string& account_id) {
- profile_sync_service_bundle_.auth_service()->UpdateCredentials(
- account_id, "oauth2_login_token");
- }
-
- void SetError(DataTypeManager::ConfigureResult* result) {
- sync_driver::DataTypeStatusTable::TypeErrorMap errors;
- errors[syncer::BOOKMARKS] =
- syncer::SyncError(FROM_HERE,
- syncer::SyncError::UNRECOVERABLE_ERROR,
- "Error",
- syncer::BOOKMARKS);
- result->data_type_status_table.UpdateFailedDataTypes(errors);
- }
-
- protected:
- std::string SimulateTestUserSignin(ProfileSyncService* sync_service) {
- std::string account_id =
- profile_sync_service_bundle_.account_tracker()->SeedAccountInfo(kGaiaId,
- kEmail);
- pref_service()->SetString(prefs::kGoogleServicesAccountId, account_id);
-#if !defined(OS_CHROMEOS)
- profile_sync_service_bundle_.signin_manager()->SignIn(kGaiaId, kEmail,
- kDummyPassword);
-#else
- profile_sync_service_bundle_.signin_manager()->SetAuthenticatedAccountInfo(
- kGaiaId, kEmail);
- if (sync_service)
- sync_service->GoogleSigninSucceeded(account_id, kEmail, kDummyPassword);
-#endif
- return account_id;
- }
-
- DataTypeManagerMock* SetUpDataTypeManager() {
- DataTypeManagerMock* data_type_manager = new DataTypeManagerMock();
- EXPECT_CALL(*component_factory_, CreateDataTypeManager(_, _, _, _, _))
- .WillOnce(Return(data_type_manager));
- return data_type_manager;
- }
-
- browser_sync::SyncBackendHostMock* SetUpSyncBackendHost() {
- browser_sync::SyncBackendHostMock* sync_backend_host =
- new browser_sync::SyncBackendHostMock();
- EXPECT_CALL(*component_factory_, CreateSyncBackendHost(_, _, _, _))
- .WillOnce(Return(sync_backend_host));
- return sync_backend_host;
- }
-
- PrefService* pref_service() {
- return profile_sync_service_bundle_.pref_service();
- }
-
- base::MessageLoop message_loop_;
- browser_sync::ProfileSyncServiceBundle profile_sync_service_bundle_;
- std::unique_ptr<ProfileSyncService> sync_service_;
- SyncServiceObserverMock observer_;
- sync_driver::DataTypeStatusTable data_type_status_table_;
- SyncApiComponentFactoryMock* component_factory_ = nullptr;
-};
-
-class ProfileSyncServiceStartupCrosTest : public ProfileSyncServiceStartupTest {
- public:
- ProfileSyncServiceStartupCrosTest() {
- CreateSyncService(ProfileSyncService::AUTO_START);
- SimulateTestUserSignin(nullptr);
- EXPECT_TRUE(
- profile_sync_service_bundle_.signin_manager()->IsAuthenticated());
- }
-};
-
-TEST_F(ProfileSyncServiceStartupTest, StartFirstTime) {
- // We've never completed startup.
- pref_service()->ClearPref(sync_driver::prefs::kSyncFirstSetupComplete);
- CreateSyncService(ProfileSyncService::MANUAL_START);
- SetUpSyncBackendHost();
- DataTypeManagerMock* data_type_manager = SetUpDataTypeManager();
- EXPECT_CALL(*data_type_manager, Configure(_, _)).Times(0);
-
- // Should not actually start, rather just clean things up and wait
- // to be enabled.
- EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber());
- sync_service_->Initialize();
-
- // Preferences should be back to defaults.
- EXPECT_EQ(0,
- pref_service()->GetInt64(sync_driver::prefs::kSyncLastSyncedTime));
- EXPECT_FALSE(
- pref_service()->GetBoolean(sync_driver::prefs::kSyncFirstSetupComplete));
- Mock::VerifyAndClearExpectations(data_type_manager);
-
- // Then start things up.
- EXPECT_CALL(*data_type_manager, Configure(_, _)).Times(1);
- EXPECT_CALL(*data_type_manager, state()).
- WillOnce(Return(DataTypeManager::CONFIGURED)).
- WillOnce(Return(DataTypeManager::CONFIGURED));
- EXPECT_CALL(*data_type_manager, Stop()).Times(1);
- EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber());
-
- auto sync_blocker = sync_service_->GetSetupInProgressHandle();
-
- // Simulate successful signin as test_user.
- std::string account_id = SimulateTestUserSignin(sync_service_.get());
- // Create some tokens in the token service.
- IssueTestTokens(account_id);
-
- // Simulate the UI telling sync it has finished setting up.
- sync_blocker.reset();
- sync_service_->SetFirstSetupComplete();
- EXPECT_TRUE(sync_service_->IsSyncActive());
-}
-
-// TODO(pavely): Reenable test once android is switched to oauth2.
-TEST_F(ProfileSyncServiceStartupTest, DISABLED_StartNoCredentials) {
- // We've never completed startup.
- pref_service()->ClearPref(sync_driver::prefs::kSyncFirstSetupComplete);
- CreateSyncService(ProfileSyncService::MANUAL_START);
-
- // Should not actually start, rather just clean things up and wait
- // to be enabled.
- EXPECT_CALL(*component_factory_, CreateDataTypeManager(_, _, _, _, _))
- .Times(0);
- EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber());
- sync_service_->Initialize();
-
- // Preferences should be back to defaults.
- EXPECT_EQ(0,
- pref_service()->GetInt64(sync_driver::prefs::kSyncLastSyncedTime));
- EXPECT_FALSE(
- pref_service()->GetBoolean(sync_driver::prefs::kSyncFirstSetupComplete));
-
- // Then start things up.
- auto sync_blocker = sync_service_->GetSetupInProgressHandle();
-
- // Simulate successful signin as test_user.
- std::string account_id = SimulateTestUserSignin(sync_service_.get());
-
- profile_sync_service_bundle_.auth_service()->LoadCredentials(account_id);
-
- sync_blocker.reset();
- // ProfileSyncService should try to start by requesting access token.
- // This request should fail as login token was not issued.
- EXPECT_FALSE(sync_service_->IsSyncActive());
- EXPECT_EQ(GoogleServiceAuthError::USER_NOT_SIGNED_UP,
- sync_service_->GetAuthError().state());
-}
-
-// TODO(pavely): Reenable test once android is switched to oauth2.
-TEST_F(ProfileSyncServiceStartupTest, DISABLED_StartInvalidCredentials) {
- CreateSyncService(ProfileSyncService::MANUAL_START);
- std::string account_id = SimulateTestUserSignin(sync_service_.get());
- SyncBackendHostMock* mock_sbh = SetUpSyncBackendHost();
-
- // Tell the backend to stall while downloading control types (simulating an
- // auth error).
- mock_sbh->set_fail_initial_download(true);
-
- DataTypeManagerMock* data_type_manager = SetUpDataTypeManager();
- EXPECT_CALL(*data_type_manager, Configure(_, _)).Times(0);
-
- EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber());
- sync_service_->Initialize();
- EXPECT_FALSE(sync_service_->IsSyncActive());
- Mock::VerifyAndClearExpectations(data_type_manager);
-
- // Update the credentials, unstalling the backend.
- EXPECT_CALL(*data_type_manager, Configure(_, _));
- EXPECT_CALL(*data_type_manager, state()).
- WillRepeatedly(Return(DataTypeManager::CONFIGURED));
- EXPECT_CALL(*data_type_manager, Stop()).Times(1);
- EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber());
- auto sync_blocker = sync_service_->GetSetupInProgressHandle();
-
- // Simulate successful signin.
- SimulateTestUserSignin(sync_service_.get());
-
- sync_blocker.reset();
-
- // Verify we successfully finish startup and configuration.
- EXPECT_TRUE(sync_service_->IsSyncActive());
-}
-
-TEST_F(ProfileSyncServiceStartupCrosTest, StartCrosNoCredentials) {
- EXPECT_CALL(*component_factory_, CreateDataTypeManager(_, _, _, _, _))
- .Times(0);
- EXPECT_CALL(*component_factory_, CreateSyncBackendHost(_, _, _, _)).Times(0);
- pref_service()->ClearPref(sync_driver::prefs::kSyncFirstSetupComplete);
- EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber());
-
- sync_service_->Initialize();
- // Sync should not start because there are no tokens yet.
- EXPECT_FALSE(sync_service_->IsSyncActive());
- sync_service_->SetFirstSetupComplete();
-
- // Sync should not start because there are still no tokens.
- EXPECT_FALSE(sync_service_->IsSyncActive());
-}
-
-TEST_F(ProfileSyncServiceStartupCrosTest, StartFirstTime) {
- SetUpSyncBackendHost();
- DataTypeManagerMock* data_type_manager = SetUpDataTypeManager();
- pref_service()->ClearPref(sync_driver::prefs::kSyncFirstSetupComplete);
- EXPECT_CALL(*data_type_manager, Configure(_, _));
- EXPECT_CALL(*data_type_manager, state()).
- WillRepeatedly(Return(DataTypeManager::CONFIGURED));
- EXPECT_CALL(*data_type_manager, Stop());
- EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber());
-
- IssueTestTokens(
- profile_sync_service_bundle_.account_tracker()->PickAccountIdForAccount(
- "12345", kEmail));
- sync_service_->Initialize();
- EXPECT_TRUE(sync_service_->IsSyncActive());
-}
-
-TEST_F(ProfileSyncServiceStartupTest, StartNormal) {
- // Pre load the tokens
- CreateSyncService(ProfileSyncService::MANUAL_START);
- std::string account_id = SimulateTestUserSignin(sync_service_.get());
- sync_service_->SetFirstSetupComplete();
- SetUpSyncBackendHost();
- DataTypeManagerMock* data_type_manager = SetUpDataTypeManager();
- EXPECT_CALL(*data_type_manager, Configure(_, _));
- EXPECT_CALL(*data_type_manager, state()).
- WillRepeatedly(Return(DataTypeManager::CONFIGURED));
- EXPECT_CALL(*data_type_manager, Stop()).Times(1);
- EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber());
-
- IssueTestTokens(account_id);
-
- sync_service_->Initialize();
-}
-
-// Test that we can recover from a case where a bug in the code resulted in
-// OnUserChoseDatatypes not being properly called and datatype preferences
-// therefore being left unset.
-TEST_F(ProfileSyncServiceStartupTest, StartRecoverDatatypePrefs) {
- // Clear the datatype preference fields (simulating bug 154940).
- pref_service()->ClearPref(sync_driver::prefs::kSyncKeepEverythingSynced);
- syncer::ModelTypeSet user_types = syncer::UserTypes();
- for (syncer::ModelTypeSet::Iterator iter = user_types.First();
- iter.Good(); iter.Inc()) {
- pref_service()->ClearPref(
- sync_driver::SyncPrefs::GetPrefNameForDataType(iter.Get()));
- }
-
- // Pre load the tokens
- CreateSyncService(ProfileSyncService::MANUAL_START);
- std::string account_id = SimulateTestUserSignin(sync_service_.get());
- sync_service_->SetFirstSetupComplete();
- SetUpSyncBackendHost();
- DataTypeManagerMock* data_type_manager = SetUpDataTypeManager();
- EXPECT_CALL(*data_type_manager, Configure(_, _));
- EXPECT_CALL(*data_type_manager, state()).
- WillRepeatedly(Return(DataTypeManager::CONFIGURED));
- EXPECT_CALL(*data_type_manager, Stop()).Times(1);
- EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber());
-
- IssueTestTokens(account_id);
- sync_service_->Initialize();
-
- EXPECT_TRUE(pref_service()->GetBoolean(
- sync_driver::prefs::kSyncKeepEverythingSynced));
-}
-
-// Verify that the recovery of datatype preferences doesn't overwrite a valid
-// case where only bookmarks are enabled.
-TEST_F(ProfileSyncServiceStartupTest, StartDontRecoverDatatypePrefs) {
- // Explicitly set Keep Everything Synced to false and have only bookmarks
- // enabled.
- pref_service()->SetBoolean(sync_driver::prefs::kSyncKeepEverythingSynced,
- false);
-
- // Pre load the tokens
- CreateSyncService(ProfileSyncService::MANUAL_START);
- std::string account_id = SimulateTestUserSignin(sync_service_.get());
- sync_service_->SetFirstSetupComplete();
- SetUpSyncBackendHost();
- DataTypeManagerMock* data_type_manager = SetUpDataTypeManager();
- EXPECT_CALL(*data_type_manager, Configure(_, _));
- EXPECT_CALL(*data_type_manager, state()).
- WillRepeatedly(Return(DataTypeManager::CONFIGURED));
- EXPECT_CALL(*data_type_manager, Stop()).Times(1);
- EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber());
- IssueTestTokens(account_id);
- sync_service_->Initialize();
-
- EXPECT_FALSE(pref_service()->GetBoolean(
- sync_driver::prefs::kSyncKeepEverythingSynced));
-}
-
-TEST_F(ProfileSyncServiceStartupTest, ManagedStartup) {
- // Service should not be started by Initialize() since it's managed.
- pref_service()->SetString(prefs::kGoogleServicesAccountId, kEmail);
- CreateSyncService(ProfileSyncService::MANUAL_START);
-
- // Disable sync through policy.
- pref_service()->SetBoolean(sync_driver::prefs::kSyncManaged, true);
- EXPECT_CALL(*component_factory_, CreateDataTypeManager(_, _, _, _, _))
- .Times(0);
- EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber());
-
- sync_service_->Initialize();
-}
-
-TEST_F(ProfileSyncServiceStartupTest, SwitchManaged) {
- CreateSyncService(ProfileSyncService::MANUAL_START);
- std::string account_id = SimulateTestUserSignin(sync_service_.get());
- sync_service_->SetFirstSetupComplete();
- SetUpSyncBackendHost();
- DataTypeManagerMock* data_type_manager = SetUpDataTypeManager();
- EXPECT_CALL(*data_type_manager, Configure(_, _));
- EXPECT_CALL(*data_type_manager, state())
- .WillRepeatedly(Return(DataTypeManager::CONFIGURED));
- EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber());
- IssueTestTokens(account_id);
- sync_service_->Initialize();
- EXPECT_TRUE(sync_service_->IsBackendInitialized());
- EXPECT_TRUE(sync_service_->IsSyncActive());
-
- // The service should stop when switching to managed mode.
- Mock::VerifyAndClearExpectations(data_type_manager);
- EXPECT_CALL(*data_type_manager, state()).
- WillOnce(Return(DataTypeManager::CONFIGURED));
- EXPECT_CALL(*data_type_manager, Stop()).Times(1);
- pref_service()->SetBoolean(sync_driver::prefs::kSyncManaged, true);
- EXPECT_FALSE(sync_service_->IsBackendInitialized());
- // Note that PSS no longer references |data_type_manager| after stopping.
-
- // When switching back to unmanaged, the state should change but sync should
- // not start automatically because IsFirstSetupComplete() will be false.
- // A new DataTypeManager should not be created.
- Mock::VerifyAndClearExpectations(data_type_manager);
- EXPECT_CALL(*component_factory_, CreateDataTypeManager(_, _, _, _, _))
- .Times(0);
- pref_service()->ClearPref(sync_driver::prefs::kSyncManaged);
- EXPECT_FALSE(sync_service_->IsBackendInitialized());
- EXPECT_FALSE(sync_service_->IsSyncActive());
-}
-
-TEST_F(ProfileSyncServiceStartupTest, StartFailure) {
- CreateSyncService(ProfileSyncService::MANUAL_START);
- std::string account_id = SimulateTestUserSignin(sync_service_.get());
- sync_service_->SetFirstSetupComplete();
- SetUpSyncBackendHost();
- DataTypeManagerMock* data_type_manager = SetUpDataTypeManager();
- DataTypeManager::ConfigureStatus status = DataTypeManager::ABORTED;
- DataTypeManager::ConfigureResult result(
- status,
- syncer::ModelTypeSet());
- EXPECT_CALL(*data_type_manager, Configure(_, _))
- .WillRepeatedly(
- DoAll(InvokeOnConfigureStart(sync_service_.get()),
- InvokeOnConfigureDone(
- sync_service_.get(),
- base::Bind(&ProfileSyncServiceStartupTest::SetError,
- base::Unretained(this)),
- result)));
- EXPECT_CALL(*data_type_manager, state()).
- WillOnce(Return(DataTypeManager::STOPPED));
- EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber());
- IssueTestTokens(account_id);
- sync_service_->Initialize();
- EXPECT_TRUE(sync_service_->HasUnrecoverableError());
-}
-
-TEST_F(ProfileSyncServiceStartupTest, StartDownloadFailed) {
- // Pre load the tokens
- CreateSyncService(ProfileSyncService::MANUAL_START);
- std::string account_id = SimulateTestUserSignin(sync_service_.get());
- SyncBackendHostMock* mock_sbh = SetUpSyncBackendHost();
- mock_sbh->set_fail_initial_download(true);
-
- pref_service()->ClearPref(sync_driver::prefs::kSyncFirstSetupComplete);
-
- EXPECT_CALL(observer_, OnStateChanged()).Times(AnyNumber());
- sync_service_->Initialize();
-
- auto sync_blocker = sync_service_->GetSetupInProgressHandle();
- IssueTestTokens(account_id);
- sync_blocker.reset();
- EXPECT_FALSE(sync_service_->IsSyncActive());
-}

Powered by Google App Engine
This is Rietveld 408576698