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

Unified Diff: sync/internal_api/sync_backup_manager_unittest.cc

Issue 363543002: Properly handle initialization failure and following manager shutdown without (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 6 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
« no previous file with comments | « sync/internal_api/sync_backup_manager.cc ('k') | sync/internal_api/sync_rollback_manager.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « sync/internal_api/sync_backup_manager.cc ('k') | sync/internal_api/sync_rollback_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698