OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/bind.h" | 5 #include "base/bind.h" |
6 #include "base/callback.h" | 6 #include "base/callback.h" |
7 #include "base/compiler_specific.h" | 7 #include "base/compiler_specific.h" |
8 #include "base/memory/weak_ptr.h" | 8 #include "base/memory/weak_ptr.h" |
9 #include "base/message_loop.h" | 9 #include "base/message_loop.h" |
10 #include "base/test/test_timeouts.h" | 10 #include "base/test/test_timeouts.h" |
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
294 EXPECT_EQ(GetUpdatesCallerInfo::LOCAL, | 294 EXPECT_EQ(GetUpdatesCallerInfo::LOCAL, |
295 records2.snapshots[0].source().updates_source); | 295 records2.snapshots[0].source().updates_source); |
296 } | 296 } |
297 | 297 |
298 // Make sure a regular config command is scheduled fine in the absence of any | 298 // Make sure a regular config command is scheduled fine in the absence of any |
299 // errors. | 299 // errors. |
300 TEST_F(SyncSchedulerTest, Config) { | 300 TEST_F(SyncSchedulerTest, Config) { |
301 SyncShareRecords records; | 301 SyncShareRecords records; |
302 const ModelTypeSet model_types(BOOKMARKS); | 302 const ModelTypeSet model_types(BOOKMARKS); |
303 | 303 |
304 EXPECT_CALL(*syncer(), | 304 EXPECT_CALL(*syncer(), SyncShare(_,_,_)) |
305 SyncShare(_,_,_)) | |
306 .WillOnce(Invoke(sessions::test_util::SimulateSuccess)) | |
307 .WillOnce(DoAll(Invoke(sessions::test_util::SimulateSuccess), | 305 .WillOnce(DoAll(Invoke(sessions::test_util::SimulateSuccess), |
308 WithArg<0>(RecordSyncShare(&records)))); | 306 WithArg<0>(RecordSyncShare(&records)))); |
309 | 307 |
310 StartSyncScheduler(SyncScheduler::CONFIGURATION_MODE); | 308 StartSyncScheduler(SyncScheduler::CONFIGURATION_MODE); |
311 | 309 |
312 CallbackCounter counter; | 310 CallbackCounter counter; |
313 ConfigurationParams params( | 311 ConfigurationParams params( |
314 GetUpdatesCallerInfo::RECONFIGURATION, | 312 GetUpdatesCallerInfo::RECONFIGURATION, |
315 model_types, | 313 model_types, |
316 TypesToRoutingInfo(model_types), | 314 TypesToRoutingInfo(model_types), |
(...skipping 10 matching lines...) Expand all Loading... |
327 } | 325 } |
328 | 326 |
329 // Simulate a failure and make sure the config request is retried. | 327 // Simulate a failure and make sure the config request is retried. |
330 TEST_F(SyncSchedulerTest, ConfigWithBackingOff) { | 328 TEST_F(SyncSchedulerTest, ConfigWithBackingOff) { |
331 UseMockDelayProvider(); | 329 UseMockDelayProvider(); |
332 EXPECT_CALL(*delay(), GetDelay(_)) | 330 EXPECT_CALL(*delay(), GetDelay(_)) |
333 .WillRepeatedly(Return(TimeDelta::FromMilliseconds(1))); | 331 .WillRepeatedly(Return(TimeDelta::FromMilliseconds(1))); |
334 SyncShareRecords records; | 332 SyncShareRecords records; |
335 const ModelTypeSet model_types(BOOKMARKS); | 333 const ModelTypeSet model_types(BOOKMARKS); |
336 | 334 |
337 EXPECT_CALL(*syncer(), | 335 EXPECT_CALL(*syncer(), SyncShare(_,_,_)) |
338 SyncShare(_,_,_)) | |
339 .WillOnce(Invoke(sessions::test_util::SimulateSuccess)) | |
340 .WillOnce(DoAll(Invoke(sessions::test_util::SimulateCommitFailed), | 336 .WillOnce(DoAll(Invoke(sessions::test_util::SimulateCommitFailed), |
341 WithArg<0>(RecordSyncShare(&records)))) | 337 WithArg<0>(RecordSyncShare(&records)))) |
342 .WillOnce(DoAll(Invoke(sessions::test_util::SimulateSuccess), | 338 .WillOnce(DoAll(Invoke(sessions::test_util::SimulateSuccess), |
343 WithArg<0>(RecordSyncShare(&records)))); | 339 WithArg<0>(RecordSyncShare(&records)))); |
344 | 340 |
345 StartSyncScheduler(SyncScheduler::CONFIGURATION_MODE); | 341 StartSyncScheduler(SyncScheduler::CONFIGURATION_MODE); |
346 | 342 |
347 ASSERT_EQ(0U, records.snapshots.size()); | 343 ASSERT_EQ(0U, records.snapshots.size()); |
348 CallbackCounter counter; | 344 CallbackCounter counter; |
349 ConfigurationParams params( | 345 ConfigurationParams params( |
(...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
703 QuitLoopNowAction())); | 699 QuitLoopNowAction())); |
704 StartSyncScheduler(SyncScheduler::NORMAL_MODE); | 700 StartSyncScheduler(SyncScheduler::NORMAL_MODE); |
705 | 701 |
706 scheduler()->ScheduleNudgeAsync( | 702 scheduler()->ScheduleNudgeAsync( |
707 zero(), NUDGE_SOURCE_LOCAL, ModelTypeSet(), FROM_HERE); | 703 zero(), NUDGE_SOURCE_LOCAL, ModelTypeSet(), FROM_HERE); |
708 | 704 |
709 // We should detect the failure on the second sync share, and go into backoff. | 705 // We should detect the failure on the second sync share, and go into backoff. |
710 EXPECT_TRUE(RunAndGetBackoff()); | 706 EXPECT_TRUE(RunAndGetBackoff()); |
711 } | 707 } |
712 | 708 |
713 // Test that no syncing occurs when throttled (although CleanupDisabledTypes | 709 // Test that no syncing occurs when throttled. |
714 // is allowed). | |
715 TEST_F(SyncSchedulerTest, ThrottlingDoesThrottle) { | 710 TEST_F(SyncSchedulerTest, ThrottlingDoesThrottle) { |
716 const ModelTypeSet types(BOOKMARKS); | 711 const ModelTypeSet types(BOOKMARKS); |
717 TimeDelta poll(TimeDelta::FromMilliseconds(5)); | 712 TimeDelta poll(TimeDelta::FromMilliseconds(5)); |
718 TimeDelta throttle(TimeDelta::FromMinutes(10)); | 713 TimeDelta throttle(TimeDelta::FromMinutes(10)); |
719 scheduler()->OnReceivedLongPollIntervalUpdate(poll); | 714 scheduler()->OnReceivedLongPollIntervalUpdate(poll); |
720 | 715 |
721 EXPECT_CALL(*syncer(), | 716 EXPECT_CALL(*syncer(), SyncShare(_,_,_)) |
722 SyncShare(_, CLEANUP_DISABLED_TYPES, CLEANUP_DISABLED_TYPES)) | |
723 .WillOnce(Invoke(sessions::test_util::SimulateSuccess)); | |
724 EXPECT_CALL(*syncer(), SyncShare(_,Not(CLEANUP_DISABLED_TYPES), | |
725 Not(CLEANUP_DISABLED_TYPES))) | |
726 .WillOnce(WithArg<0>(sessions::test_util::SimulateThrottled(throttle))) | 717 .WillOnce(WithArg<0>(sessions::test_util::SimulateThrottled(throttle))) |
727 .WillRepeatedly(AddFailureAndQuitLoopNow()); | 718 .WillRepeatedly(AddFailureAndQuitLoopNow()); |
728 | 719 |
729 StartSyncScheduler(SyncScheduler::NORMAL_MODE); | 720 StartSyncScheduler(SyncScheduler::NORMAL_MODE); |
730 | 721 |
731 scheduler()->ScheduleNudgeAsync( | 722 scheduler()->ScheduleNudgeAsync( |
732 zero(), NUDGE_SOURCE_LOCAL, types, FROM_HERE); | 723 zero(), NUDGE_SOURCE_LOCAL, types, FROM_HERE); |
733 PumpLoop(); | 724 PumpLoop(); |
734 | 725 |
735 StartSyncScheduler(SyncScheduler::CONFIGURATION_MODE); | 726 StartSyncScheduler(SyncScheduler::CONFIGURATION_MODE); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
768 StopSyncScheduler(); | 759 StopSyncScheduler(); |
769 AnalyzePollRun(records, kMinNumSamples, optimal_start, poll); | 760 AnalyzePollRun(records, kMinNumSamples, optimal_start, poll); |
770 } | 761 } |
771 | 762 |
772 // Test nudges / polls don't run in config mode and config tasks do. | 763 // Test nudges / polls don't run in config mode and config tasks do. |
773 TEST_F(SyncSchedulerTest, ConfigurationMode) { | 764 TEST_F(SyncSchedulerTest, ConfigurationMode) { |
774 TimeDelta poll(TimeDelta::FromMilliseconds(15)); | 765 TimeDelta poll(TimeDelta::FromMilliseconds(15)); |
775 SyncShareRecords records; | 766 SyncShareRecords records; |
776 scheduler()->OnReceivedLongPollIntervalUpdate(poll); | 767 scheduler()->OnReceivedLongPollIntervalUpdate(poll); |
777 EXPECT_CALL(*syncer(), SyncShare(_,_,_)) | 768 EXPECT_CALL(*syncer(), SyncShare(_,_,_)) |
778 .WillOnce(Invoke(sessions::test_util::SimulateSuccess)) | |
779 .WillOnce(DoAll(Invoke(sessions::test_util::SimulateSuccess), | 769 .WillOnce(DoAll(Invoke(sessions::test_util::SimulateSuccess), |
780 WithArg<0>(RecordSyncShare(&records)))); | 770 WithArg<0>(RecordSyncShare(&records)))); |
781 | 771 |
782 StartSyncScheduler(SyncScheduler::CONFIGURATION_MODE); | 772 StartSyncScheduler(SyncScheduler::CONFIGURATION_MODE); |
783 | 773 |
784 const ModelTypeSet nudge_types(AUTOFILL); | 774 const ModelTypeSet nudge_types(AUTOFILL); |
785 scheduler()->ScheduleNudgeAsync( | 775 scheduler()->ScheduleNudgeAsync( |
786 zero(), NUDGE_SOURCE_LOCAL, nudge_types, FROM_HERE); | 776 zero(), NUDGE_SOURCE_LOCAL, nudge_types, FROM_HERE); |
787 scheduler()->ScheduleNudgeAsync( | 777 scheduler()->ScheduleNudgeAsync( |
788 zero(), NUDGE_SOURCE_LOCAL, nudge_types, FROM_HERE); | 778 zero(), NUDGE_SOURCE_LOCAL, nudge_types, FROM_HERE); |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
893 scheduler()->ScheduleNudgeAsync( | 883 scheduler()->ScheduleNudgeAsync( |
894 poll * 10, NUDGE_SOURCE_LOCAL, types, FROM_HERE); | 884 poll * 10, NUDGE_SOURCE_LOCAL, types, FROM_HERE); |
895 RunLoop(); | 885 RunLoop(); |
896 | 886 |
897 Mock::VerifyAndClearExpectations(syncer()); | 887 Mock::VerifyAndClearExpectations(syncer()); |
898 Mock::VerifyAndClearExpectations(delay()); | 888 Mock::VerifyAndClearExpectations(delay()); |
899 ASSERT_EQ(2U, r.snapshots.size()); | 889 ASSERT_EQ(2U, r.snapshots.size()); |
900 EXPECT_EQ(GetUpdatesCallerInfo::LOCAL, | 890 EXPECT_EQ(GetUpdatesCallerInfo::LOCAL, |
901 r.snapshots[1].source().updates_source); | 891 r.snapshots[1].source().updates_source); |
902 | 892 |
903 // Cleanup is not affected by backoff, but it should not relieve it either. | |
904 EXPECT_CALL(*syncer(), | |
905 SyncShare(_, CLEANUP_DISABLED_TYPES, CLEANUP_DISABLED_TYPES)) | |
906 .WillOnce(Invoke(sessions::test_util::SimulateSuccess)); | |
907 EXPECT_CALL(*delay(), GetDelay(_)).Times(0); | 893 EXPECT_CALL(*delay(), GetDelay(_)).Times(0); |
908 | 894 |
909 StartSyncScheduler(SyncScheduler::CONFIGURATION_MODE); | 895 StartSyncScheduler(SyncScheduler::CONFIGURATION_MODE); |
910 | 896 |
911 CallbackCounter counter; | 897 CallbackCounter counter; |
912 ConfigurationParams params( | 898 ConfigurationParams params( |
913 GetUpdatesCallerInfo::RECONFIGURATION, | 899 GetUpdatesCallerInfo::RECONFIGURATION, |
914 types, | 900 types, |
915 TypesToRoutingInfo(types), | 901 TypesToRoutingInfo(types), |
916 ConfigurationParams::KEYSTORE_KEY_UNNECESSARY, | 902 ConfigurationParams::KEYSTORE_KEY_UNNECESSARY, |
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1070 | 1056 |
1071 scheduler()->ScheduleNudgeAsync( | 1057 scheduler()->ScheduleNudgeAsync( |
1072 zero(), NUDGE_SOURCE_LOCAL, ModelTypeSet(), FROM_HERE); | 1058 zero(), NUDGE_SOURCE_LOCAL, ModelTypeSet(), FROM_HERE); |
1073 PumpLoop(); | 1059 PumpLoop(); |
1074 // Pump again to run job. | 1060 // Pump again to run job. |
1075 PumpLoop(); | 1061 PumpLoop(); |
1076 | 1062 |
1077 StopSyncScheduler(); | 1063 StopSyncScheduler(); |
1078 Mock::VerifyAndClearExpectations(syncer()); | 1064 Mock::VerifyAndClearExpectations(syncer()); |
1079 | 1065 |
1080 // Configuration (always includes a cleanup disabled types). | 1066 // Configuration. |
1081 EXPECT_CALL(*syncer(), | |
1082 SyncShare(_, CLEANUP_DISABLED_TYPES, CLEANUP_DISABLED_TYPES)) | |
1083 .WillOnce(Invoke(sessions::test_util::SimulateSuccess)); | |
1084 EXPECT_CALL(*syncer(), SyncShare(_, DOWNLOAD_UPDATES, APPLY_UPDATES)) | 1067 EXPECT_CALL(*syncer(), SyncShare(_, DOWNLOAD_UPDATES, APPLY_UPDATES)) |
1085 .WillOnce(Invoke(sessions::test_util::SimulateSuccess)); | 1068 .WillOnce(Invoke(sessions::test_util::SimulateSuccess)); |
1086 StartSyncScheduler(SyncScheduler::CONFIGURATION_MODE); | 1069 StartSyncScheduler(SyncScheduler::CONFIGURATION_MODE); |
1087 | 1070 |
1088 ModelTypeSet model_types(BOOKMARKS); | 1071 ModelTypeSet model_types(BOOKMARKS); |
1089 CallbackCounter counter; | 1072 CallbackCounter counter; |
1090 ConfigurationParams params( | 1073 ConfigurationParams params( |
1091 GetUpdatesCallerInfo::RECONFIGURATION, | 1074 GetUpdatesCallerInfo::RECONFIGURATION, |
1092 model_types, | 1075 model_types, |
1093 TypesToRoutingInfo(model_types), | 1076 TypesToRoutingInfo(model_types), |
1094 ConfigurationParams::KEYSTORE_KEY_UNNECESSARY, | 1077 ConfigurationParams::KEYSTORE_KEY_UNNECESSARY, |
1095 base::Bind(&CallbackCounter::Callback, base::Unretained(&counter))); | 1078 base::Bind(&CallbackCounter::Callback, base::Unretained(&counter))); |
1096 ASSERT_TRUE(scheduler()->ScheduleConfiguration(params)); | 1079 ASSERT_TRUE(scheduler()->ScheduleConfiguration(params)); |
1097 ASSERT_EQ(1, counter.times_called()); | 1080 ASSERT_EQ(1, counter.times_called()); |
1098 // Runs directly so no need to pump the loop. | 1081 // Runs directly so no need to pump the loop. |
1099 StopSyncScheduler(); | 1082 StopSyncScheduler(); |
1100 Mock::VerifyAndClearExpectations(syncer()); | 1083 Mock::VerifyAndClearExpectations(syncer()); |
1101 | 1084 |
1102 // Cleanup disabled types. Because no types are being configured, we just | |
1103 // perform the cleanup. | |
1104 EXPECT_CALL(*syncer(), | |
1105 SyncShare(_, CLEANUP_DISABLED_TYPES, CLEANUP_DISABLED_TYPES)). | |
1106 WillOnce(Invoke(sessions::test_util::SimulateSuccess)); | |
1107 StartSyncScheduler(SyncScheduler::CONFIGURATION_MODE); | |
1108 | |
1109 CallbackCounter counter2; | |
1110 ConfigurationParams params2( | |
1111 GetUpdatesCallerInfo::RECONFIGURATION, | |
1112 ModelTypeSet(), | |
1113 ModelSafeRoutingInfo(), | |
1114 ConfigurationParams::KEYSTORE_KEY_UNNECESSARY, | |
1115 base::Bind(&CallbackCounter::Callback, base::Unretained(&counter2))); | |
1116 ASSERT_TRUE(scheduler()->ScheduleConfiguration(params2)); | |
1117 ASSERT_EQ(1, counter2.times_called()); | |
1118 StopSyncScheduler(); | |
1119 Mock::VerifyAndClearExpectations(syncer()); | |
1120 | |
1121 StartSyncScheduler(SyncScheduler::NORMAL_MODE); | 1085 StartSyncScheduler(SyncScheduler::NORMAL_MODE); |
1122 | 1086 |
1123 // Poll. | 1087 // Poll. |
1124 EXPECT_CALL(*syncer(), SyncShare(_, SYNCER_BEGIN, SYNCER_END)) | 1088 EXPECT_CALL(*syncer(), SyncShare(_, SYNCER_BEGIN, SYNCER_END)) |
1125 .Times(AtLeast(1)) | 1089 .Times(AtLeast(1)) |
1126 .WillRepeatedly(DoAll(Invoke(sessions::test_util::SimulateSuccess), | 1090 .WillRepeatedly(DoAll(Invoke(sessions::test_util::SimulateSuccess), |
1127 QuitLoopNowAction())); | 1091 QuitLoopNowAction())); |
1128 const TimeDelta poll(TimeDelta::FromMilliseconds(10)); | 1092 const TimeDelta poll(TimeDelta::FromMilliseconds(10)); |
1129 scheduler()->OnReceivedLongPollIntervalUpdate(poll); | 1093 scheduler()->OnReceivedLongPollIntervalUpdate(poll); |
1130 | 1094 |
(...skipping 25 matching lines...) Expand all Loading... |
1156 zero(), NUDGE_SOURCE_LOCAL, ModelTypeSet(), FROM_HERE); | 1120 zero(), NUDGE_SOURCE_LOCAL, ModelTypeSet(), FROM_HERE); |
1157 // Should save the nudge for until after the server is reachable. | 1121 // Should save the nudge for until after the server is reachable. |
1158 MessageLoop::current()->RunAllPending(); | 1122 MessageLoop::current()->RunAllPending(); |
1159 | 1123 |
1160 connection()->SetServerReachable(); | 1124 connection()->SetServerReachable(); |
1161 connection()->UpdateConnectionStatus(); | 1125 connection()->UpdateConnectionStatus(); |
1162 scheduler()->OnConnectionStatusChange(); | 1126 scheduler()->OnConnectionStatusChange(); |
1163 MessageLoop::current()->RunAllPending(); | 1127 MessageLoop::current()->RunAllPending(); |
1164 } | 1128 } |
1165 | 1129 |
1166 TEST_F(SyncSchedulerTest, SetsPreviousRoutingInfo) { | |
1167 ModelSafeRoutingInfo info; | |
1168 EXPECT_TRUE(info == context()->previous_session_routing_info()); | |
1169 ModelSafeRoutingInfo expected(context()->routing_info()); | |
1170 ASSERT_FALSE(expected.empty()); | |
1171 EXPECT_CALL(*syncer(), SyncShare(_,_,_)).Times(1); | |
1172 | |
1173 StartSyncScheduler(SyncScheduler::NORMAL_MODE); | |
1174 | |
1175 scheduler()->ScheduleNudgeAsync( | |
1176 zero(), NUDGE_SOURCE_LOCAL, ModelTypeSet(), FROM_HERE); | |
1177 PumpLoop(); | |
1178 // Pump again to run job. | |
1179 PumpLoop(); | |
1180 | |
1181 StopSyncScheduler(); | |
1182 | |
1183 EXPECT_TRUE(expected == context()->previous_session_routing_info()); | |
1184 } | |
1185 | |
1186 } // namespace syncer | 1130 } // namespace syncer |
OLD | NEW |