Chromium Code Reviews| 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, |
|
Nicolas Zea
2014/07/02 18:48:08
what are these mocks used for?
haitaol1
2014/07/02 20:52:54
Only intereested in OnInitializationComplete but n
|
| + 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 |