Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(382)

Side by Side Diff: chrome/browser/sync/engine/sync_scheduler_unittest.cc

Issue 7655055: [Sync] Make BackendMigrator not wait for full sync cycles (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix race condition Created 9 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698