Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(442)

Side by Side Diff: sync/engine/sync_scheduler_unittest.cc

Issue 10829086: Reland 148792 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « sync/engine/sync_scheduler_impl.cc ('k') | sync/engine/syncer.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « sync/engine/sync_scheduler_impl.cc ('k') | sync/engine/syncer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698