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

Unified Diff: chrome/browser/sync/abstract_profile_sync_service_test.cc

Issue 1646553002: Remove Profile dependency from some ProfileSyncService unittests (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@581640_componentise_fake_invalidation_service
Patch Set: Less WaitableEvents Created 4 years, 10 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: chrome/browser/sync/abstract_profile_sync_service_test.cc
diff --git a/chrome/browser/sync/abstract_profile_sync_service_test.cc b/chrome/browser/sync/abstract_profile_sync_service_test.cc
index 3089b52b443c8d51b47355ff262892ed49d71821..28d6396fdf61d884712575f20f3954ece8701fca 100644
--- a/chrome/browser/sync/abstract_profile_sync_service_test.cc
+++ b/chrome/browser/sync/abstract_profile_sync_service_test.cc
@@ -4,19 +4,138 @@
#include "chrome/browser/sync/abstract_profile_sync_service_test.h"
+#include <utility>
+
#include "base/bind.h"
#include "base/bind_helpers.h"
+#include "base/files/file_path.h"
#include "base/location.h"
#include "base/run_loop.h"
+#include "chrome/browser/sync/test/test_http_bridge_factory.h"
#include "chrome/browser/sync/test_profile_sync_service.h"
+#include "components/sync_driver/glue/sync_backend_host_core.h"
+#include "components/sync_driver/sync_api_component_factory_mock.h"
#include "content/public/test/test_utils.h"
+#include "google_apis/gaia/gaia_constants.h"
+#include "sync/internal_api/public/test/sync_manager_factory_for_profile_sync_test.h"
+#include "sync/internal_api/public/test/test_internal_components_factory.h"
#include "sync/internal_api/public/test/test_user_share.h"
-#include "sync/internal_api/public/write_transaction.h"
#include "sync/protocol/sync.pb.h"
-#include "sync/util/cryptographer.h"
+using content::BrowserThread;
using syncer::ModelType;
-using syncer::UserShare;
+using testing::_;
+using testing::Return;
+
+namespace {
+
+class SyncBackendHostForProfileSyncTest
+ : public browser_sync::SyncBackendHostImpl {
+ public:
+ SyncBackendHostForProfileSyncTest(
+ const base::FilePath& temp_dir,
+ sync_driver::SyncClient* sync_client,
+ const scoped_refptr<base::SingleThreadTaskRunner>& ui_thread,
+ invalidation::InvalidationService* invalidator,
+ const base::WeakPtr<sync_driver::SyncPrefs>& sync_prefs,
+ const base::Closure& callback);
+ ~SyncBackendHostForProfileSyncTest() override;
+
+ void RequestConfigureSyncer(
+ syncer::ConfigureReason reason,
+ syncer::ModelTypeSet to_download,
+ syncer::ModelTypeSet to_purge,
+ syncer::ModelTypeSet to_journal,
+ syncer::ModelTypeSet to_unapply,
+ syncer::ModelTypeSet to_ignore,
+ const syncer::ModelSafeRoutingInfo& routing_info,
+ const base::Callback<void(syncer::ModelTypeSet, syncer::ModelTypeSet)>&
+ ready_task,
+ const base::Closure& retry_callback) override;
+
+ protected:
+ void InitCore(scoped_ptr<browser_sync::DoInitializeOptions> options) override;
+
+ private:
+ // Invoked at the start of HandleSyncManagerInitializationOnFrontendLoop.
+ // Allows extra initialization work to be performed before the backend comes
+ // up.
+ base::Closure callback_;
+
+ DISALLOW_COPY_AND_ASSIGN(SyncBackendHostForProfileSyncTest);
+};
+
+SyncBackendHostForProfileSyncTest::SyncBackendHostForProfileSyncTest(
+ const base::FilePath& temp_dir,
+ sync_driver::SyncClient* sync_client,
+ const scoped_refptr<base::SingleThreadTaskRunner>& ui_thread,
+ invalidation::InvalidationService* invalidator,
+ const base::WeakPtr<sync_driver::SyncPrefs>& sync_prefs,
+ const base::Closure& callback)
+ : browser_sync::SyncBackendHostImpl(
+ "dummy_debug_name",
+ sync_client,
+ ui_thread,
+ invalidator,
+ sync_prefs,
+ temp_dir.Append(base::FilePath(FILE_PATH_LITERAL("test")))),
+ callback_(callback) {}
+
+SyncBackendHostForProfileSyncTest::~SyncBackendHostForProfileSyncTest() {}
+
+void SyncBackendHostForProfileSyncTest::InitCore(
+ scoped_ptr<browser_sync::DoInitializeOptions> options) {
+ options->http_bridge_factory = scoped_ptr<syncer::HttpPostProviderFactory>(
+ new browser_sync::TestHttpBridgeFactory());
+ options->sync_manager_factory.reset(
+ new syncer::SyncManagerFactoryForProfileSyncTest(callback_));
+ options->credentials.email = "testuser@gmail.com";
+ options->credentials.sync_token = "token";
+ options->credentials.scope_set.insert(GaiaConstants::kChromeSyncOAuth2Scope);
+ options->restored_key_for_bootstrapping.clear();
+
+ // It'd be nice if we avoided creating the InternalComponentsFactory in the
+ // first place, but SyncBackendHost will have created one by now so we must
+ // free it. Grab the switches to pass on first.
+ syncer::InternalComponentsFactory::Switches factory_switches =
+ options->internal_components_factory->GetSwitches();
+ options->internal_components_factory.reset(
+ new syncer::TestInternalComponentsFactory(
+ factory_switches,
+ syncer::InternalComponentsFactory::STORAGE_IN_MEMORY, nullptr));
+
+ browser_sync::SyncBackendHostImpl::InitCore(std::move(options));
+}
+
+void SyncBackendHostForProfileSyncTest::RequestConfigureSyncer(
+ syncer::ConfigureReason reason,
+ syncer::ModelTypeSet to_download,
+ syncer::ModelTypeSet to_purge,
+ syncer::ModelTypeSet to_journal,
+ syncer::ModelTypeSet to_unapply,
+ syncer::ModelTypeSet to_ignore,
+ const syncer::ModelSafeRoutingInfo& routing_info,
+ const base::Callback<void(syncer::ModelTypeSet, syncer::ModelTypeSet)>&
+ ready_task,
+ const base::Closure& retry_callback) {
+ syncer::ModelTypeSet failed_configuration_types;
+
+ // The first parameter there should be the set of enabled types. That's not
+ // something we have access to from this strange test harness. We'll just
+ // send back the list of newly configured types instead and hope it doesn't
+ // break anything.
+ // Posted to avoid re-entrancy issues.
+ base::ThreadTaskRunnerHandle::Get()->PostTask(
+ FROM_HERE,
+ base::Bind(&SyncBackendHostForProfileSyncTest::
+ FinishConfigureDataTypesOnFrontendLoop,
+ base::Unretained(this),
+ syncer::Difference(to_download, failed_configuration_types),
+ syncer::Difference(to_download, failed_configuration_types),
+ failed_configuration_types, ready_task));
+}
+
+} // namespace
/* static */
syncer::ImmutableChangeRecordList
@@ -47,14 +166,14 @@ AbstractProfileSyncServiceTest::AbstractProfileSyncServiceTest()
// Purposefully do not use a real FILE thread, see crbug/550013.
: thread_bundle_(content::TestBrowserThreadBundle::REAL_DB_THREAD |
content::TestBrowserThreadBundle::REAL_IO_THREAD),
- sync_service_(NULL) {}
-
-AbstractProfileSyncServiceTest::~AbstractProfileSyncServiceTest() {}
-
-void AbstractProfileSyncServiceTest::SetUp() {
+ profile_sync_service_bundle_(
+ BrowserThread::GetMessageLoopProxyForThread(BrowserThread::DB),
+ BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE),
+ BrowserThread::GetBlockingPool()) {
+ CHECK(temp_dir_.CreateUniqueTempDir());
}
-void AbstractProfileSyncServiceTest::TearDown() {
+AbstractProfileSyncServiceTest::~AbstractProfileSyncServiceTest() {
// Pump messages posted by the sync core thread (which may end up
// posting on the IO thread).
base::RunLoop().RunUntilIdle();
@@ -67,6 +186,31 @@ bool AbstractProfileSyncServiceTest::CreateRoot(ModelType model_type) {
sync_service_->GetUserShare());
}
+scoped_ptr<TestProfileSyncService>
+AbstractProfileSyncServiceTest::CreateSyncService(
+ scoped_ptr<sync_driver::SyncClient> sync_client,
+ const base::Closure& initialization_success_callback) {
+ DCHECK(sync_client);
+ ProfileSyncService::InitParams init_params =
+ profile_sync_service_bundle_.CreateBasicInitParams(
+ browser_sync::AUTO_START, std::move(sync_client));
+ auto sync_service =
+ make_scoped_ptr(new TestProfileSyncService(std::move(init_params)));
+
+ SyncApiComponentFactoryMock* components =
+ profile_sync_service_bundle_.component_factory();
+ EXPECT_CALL(*components, CreateSyncBackendHost(_, _, _, _))
+ .WillOnce(Return(new SyncBackendHostForProfileSyncTest(
+ temp_dir_.path(), sync_service->GetSyncClient(),
+ base::ThreadTaskRunnerHandle::Get(),
+ profile_sync_service_bundle_.fake_invalidation_service(),
+ sync_service->sync_prefs()->AsWeakPtr(),
+ initialization_success_callback)));
+
+ sync_service->SetFirstSetupComplete();
+ return sync_service;
+}
+
CreateRootHelper::CreateRootHelper(AbstractProfileSyncServiceTest* test,
ModelType model_type)
: callback_(base::Bind(&CreateRootHelper::CreateRootCallback,

Powered by Google App Engine
This is Rietveld 408576698