| 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/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
| 10 #include "base/test/test_timeouts.h" | 10 #include "base/test/test_timeouts.h" |
| 11 #include "sync/engine/backoff_delay_provider.h" | 11 #include "sync/engine/backoff_delay_provider.h" |
| 12 #include "sync/engine/sync_scheduler_impl.h" | 12 #include "sync/engine/sync_scheduler_impl.h" |
| 13 #include "sync/engine/syncer.h" | 13 #include "sync/engine/syncer.h" |
| 14 #include "sync/internal_api/public/base/cancelation_signal.h" | 14 #include "sync/internal_api/public/base/cancelation_signal.h" |
| 15 #include "sync/internal_api/public/base/model_type_test_util.h" | 15 #include "sync/internal_api/public/base/model_type_test_util.h" |
| 16 #include "sync/notifier/invalidation_util.h" | 16 #include "sync/notifier/invalidation_util.h" |
| 17 #include "sync/notifier/object_id_invalidation_map.h" | 17 #include "sync/notifier/object_id_invalidation_map.h" |
| 18 #include "sync/sessions/test_util.h" | 18 #include "sync/sessions/test_util.h" |
| 19 #include "sync/test/callback_counter.h" | 19 #include "sync/test/callback_counter.h" |
| 20 #include "sync/test/engine/fake_model_worker.h" | 20 #include "sync/test/engine/fake_model_worker.h" |
| 21 #include "sync/test/engine/mock_connection_manager.h" | 21 #include "sync/test/engine/mock_connection_manager.h" |
| 22 #include "sync/test/engine/test_directory_setter_upper.h" | 22 #include "sync/test/engine/test_directory_setter_upper.h" |
| 23 #include "sync/test/mock_invalidation.h" |
| 23 #include "sync/util/extensions_activity.h" | 24 #include "sync/util/extensions_activity.h" |
| 24 #include "testing/gmock/include/gmock/gmock.h" | 25 #include "testing/gmock/include/gmock/gmock.h" |
| 25 #include "testing/gtest/include/gtest/gtest.h" | 26 #include "testing/gtest/include/gtest/gtest.h" |
| 26 | 27 |
| 27 using base::TimeDelta; | 28 using base::TimeDelta; |
| 28 using base::TimeTicks; | 29 using base::TimeTicks; |
| 29 using testing::_; | 30 using testing::_; |
| 30 using testing::AtLeast; | 31 using testing::AtLeast; |
| 31 using testing::DoAll; | 32 using testing::DoAll; |
| 32 using testing::Invoke; | 33 using testing::Invoke; |
| (...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 213 | 214 |
| 214 ModelTypeSet GetThrottledTypes() { | 215 ModelTypeSet GetThrottledTypes() { |
| 215 return scheduler_->nudge_tracker_.GetThrottledTypes(); | 216 return scheduler_->nudge_tracker_.GetThrottledTypes(); |
| 216 } | 217 } |
| 217 | 218 |
| 218 base::TimeDelta GetRetryTimerDelay() { | 219 base::TimeDelta GetRetryTimerDelay() { |
| 219 EXPECT_TRUE(scheduler_->retry_timer_.IsRunning()); | 220 EXPECT_TRUE(scheduler_->retry_timer_.IsRunning()); |
| 220 return scheduler_->retry_timer_.GetCurrentDelay(); | 221 return scheduler_->retry_timer_.GetCurrentDelay(); |
| 221 } | 222 } |
| 222 | 223 |
| 224 static scoped_ptr<InvalidationInterface> BuildInvalidation( |
| 225 int64 version, |
| 226 const std::string& payload) { |
| 227 return MockInvalidation::Build(version, payload) |
| 228 .PassAs<InvalidationInterface>(); |
| 229 } |
| 230 |
| 223 private: | 231 private: |
| 224 syncable::Directory* directory() { | 232 syncable::Directory* directory() { |
| 225 return dir_maker_.directory(); | 233 return dir_maker_.directory(); |
| 226 } | 234 } |
| 227 | 235 |
| 228 base::MessageLoop loop_; | 236 base::MessageLoop loop_; |
| 229 TestDirectorySetterUpper dir_maker_; | 237 TestDirectorySetterUpper dir_maker_; |
| 230 CancelationSignal cancelation_signal_; | 238 CancelationSignal cancelation_signal_; |
| 231 scoped_ptr<MockConnectionManager> connection_; | 239 scoped_ptr<MockConnectionManager> connection_; |
| 232 scoped_ptr<ModelTypeRegistry> model_type_registry_; | 240 scoped_ptr<ModelTypeRegistry> model_type_registry_; |
| (...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 516 ASSERT_EQ(1U, times.size()); | 524 ASSERT_EQ(1U, times.size()); |
| 517 EXPECT_GE(times[0], min_time); | 525 EXPECT_GE(times[0], min_time); |
| 518 EXPECT_LE(times[0], max_time); | 526 EXPECT_LE(times[0], max_time); |
| 519 } | 527 } |
| 520 | 528 |
| 521 // Test nudge scheduling. | 529 // Test nudge scheduling. |
| 522 TEST_F(SyncSchedulerTest, NudgeWithStates) { | 530 TEST_F(SyncSchedulerTest, NudgeWithStates) { |
| 523 StartSyncScheduler(SyncScheduler::NORMAL_MODE); | 531 StartSyncScheduler(SyncScheduler::NORMAL_MODE); |
| 524 | 532 |
| 525 SyncShareTimes times1; | 533 SyncShareTimes times1; |
| 526 ObjectIdInvalidationMap invalidations1 = | |
| 527 BuildInvalidationMap(BOOKMARKS, 10, "test"); | |
| 528 EXPECT_CALL(*syncer(), NormalSyncShare(_,_,_)) | 534 EXPECT_CALL(*syncer(), NormalSyncShare(_,_,_)) |
| 529 .WillOnce(DoAll(Invoke(sessions::test_util::SimulateNormalSuccess), | 535 .WillOnce(DoAll(Invoke(sessions::test_util::SimulateNormalSuccess), |
| 530 RecordSyncShare(×1))) | 536 RecordSyncShare(×1))) |
| 531 .RetiresOnSaturation(); | 537 .RetiresOnSaturation(); |
| 532 scheduler()->ScheduleInvalidationNudge(zero(), invalidations1, FROM_HERE); | 538 scheduler()->ScheduleInvalidationNudge( |
| 539 zero(), BOOKMARKS, BuildInvalidation(10, "test"), FROM_HERE); |
| 533 RunLoop(); | 540 RunLoop(); |
| 534 | 541 |
| 535 Mock::VerifyAndClearExpectations(syncer()); | 542 Mock::VerifyAndClearExpectations(syncer()); |
| 536 | 543 |
| 537 // Make sure a second, later, nudge is unaffected by first (no coalescing). | 544 // Make sure a second, later, nudge is unaffected by first (no coalescing). |
| 538 SyncShareTimes times2; | 545 SyncShareTimes times2; |
| 539 ObjectIdInvalidationMap invalidations2 = | |
| 540 BuildInvalidationMap(AUTOFILL, 10, "test2"); | |
| 541 EXPECT_CALL(*syncer(), NormalSyncShare(_,_,_)) | 546 EXPECT_CALL(*syncer(), NormalSyncShare(_,_,_)) |
| 542 .WillOnce(DoAll(Invoke(sessions::test_util::SimulateNormalSuccess), | 547 .WillOnce(DoAll(Invoke(sessions::test_util::SimulateNormalSuccess), |
| 543 RecordSyncShare(×2))); | 548 RecordSyncShare(×2))); |
| 544 scheduler()->ScheduleInvalidationNudge(zero(), invalidations2, FROM_HERE); | 549 scheduler()->ScheduleInvalidationNudge( |
| 550 zero(), AUTOFILL, BuildInvalidation(10, "test2"), FROM_HERE); |
| 545 RunLoop(); | 551 RunLoop(); |
| 546 } | 552 } |
| 547 | 553 |
| 548 // Test that polling works as expected. | 554 // Test that polling works as expected. |
| 549 TEST_F(SyncSchedulerTest, Polling) { | 555 TEST_F(SyncSchedulerTest, Polling) { |
| 550 SyncShareTimes times; | 556 SyncShareTimes times; |
| 551 TimeDelta poll_interval(TimeDelta::FromMilliseconds(30)); | 557 TimeDelta poll_interval(TimeDelta::FromMilliseconds(30)); |
| 552 EXPECT_CALL(*syncer(), PollSyncShare(_,_)).Times(AtLeast(kMinNumSamples)) | 558 EXPECT_CALL(*syncer(), PollSyncShare(_,_)).Times(AtLeast(kMinNumSamples)) |
| 553 .WillRepeatedly( | 559 .WillRepeatedly( |
| 554 DoAll(Invoke(sessions::test_util::SimulatePollSuccess), | 560 DoAll(Invoke(sessions::test_util::SimulatePollSuccess), |
| (...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 827 Return(true))) | 833 Return(true))) |
| 828 .RetiresOnSaturation(); | 834 .RetiresOnSaturation(); |
| 829 | 835 |
| 830 StartSyncScheduler(SyncScheduler::NORMAL_MODE); | 836 StartSyncScheduler(SyncScheduler::NORMAL_MODE); |
| 831 scheduler()->ScheduleLocalNudge(zero(), throttled_types, FROM_HERE); | 837 scheduler()->ScheduleLocalNudge(zero(), throttled_types, FROM_HERE); |
| 832 PumpLoop(); // To get PerformDelayedNudge called. | 838 PumpLoop(); // To get PerformDelayedNudge called. |
| 833 PumpLoop(); // To get TrySyncSessionJob called | 839 PumpLoop(); // To get TrySyncSessionJob called |
| 834 EXPECT_TRUE(GetThrottledTypes().HasAll(throttled_types)); | 840 EXPECT_TRUE(GetThrottledTypes().HasAll(throttled_types)); |
| 835 | 841 |
| 836 // Ignore invalidations for throttled types. | 842 // Ignore invalidations for throttled types. |
| 837 ObjectIdInvalidationMap invalidations = | 843 scheduler()->ScheduleInvalidationNudge( |
| 838 BuildInvalidationMap(BOOKMARKS, 10, "test"); | 844 zero(), BOOKMARKS, BuildInvalidation(10, "test"), FROM_HERE); |
| 839 scheduler()->ScheduleInvalidationNudge(zero(), invalidations, FROM_HERE); | |
| 840 PumpLoop(); | 845 PumpLoop(); |
| 841 | 846 |
| 842 // Ignore refresh requests for throttled types. | 847 // Ignore refresh requests for throttled types. |
| 843 scheduler()->ScheduleLocalRefreshRequest(zero(), throttled_types, FROM_HERE); | 848 scheduler()->ScheduleLocalRefreshRequest(zero(), throttled_types, FROM_HERE); |
| 844 PumpLoop(); | 849 PumpLoop(); |
| 845 | 850 |
| 846 Mock::VerifyAndClearExpectations(syncer()); | 851 Mock::VerifyAndClearExpectations(syncer()); |
| 847 | 852 |
| 848 // Local nudges for non-throttled types will trigger a sync. | 853 // Local nudges for non-throttled types will trigger a sync. |
| 849 EXPECT_CALL(*syncer(), NormalSyncShare(_,_,_)) | 854 EXPECT_CALL(*syncer(), NormalSyncShare(_,_,_)) |
| (...skipping 534 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1384 .WillOnce(DoAll(Invoke(sessions::test_util::SimulateNormalSuccess), | 1389 .WillOnce(DoAll(Invoke(sessions::test_util::SimulateNormalSuccess), |
| 1385 RecordSyncShare(×))); | 1390 RecordSyncShare(×))); |
| 1386 | 1391 |
| 1387 // Run to wait for retrying. | 1392 // Run to wait for retrying. |
| 1388 RunLoop(); | 1393 RunLoop(); |
| 1389 | 1394 |
| 1390 StopSyncScheduler(); | 1395 StopSyncScheduler(); |
| 1391 } | 1396 } |
| 1392 | 1397 |
| 1393 } // namespace syncer | 1398 } // namespace syncer |
| OLD | NEW |