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

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

Issue 10537032: [Sync] Fix sync scheduler/session logic determining successful commands. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Remove comment Created 8 years, 6 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.cc ('k') | sync/engine/syncer.cc » ('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 715 matching lines...) Expand 10 before | Expand all | Expand 10 after
726 StartSyncScheduler(SyncScheduler::NORMAL_MODE); 726 StartSyncScheduler(SyncScheduler::NORMAL_MODE);
727 RunLoop(); 727 RunLoop();
728 728
729 scheduler()->ScheduleNudge( 729 scheduler()->ScheduleNudge(
730 zero(), NUDGE_SOURCE_LOCAL, ModelTypeSet(), FROM_HERE); 730 zero(), NUDGE_SOURCE_LOCAL, ModelTypeSet(), FROM_HERE);
731 RunLoop(); 731 RunLoop();
732 // If more nudges are scheduled, they'll be waited on by TearDown, and would 732 // If more nudges are scheduled, they'll be waited on by TearDown, and would
733 // cause our expectation to break. 733 // cause our expectation to break.
734 } 734 }
735 735
736 // Test that continuations can go into backoff.
737 TEST_F(SyncSchedulerTest, HasMoreToSyncThenFails) {
738 EXPECT_CALL(*syncer(), SyncShare(_,_,_))
739 .WillOnce(Invoke(sessions::test_util::SimulateHasMoreToSync))
740 .WillOnce(DoAll(Invoke(sessions::test_util::SimulateCommitFailed),
741 QuitLoopNowAction()));
742 StartSyncScheduler(SyncScheduler::NORMAL_MODE);
743 RunLoop();
744
745 scheduler()->ScheduleNudge(
746 zero(), NUDGE_SOURCE_LOCAL, ModelTypeSet(), FROM_HERE);
747
748 // We should detect the failure on the second sync share, and go into backoff.
749 EXPECT_TRUE(RunAndGetBackoff());
750 }
751
736 // Test that no syncing occurs when throttled. 752 // Test that no syncing occurs when throttled.
737 TEST_F(SyncSchedulerTest, ThrottlingDoesThrottle) { 753 TEST_F(SyncSchedulerTest, ThrottlingDoesThrottle) {
738 const ModelTypeSet types(syncable::BOOKMARKS); 754 const ModelTypeSet types(syncable::BOOKMARKS);
739 TimeDelta poll(TimeDelta::FromMilliseconds(5)); 755 TimeDelta poll(TimeDelta::FromMilliseconds(5));
740 TimeDelta throttle(TimeDelta::FromMinutes(10)); 756 TimeDelta throttle(TimeDelta::FromMinutes(10));
741 scheduler()->OnReceivedLongPollIntervalUpdate(poll); 757 scheduler()->OnReceivedLongPollIntervalUpdate(poll);
742 EXPECT_CALL(*syncer(), SyncShare(_,_,_)) 758 EXPECT_CALL(*syncer(), SyncShare(_,_,_))
743 .WillOnce(WithArg<0>(sessions::test_util::SimulateThrottled(throttle))) 759 .WillOnce(WithArg<0>(sessions::test_util::SimulateThrottled(throttle)))
744 .WillRepeatedly(AddFailureAndQuitLoopNow()); 760 .WillRepeatedly(AddFailureAndQuitLoopNow());
745 761
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
855 // Test that no polls or extraneous nudges occur when in backoff. 871 // Test that no polls or extraneous nudges occur when in backoff.
856 TEST_F(SyncSchedulerTest, BackoffDropsJobs) { 872 TEST_F(SyncSchedulerTest, BackoffDropsJobs) {
857 SyncShareRecords r; 873 SyncShareRecords r;
858 TimeDelta poll(TimeDelta::FromMilliseconds(5)); 874 TimeDelta poll(TimeDelta::FromMilliseconds(5));
859 const ModelTypeSet types(syncable::BOOKMARKS); 875 const ModelTypeSet types(syncable::BOOKMARKS);
860 scheduler()->OnReceivedLongPollIntervalUpdate(poll); 876 scheduler()->OnReceivedLongPollIntervalUpdate(poll);
861 UseMockDelayProvider(); 877 UseMockDelayProvider();
862 878
863 EXPECT_CALL(*syncer(), SyncShare(_,_,_)).Times(1) 879 EXPECT_CALL(*syncer(), SyncShare(_,_,_)).Times(1)
864 .WillRepeatedly(DoAll(Invoke(sessions::test_util::SimulateCommitFailed), 880 .WillRepeatedly(DoAll(Invoke(sessions::test_util::SimulateCommitFailed),
865 RecordSyncShareMultiple(&r, 1U))); 881 RecordSyncShareMultiple(&r, 1U)));
866 EXPECT_CALL(*delay(), GetDelay(_)). 882 EXPECT_CALL(*delay(), GetDelay(_)).
867 WillRepeatedly(Return(TimeDelta::FromDays(1))); 883 WillRepeatedly(Return(TimeDelta::FromDays(1)));
868 884
869 StartSyncScheduler(SyncScheduler::NORMAL_MODE); 885 StartSyncScheduler(SyncScheduler::NORMAL_MODE);
870 RunLoop(); 886 RunLoop();
871 887
872 // This nudge should fail and put us into backoff. Thanks to our mock 888 // This nudge should fail and put us into backoff. Thanks to our mock
873 // GetDelay() setup above, this will be a long backoff. 889 // GetDelay() setup above, this will be a long backoff.
874 scheduler()->ScheduleNudge(zero(), NUDGE_SOURCE_LOCAL, types, FROM_HERE); 890 scheduler()->ScheduleNudge(zero(), NUDGE_SOURCE_LOCAL, types, FROM_HERE);
875 RunLoop(); 891 RunLoop();
876 892
877 Mock::VerifyAndClearExpectations(syncer()); 893 Mock::VerifyAndClearExpectations(syncer());
878 ASSERT_EQ(1U, r.snapshots.size()); 894 ASSERT_EQ(1U, r.snapshots.size());
879 EXPECT_EQ(GetUpdatesCallerInfo::LOCAL, 895 EXPECT_EQ(GetUpdatesCallerInfo::LOCAL,
880 r.snapshots[0].source().updates_source); 896 r.snapshots[0].source().updates_source);
881 897
882 EXPECT_CALL(*syncer(), SyncShare(_,_,_)).Times(1) 898 EXPECT_CALL(*syncer(), SyncShare(_,_,_)).Times(1)
883 .WillOnce(DoAll(Invoke(sessions::test_util::SimulateCommitFailed), 899 .WillOnce(DoAll(Invoke(sessions::test_util::SimulateCommitFailed),
884 RecordSyncShare(&r))); 900 RecordSyncShare(&r)));
885 901
886 // We schedule a nudge with enough delay (10X poll interval) that at least 902 // We schedule a nudge with enough delay (10X poll interval) that at least
887 // one or two polls would have taken place. The nudge should succeed. 903 // one or two polls would have taken place. The nudge should succeed.
888 scheduler()->ScheduleNudge(poll * 10, NUDGE_SOURCE_LOCAL, types, FROM_HERE); 904 scheduler()->ScheduleNudge(poll * 10, NUDGE_SOURCE_LOCAL, types, FROM_HERE);
889 RunLoop(); 905 RunLoop();
890 906
891 Mock::VerifyAndClearExpectations(syncer()); 907 Mock::VerifyAndClearExpectations(syncer());
892 Mock::VerifyAndClearExpectations(delay()); 908 Mock::VerifyAndClearExpectations(delay());
893 ASSERT_EQ(2U, r.snapshots.size()); 909 ASSERT_EQ(2U, r.snapshots.size());
894 EXPECT_EQ(GetUpdatesCallerInfo::LOCAL, 910 EXPECT_EQ(GetUpdatesCallerInfo::LOCAL,
895 r.snapshots[1].source().updates_source); 911 r.snapshots[1].source().updates_source);
896 912
897 EXPECT_CALL(*syncer(), SyncShare(_,_,_)).Times(0); 913 // Cleanup is not affected by backoff, but it should not relieve it either.
914 EXPECT_CALL(*syncer(),
915 SyncShare(_, CLEANUP_DISABLED_TYPES, CLEANUP_DISABLED_TYPES))
916 .WillOnce(Invoke(sessions::test_util::SimulateSuccess));
898 EXPECT_CALL(*delay(), GetDelay(_)).Times(0); 917 EXPECT_CALL(*delay(), GetDelay(_)).Times(0);
899 918
900 StartSyncScheduler(SyncScheduler::CONFIGURATION_MODE); 919 StartSyncScheduler(SyncScheduler::CONFIGURATION_MODE);
901 RunLoop(); 920 RunLoop();
902 921
922 scheduler()->ScheduleCleanupDisabledTypes();
903 scheduler()->ScheduleConfig( 923 scheduler()->ScheduleConfig(
904 types, GetUpdatesCallerInfo::RECONFIGURATION); 924 types, GetUpdatesCallerInfo::RECONFIGURATION);
905 PumpLoop(); 925 PumpLoop();
906 926
907 StartSyncScheduler(SyncScheduler::NORMAL_MODE); 927 StartSyncScheduler(SyncScheduler::NORMAL_MODE);
908 RunLoop(); 928 RunLoop();
909 929
910 scheduler()->ScheduleNudge( 930 scheduler()->ScheduleNudge(
911 zero(), NUDGE_SOURCE_LOCAL, types, FROM_HERE); 931 zero(), NUDGE_SOURCE_LOCAL, types, FROM_HERE);
912 scheduler()->ScheduleNudge( 932 scheduler()->ScheduleNudge(
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
1046 TimeDelta::FromSeconds(kMaxBackoffSeconds))); 1066 TimeDelta::FromSeconds(kMaxBackoffSeconds)));
1047 EXPECT_EQ(TimeDelta::FromSeconds(kMaxBackoffSeconds), 1067 EXPECT_EQ(TimeDelta::FromSeconds(kMaxBackoffSeconds),
1048 SyncScheduler::GetRecommendedDelay( 1068 SyncScheduler::GetRecommendedDelay(
1049 TimeDelta::FromSeconds(kMaxBackoffSeconds + 1))); 1069 TimeDelta::FromSeconds(kMaxBackoffSeconds + 1)));
1050 } 1070 }
1051 1071
1052 // Test that appropriate syncer steps are requested for each job type. 1072 // Test that appropriate syncer steps are requested for each job type.
1053 TEST_F(SyncSchedulerTest, SyncerSteps) { 1073 TEST_F(SyncSchedulerTest, SyncerSteps) {
1054 // Nudges. 1074 // Nudges.
1055 EXPECT_CALL(*syncer(), SyncShare(_, SYNCER_BEGIN, SYNCER_END)) 1075 EXPECT_CALL(*syncer(), SyncShare(_, SYNCER_BEGIN, SYNCER_END))
1056 .Times(1); 1076 .WillOnce(Invoke(sessions::test_util::SimulateSuccess));
1057 StartSyncScheduler(SyncScheduler::NORMAL_MODE); 1077 StartSyncScheduler(SyncScheduler::NORMAL_MODE);
1058 RunLoop(); 1078 RunLoop();
1059 1079
1060 scheduler()->ScheduleNudge( 1080 scheduler()->ScheduleNudge(
1061 zero(), NUDGE_SOURCE_LOCAL, ModelTypeSet(), FROM_HERE); 1081 zero(), NUDGE_SOURCE_LOCAL, ModelTypeSet(), FROM_HERE);
1062 PumpLoop(); 1082 PumpLoop();
1063 // Pump again to run job. 1083 // Pump again to run job.
1064 PumpLoop(); 1084 PumpLoop();
1065 1085
1066 StopSyncScheduler(); 1086 StopSyncScheduler();
1067 Mock::VerifyAndClearExpectations(syncer()); 1087 Mock::VerifyAndClearExpectations(syncer());
1068 1088
1069 // ClearUserData. 1089 // ClearUserData.
1070 EXPECT_CALL(*syncer(), SyncShare(_, CLEAR_PRIVATE_DATA, CLEAR_PRIVATE_DATA)) 1090 EXPECT_CALL(*syncer(), SyncShare(_, CLEAR_PRIVATE_DATA, CLEAR_PRIVATE_DATA))
1071 .Times(1); 1091 .WillOnce(Invoke(sessions::test_util::SimulateSuccess));
1072 StartSyncScheduler(SyncScheduler::NORMAL_MODE); 1092 StartSyncScheduler(SyncScheduler::NORMAL_MODE);
1073 RunLoop(); 1093 RunLoop();
1074 1094
1075 scheduler()->ScheduleClearUserData(); 1095 scheduler()->ScheduleClearUserData();
1076 PumpLoop(); 1096 PumpLoop();
1077 PumpLoop(); 1097 PumpLoop();
1078 1098
1079 StopSyncScheduler(); 1099 StopSyncScheduler();
1080 Mock::VerifyAndClearExpectations(syncer()); 1100 Mock::VerifyAndClearExpectations(syncer());
1081 1101
1082 // Configuration. 1102 // Configuration.
1083 EXPECT_CALL(*syncer(), SyncShare(_, DOWNLOAD_UPDATES, APPLY_UPDATES)); 1103 EXPECT_CALL(*syncer(), SyncShare(_, DOWNLOAD_UPDATES, APPLY_UPDATES))
1104 .WillOnce(Invoke(sessions::test_util::SimulateSuccess));
1084 StartSyncScheduler(SyncScheduler::CONFIGURATION_MODE); 1105 StartSyncScheduler(SyncScheduler::CONFIGURATION_MODE);
1085 RunLoop(); 1106 RunLoop();
1086 1107
1087 scheduler()->ScheduleConfig( 1108 scheduler()->ScheduleConfig(
1088 ModelTypeSet(), GetUpdatesCallerInfo::RECONFIGURATION); 1109 ModelTypeSet(), GetUpdatesCallerInfo::RECONFIGURATION);
1089 PumpLoop(); 1110 PumpLoop();
1090 PumpLoop(); 1111 PumpLoop();
1091 1112
1092 StopSyncScheduler(); 1113 StopSyncScheduler();
1093 Mock::VerifyAndClearExpectations(syncer()); 1114 Mock::VerifyAndClearExpectations(syncer());
1094 1115
1095 // Cleanup disabled types. 1116 // Cleanup disabled types.
1096 EXPECT_CALL(*syncer(), 1117 EXPECT_CALL(*syncer(),
1097 SyncShare(_, CLEANUP_DISABLED_TYPES, CLEANUP_DISABLED_TYPES)); 1118 SyncShare(_, CLEANUP_DISABLED_TYPES, CLEANUP_DISABLED_TYPES))
1119 .WillOnce(Invoke(sessions::test_util::SimulateSuccess));
1098 StartSyncScheduler(SyncScheduler::NORMAL_MODE); 1120 StartSyncScheduler(SyncScheduler::NORMAL_MODE);
1099 RunLoop(); 1121 RunLoop();
1100 1122
1101 scheduler()->ScheduleCleanupDisabledTypes(); 1123 scheduler()->ScheduleCleanupDisabledTypes();
1102 // Only need to pump once, as ScheduleCleanupDisabledTypes() 1124 // Only need to pump once, as ScheduleCleanupDisabledTypes()
1103 // schedules the job directly. 1125 // schedules the job directly.
1104 PumpLoop(); 1126 PumpLoop();
1105 1127
1106 StopSyncScheduler(); 1128 StopSyncScheduler();
1107 Mock::VerifyAndClearExpectations(syncer()); 1129 Mock::VerifyAndClearExpectations(syncer());
1108 1130
1109 // Poll. 1131 // Poll.
1110 EXPECT_CALL(*syncer(), SyncShare(_, SYNCER_BEGIN, SYNCER_END)) 1132 EXPECT_CALL(*syncer(), SyncShare(_, SYNCER_BEGIN, SYNCER_END))
1111 .Times(AtLeast(1)) 1133 .Times(AtLeast(1))
1112 .WillRepeatedly(QuitLoopNowAction()); 1134 .WillRepeatedly(DoAll(Invoke(sessions::test_util::SimulateSuccess),
1135 QuitLoopNowAction()));
1113 const TimeDelta poll(TimeDelta::FromMilliseconds(10)); 1136 const TimeDelta poll(TimeDelta::FromMilliseconds(10));
1114 scheduler()->OnReceivedLongPollIntervalUpdate(poll); 1137 scheduler()->OnReceivedLongPollIntervalUpdate(poll);
1115 1138
1116 StartSyncScheduler(SyncScheduler::NORMAL_MODE); 1139 StartSyncScheduler(SyncScheduler::NORMAL_MODE);
1117 RunLoop(); 1140 RunLoop();
1118 1141
1119 // Run again to wait for polling. 1142 // Run again to wait for polling.
1120 RunLoop(); 1143 RunLoop();
1121 1144
1122 StopSyncScheduler(); 1145 StopSyncScheduler();
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
1165 PumpLoop(); 1188 PumpLoop();
1166 // Pump again to run job. 1189 // Pump again to run job.
1167 PumpLoop(); 1190 PumpLoop();
1168 1191
1169 StopSyncScheduler(); 1192 StopSyncScheduler();
1170 1193
1171 EXPECT_TRUE(expected == context()->previous_session_routing_info()); 1194 EXPECT_TRUE(expected == context()->previous_session_routing_info());
1172 } 1195 }
1173 1196
1174 } // namespace browser_sync 1197 } // namespace browser_sync
OLDNEW
« no previous file with comments | « sync/engine/sync_scheduler.cc ('k') | sync/engine/syncer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698