| Index: sync/internal_api/sync_rollback_manager_unittest.cc
|
| diff --git a/sync/internal_api/sync_rollback_manager_unittest.cc b/sync/internal_api/sync_rollback_manager_unittest.cc
|
| index d66ee060aa2418e5adbb598be26a6e09aa451781..11f875f56a0f4ad97967ce72403eaf1d50ad11e9 100644
|
| --- a/sync/internal_api/sync_rollback_manager_unittest.cc
|
| +++ b/sync/internal_api/sync_rollback_manager_unittest.cc
|
| @@ -5,6 +5,7 @@
|
| #include "sync/internal_api/sync_rollback_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"
|
| @@ -76,9 +77,9 @@ class SyncRollbackManagerTest : public testing::Test,
|
| void(const sessions::SyncSessionSnapshot&));
|
| MOCK_METHOD1(OnConnectionStatusChange, void(ConnectionStatus));
|
| MOCK_METHOD4(OnInitializationComplete,
|
| - void(const WeakHandle<JsBackend>&,
|
| - const WeakHandle<DataTypeDebugInfoListener>&,
|
| - bool, ModelTypeSet));
|
| + void(const WeakHandle<JsBackend>&,
|
| + const WeakHandle<DataTypeDebugInfoListener>&,
|
| + bool, ModelTypeSet));
|
| MOCK_METHOD1(OnActionableError, void(const SyncProtocolError&));
|
| MOCK_METHOD1(OnMigrationRequested, void(ModelTypeSet));;
|
| MOCK_METHOD1(OnProtocolEvent, void(const ProtocolEvent&));
|
| @@ -100,11 +101,19 @@ class SyncRollbackManagerTest : public testing::Test,
|
| }
|
|
|
| void InitManager(SyncManager* manager, ModelTypeSet types,
|
| - TestChangeDelegate* delegate) {
|
| + TestChangeDelegate* delegate, StorageOption storage_option) {
|
| + manager_ = manager;
|
| + types_ = types;
|
| +
|
| + EXPECT_CALL(*this, OnInitializationComplete(_, _, _, _))
|
| + .WillOnce(WithArgs<2>(Invoke(this,
|
| + &SyncRollbackManagerTest::HandleInit)));
|
| +
|
| manager->AddObserver(this);
|
| TestInternalComponentsFactory factory(InternalComponentsFactory::Switches(),
|
| - STORAGE_ON_DISK);
|
| + storage_option);
|
|
|
| + base::RunLoop run_loop;
|
| manager->Init(temp_dir_.path(),
|
| MakeWeakHandle(base::WeakPtr<JsEventHandler>()),
|
| "", 0, true, scoped_ptr<HttpPostProviderFactory>().Pass(),
|
| @@ -113,21 +122,16 @@ class SyncRollbackManagerTest : public testing::Test,
|
| NULL, delegate, SyncCredentials(), "", "", "", &factory,
|
| NULL, scoped_ptr<UnrecoverableErrorHandler>().Pass(),
|
| NULL, NULL);
|
| - manager->ConfigureSyncer(
|
| - CONFIGURE_REASON_NEW_CLIENT,
|
| - types,
|
| - ModelTypeSet(), ModelTypeSet(), ModelTypeSet(), ModelSafeRoutingInfo(),
|
| - base::Bind(&SyncRollbackManagerTest::OnConfigDone,
|
| - base::Unretained(this), true),
|
| - base::Bind(&SyncRollbackManagerTest::OnConfigDone,
|
| - base::Unretained(this), false));
|
| + loop_.PostTask(FROM_HERE, run_loop.QuitClosure());
|
| + run_loop.Run();
|
| }
|
|
|
| // Create and persist an entry by unique tag in DB.
|
| void PrepopulateDb(ModelType type, const std::string& client_tag) {
|
| SyncBackupManager backup_manager;
|
| TestChangeDelegate delegate;
|
| - InitManager(&backup_manager, ModelTypeSet(type), &delegate);
|
| + InitManager(&backup_manager, ModelTypeSet(type), &delegate,
|
| + STORAGE_ON_DISK);
|
| CreateEntry(backup_manager.GetUserShare(), type, client_tag);
|
| backup_manager.ShutdownOnSyncThread();
|
| }
|
| @@ -140,9 +144,34 @@ class SyncRollbackManagerTest : public testing::Test,
|
| return BaseNode::INIT_OK == node.InitByClientTagLookup(type, client_tag);
|
| }
|
|
|
| + private:
|
| + void ConfigureSyncer() {
|
| + manager_->ConfigureSyncer(
|
| + CONFIGURE_REASON_NEW_CLIENT,
|
| + types_,
|
| + ModelTypeSet(), ModelTypeSet(), ModelTypeSet(),
|
| + ModelSafeRoutingInfo(),
|
| + base::Bind(&SyncRollbackManagerTest::OnConfigDone,
|
| + base::Unretained(this), true),
|
| + base::Bind(&SyncRollbackManagerTest::OnConfigDone,
|
| + base::Unretained(this), false));
|
| + }
|
| +
|
| + void HandleInit(bool success) {
|
| + if (success) {
|
| + loop_.PostTask(FROM_HERE,
|
| + base::Bind(&SyncRollbackManagerTest::ConfigureSyncer,
|
| + base::Unretained(this)));
|
| + } else {
|
| + manager_->ShutdownOnSyncThread();
|
| + }
|
| + }
|
| +
|
| base::ScopedTempDir temp_dir_;
|
| scoped_refptr<ModelSafeWorker> worker_;
|
| base::MessageLoop loop_; // Needed for WeakHandle
|
| + SyncManager* manager_;
|
| + ModelTypeSet types_;
|
| };
|
|
|
| bool IsRollbackDoneAction(SyncProtocolError e) {
|
| @@ -154,7 +183,8 @@ TEST_F(SyncRollbackManagerTest, RollbackBasic) {
|
|
|
| TestChangeDelegate delegate;
|
| SyncRollbackManager rollback_manager;
|
| - InitManager(&rollback_manager, ModelTypeSet(PREFERENCES), &delegate);
|
| + InitManager(&rollback_manager, ModelTypeSet(PREFERENCES), &delegate,
|
| + STORAGE_ON_DISK);
|
|
|
| // Simulate a new entry added during type initialization.
|
| int64 new_pref_id =
|
| @@ -177,7 +207,8 @@ TEST_F(SyncRollbackManagerTest, NoRollbackOfTypesNotBackedUp) {
|
|
|
| TestChangeDelegate delegate;
|
| SyncRollbackManager rollback_manager;
|
| - InitManager(&rollback_manager, ModelTypeSet(PREFERENCES, APPS), &delegate);
|
| + InitManager(&rollback_manager, ModelTypeSet(PREFERENCES, APPS), &delegate,
|
| + STORAGE_ON_DISK);
|
|
|
| // Simulate new entry added during type initialization.
|
| int64 new_pref_id =
|
| @@ -204,7 +235,8 @@ TEST_F(SyncRollbackManagerTest, BackupDbNotChangedOnAbort) {
|
| TestChangeDelegate delegate;
|
| scoped_ptr<SyncRollbackManager> rollback_manager(
|
| new SyncRollbackManager);
|
| - InitManager(rollback_manager.get(), ModelTypeSet(PREFERENCES), &delegate);
|
| + InitManager(rollback_manager.get(), ModelTypeSet(PREFERENCES), &delegate,
|
| + STORAGE_ON_DISK);
|
|
|
| // Simulate a new entry added during type initialization.
|
| CreateEntry(rollback_manager->GetUserShare(), PREFERENCES, "pref2");
|
| @@ -214,11 +246,20 @@ TEST_F(SyncRollbackManagerTest, BackupDbNotChangedOnAbort) {
|
|
|
| // Verify new entry was not persisted.
|
| rollback_manager.reset(new SyncRollbackManager);
|
| - InitManager(rollback_manager.get(), ModelTypeSet(PREFERENCES), &delegate);
|
| + InitManager(rollback_manager.get(), ModelTypeSet(PREFERENCES), &delegate,
|
| + STORAGE_ON_DISK);
|
| EXPECT_FALSE(VerifyEntry(rollback_manager->GetUserShare(), PREFERENCES,
|
| "pref2"));
|
| }
|
|
|
| +TEST_F(SyncRollbackManagerTest, OnInitializationFailure) {
|
| + // Test graceful shutdown on initialization failure.
|
| + scoped_ptr<SyncRollbackManager> rollback_manager(
|
| + new SyncRollbackManager);
|
| + InitManager(rollback_manager.get(), ModelTypeSet(PREFERENCES), NULL,
|
| + STORAGE_ON_DISK);
|
| +}
|
| +
|
| } // anonymous namespace
|
|
|
| } // namespace syncer
|
|
|