Index: sync/engine/sync_scheduler_unittest.cc |
diff --git a/sync/engine/sync_scheduler_unittest.cc b/sync/engine/sync_scheduler_unittest.cc |
index e5876554e81a53bdc4f95d95c8bac398f93bc835..561e2042002ac7c4460fede3b1170980bf9b8f1d 100644 |
--- a/sync/engine/sync_scheduler_unittest.cc |
+++ b/sync/engine/sync_scheduler_unittest.cc |
@@ -51,6 +51,7 @@ class MockSyncer : public Syncer { |
sync_pb::GetUpdatesCallerInfo::GetUpdatesSource, |
SyncSession*)); |
MOCK_METHOD2(PollSyncShare, bool(ModelTypeSet, sessions::SyncSession*)); |
+ MOCK_METHOD2(RetrySyncShare, bool(ModelTypeSet, sessions::SyncSession*)); |
}; |
MockSyncer::MockSyncer() |
@@ -545,8 +546,9 @@ TEST_F(SyncSchedulerTest, Polling) { |
SyncShareTimes times; |
TimeDelta poll_interval(TimeDelta::FromMilliseconds(30)); |
EXPECT_CALL(*syncer(), PollSyncShare(_,_)).Times(AtLeast(kMinNumSamples)) |
- .WillRepeatedly(DoAll(Invoke(sessions::test_util::SimulatePollSuccess), |
- RecordSyncShareMultiple(×, kMinNumSamples))); |
+ .WillRepeatedly( |
+ DoAll(Invoke(sessions::test_util::SimulatePollRetrySuccess), |
+ RecordSyncShareMultiple(×, kMinNumSamples))); |
scheduler()->OnReceivedLongPollIntervalUpdate(poll_interval); |
@@ -565,8 +567,9 @@ TEST_F(SyncSchedulerTest, PollNotificationsDisabled) { |
SyncShareTimes times; |
TimeDelta poll_interval(TimeDelta::FromMilliseconds(30)); |
EXPECT_CALL(*syncer(), PollSyncShare(_,_)).Times(AtLeast(kMinNumSamples)) |
- .WillRepeatedly(DoAll(Invoke(sessions::test_util::SimulatePollSuccess), |
- RecordSyncShareMultiple(×, kMinNumSamples))); |
+ .WillRepeatedly( |
+ DoAll(Invoke(sessions::test_util::SimulatePollRetrySuccess), |
+ RecordSyncShareMultiple(×, kMinNumSamples))); |
scheduler()->OnReceivedShortPollIntervalUpdate(poll_interval); |
scheduler()->SetNotificationsEnabled(false); |
@@ -593,7 +596,7 @@ TEST_F(SyncSchedulerTest, PollIntervalUpdate) { |
sessions::test_util::SimulatePollIntervalUpdate(poll2)), |
Return(true))) |
.WillRepeatedly( |
- DoAll(Invoke(sessions::test_util::SimulatePollSuccess), |
+ DoAll(Invoke(sessions::test_util::SimulatePollRetrySuccess), |
WithArg<1>( |
RecordSyncShareMultiple(×, kMinNumSamples)))); |
@@ -684,8 +687,9 @@ TEST_F(SyncSchedulerTest, ThrottlingExpiresFromPoll) { |
Return(true))) |
.RetiresOnSaturation(); |
EXPECT_CALL(*syncer(), PollSyncShare(_,_)) |
- .WillRepeatedly(DoAll(Invoke(sessions::test_util::SimulatePollSuccess), |
- RecordSyncShareMultiple(×, kMinNumSamples))); |
+ .WillRepeatedly( |
+ DoAll(Invoke(sessions::test_util::SimulatePollRetrySuccess), |
+ RecordSyncShareMultiple(×, kMinNumSamples))); |
TimeTicks optimal_start = TimeTicks::Now() + poll + throttle1; |
StartSyncScheduler(SyncScheduler::NORMAL_MODE); |
@@ -1117,7 +1121,7 @@ TEST_F(SyncSchedulerTest, BackoffRelief) { |
// Now let the Poll timer do its thing. |
EXPECT_CALL(*syncer(), PollSyncShare(_,_)) |
.WillRepeatedly(DoAll( |
- Invoke(sessions::test_util::SimulatePollSuccess), |
+ Invoke(sessions::test_util::SimulatePollRetrySuccess), |
RecordSyncShareMultiple(×, kMinNumSamples))); |
RunLoop(); |
Mock::VerifyAndClearExpectations(syncer()); |
@@ -1140,9 +1144,9 @@ TEST_F(SyncSchedulerTest, TransientPollFailure) { |
UseMockDelayProvider(); // Will cause test failure if backoff is initiated. |
EXPECT_CALL(*syncer(), PollSyncShare(_,_)) |
- .WillOnce(DoAll(Invoke(sessions::test_util::SimulatePollFailed), |
+ .WillOnce(DoAll(Invoke(sessions::test_util::SimulatePollRetryFailed), |
RecordSyncShare(×))) |
- .WillOnce(DoAll(Invoke(sessions::test_util::SimulatePollSuccess), |
+ .WillOnce(DoAll(Invoke(sessions::test_util::SimulatePollRetrySuccess), |
RecordSyncShare(×))); |
StartSyncScheduler(SyncScheduler::NORMAL_MODE); |
@@ -1275,8 +1279,9 @@ TEST_F(SyncSchedulerTest, PollFromCanaryAfterAuthError) { |
::testing::InSequence seq; |
EXPECT_CALL(*syncer(), PollSyncShare(_,_)) |
- .WillRepeatedly(DoAll(Invoke(sessions::test_util::SimulatePollSuccess), |
- RecordSyncShareMultiple(×, kMinNumSamples))); |
+ .WillRepeatedly( |
+ DoAll(Invoke(sessions::test_util::SimulatePollRetrySuccess), |
+ RecordSyncShareMultiple(×, kMinNumSamples))); |
connection()->SetServerStatus(HttpResponse::SYNC_AUTH_ERROR); |
StartSyncScheduler(SyncScheduler::NORMAL_MODE); |
@@ -1288,7 +1293,7 @@ TEST_F(SyncSchedulerTest, PollFromCanaryAfterAuthError) { |
// but after poll finished with auth error from poll timer it should retry |
// poll once more |
EXPECT_CALL(*syncer(), PollSyncShare(_,_)) |
- .WillOnce(DoAll(Invoke(sessions::test_util::SimulatePollSuccess), |
+ .WillOnce(DoAll(Invoke(sessions::test_util::SimulatePollRetrySuccess), |
RecordSyncShare(×))); |
scheduler()->OnCredentialsUpdated(); |
connection()->SetServerStatus(HttpResponse::SERVER_CONNECTION_OK); |
@@ -1296,4 +1301,85 @@ TEST_F(SyncSchedulerTest, PollFromCanaryAfterAuthError) { |
StopSyncScheduler(); |
} |
+TEST_F(SyncSchedulerTest, SuccessfulRetry) { |
+ StartSyncScheduler(SyncScheduler::NORMAL_MODE); |
+ |
+ SyncShareTimes times; |
+ base::TimeTicks t1 = base::TimeTicks::Now(); |
+ scheduler()->OnReceivedGuRetryDelaySeconds(1); |
rlarocque
2014/01/10 00:42:00
Hmm... These tests will be slow. We went out of o
haitaol1
2014/01/10 22:10:34
Done.
|
+ |
+ EXPECT_CALL(*syncer(), RetrySyncShare(_,_)) |
+ .WillOnce( |
+ DoAll(Invoke(sessions::test_util::SimulatePollRetrySuccess), |
+ RecordSyncShare(×))); |
+ |
+ // Run to wait for retrying. |
+ RunLoop(); |
+ |
+ EXPECT_GE(times[0] - t1, base::TimeDelta::FromSeconds(1)); |
+ |
+ StopSyncScheduler(); |
+} |
+ |
+TEST_F(SyncSchedulerTest, FaileRetry) { |
rlarocque
2014/01/10 00:42:00
typo: FailRetry?
haitaol1
2014/01/10 22:10:34
Done.
|
+ UseMockDelayProvider(); |
+ EXPECT_CALL(*delay(), GetDelay(_)) |
+ .WillRepeatedly(Return(TimeDelta::FromMilliseconds(1))); |
+ |
+ StartSyncScheduler(SyncScheduler::NORMAL_MODE); |
+ |
+ scheduler()->OnReceivedGuRetryDelaySeconds(1); |
+ |
+ EXPECT_CALL(*syncer(), RetrySyncShare(_,_)) |
+ .WillOnce( |
+ DoAll(Invoke(sessions::test_util::SimulatePollRetryFailed), |
+ QuitLoopNowAction())); |
+ |
+ // Run to wait for retrying. |
+ RunLoop(); |
+ |
+ EXPECT_TRUE(scheduler()->IsBackingOff()); |
+ EXPECT_CALL(*syncer(), RetrySyncShare(_,_)) |
+ .WillOnce( |
+ DoAll(Invoke(sessions::test_util::SimulatePollRetrySuccess), |
+ QuitLoopNowAction())); |
+ |
+ // Run to wait for second retrying. |
+ RunLoop(); |
+ |
+ StopSyncScheduler(); |
+} |
+ |
+TEST_F(SyncSchedulerTest, ReceiveNewRetryDelay) { |
+ StartSyncScheduler(SyncScheduler::NORMAL_MODE); |
+ |
+ SyncShareTimes times; |
+ base::TimeTicks t1 = base::TimeTicks::Now(); |
+ scheduler()->OnReceivedGuRetryDelaySeconds(1); |
+ scheduler()->ScheduleLocalRefreshRequest(zero(), ModelTypeSet(BOOKMARKS), |
+ FROM_HERE); |
+ |
+ EXPECT_CALL(*syncer(), NormalSyncShare(_,_,_)) |
+ .WillOnce( |
+ DoAll(WithArg<2>(sessions::test_util::SimulateGuRetryDelayCommand(2)), |
+ RecordSyncShare(×))); |
+ |
+ // Run nudge GU. |
+ RunLoop(); |
+ |
+ EXPECT_LT(times[0] - t1, base::TimeDelta::FromSeconds(1)); |
rlarocque
2014/01/10 00:42:00
This looks flaky. What if the timer takes an unus
haitaol1
2014/01/10 22:10:34
Done.
|
+ |
+ EXPECT_CALL(*syncer(), RetrySyncShare(_,_)) |
+ .WillOnce( |
+ DoAll(Invoke(sessions::test_util::SimulatePollRetrySuccess), |
+ RecordSyncShare(×))); |
+ |
+ // Run to wait for retrying. |
+ RunLoop(); |
+ |
+ EXPECT_NEAR((times[1] - times[0]).InSeconds(), 2, 0.2); |
rlarocque
2014/01/10 00:42:00
This one is almost certain to be flaky. We can't
haitaol1
2014/01/10 22:10:34
Done.
|
+ |
+ StopSyncScheduler(); |
+} |
+ |
} // namespace syncer |