Index: sync/internal_api/sync_manager_impl_unittest.cc |
diff --git a/sync/internal_api/sync_manager_impl_unittest.cc b/sync/internal_api/sync_manager_impl_unittest.cc |
index 542b08246315b297e9af5ca1771a8daae940101c..912f81c055f71c3011285bce110e8bc8e1006268 100644 |
--- a/sync/internal_api/sync_manager_impl_unittest.cc |
+++ b/sync/internal_api/sync_manager_impl_unittest.cc |
@@ -807,7 +807,8 @@ class SyncManagerTest : public testing::Test, |
sync_manager_.AddObserver(&manager_observer_); |
EXPECT_CALL(manager_observer_, OnInitializationComplete(_, _, _, _)). |
- WillOnce(SaveArg<0>(&js_backend_)); |
+ WillOnce(DoAll(SaveArg<0>(&js_backend_), |
+ SaveArg<2>(&initialization_succeeded_))); |
EXPECT_FALSE(js_backend_.IsInitialized()); |
@@ -841,10 +842,12 @@ class SyncManagerTest : public testing::Test, |
EXPECT_TRUE(js_backend_.IsInitialized()); |
- for (ModelSafeRoutingInfo::iterator i = routing_info.begin(); |
- i != routing_info.end(); ++i) { |
- type_roots_[i->first] = MakeServerNodeForType( |
- sync_manager_.GetUserShare(), i->first); |
+ if (initialization_succeeded_) { |
+ for (ModelSafeRoutingInfo::iterator i = routing_info.begin(); |
+ i != routing_info.end(); ++i) { |
+ type_roots_[i->first] = MakeServerNodeForType( |
+ sync_manager_.GetUserShare(), i->first); |
+ } |
} |
PumpLoop(); |
} |
@@ -1018,6 +1021,7 @@ class SyncManagerTest : public testing::Test, |
SyncManagerImpl sync_manager_; |
CancelationSignal cancelation_signal_; |
WeakHandle<JsBackend> js_backend_; |
+ bool initialization_succeeded_; |
StrictMock<SyncManagerObserverMock> manager_observer_; |
StrictMock<SyncEncryptionHandlerObserverMock> encryption_observer_; |
InternalComponentsFactory::Switches switches_; |
@@ -3514,4 +3518,28 @@ TEST_F(SyncManagerChangeProcessingTest, DeletionsAndChanges) { |
EXPECT_LT(folder_b_pos, folder_a_pos); |
} |
+// During initialization SyncManagerImpl loads sqlite database. If it fails to |
+// do so it should fail initialization. This test verifies this behavior. |
+// Test reuses SyncManagerImpl initialization from SyncManagerTest but overrides |
+// InternalComponentsFactory to return DirectoryBackingStore that always fails |
+// to load. |
+class SyncManagerInitInvalidStorageTest : public SyncManagerTest { |
+ public: |
+ SyncManagerInitInvalidStorageTest() { |
+ } |
+ |
+ virtual InternalComponentsFactory* GetFactory() { |
+ return new TestInternalComponentsFactory(GetSwitches(), STORAGE_INVALID); |
+ } |
+}; |
+ |
+// SyncManagerInitInvalidStorageTest::GetFactory will return |
+// DirectoryBackingStore that ensures that SyncManagerImpl::OpenDirectory fails. |
+// SyncManagerImpl initialization is done in SyncManagerTest::SetUp. This test's |
+// task is to ensure that SyncManagerImpl reported initialization failure in |
+// OnInitializationComplete callback. |
+TEST_F(SyncManagerInitInvalidStorageTest, FailToOpenDatabase) { |
+ EXPECT_FALSE(initialization_succeeded_); |
+} |
+ |
} // namespace |