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