| Index: sync/internal_api/sync_backup_manager_unittest.cc
|
| diff --git a/sync/internal_api/sync_backup_manager_unittest.cc b/sync/internal_api/sync_backup_manager_unittest.cc
|
| index a130a6378364f36943a7f635a24338ff53b038e8..c0753540c1d3a176e3666aa222891791fcac9b3c 100644
|
| --- a/sync/internal_api/sync_backup_manager_unittest.cc
|
| +++ b/sync/internal_api/sync_backup_manager_unittest.cc
|
| @@ -5,15 +5,22 @@
|
| #include "sync/internal_api/sync_backup_manager.h"
|
|
|
| #include "base/files/scoped_temp_dir.h"
|
| +#include "base/run_loop.h"
|
| #include "sync/internal_api/public/read_node.h"
|
| #include "sync/internal_api/public/read_transaction.h"
|
| +#include "sync/internal_api/public/sessions/sync_session_snapshot.h"
|
| #include "sync/internal_api/public/test/test_internal_components_factory.h"
|
| #include "sync/internal_api/public/write_node.h"
|
| #include "sync/internal_api/public/write_transaction.h"
|
| #include "sync/syncable/entry.h"
|
| #include "sync/test/test_directory_backing_store.h"
|
| +#include "testing/gmock/include/gmock/gmock.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| +using ::testing::_;
|
| +using ::testing::Invoke;
|
| +using ::testing::WithArgs;
|
| +
|
| namespace syncer {
|
|
|
| namespace {
|
| @@ -22,16 +29,36 @@ void OnConfigDone(bool success) {
|
| EXPECT_TRUE(success);
|
| }
|
|
|
| -class SyncBackupManagerTest : public testing::Test {
|
| +class SyncBackupManagerTest : public syncer::SyncManager::Observer,
|
| + public testing::Test {
|
| + public:
|
| + MOCK_METHOD1(OnSyncCycleCompleted,
|
| + void(const sessions::SyncSessionSnapshot&));
|
| + MOCK_METHOD1(OnConnectionStatusChange, void(ConnectionStatus));
|
| + MOCK_METHOD1(OnActionableError, void(const SyncProtocolError&));
|
| + MOCK_METHOD1(OnMigrationRequested, void(ModelTypeSet));;
|
| + MOCK_METHOD1(OnProtocolEvent, void(const ProtocolEvent&));
|
| + MOCK_METHOD4(OnInitializationComplete,
|
| + void(const WeakHandle<JsBackend>&,
|
| + const WeakHandle<DataTypeDebugInfoListener>&,
|
| + bool, ModelTypeSet));
|
| +
|
| protected:
|
| virtual void SetUp() OVERRIDE {
|
| CHECK(temp_dir_.CreateUniqueTempDir());
|
| }
|
|
|
| - void InitManager(SyncManager* manager) {
|
| + void InitManager(SyncManager* manager, StorageOption storage_option) {
|
| + manager_ = manager;
|
| + EXPECT_CALL(*this, OnInitializationComplete(_, _, _, _))
|
| + .WillOnce(WithArgs<2>(Invoke(this,
|
| + &SyncBackupManagerTest::HandleInit)));
|
| +
|
| TestInternalComponentsFactory factory(InternalComponentsFactory::Switches(),
|
| - STORAGE_ON_DISK);
|
| + storage_option);
|
| + manager->AddObserver(this);
|
|
|
| + base::RunLoop run_loop;
|
| manager->Init(temp_dir_.path(),
|
| MakeWeakHandle(base::WeakPtr<JsEventHandler>()),
|
| "", 0, true, scoped_ptr<HttpPostProviderFactory>().Pass(),
|
| @@ -39,13 +66,8 @@ class SyncBackupManagerTest : public testing::Test {
|
| NULL, NULL, SyncCredentials(), "", "", "", &factory,
|
| NULL, scoped_ptr<UnrecoverableErrorHandler>().Pass(),
|
| NULL, NULL);
|
| - manager->ConfigureSyncer(
|
| - CONFIGURE_REASON_NEW_CLIENT,
|
| - ModelTypeSet(SEARCH_ENGINES),
|
| - ModelTypeSet(), ModelTypeSet(), ModelTypeSet(),
|
| - ModelSafeRoutingInfo(),
|
| - base::Bind(&OnConfigDone, true),
|
| - base::Bind(&OnConfigDone, false));
|
| + loop_.PostTask(FROM_HERE, run_loop.QuitClosure());
|
| + run_loop.Run();
|
| }
|
|
|
| void CreateEntry(UserShare* user_share, ModelType type,
|
| @@ -59,13 +81,34 @@ class SyncBackupManagerTest : public testing::Test {
|
| node.InitUniqueByCreation(type, type_root, client_tag));
|
| }
|
|
|
| + private:
|
| + void ConfigureSyncer() {
|
| + manager_->ConfigureSyncer(CONFIGURE_REASON_NEW_CLIENT,
|
| + ModelTypeSet(SEARCH_ENGINES),
|
| + ModelTypeSet(), ModelTypeSet(), ModelTypeSet(),
|
| + ModelSafeRoutingInfo(),
|
| + base::Bind(&OnConfigDone, true),
|
| + base::Bind(&OnConfigDone, false));
|
| + }
|
| +
|
| + void HandleInit(bool success) {
|
| + if (success) {
|
| + loop_.PostTask(FROM_HERE,
|
| + base::Bind(&SyncBackupManagerTest::ConfigureSyncer,
|
| + base::Unretained(this)));
|
| + } else {
|
| + manager_->ShutdownOnSyncThread();
|
| + }
|
| + }
|
| +
|
| base::ScopedTempDir temp_dir_;
|
| base::MessageLoop loop_; // Needed for WeakHandle
|
| + SyncManager* manager_;
|
| };
|
|
|
| TEST_F(SyncBackupManagerTest, NormalizeAndPersist) {
|
| scoped_ptr<SyncBackupManager> manager(new SyncBackupManager);
|
| - InitManager(manager.get());
|
| + InitManager(manager.get(), STORAGE_ON_DISK);
|
|
|
| CreateEntry(manager->GetUserShare(), SEARCH_ENGINES, "test");
|
|
|
| @@ -94,7 +137,7 @@ TEST_F(SyncBackupManagerTest, NormalizeAndPersist) {
|
|
|
| // Reopen db to verify entry is persisted.
|
| manager.reset(new SyncBackupManager);
|
| - InitManager(manager.get());
|
| + InitManager(manager.get(), STORAGE_ON_DISK);
|
| {
|
| ReadTransaction trans(FROM_HERE, manager->GetUserShare());
|
| ReadNode pref(&trans);
|
| @@ -105,6 +148,12 @@ TEST_F(SyncBackupManagerTest, NormalizeAndPersist) {
|
| }
|
| }
|
|
|
| +TEST_F(SyncBackupManagerTest, FailToInitialize) {
|
| + // Test graceful shutdown on initialization failure.
|
| + scoped_ptr<SyncBackupManager> manager(new SyncBackupManager);
|
| + InitManager(manager.get(), STORAGE_INVALID);
|
| +}
|
| +
|
| } // anonymous namespace
|
|
|
| } // namespace syncer
|
|
|