Index: sync/engine/sync_scheduler_unittest.cc |
diff --git a/sync/engine/sync_scheduler_unittest.cc b/sync/engine/sync_scheduler_unittest.cc |
index 7746aea533eae49396d2eef9c104ae7eb2b1a729..20453f1aa95dcd23e42f37f45a5cab01d92dbbf4 100644 |
--- a/sync/engine/sync_scheduler_unittest.cc |
+++ b/sync/engine/sync_scheduler_unittest.cc |
@@ -1133,4 +1133,32 @@ TEST_F(SyncSchedulerTest, StartWhenNotConnected) { |
MessageLoop::current()->RunAllPending(); |
} |
+TEST_F(SyncSchedulerTest, ServerConnectionChangeDuringBackoff) { |
+ UseMockDelayProvider(); |
+ EXPECT_CALL(*delay(), GetDelay(_)) |
+ .WillRepeatedly(Return(TimeDelta::FromMilliseconds(0))); |
+ |
+ StartSyncScheduler(SyncScheduler::NORMAL_MODE); |
+ connection()->SetServerNotReachable(); |
+ connection()->UpdateConnectionStatus(); |
+ |
+ EXPECT_CALL(*syncer(), SyncShare(_,_,_)) |
+ .WillOnce(DoAll(Invoke(sessions::test_util::SimulateConnectionFailure), |
+ Return(true))) |
+ .WillOnce(DoAll(Invoke(sessions::test_util::SimulateSuccess), |
+ QuitLoopNowAction())); |
+ |
+ scheduler()->ScheduleNudgeAsync( |
+ zero(), NUDGE_SOURCE_LOCAL, ModelTypeSet(BOOKMARKS), FROM_HERE); |
+ |
+ PumpLoop(); // Run the nudge, that will fail and schedule a quick retry. |
+ ASSERT_TRUE(scheduler()->IsBackingOff()); |
+ |
+ // Before we run the scheduled canary, trigger a server connection change. |
+ connection()->SetServerReachable(); |
+ connection()->UpdateConnectionStatus(); |
+ scheduler()->OnConnectionStatusChange(); |
+ MessageLoop::current()->RunAllPending(); |
+} |
+ |
} // namespace syncer |