| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/scoped_callback_factory.h" | 8 #include "base/memory/weak_ptr.h" |
| 9 #include "base/message_loop.h" | 9 #include "base/message_loop.h" |
| 10 #include "base/task.h" | 10 #include "base/task.h" |
| 11 #include "base/test/test_timeouts.h" | 11 #include "base/test/test_timeouts.h" |
| 12 #include "chrome/browser/sync/engine/mock_model_safe_workers.h" | 12 #include "chrome/browser/sync/engine/mock_model_safe_workers.h" |
| 13 #include "chrome/browser/sync/engine/configure_reason.h" | 13 #include "chrome/browser/sync/engine/configure_reason.h" |
| 14 #include "chrome/browser/sync/engine/sync_scheduler.h" | 14 #include "chrome/browser/sync/engine/sync_scheduler.h" |
| 15 #include "chrome/browser/sync/engine/syncer.h" | 15 #include "chrome/browser/sync/engine/syncer.h" |
| 16 #include "chrome/browser/sync/sessions/test_util.h" | 16 #include "chrome/browser/sync/sessions/test_util.h" |
| 17 #include "chrome/test/sync/engine/mock_connection_manager.h" | 17 #include "chrome/test/sync/engine/mock_connection_manager.h" |
| 18 #include "chrome/test/sync/engine/test_directory_setter_upper.h" | 18 #include "chrome/test/sync/engine/test_directory_setter_upper.h" |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 67 // QuitLoopNow). | 67 // QuitLoopNow). |
| 68 MessageLoop::current()->PostTask(FROM_HERE, base::Bind(&QuitLoopNow)); | 68 MessageLoop::current()->PostTask(FROM_HERE, base::Bind(&QuitLoopNow)); |
| 69 RunLoop(); | 69 RunLoop(); |
| 70 } | 70 } |
| 71 | 71 |
| 72 // Convenient to use in tests wishing to analyze SyncShare calls over time. | 72 // Convenient to use in tests wishing to analyze SyncShare calls over time. |
| 73 static const size_t kMinNumSamples = 5; | 73 static const size_t kMinNumSamples = 5; |
| 74 class SyncSchedulerTest : public testing::Test { | 74 class SyncSchedulerTest : public testing::Test { |
| 75 public: | 75 public: |
| 76 SyncSchedulerTest() | 76 SyncSchedulerTest() |
| 77 : callback_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)), | 77 : weak_ptr_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)), |
| 78 context_(NULL), | 78 context_(NULL), |
| 79 syncer_(NULL), | 79 syncer_(NULL), |
| 80 delay_(NULL) {} | 80 delay_(NULL) {} |
| 81 | 81 |
| 82 class MockDelayProvider : public SyncScheduler::DelayProvider { | 82 class MockDelayProvider : public SyncScheduler::DelayProvider { |
| 83 public: | 83 public: |
| 84 MOCK_METHOD1(GetDelay, TimeDelta(const TimeDelta&)); | 84 MOCK_METHOD1(GetDelay, TimeDelta(const TimeDelta&)); |
| 85 }; | 85 }; |
| 86 | 86 |
| 87 virtual void SetUp() { | 87 virtual void SetUp() { |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 134 } | 134 } |
| 135 } | 135 } |
| 136 | 136 |
| 137 void DoQuitLoopNow() { | 137 void DoQuitLoopNow() { |
| 138 QuitLoopNow(); | 138 QuitLoopNow(); |
| 139 } | 139 } |
| 140 | 140 |
| 141 void StartSyncScheduler(SyncScheduler::Mode mode) { | 141 void StartSyncScheduler(SyncScheduler::Mode mode) { |
| 142 scheduler()->Start( | 142 scheduler()->Start( |
| 143 mode, | 143 mode, |
| 144 callback_factory_.NewCallback(&SyncSchedulerTest::DoQuitLoopNow)); | 144 base::Bind(&SyncSchedulerTest::DoQuitLoopNow, |
| 145 weak_ptr_factory_.GetWeakPtr())); |
| 145 } | 146 } |
| 146 | 147 |
| 147 bool GetBackoffAndResetTest() { | 148 bool GetBackoffAndResetTest() { |
| 148 syncable::ModelTypeBitSet nudge_types; | 149 syncable::ModelTypeBitSet nudge_types; |
| 149 StartSyncScheduler(SyncScheduler::NORMAL_MODE); | 150 StartSyncScheduler(SyncScheduler::NORMAL_MODE); |
| 150 RunLoop(); | 151 RunLoop(); |
| 151 | 152 |
| 152 scheduler()->ScheduleNudge( | 153 scheduler()->ScheduleNudge( |
| 153 zero(), NUDGE_SOURCE_LOCAL, nudge_types, FROM_HERE); | 154 zero(), NUDGE_SOURCE_LOCAL, nudge_types, FROM_HERE); |
| 154 RunLoop(); | 155 RunLoop(); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 184 return false; | 185 return false; |
| 185 } | 186 } |
| 186 if (lhs.count() != count) | 187 if (lhs.count() != count) |
| 187 return false; | 188 return false; |
| 188 return true; | 189 return true; |
| 189 } | 190 } |
| 190 | 191 |
| 191 SyncSessionContext* context() { return context_; } | 192 SyncSessionContext* context() { return context_; } |
| 192 | 193 |
| 193 private: | 194 private: |
| 194 base::ScopedCallbackFactory<SyncSchedulerTest> callback_factory_; | 195 base::WeakPtrFactory<SyncSchedulerTest> weak_ptr_factory_; |
| 195 MessageLoop message_loop_; | 196 MessageLoop message_loop_; |
| 196 scoped_ptr<SyncScheduler> scheduler_; | 197 scoped_ptr<SyncScheduler> scheduler_; |
| 197 scoped_ptr<MockConnectionManager> connection_; | 198 scoped_ptr<MockConnectionManager> connection_; |
| 198 SyncSessionContext* context_; | 199 SyncSessionContext* context_; |
| 199 MockSyncer* syncer_; | 200 MockSyncer* syncer_; |
| 200 MockDelayProvider* delay_; | 201 MockDelayProvider* delay_; |
| 201 scoped_ptr<MockModelSafeWorkerRegistrar> registrar_; | 202 scoped_ptr<MockModelSafeWorkerRegistrar> registrar_; |
| 202 MockDirectorySetterUpper syncdb_; | 203 MockDirectorySetterUpper syncdb_; |
| 203 }; | 204 }; |
| 204 | 205 |
| (...skipping 747 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 952 EXPECT_LE(TimeDelta::FromSeconds(10), | 953 EXPECT_LE(TimeDelta::FromSeconds(10), |
| 953 SyncScheduler::GetRecommendedDelay(TimeDelta::FromSeconds(10))); | 954 SyncScheduler::GetRecommendedDelay(TimeDelta::FromSeconds(10))); |
| 954 EXPECT_EQ(TimeDelta::FromSeconds(kMaxBackoffSeconds), | 955 EXPECT_EQ(TimeDelta::FromSeconds(kMaxBackoffSeconds), |
| 955 SyncScheduler::GetRecommendedDelay( | 956 SyncScheduler::GetRecommendedDelay( |
| 956 TimeDelta::FromSeconds(kMaxBackoffSeconds))); | 957 TimeDelta::FromSeconds(kMaxBackoffSeconds))); |
| 957 EXPECT_EQ(TimeDelta::FromSeconds(kMaxBackoffSeconds), | 958 EXPECT_EQ(TimeDelta::FromSeconds(kMaxBackoffSeconds), |
| 958 SyncScheduler::GetRecommendedDelay( | 959 SyncScheduler::GetRecommendedDelay( |
| 959 TimeDelta::FromSeconds(kMaxBackoffSeconds + 1))); | 960 TimeDelta::FromSeconds(kMaxBackoffSeconds + 1))); |
| 960 } | 961 } |
| 961 | 962 |
| 963 namespace { |
| 964 |
| 965 class MockCallback : public base::SupportsWeakPtr<MockCallback> { |
| 966 public: |
| 967 MOCK_METHOD0(Run, void()); |
| 968 }; |
| 969 |
| 970 } // namespace |
| 971 |
| 962 // Test that appropriate syncer steps are requested for each job type. | 972 // Test that appropriate syncer steps are requested for each job type. |
| 963 TEST_F(SyncSchedulerTest, SyncerSteps) { | 973 TEST_F(SyncSchedulerTest, SyncerSteps) { |
| 964 // Nudges. | 974 // Nudges. |
| 965 EXPECT_CALL(*syncer(), SyncShare(_, SYNCER_BEGIN, SYNCER_END)) | 975 EXPECT_CALL(*syncer(), SyncShare(_, SYNCER_BEGIN, SYNCER_END)) |
| 966 .Times(1); | 976 .Times(1); |
| 967 StartSyncScheduler(SyncScheduler::NORMAL_MODE); | 977 StartSyncScheduler(SyncScheduler::NORMAL_MODE); |
| 968 RunLoop(); | 978 RunLoop(); |
| 969 | 979 |
| 970 scheduler()->ScheduleNudge( | 980 scheduler()->ScheduleNudge( |
| 971 zero(), NUDGE_SOURCE_LOCAL, ModelTypeBitSet(), FROM_HERE); | 981 zero(), NUDGE_SOURCE_LOCAL, ModelTypeBitSet(), FROM_HERE); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 1001 | 1011 |
| 1002 scheduler()->Stop(); | 1012 scheduler()->Stop(); |
| 1003 Mock::VerifyAndClearExpectations(syncer()); | 1013 Mock::VerifyAndClearExpectations(syncer()); |
| 1004 | 1014 |
| 1005 // Cleanup disabled types. | 1015 // Cleanup disabled types. |
| 1006 EXPECT_CALL(*syncer(), | 1016 EXPECT_CALL(*syncer(), |
| 1007 SyncShare(_, CLEANUP_DISABLED_TYPES, CLEANUP_DISABLED_TYPES)); | 1017 SyncShare(_, CLEANUP_DISABLED_TYPES, CLEANUP_DISABLED_TYPES)); |
| 1008 StartSyncScheduler(SyncScheduler::NORMAL_MODE); | 1018 StartSyncScheduler(SyncScheduler::NORMAL_MODE); |
| 1009 RunLoop(); | 1019 RunLoop(); |
| 1010 | 1020 |
| 1011 scheduler()->ScheduleCleanupDisabledTypes(); | 1021 MockCallback mock_callback; |
| 1022 EXPECT_CALL(mock_callback, Run()); |
| 1023 scheduler()->ScheduleCleanupDisabledTypes( |
| 1024 base::Bind(&MockCallback::Run, mock_callback.AsWeakPtr())); |
| 1012 PumpLoop(); | 1025 PumpLoop(); |
| 1013 PumpLoop(); | 1026 PumpLoop(); |
| 1014 | 1027 |
| 1015 scheduler()->Stop(); | 1028 scheduler()->Stop(); |
| 1016 Mock::VerifyAndClearExpectations(syncer()); | 1029 Mock::VerifyAndClearExpectations(syncer()); |
| 1017 | 1030 |
| 1018 // Poll. | 1031 // Poll. |
| 1019 EXPECT_CALL(*syncer(), SyncShare(_, SYNCER_BEGIN, SYNCER_END)) | 1032 EXPECT_CALL(*syncer(), SyncShare(_, SYNCER_BEGIN, SYNCER_END)) |
| 1020 .Times(AtLeast(1)) | 1033 .Times(AtLeast(1)) |
| 1021 .WillRepeatedly(QuitLoopNowAction()); | 1034 .WillRepeatedly(QuitLoopNowAction()); |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1070 PumpLoop(); | 1083 PumpLoop(); |
| 1071 // Pump again to run job. | 1084 // Pump again to run job. |
| 1072 PumpLoop(); | 1085 PumpLoop(); |
| 1073 | 1086 |
| 1074 scheduler()->Stop(); | 1087 scheduler()->Stop(); |
| 1075 | 1088 |
| 1076 EXPECT_TRUE(expected == context()->previous_session_routing_info()); | 1089 EXPECT_TRUE(expected == context()->previous_session_routing_info()); |
| 1077 } | 1090 } |
| 1078 | 1091 |
| 1079 } // namespace browser_sync | 1092 } // namespace browser_sync |
| OLD | NEW |