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