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 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
113 workers_.begin(); it != workers_.end(); ++it) { | 113 workers_.begin(); it != workers_.end(); ++it) { |
114 workers.push_back(it->get()); | 114 workers.push_back(it->get()); |
115 } | 115 } |
116 | 116 |
117 connection_.reset(new MockConnectionManager(directory())); | 117 connection_.reset(new MockConnectionManager(directory())); |
118 connection_->SetServerReachable(); | 118 connection_->SetServerReachable(); |
119 throttled_data_type_tracker_.reset(new ThrottledDataTypeTracker(NULL)); | 119 throttled_data_type_tracker_.reset(new ThrottledDataTypeTracker(NULL)); |
120 context_.reset(new SyncSessionContext( | 120 context_.reset(new SyncSessionContext( |
121 connection_.get(), directory(), workers, | 121 connection_.get(), directory(), workers, |
122 &extensions_activity_monitor_, throttled_data_type_tracker_.get(), | 122 &extensions_activity_monitor_, throttled_data_type_tracker_.get(), |
123 std::vector<SyncEngineEventListener*>(), NULL, NULL)); | 123 std::vector<SyncEngineEventListener*>(), NULL, NULL, |
| 124 true /* enable keystore encryption */)); |
124 context_->set_routing_info(routing_info); | 125 context_->set_routing_info(routing_info); |
125 context_->set_notifications_enabled(true); | 126 context_->set_notifications_enabled(true); |
126 context_->set_account_name("Test"); | 127 context_->set_account_name("Test"); |
127 scheduler_.reset( | 128 scheduler_.reset( |
128 new SyncSchedulerImpl("TestSyncScheduler", context(), syncer_)); | 129 new SyncSchedulerImpl("TestSyncScheduler", context(), syncer_)); |
129 } | 130 } |
130 | 131 |
131 SyncSchedulerImpl* scheduler() { return scheduler_.get(); } | 132 SyncSchedulerImpl* scheduler() { return scheduler_.get(); } |
132 MockSyncer* syncer() { return syncer_; } | 133 MockSyncer* syncer() { return syncer_; } |
133 MockDelayProvider* delay() { return delay_; } | 134 MockDelayProvider* delay() { return delay_; } |
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
305 .WillOnce(DoAll(Invoke(sessions::test_util::SimulateSuccess), | 306 .WillOnce(DoAll(Invoke(sessions::test_util::SimulateSuccess), |
306 WithArg<0>(RecordSyncShare(&records)))); | 307 WithArg<0>(RecordSyncShare(&records)))); |
307 | 308 |
308 StartSyncScheduler(SyncScheduler::CONFIGURATION_MODE); | 309 StartSyncScheduler(SyncScheduler::CONFIGURATION_MODE); |
309 | 310 |
310 CallbackCounter counter; | 311 CallbackCounter counter; |
311 ConfigurationParams params( | 312 ConfigurationParams params( |
312 GetUpdatesCallerInfo::RECONFIGURATION, | 313 GetUpdatesCallerInfo::RECONFIGURATION, |
313 model_types, | 314 model_types, |
314 TypesToRoutingInfo(model_types), | 315 TypesToRoutingInfo(model_types), |
315 ConfigurationParams::KEYSTORE_KEY_UNNECESSARY, | |
316 base::Bind(&CallbackCounter::Callback, base::Unretained(&counter))); | 316 base::Bind(&CallbackCounter::Callback, base::Unretained(&counter))); |
317 ASSERT_TRUE(scheduler()->ScheduleConfiguration(params)); | 317 ASSERT_TRUE(scheduler()->ScheduleConfiguration(params)); |
318 ASSERT_EQ(1, counter.times_called()); | 318 ASSERT_EQ(1, counter.times_called()); |
319 | 319 |
320 ASSERT_EQ(1U, records.snapshots.size()); | 320 ASSERT_EQ(1U, records.snapshots.size()); |
321 EXPECT_TRUE(CompareModelTypeSetToModelTypePayloadMap(model_types, | 321 EXPECT_TRUE(CompareModelTypeSetToModelTypePayloadMap(model_types, |
322 records.snapshots[0].source().types)); | 322 records.snapshots[0].source().types)); |
323 EXPECT_EQ(GetUpdatesCallerInfo::RECONFIGURATION, | 323 EXPECT_EQ(GetUpdatesCallerInfo::RECONFIGURATION, |
324 records.snapshots[0].source().updates_source); | 324 records.snapshots[0].source().updates_source); |
325 } | 325 } |
(...skipping 13 matching lines...) Expand all Loading... |
339 WithArg<0>(RecordSyncShare(&records)))); | 339 WithArg<0>(RecordSyncShare(&records)))); |
340 | 340 |
341 StartSyncScheduler(SyncScheduler::CONFIGURATION_MODE); | 341 StartSyncScheduler(SyncScheduler::CONFIGURATION_MODE); |
342 | 342 |
343 ASSERT_EQ(0U, records.snapshots.size()); | 343 ASSERT_EQ(0U, records.snapshots.size()); |
344 CallbackCounter counter; | 344 CallbackCounter counter; |
345 ConfigurationParams params( | 345 ConfigurationParams params( |
346 GetUpdatesCallerInfo::RECONFIGURATION, | 346 GetUpdatesCallerInfo::RECONFIGURATION, |
347 model_types, | 347 model_types, |
348 TypesToRoutingInfo(model_types), | 348 TypesToRoutingInfo(model_types), |
349 ConfigurationParams::KEYSTORE_KEY_UNNECESSARY, | |
350 base::Bind(&CallbackCounter::Callback, base::Unretained(&counter))); | 349 base::Bind(&CallbackCounter::Callback, base::Unretained(&counter))); |
351 ASSERT_FALSE(scheduler()->ScheduleConfiguration(params)); | 350 ASSERT_FALSE(scheduler()->ScheduleConfiguration(params)); |
352 ASSERT_EQ(0, counter.times_called()); | 351 ASSERT_EQ(0, counter.times_called()); |
353 | 352 |
354 ASSERT_EQ(1U, records.snapshots.size()); | 353 ASSERT_EQ(1U, records.snapshots.size()); |
355 RunLoop(); | 354 RunLoop(); |
356 | 355 |
357 ASSERT_EQ(2U, records.snapshots.size()); | 356 ASSERT_EQ(2U, records.snapshots.size()); |
358 ASSERT_EQ(1, counter.times_called()); | 357 ASSERT_EQ(1, counter.times_called()); |
359 EXPECT_TRUE(CompareModelTypeSetToModelTypePayloadMap(model_types, | 358 EXPECT_TRUE(CompareModelTypeSetToModelTypePayloadMap(model_types, |
(...skipping 22 matching lines...) Expand all Loading... |
382 WithArg<0>(RecordSyncShare(&records)))); | 381 WithArg<0>(RecordSyncShare(&records)))); |
383 | 382 |
384 StartSyncScheduler(SyncScheduler::CONFIGURATION_MODE); | 383 StartSyncScheduler(SyncScheduler::CONFIGURATION_MODE); |
385 | 384 |
386 ASSERT_EQ(0U, records.snapshots.size()); | 385 ASSERT_EQ(0U, records.snapshots.size()); |
387 CallbackCounter counter; | 386 CallbackCounter counter; |
388 ConfigurationParams params( | 387 ConfigurationParams params( |
389 GetUpdatesCallerInfo::RECONFIGURATION, | 388 GetUpdatesCallerInfo::RECONFIGURATION, |
390 model_types, | 389 model_types, |
391 TypesToRoutingInfo(model_types), | 390 TypesToRoutingInfo(model_types), |
392 ConfigurationParams::KEYSTORE_KEY_UNNECESSARY, | |
393 base::Bind(&CallbackCounter::Callback, base::Unretained(&counter))); | 391 base::Bind(&CallbackCounter::Callback, base::Unretained(&counter))); |
394 ASSERT_FALSE(scheduler()->ScheduleConfiguration(params)); | 392 ASSERT_FALSE(scheduler()->ScheduleConfiguration(params)); |
395 ASSERT_EQ(0, counter.times_called()); | 393 ASSERT_EQ(0, counter.times_called()); |
396 ASSERT_EQ(1U, records.snapshots.size()); | 394 ASSERT_EQ(1U, records.snapshots.size()); |
397 | 395 |
398 scheduler()->ScheduleNudgeAsync( | 396 scheduler()->ScheduleNudgeAsync( |
399 zero(), NUDGE_SOURCE_LOCAL, model_types, FROM_HERE); | 397 zero(), NUDGE_SOURCE_LOCAL, model_types, FROM_HERE); |
400 RunLoop(); | 398 RunLoop(); |
401 ASSERT_EQ(2U, records.snapshots.size()); | 399 ASSERT_EQ(2U, records.snapshots.size()); |
402 ASSERT_EQ(0, counter.times_called()); | 400 ASSERT_EQ(0, counter.times_called()); |
(...skipping 320 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
723 zero(), NUDGE_SOURCE_LOCAL, types, FROM_HERE); | 721 zero(), NUDGE_SOURCE_LOCAL, types, FROM_HERE); |
724 PumpLoop(); | 722 PumpLoop(); |
725 | 723 |
726 StartSyncScheduler(SyncScheduler::CONFIGURATION_MODE); | 724 StartSyncScheduler(SyncScheduler::CONFIGURATION_MODE); |
727 | 725 |
728 CallbackCounter counter; | 726 CallbackCounter counter; |
729 ConfigurationParams params( | 727 ConfigurationParams params( |
730 GetUpdatesCallerInfo::RECONFIGURATION, | 728 GetUpdatesCallerInfo::RECONFIGURATION, |
731 types, | 729 types, |
732 TypesToRoutingInfo(types), | 730 TypesToRoutingInfo(types), |
733 ConfigurationParams::KEYSTORE_KEY_UNNECESSARY, | |
734 base::Bind(&CallbackCounter::Callback, base::Unretained(&counter))); | 731 base::Bind(&CallbackCounter::Callback, base::Unretained(&counter))); |
735 ASSERT_FALSE(scheduler()->ScheduleConfiguration(params)); | 732 ASSERT_FALSE(scheduler()->ScheduleConfiguration(params)); |
736 ASSERT_EQ(0, counter.times_called()); | 733 ASSERT_EQ(0, counter.times_called()); |
737 } | 734 } |
738 | 735 |
739 TEST_F(SyncSchedulerTest, ThrottlingExpires) { | 736 TEST_F(SyncSchedulerTest, ThrottlingExpires) { |
740 SyncShareRecords records; | 737 SyncShareRecords records; |
741 TimeDelta poll(TimeDelta::FromMilliseconds(15)); | 738 TimeDelta poll(TimeDelta::FromMilliseconds(15)); |
742 TimeDelta throttle1(TimeDelta::FromMilliseconds(150)); | 739 TimeDelta throttle1(TimeDelta::FromMilliseconds(150)); |
743 scheduler()->OnReceivedLongPollIntervalUpdate(poll); | 740 scheduler()->OnReceivedLongPollIntervalUpdate(poll); |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
777 scheduler()->ScheduleNudgeAsync( | 774 scheduler()->ScheduleNudgeAsync( |
778 zero(), NUDGE_SOURCE_LOCAL, nudge_types, FROM_HERE); | 775 zero(), NUDGE_SOURCE_LOCAL, nudge_types, FROM_HERE); |
779 | 776 |
780 const ModelTypeSet config_types(BOOKMARKS); | 777 const ModelTypeSet config_types(BOOKMARKS); |
781 | 778 |
782 CallbackCounter counter; | 779 CallbackCounter counter; |
783 ConfigurationParams params( | 780 ConfigurationParams params( |
784 GetUpdatesCallerInfo::RECONFIGURATION, | 781 GetUpdatesCallerInfo::RECONFIGURATION, |
785 config_types, | 782 config_types, |
786 TypesToRoutingInfo(config_types), | 783 TypesToRoutingInfo(config_types), |
787 ConfigurationParams::KEYSTORE_KEY_UNNECESSARY, | |
788 base::Bind(&CallbackCounter::Callback, base::Unretained(&counter))); | 784 base::Bind(&CallbackCounter::Callback, base::Unretained(&counter))); |
789 ASSERT_TRUE(scheduler()->ScheduleConfiguration(params)); | 785 ASSERT_TRUE(scheduler()->ScheduleConfiguration(params)); |
790 ASSERT_EQ(1, counter.times_called()); | 786 ASSERT_EQ(1, counter.times_called()); |
791 | 787 |
792 ASSERT_EQ(1U, records.snapshots.size()); | 788 ASSERT_EQ(1U, records.snapshots.size()); |
793 EXPECT_TRUE(CompareModelTypeSetToModelTypePayloadMap(config_types, | 789 EXPECT_TRUE(CompareModelTypeSetToModelTypePayloadMap(config_types, |
794 records.snapshots[0].source().types)); | 790 records.snapshots[0].source().types)); |
795 } | 791 } |
796 | 792 |
797 class BackoffTriggersSyncSchedulerTest : public SyncSchedulerTest { | 793 class BackoffTriggersSyncSchedulerTest : public SyncSchedulerTest { |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
841 // Expect this will leave the scheduler in backoff. | 837 // Expect this will leave the scheduler in backoff. |
842 TEST_F(BackoffTriggersSyncSchedulerTest, FailDownloadTwice) { | 838 TEST_F(BackoffTriggersSyncSchedulerTest, FailDownloadTwice) { |
843 EXPECT_CALL(*syncer(), SyncShare(_,_,_)) | 839 EXPECT_CALL(*syncer(), SyncShare(_,_,_)) |
844 .WillOnce(Invoke(sessions::test_util::SimulateDownloadUpdatesFailed)) | 840 .WillOnce(Invoke(sessions::test_util::SimulateDownloadUpdatesFailed)) |
845 .WillRepeatedly(DoAll( | 841 .WillRepeatedly(DoAll( |
846 Invoke(sessions::test_util::SimulateDownloadUpdatesFailed), | 842 Invoke(sessions::test_util::SimulateDownloadUpdatesFailed), |
847 QuitLoopNowAction())); | 843 QuitLoopNowAction())); |
848 EXPECT_TRUE(RunAndGetBackoff()); | 844 EXPECT_TRUE(RunAndGetBackoff()); |
849 } | 845 } |
850 | 846 |
| 847 // Have the syncer fail to get the encryption key yet succeed in downloading |
| 848 // updates. Expect this will leave the scheduler in backoff. |
| 849 TEST_F(BackoffTriggersSyncSchedulerTest, FailGetEncryptionKey) { |
| 850 EXPECT_CALL(*syncer(), SyncShare(_,_,_)) |
| 851 .WillOnce(Invoke(sessions::test_util::SimulateGetEncryptionKeyFailed)) |
| 852 .WillRepeatedly(DoAll( |
| 853 Invoke(sessions::test_util::SimulateGetEncryptionKeyFailed), |
| 854 QuitLoopNowAction())); |
| 855 EXPECT_TRUE(RunAndGetBackoff()); |
| 856 } |
| 857 |
851 // Test that no polls or extraneous nudges occur when in backoff. | 858 // Test that no polls or extraneous nudges occur when in backoff. |
852 TEST_F(SyncSchedulerTest, BackoffDropsJobs) { | 859 TEST_F(SyncSchedulerTest, BackoffDropsJobs) { |
853 SyncShareRecords r; | 860 SyncShareRecords r; |
854 TimeDelta poll(TimeDelta::FromMilliseconds(5)); | 861 TimeDelta poll(TimeDelta::FromMilliseconds(5)); |
855 const ModelTypeSet types(BOOKMARKS); | 862 const ModelTypeSet types(BOOKMARKS); |
856 scheduler()->OnReceivedLongPollIntervalUpdate(poll); | 863 scheduler()->OnReceivedLongPollIntervalUpdate(poll); |
857 UseMockDelayProvider(); | 864 UseMockDelayProvider(); |
858 | 865 |
859 EXPECT_CALL(*syncer(), SyncShare(_,_,_)) | 866 EXPECT_CALL(*syncer(), SyncShare(_,_,_)) |
860 .WillRepeatedly(DoAll(Invoke(sessions::test_util::SimulateCommitFailed), | 867 .WillRepeatedly(DoAll(Invoke(sessions::test_util::SimulateCommitFailed), |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
892 | 899 |
893 EXPECT_CALL(*delay(), GetDelay(_)).Times(0); | 900 EXPECT_CALL(*delay(), GetDelay(_)).Times(0); |
894 | 901 |
895 StartSyncScheduler(SyncScheduler::CONFIGURATION_MODE); | 902 StartSyncScheduler(SyncScheduler::CONFIGURATION_MODE); |
896 | 903 |
897 CallbackCounter counter; | 904 CallbackCounter counter; |
898 ConfigurationParams params( | 905 ConfigurationParams params( |
899 GetUpdatesCallerInfo::RECONFIGURATION, | 906 GetUpdatesCallerInfo::RECONFIGURATION, |
900 types, | 907 types, |
901 TypesToRoutingInfo(types), | 908 TypesToRoutingInfo(types), |
902 ConfigurationParams::KEYSTORE_KEY_UNNECESSARY, | |
903 base::Bind(&CallbackCounter::Callback, base::Unretained(&counter))); | 909 base::Bind(&CallbackCounter::Callback, base::Unretained(&counter))); |
904 ASSERT_FALSE(scheduler()->ScheduleConfiguration(params)); | 910 ASSERT_FALSE(scheduler()->ScheduleConfiguration(params)); |
905 ASSERT_EQ(0, counter.times_called()); | 911 ASSERT_EQ(0, counter.times_called()); |
906 | 912 |
907 StartSyncScheduler(SyncScheduler::NORMAL_MODE); | 913 StartSyncScheduler(SyncScheduler::NORMAL_MODE); |
908 | 914 |
909 scheduler()->ScheduleNudgeAsync( | 915 scheduler()->ScheduleNudgeAsync( |
910 zero(), NUDGE_SOURCE_LOCAL, types, FROM_HERE); | 916 zero(), NUDGE_SOURCE_LOCAL, types, FROM_HERE); |
911 scheduler()->ScheduleNudgeAsync( | 917 scheduler()->ScheduleNudgeAsync( |
912 zero(), NUDGE_SOURCE_LOCAL, types, FROM_HERE); | 918 zero(), NUDGE_SOURCE_LOCAL, types, FROM_HERE); |
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1067 EXPECT_CALL(*syncer(), SyncShare(_, DOWNLOAD_UPDATES, APPLY_UPDATES)) | 1073 EXPECT_CALL(*syncer(), SyncShare(_, DOWNLOAD_UPDATES, APPLY_UPDATES)) |
1068 .WillOnce(Invoke(sessions::test_util::SimulateSuccess)); | 1074 .WillOnce(Invoke(sessions::test_util::SimulateSuccess)); |
1069 StartSyncScheduler(SyncScheduler::CONFIGURATION_MODE); | 1075 StartSyncScheduler(SyncScheduler::CONFIGURATION_MODE); |
1070 | 1076 |
1071 ModelTypeSet model_types(BOOKMARKS); | 1077 ModelTypeSet model_types(BOOKMARKS); |
1072 CallbackCounter counter; | 1078 CallbackCounter counter; |
1073 ConfigurationParams params( | 1079 ConfigurationParams params( |
1074 GetUpdatesCallerInfo::RECONFIGURATION, | 1080 GetUpdatesCallerInfo::RECONFIGURATION, |
1075 model_types, | 1081 model_types, |
1076 TypesToRoutingInfo(model_types), | 1082 TypesToRoutingInfo(model_types), |
1077 ConfigurationParams::KEYSTORE_KEY_UNNECESSARY, | |
1078 base::Bind(&CallbackCounter::Callback, base::Unretained(&counter))); | 1083 base::Bind(&CallbackCounter::Callback, base::Unretained(&counter))); |
1079 ASSERT_TRUE(scheduler()->ScheduleConfiguration(params)); | 1084 ASSERT_TRUE(scheduler()->ScheduleConfiguration(params)); |
1080 ASSERT_EQ(1, counter.times_called()); | 1085 ASSERT_EQ(1, counter.times_called()); |
1081 // Runs directly so no need to pump the loop. | 1086 // Runs directly so no need to pump the loop. |
1082 StopSyncScheduler(); | 1087 StopSyncScheduler(); |
1083 Mock::VerifyAndClearExpectations(syncer()); | 1088 Mock::VerifyAndClearExpectations(syncer()); |
1084 | 1089 |
1085 StartSyncScheduler(SyncScheduler::NORMAL_MODE); | 1090 StartSyncScheduler(SyncScheduler::NORMAL_MODE); |
1086 | 1091 |
1087 // Poll. | 1092 // Poll. |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1121 // Should save the nudge for until after the server is reachable. | 1126 // Should save the nudge for until after the server is reachable. |
1122 MessageLoop::current()->RunAllPending(); | 1127 MessageLoop::current()->RunAllPending(); |
1123 | 1128 |
1124 connection()->SetServerReachable(); | 1129 connection()->SetServerReachable(); |
1125 connection()->UpdateConnectionStatus(); | 1130 connection()->UpdateConnectionStatus(); |
1126 scheduler()->OnConnectionStatusChange(); | 1131 scheduler()->OnConnectionStatusChange(); |
1127 MessageLoop::current()->RunAllPending(); | 1132 MessageLoop::current()->RunAllPending(); |
1128 } | 1133 } |
1129 | 1134 |
1130 } // namespace syncer | 1135 } // namespace syncer |
OLD | NEW |