| 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" |
| 11 #include "sync/engine/sync_scheduler.h" | 11 #include "sync/engine/sync_scheduler_impl.h" |
| 12 #include "sync/engine/syncer.h" | 12 #include "sync/engine/syncer.h" |
| 13 #include "sync/engine/throttled_data_type_tracker.h" | 13 #include "sync/engine/throttled_data_type_tracker.h" |
| 14 #include "sync/sessions/test_util.h" | 14 #include "sync/sessions/test_util.h" |
| 15 #include "sync/test/callback_counter.h" | 15 #include "sync/test/callback_counter.h" |
| 16 #include "sync/test/engine/fake_model_worker.h" | 16 #include "sync/test/engine/fake_model_worker.h" |
| 17 #include "sync/test/engine/mock_connection_manager.h" | 17 #include "sync/test/engine/mock_connection_manager.h" |
| 18 #include "sync/test/engine/test_directory_setter_upper.h" | 18 #include "sync/test/engine/test_directory_setter_upper.h" |
| 19 #include "sync/test/fake_extensions_activity_monitor.h" | 19 #include "sync/test/fake_extensions_activity_monitor.h" |
| 20 #include "testing/gmock/include/gmock/gmock.h" | 20 #include "testing/gmock/include/gmock/gmock.h" |
| 21 #include "testing/gtest/include/gtest/gtest.h" | 21 #include "testing/gtest/include/gtest/gtest.h" |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 81 // Convenient to use in tests wishing to analyze SyncShare calls over time. | 81 // Convenient to use in tests wishing to analyze SyncShare calls over time. |
| 82 static const size_t kMinNumSamples = 5; | 82 static const size_t kMinNumSamples = 5; |
| 83 class SyncSchedulerTest : public testing::Test { | 83 class SyncSchedulerTest : public testing::Test { |
| 84 public: | 84 public: |
| 85 SyncSchedulerTest() | 85 SyncSchedulerTest() |
| 86 : weak_ptr_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)), | 86 : weak_ptr_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)), |
| 87 context_(NULL), | 87 context_(NULL), |
| 88 syncer_(NULL), | 88 syncer_(NULL), |
| 89 delay_(NULL) {} | 89 delay_(NULL) {} |
| 90 | 90 |
| 91 class MockDelayProvider : public SyncScheduler::DelayProvider { | 91 class MockDelayProvider : public SyncSchedulerImpl::DelayProvider { |
| 92 public: | 92 public: |
| 93 MOCK_METHOD1(GetDelay, TimeDelta(const TimeDelta&)); | 93 MOCK_METHOD1(GetDelay, TimeDelta(const TimeDelta&)); |
| 94 }; | 94 }; |
| 95 | 95 |
| 96 virtual void SetUp() { | 96 virtual void SetUp() { |
| 97 dir_maker_.SetUp(); | 97 dir_maker_.SetUp(); |
| 98 syncer_ = new MockSyncer(); | 98 syncer_ = new MockSyncer(); |
| 99 delay_ = NULL; | 99 delay_ = NULL; |
| 100 | 100 |
| 101 ModelSafeRoutingInfo routing_info; | 101 ModelSafeRoutingInfo routing_info; |
| (...skipping 15 matching lines...) Expand all Loading... |
| 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 context_->set_notifications_enabled(true); | 124 context_->set_notifications_enabled(true); |
| 125 context_->set_account_name("Test"); | 125 context_->set_account_name("Test"); |
| 126 scheduler_.reset( | 126 scheduler_.reset( |
| 127 new SyncScheduler("TestSyncScheduler", context(), syncer_)); | 127 new SyncSchedulerImpl("TestSyncScheduler", context(), syncer_)); |
| 128 } | 128 } |
| 129 | 129 |
| 130 SyncScheduler* scheduler() { return scheduler_.get(); } | 130 SyncSchedulerImpl* scheduler() { return scheduler_.get(); } |
| 131 MockSyncer* syncer() { return syncer_; } | 131 MockSyncer* syncer() { return syncer_; } |
| 132 MockDelayProvider* delay() { return delay_; } | 132 MockDelayProvider* delay() { return delay_; } |
| 133 MockConnectionManager* connection() { return connection_.get(); } | 133 MockConnectionManager* connection() { return connection_.get(); } |
| 134 TimeDelta zero() { return TimeDelta::FromSeconds(0); } | 134 TimeDelta zero() { return TimeDelta::FromSeconds(0); } |
| 135 TimeDelta timeout() { | 135 TimeDelta timeout() { |
| 136 return TestTimeouts::action_timeout(); | 136 return TestTimeouts::action_timeout(); |
| 137 } | 137 } |
| 138 | 138 |
| 139 virtual void TearDown() { | 139 virtual void TearDown() { |
| 140 PumpLoop(); | 140 PumpLoop(); |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 208 private: | 208 private: |
| 209 syncable::Directory* directory() { | 209 syncable::Directory* directory() { |
| 210 return dir_maker_.directory(); | 210 return dir_maker_.directory(); |
| 211 } | 211 } |
| 212 | 212 |
| 213 base::WeakPtrFactory<SyncSchedulerTest> weak_ptr_factory_; | 213 base::WeakPtrFactory<SyncSchedulerTest> weak_ptr_factory_; |
| 214 MessageLoop message_loop_; | 214 MessageLoop message_loop_; |
| 215 TestDirectorySetterUpper dir_maker_; | 215 TestDirectorySetterUpper dir_maker_; |
| 216 scoped_ptr<MockConnectionManager> connection_; | 216 scoped_ptr<MockConnectionManager> connection_; |
| 217 scoped_ptr<SyncSessionContext> context_; | 217 scoped_ptr<SyncSessionContext> context_; |
| 218 scoped_ptr<SyncScheduler> scheduler_; | 218 scoped_ptr<SyncSchedulerImpl> scheduler_; |
| 219 MockSyncer* syncer_; | 219 MockSyncer* syncer_; |
| 220 MockDelayProvider* delay_; | 220 MockDelayProvider* delay_; |
| 221 std::vector<scoped_refptr<FakeModelWorker> > workers_; | 221 std::vector<scoped_refptr<FakeModelWorker> > workers_; |
| 222 FakeExtensionsActivityMonitor extensions_activity_monitor_; | 222 FakeExtensionsActivityMonitor extensions_activity_monitor_; |
| 223 scoped_ptr<ThrottledDataTypeTracker> throttled_data_type_tracker_; | 223 scoped_ptr<ThrottledDataTypeTracker> throttled_data_type_tracker_; |
| 224 }; | 224 }; |
| 225 | 225 |
| 226 void RecordSyncShareImpl(SyncSession* s, SyncShareRecords* record) { | 226 void RecordSyncShareImpl(SyncSession* s, SyncShareRecords* record) { |
| 227 record->times.push_back(TimeTicks::Now()); | 227 record->times.push_back(TimeTicks::Now()); |
| 228 record->snapshots.push_back(s->TakeSnapshot()); | 228 record->snapshots.push_back(s->TakeSnapshot()); |
| (...skipping 382 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 611 | 611 |
| 612 // Test that the short poll interval is used. | 612 // Test that the short poll interval is used. |
| 613 TEST_F(SyncSchedulerTest, PollNotificationsDisabled) { | 613 TEST_F(SyncSchedulerTest, PollNotificationsDisabled) { |
| 614 SyncShareRecords records; | 614 SyncShareRecords records; |
| 615 TimeDelta poll_interval(TimeDelta::FromMilliseconds(30)); | 615 TimeDelta poll_interval(TimeDelta::FromMilliseconds(30)); |
| 616 EXPECT_CALL(*syncer(), SyncShare(_,_,_)).Times(AtLeast(kMinNumSamples)) | 616 EXPECT_CALL(*syncer(), SyncShare(_,_,_)).Times(AtLeast(kMinNumSamples)) |
| 617 .WillRepeatedly(DoAll(Invoke(sessions::test_util::SimulateSuccess), | 617 .WillRepeatedly(DoAll(Invoke(sessions::test_util::SimulateSuccess), |
| 618 WithArg<0>(RecordSyncShareMultiple(&records, kMinNumSamples)))); | 618 WithArg<0>(RecordSyncShareMultiple(&records, kMinNumSamples)))); |
| 619 | 619 |
| 620 scheduler()->OnReceivedShortPollIntervalUpdate(poll_interval); | 620 scheduler()->OnReceivedShortPollIntervalUpdate(poll_interval); |
| 621 scheduler()->set_notifications_enabled(false); | 621 scheduler()->SetNotificationsEnabled(false); |
| 622 | 622 |
| 623 TimeTicks optimal_start = TimeTicks::Now() + poll_interval; | 623 TimeTicks optimal_start = TimeTicks::Now() + poll_interval; |
| 624 StartSyncScheduler(SyncScheduler::NORMAL_MODE); | 624 StartSyncScheduler(SyncScheduler::NORMAL_MODE); |
| 625 | 625 |
| 626 // Run again to wait for polling. | 626 // Run again to wait for polling. |
| 627 RunLoop(); | 627 RunLoop(); |
| 628 | 628 |
| 629 StopSyncScheduler(); | 629 StopSyncScheduler(); |
| 630 AnalyzePollRun(records, kMinNumSamples, optimal_start, poll_interval); | 630 AnalyzePollRun(records, kMinNumSamples, optimal_start, poll_interval); |
| 631 } | 631 } |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 663 | 663 |
| 664 EXPECT_CALL(*syncer(), SyncShare(_,_,_)) | 664 EXPECT_CALL(*syncer(), SyncShare(_,_,_)) |
| 665 .WillOnce( | 665 .WillOnce( |
| 666 DoAll( | 666 DoAll( |
| 667 WithArg<0>( | 667 WithArg<0>( |
| 668 sessions::test_util::SimulateSessionsCommitDelayUpdate( | 668 sessions::test_util::SimulateSessionsCommitDelayUpdate( |
| 669 delay2)), | 669 delay2)), |
| 670 Invoke(sessions::test_util::SimulateSuccess), | 670 Invoke(sessions::test_util::SimulateSuccess), |
| 671 QuitLoopNowAction())); | 671 QuitLoopNowAction())); |
| 672 | 672 |
| 673 EXPECT_EQ(delay1, scheduler()->sessions_commit_delay()); | 673 EXPECT_EQ(delay1, scheduler()->GetSessionsCommitDelay()); |
| 674 StartSyncScheduler(SyncScheduler::NORMAL_MODE); | 674 StartSyncScheduler(SyncScheduler::NORMAL_MODE); |
| 675 | 675 |
| 676 EXPECT_EQ(delay1, scheduler()->sessions_commit_delay()); | 676 EXPECT_EQ(delay1, scheduler()->GetSessionsCommitDelay()); |
| 677 const ModelTypeSet model_types(syncer::BOOKMARKS); | 677 const ModelTypeSet model_types(syncer::BOOKMARKS); |
| 678 scheduler()->ScheduleNudgeAsync( | 678 scheduler()->ScheduleNudgeAsync( |
| 679 zero(), NUDGE_SOURCE_LOCAL, model_types, FROM_HERE); | 679 zero(), NUDGE_SOURCE_LOCAL, model_types, FROM_HERE); |
| 680 RunLoop(); | 680 RunLoop(); |
| 681 | 681 |
| 682 EXPECT_EQ(delay2, scheduler()->sessions_commit_delay()); | 682 EXPECT_EQ(delay2, scheduler()->GetSessionsCommitDelay()); |
| 683 StopSyncScheduler(); | 683 StopSyncScheduler(); |
| 684 } | 684 } |
| 685 | 685 |
| 686 // Test that a sync session is run through to completion. | 686 // Test that a sync session is run through to completion. |
| 687 TEST_F(SyncSchedulerTest, HasMoreToSync) { | 687 TEST_F(SyncSchedulerTest, HasMoreToSync) { |
| 688 EXPECT_CALL(*syncer(), SyncShare(_,_,_)) | 688 EXPECT_CALL(*syncer(), SyncShare(_,_,_)) |
| 689 .WillOnce(Invoke(sessions::test_util::SimulateHasMoreToSync)) | 689 .WillOnce(Invoke(sessions::test_util::SimulateHasMoreToSync)) |
| 690 .WillOnce(DoAll(Invoke(sessions::test_util::SimulateSuccess), | 690 .WillOnce(DoAll(Invoke(sessions::test_util::SimulateSuccess), |
| 691 QuitLoopNowAction())); | 691 QuitLoopNowAction())); |
| 692 StartSyncScheduler(SyncScheduler::NORMAL_MODE); | 692 StartSyncScheduler(SyncScheduler::NORMAL_MODE); |
| (...skipping 347 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1040 RunLoop(); | 1040 RunLoop(); |
| 1041 EXPECT_FALSE(scheduler()->IsBackingOff()); | 1041 EXPECT_FALSE(scheduler()->IsBackingOff()); |
| 1042 | 1042 |
| 1043 // Run the successful poll. | 1043 // Run the successful poll. |
| 1044 RunLoop(); | 1044 RunLoop(); |
| 1045 EXPECT_FALSE(scheduler()->IsBackingOff()); | 1045 EXPECT_FALSE(scheduler()->IsBackingOff()); |
| 1046 } | 1046 } |
| 1047 | 1047 |
| 1048 TEST_F(SyncSchedulerTest, GetRecommendedDelay) { | 1048 TEST_F(SyncSchedulerTest, GetRecommendedDelay) { |
| 1049 EXPECT_LE(TimeDelta::FromSeconds(0), | 1049 EXPECT_LE(TimeDelta::FromSeconds(0), |
| 1050 SyncScheduler::GetRecommendedDelay(TimeDelta::FromSeconds(0))); | 1050 SyncSchedulerImpl::GetRecommendedDelay(TimeDelta::FromSeconds(0))); |
| 1051 EXPECT_LE(TimeDelta::FromSeconds(1), | 1051 EXPECT_LE(TimeDelta::FromSeconds(1), |
| 1052 SyncScheduler::GetRecommendedDelay(TimeDelta::FromSeconds(1))); | 1052 SyncSchedulerImpl::GetRecommendedDelay(TimeDelta::FromSeconds(1))); |
| 1053 EXPECT_LE(TimeDelta::FromSeconds(50), | 1053 EXPECT_LE(TimeDelta::FromSeconds(50), |
| 1054 SyncScheduler::GetRecommendedDelay(TimeDelta::FromSeconds(50))); | 1054 SyncSchedulerImpl::GetRecommendedDelay( |
| 1055 TimeDelta::FromSeconds(50))); |
| 1055 EXPECT_LE(TimeDelta::FromSeconds(10), | 1056 EXPECT_LE(TimeDelta::FromSeconds(10), |
| 1056 SyncScheduler::GetRecommendedDelay(TimeDelta::FromSeconds(10))); | 1057 SyncSchedulerImpl::GetRecommendedDelay( |
| 1058 TimeDelta::FromSeconds(10))); |
| 1057 EXPECT_EQ(TimeDelta::FromSeconds(kMaxBackoffSeconds), | 1059 EXPECT_EQ(TimeDelta::FromSeconds(kMaxBackoffSeconds), |
| 1058 SyncScheduler::GetRecommendedDelay( | 1060 SyncSchedulerImpl::GetRecommendedDelay( |
| 1059 TimeDelta::FromSeconds(kMaxBackoffSeconds))); | 1061 TimeDelta::FromSeconds(kMaxBackoffSeconds))); |
| 1060 EXPECT_EQ(TimeDelta::FromSeconds(kMaxBackoffSeconds), | 1062 EXPECT_EQ(TimeDelta::FromSeconds(kMaxBackoffSeconds), |
| 1061 SyncScheduler::GetRecommendedDelay( | 1063 SyncSchedulerImpl::GetRecommendedDelay( |
| 1062 TimeDelta::FromSeconds(kMaxBackoffSeconds + 1))); | 1064 TimeDelta::FromSeconds(kMaxBackoffSeconds + 1))); |
| 1063 } | 1065 } |
| 1064 | 1066 |
| 1065 // Test that appropriate syncer steps are requested for each job type. | 1067 // Test that appropriate syncer steps are requested for each job type. |
| 1066 TEST_F(SyncSchedulerTest, SyncerSteps) { | 1068 TEST_F(SyncSchedulerTest, SyncerSteps) { |
| 1067 // Nudges. | 1069 // Nudges. |
| 1068 EXPECT_CALL(*syncer(), SyncShare(_, SYNCER_BEGIN, SYNCER_END)) | 1070 EXPECT_CALL(*syncer(), SyncShare(_, SYNCER_BEGIN, SYNCER_END)) |
| 1069 .WillOnce(Invoke(sessions::test_util::SimulateSuccess)); | 1071 .WillOnce(Invoke(sessions::test_util::SimulateSuccess)); |
| 1070 StartSyncScheduler(SyncScheduler::NORMAL_MODE); | 1072 StartSyncScheduler(SyncScheduler::NORMAL_MODE); |
| 1071 | 1073 |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1178 PumpLoop(); | 1180 PumpLoop(); |
| 1179 // Pump again to run job. | 1181 // Pump again to run job. |
| 1180 PumpLoop(); | 1182 PumpLoop(); |
| 1181 | 1183 |
| 1182 StopSyncScheduler(); | 1184 StopSyncScheduler(); |
| 1183 | 1185 |
| 1184 EXPECT_TRUE(expected == context()->previous_session_routing_info()); | 1186 EXPECT_TRUE(expected == context()->previous_session_routing_info()); |
| 1185 } | 1187 } |
| 1186 | 1188 |
| 1187 } // namespace syncer | 1189 } // namespace syncer |
| OLD | NEW |