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

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

Issue 6812004: sync: Make nudge + config jobs reliable in SyncerThread2 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: upload before commit. Created 9 years, 8 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
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "base/time.h"
6 #include "chrome/browser/sync/engine/mock_model_safe_workers.h"
7 #include "chrome/browser/sync/engine/syncer_thread2.h"
8 #include "chrome/browser/sync/sessions/sync_session_context.h"
9 #include "chrome/browser/sync/sessions/test_util.h"
10 #include "chrome/test/sync/engine/mock_connection_manager.h"
11 #include "chrome/test/sync/engine/test_directory_setter_upper.h"
12 #include "testing/gtest/include/gtest/gtest.h"
13 #include "testing/gmock/include/gmock/gmock.h"
14
15 using base::TimeDelta;
16 using base::TimeTicks;
17
18 namespace browser_sync {
19 using sessions::SyncSessionContext;
20 using browser_sync::Syncer;
21
22 namespace s3 {
23
24 class SyncerThread2WhiteboxTest : public testing::Test {
25 public:
26 virtual void SetUp() {
27 syncdb_.SetUp();
28 Syncer* syncer = new Syncer();
29 registrar_.reset(MockModelSafeWorkerRegistrar::PassiveBookmarks());
30 context_ = new SyncSessionContext(connection_.get(), syncdb_.manager(),
31 registrar_.get(), std::vector<SyncEngineEventListener*>());
32 context_->set_notifications_enabled(true);
33 context_->set_account_name("Test");
34 syncer_thread_.reset(new SyncerThread(context_, syncer));
35 }
36
37 virtual void TearDown() {
38 syncdb_.TearDown();
39 }
40
41 void SetMode(SyncerThread::Mode mode) {
42 syncer_thread_->mode_ = mode;
43 }
44
45 void SetLastSyncedTime(base::TimeTicks ticks) {
46 syncer_thread_->last_sync_session_end_time_ = ticks;
47 }
48
49 void SetServerConnection(bool connected) {
50 syncer_thread_->server_connection_ok_ = connected;
51 }
52
53 void ResetWaitInterval() {
54 syncer_thread_->wait_interval_.reset();
55 }
56
57 void SetWaitIntervalToThrottled() {
58 syncer_thread_->wait_interval_.reset(new SyncerThread::WaitInterval(
59 SyncerThread::WaitInterval::THROTTLED, TimeDelta::FromSeconds(1)));
60 }
61
62 void SetWaitIntervalToExponentialBackoff() {
63 syncer_thread_->wait_interval_.reset(
64 new SyncerThread::WaitInterval(
65 SyncerThread::WaitInterval::EXPONENTIAL_BACKOFF,
66 TimeDelta::FromSeconds(1)));
67 }
68
69 SyncerThread::JobProcessDecision DecideOnJob(
70 const SyncerThread::SyncSessionJob& job) {
71 return syncer_thread_->DecideOnJob(job);
72 }
73
74 void InitializeSyncerOnNormalMode() {
75 SetMode(SyncerThread::NORMAL_MODE);
76 ResetWaitInterval();
77 SetServerConnection(true);
78 SetLastSyncedTime(base::TimeTicks::Now());
79 }
80
81 SyncerThread::JobProcessDecision CreateAndDecideJob(
82 SyncerThread::SyncSessionJob::SyncSessionJobPurpose purpose) {
83 struct SyncerThread::SyncSessionJob job;
84 job.purpose = purpose;
85 job.scheduled_start = TimeTicks::Now();
86 return DecideOnJob(job);
87 }
88
89 protected:
90 scoped_ptr<SyncerThread> syncer_thread_;
91
92 private:
93 scoped_ptr<MockConnectionManager> connection_;
94 SyncSessionContext* context_;
95 //MockDelayProvider* delay_;
96 scoped_ptr<MockModelSafeWorkerRegistrar> registrar_;
97 MockDirectorySetterUpper syncdb_;
98 };
99
100 TEST_F(SyncerThread2WhiteboxTest, SaveNudge) {
101 InitializeSyncerOnNormalMode();
102
103 // Now set the mode to configure.
104 SetMode(SyncerThread::CONFIGURATION_MODE);
105
106 SyncerThread::JobProcessDecision decision =
107 CreateAndDecideJob(SyncerThread::SyncSessionJob::NUDGE);
108
109 EXPECT_EQ(decision, SyncerThread::SAVE);
110 }
111
112 TEST_F(SyncerThread2WhiteboxTest, ContinueNudge) {
113 InitializeSyncerOnNormalMode();
114
115 SyncerThread::JobProcessDecision decision = CreateAndDecideJob(
116 SyncerThread::SyncSessionJob::NUDGE);
117
118 EXPECT_EQ(decision, SyncerThread::CONTINUE);
119 }
120
121 TEST_F(SyncerThread2WhiteboxTest, DropPoll) {
122 InitializeSyncerOnNormalMode();
123 SetMode(SyncerThread::CONFIGURATION_MODE);
124
125 SyncerThread::JobProcessDecision decision = CreateAndDecideJob(
126 SyncerThread::SyncSessionJob::POLL);
127
128 EXPECT_EQ(decision, SyncerThread::DROP);
129 }
130
131 TEST_F(SyncerThread2WhiteboxTest, ContinuePoll) {
132 InitializeSyncerOnNormalMode();
133
134 SyncerThread::JobProcessDecision decision = CreateAndDecideJob(
135 SyncerThread::SyncSessionJob::POLL);
136
137 EXPECT_EQ(decision, SyncerThread::CONTINUE);
138 }
139
140 TEST_F(SyncerThread2WhiteboxTest, ContinueConfiguration) {
141 InitializeSyncerOnNormalMode();
142 SetMode(SyncerThread::CONFIGURATION_MODE);
143
144 SyncerThread::JobProcessDecision decision = CreateAndDecideJob(
145 SyncerThread::SyncSessionJob::CONFIGURATION);
146
147 EXPECT_EQ(decision, SyncerThread::CONTINUE);
148 }
149
150 TEST_F(SyncerThread2WhiteboxTest, SaveConfigurationWhileThrottled) {
151 InitializeSyncerOnNormalMode();
152 SetMode(SyncerThread::CONFIGURATION_MODE);
153
154 SetWaitIntervalToThrottled();
155
156 SyncerThread::JobProcessDecision decision = CreateAndDecideJob(
157 SyncerThread::SyncSessionJob::CONFIGURATION);
158
159 EXPECT_EQ(decision, SyncerThread::SAVE);
160 }
161
162 TEST_F(SyncerThread2WhiteboxTest, SaveNudgeWhileThrottled) {
163 InitializeSyncerOnNormalMode();
164 SetMode(SyncerThread::CONFIGURATION_MODE);
165
166 SetWaitIntervalToThrottled();
167
168 SyncerThread::JobProcessDecision decision = CreateAndDecideJob(
169 SyncerThread::SyncSessionJob::NUDGE);
170
171 EXPECT_EQ(decision, SyncerThread::SAVE);
172
173 }
174
175 TEST_F(SyncerThread2WhiteboxTest, ContinueClearUserDataUnderAllCircumstances) {
176 InitializeSyncerOnNormalMode();
177
178 SetMode(SyncerThread::CONFIGURATION_MODE);
179 SetWaitIntervalToThrottled();
180 SyncerThread::JobProcessDecision decision = CreateAndDecideJob(
181 SyncerThread::SyncSessionJob::CLEAR_USER_DATA);
182 EXPECT_EQ(decision, SyncerThread::CONTINUE);
183
184 SetMode(SyncerThread::NORMAL_MODE);
185 SetWaitIntervalToExponentialBackoff();
186 decision = CreateAndDecideJob(
187 SyncerThread::SyncSessionJob::CLEAR_USER_DATA);
188 EXPECT_EQ(decision, SyncerThread::CONTINUE);
189 }
190
191 TEST_F(SyncerThread2WhiteboxTest, ContinueNudgeWhileExponentialBackOff) {
192 InitializeSyncerOnNormalMode();
193 SetMode(SyncerThread::NORMAL_MODE);
194 SetWaitIntervalToExponentialBackoff();
195
196 SyncerThread::JobProcessDecision decision = CreateAndDecideJob(
197 SyncerThread::SyncSessionJob::NUDGE);
198
199 EXPECT_EQ(decision, SyncerThread::CONTINUE);
200 }
201
202 TEST_F(SyncerThread2WhiteboxTest, DropNudgeWhileExponentialBackOff) {
203 InitializeSyncerOnNormalMode();
204 SetMode(SyncerThread::NORMAL_MODE);
205 SetWaitIntervalToExponentialBackoff();
206
207 syncer_thread_->wait_interval_->had_nudge = true;
208
209 SyncerThread::JobProcessDecision decision = CreateAndDecideJob(
210 SyncerThread::SyncSessionJob::NUDGE);
211
212 EXPECT_EQ(decision, SyncerThread::DROP);
213 }
214
215 TEST_F(SyncerThread2WhiteboxTest, ContinueCanaryJobConfig) {
216 InitializeSyncerOnNormalMode();
217 SetMode(SyncerThread::CONFIGURATION_MODE);
218 SetWaitIntervalToExponentialBackoff();
219
220 struct SyncerThread::SyncSessionJob job;
221 job.purpose = SyncerThread::SyncSessionJob::CONFIGURATION;
222 job.scheduled_start = TimeTicks::Now();
223 job.is_canary_job = true;
224 SyncerThread::JobProcessDecision decision = DecideOnJob(job);
225
226 EXPECT_EQ(decision, SyncerThread::CONTINUE);
227 }
228
229
230 } // namespace s3
231 } // namespace browser_sync
232
233 // SyncerThread won't outlive the test!
234 DISABLE_RUNNABLE_METHOD_REFCOUNT(
235 browser_sync::s3::SyncerThread2WhiteboxTest);
OLDNEW
« no previous file with comments | « chrome/browser/sync/engine/syncer_thread2_unittest.cc ('k') | chrome/browser/sync/glue/sync_backend_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698