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

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: Fixing CR feedback. 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 SyncerThread2WhiteboxUnitTest : public testing::Test {
tim (not reviewing) 2011/04/12 06:09:29 convention in chrome is to just suffix the class w
lipalani1 2011/04/13 00:07:29 Done.
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::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(SyncerThread2WhiteboxUnitTest, SaveNudge) {
101 InitializeSyncerOnNormalMode();
102
103 // Now set the mode to configure.
104 SetMode(SyncerThread::CONFIGURATION_MODE);
105
106 SyncerThread::JobProcessDecision decision =
107 CreateAndDecideJob(SyncerThread::NUDGE);
108
109 DCHECK_EQ(decision, SyncerThread::SAVE);
tim (not reviewing) 2011/04/12 06:09:29 Tests uses 'EXPECT_EQ' or ASSERT_EQ, not dcheck (t
lipalani1 2011/04/13 00:07:29 Stupid mistake. Corrected. On 2011/04/12 06:09:29,
110 }
111
112 TEST_F(SyncerThread2WhiteboxUnitTest, ContinueNudge) {
113 InitializeSyncerOnNormalMode();
114
115 SyncerThread::JobProcessDecision decision = CreateAndDecideJob(
116 SyncerThread::NUDGE);
117
118 DCHECK_EQ(decision, SyncerThread::CONTINUE);
119 }
120
121 TEST_F(SyncerThread2WhiteboxUnitTest, DropPoll) {
122 InitializeSyncerOnNormalMode();
123 SetMode(SyncerThread::CONFIGURATION_MODE);
124
125 SyncerThread::JobProcessDecision decision = CreateAndDecideJob(
126 SyncerThread::POLL);
127
128 DCHECK_EQ(decision, SyncerThread::DROP);
129 }
130
131 TEST_F(SyncerThread2WhiteboxUnitTest, ContinuePoll) {
132 InitializeSyncerOnNormalMode();
133
134 SyncerThread::JobProcessDecision decision = CreateAndDecideJob(
135 SyncerThread::POLL);
136
137 DCHECK_EQ(decision, SyncerThread::CONTINUE);
138 }
139
140 TEST_F(SyncerThread2WhiteboxUnitTest, ContinueConfiguration) {
141 InitializeSyncerOnNormalMode();
142 SetMode(SyncerThread::CONFIGURATION_MODE);
143
144 SyncerThread::JobProcessDecision decision = CreateAndDecideJob(
145 SyncerThread::CONFIGURATION);
146
147 DCHECK_EQ(decision, SyncerThread::CONTINUE);
148 }
149
150 TEST_F(SyncerThread2WhiteboxUnitTest, SaveConfigurationWhileThrottled) {
151 InitializeSyncerOnNormalMode();
152 SetMode(SyncerThread::CONFIGURATION_MODE);
153
154 SetWaitIntervalToThrottled();
155
156 SyncerThread::JobProcessDecision decision = CreateAndDecideJob(
157 SyncerThread::CONFIGURATION);
158
159 DCHECK_EQ(decision, SyncerThread::SAVE);
160 }
161
162 TEST_F(SyncerThread2WhiteboxUnitTest, SaveNudgeWhileThrottled) {
163 InitializeSyncerOnNormalMode();
164 SetMode(SyncerThread::CONFIGURATION_MODE);
165
166 SetWaitIntervalToThrottled();
167
168 SyncerThread::JobProcessDecision decision = CreateAndDecideJob(
169 SyncerThread::NUDGE);
170
171 DCHECK_EQ(decision, SyncerThread::SAVE);
172
173 }
174
175 TEST_F(SyncerThread2WhiteboxUnitTest,
176 ContinueClearUserDataUnderAllCircumstances) {
177 InitializeSyncerOnNormalMode();
178
179 SetMode(SyncerThread::CONFIGURATION_MODE);
180 SetWaitIntervalToThrottled();
181 SyncerThread::JobProcessDecision decision = CreateAndDecideJob(
182 SyncerThread::CLEAR_USER_DATA);
183 DCHECK_EQ(decision, SyncerThread::CONTINUE);
184
185 SetMode(SyncerThread::NORMAL_MODE);
186 SetWaitIntervalToExponentialBackoff();
187 decision = CreateAndDecideJob(
188 SyncerThread::CLEAR_USER_DATA);
189 DCHECK_EQ(decision, SyncerThread::CONTINUE);
190 }
191
192 TEST_F(SyncerThread2WhiteboxUnitTest, ContinueNudgeWhileExponentialBackOff) {
193 InitializeSyncerOnNormalMode();
194 SetMode(SyncerThread::NORMAL_MODE);
195 SetWaitIntervalToExponentialBackoff();
196
197 SyncerThread::JobProcessDecision decision = CreateAndDecideJob(
198 SyncerThread::NUDGE);
199
200 DCHECK_EQ(decision, SyncerThread::CONTINUE);
201 }
202
203 TEST_F(SyncerThread2WhiteboxUnitTest, DropNudgeWhileExponentialBackOff) {
204 InitializeSyncerOnNormalMode();
205 SetMode(SyncerThread::NORMAL_MODE);
206 SetWaitIntervalToExponentialBackoff();
207
208 syncer_thread_->wait_interval_->had_nudge = true;
209
210 SyncerThread::JobProcessDecision decision = CreateAndDecideJob(
211 SyncerThread::NUDGE);
212
213 DCHECK_EQ(decision, SyncerThread::DROP);
214 }
215
216 TEST_F(SyncerThread2WhiteboxUnitTest, ContinueCanaryJobConfig) {
217 InitializeSyncerOnNormalMode();
218 SetMode(SyncerThread::CONFIGURATION_MODE);
219 SetWaitIntervalToExponentialBackoff();
220
221 struct SyncerThread::SyncSessionJob job;
222 job.purpose = SyncerThread::CONFIGURATION;
223 job.scheduled_start = TimeTicks::Now();
224 job.is_canary_job = true;
225 SyncerThread::JobProcessDecision decision = DecideOnJob(job);
226
227 DCHECK_EQ(decision, SyncerThread::CONTINUE);
228 }
229
230
231 } // namespace s3
232 } // namespace browser_sync
233
234 // SyncerThread won't outlive the test!
235 DISABLE_RUNNABLE_METHOD_REFCOUNT(
236 browser_sync::s3::SyncerThread2WhiteboxUnitTest);
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698