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 "testing/gtest/include/gtest/gtest.h" | 5 #include "testing/gtest/include/gtest/gtest.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
9 #include "base/callback.h" | 9 #include "base/callback.h" |
10 #include "base/compiler_specific.h" | 10 #include "base/compiler_specific.h" |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
142 WillOnce(Return(ProfileSyncComponentsFactory::SyncComponents( | 142 WillOnce(Return(ProfileSyncComponentsFactory::SyncComponents( |
143 model_associator_, change_processor_))); | 143 model_associator_, change_processor_))); |
144 } | 144 } |
145 | 145 |
146 void SetAssociateExpectations() { | 146 void SetAssociateExpectations() { |
147 EXPECT_CALL(*model_associator_, CryptoReadyIfNecessary()). | 147 EXPECT_CALL(*model_associator_, CryptoReadyIfNecessary()). |
148 WillOnce(Return(true)); | 148 WillOnce(Return(true)); |
149 EXPECT_CALL(*model_associator_, SyncModelHasUserCreatedNodes(_)). | 149 EXPECT_CALL(*model_associator_, SyncModelHasUserCreatedNodes(_)). |
150 WillOnce(DoAll(SetArgumentPointee<0>(true), Return(true))); | 150 WillOnce(DoAll(SetArgumentPointee<0>(true), Return(true))); |
151 EXPECT_CALL(*model_associator_, AssociateModels()). | 151 EXPECT_CALL(*model_associator_, AssociateModels()). |
152 WillOnce(Return(SyncError())); | 152 WillOnce(Return(csync::SyncError())); |
153 EXPECT_CALL(*dtc_mock_, RecordAssociationTime(_)); | 153 EXPECT_CALL(*dtc_mock_, RecordAssociationTime(_)); |
154 } | 154 } |
155 | 155 |
156 void SetActivateExpectations(DataTypeController::StartResult result) { | 156 void SetActivateExpectations(DataTypeController::StartResult result) { |
157 EXPECT_CALL(service_, ActivateDataType(_, _, _)); | 157 EXPECT_CALL(service_, ActivateDataType(_, _, _)); |
158 EXPECT_CALL(start_callback_, Run(result,_)); | 158 EXPECT_CALL(start_callback_, Run(result,_)); |
159 } | 159 } |
160 | 160 |
161 void SetStopExpectations() { | 161 void SetStopExpectations() { |
162 EXPECT_CALL(*dtc_mock_, StopModels()); | 162 EXPECT_CALL(*dtc_mock_, StopModels()); |
163 EXPECT_CALL(service_, DeactivateDataType(_)); | 163 EXPECT_CALL(service_, DeactivateDataType(_)); |
164 EXPECT_CALL(*model_associator_, DisassociateModels()). | 164 EXPECT_CALL(*model_associator_, DisassociateModels()). |
165 WillOnce(Return(SyncError())); | 165 WillOnce(Return(csync::SyncError())); |
166 } | 166 } |
167 | 167 |
168 void SetStartFailExpectations(DataTypeController::StartResult result) { | 168 void SetStartFailExpectations(DataTypeController::StartResult result) { |
169 EXPECT_CALL(*dtc_mock_, StopModels()); | 169 EXPECT_CALL(*dtc_mock_, StopModels()); |
170 if (DataTypeController::IsUnrecoverableResult(result)) | 170 if (DataTypeController::IsUnrecoverableResult(result)) |
171 EXPECT_CALL(*dtc_mock_, RecordUnrecoverableError(_, _)); | 171 EXPECT_CALL(*dtc_mock_, RecordUnrecoverableError(_, _)); |
172 if (model_associator_) { | 172 if (model_associator_) { |
173 EXPECT_CALL(*model_associator_, DisassociateModels()). | 173 EXPECT_CALL(*model_associator_, DisassociateModels()). |
174 WillOnce(Return(SyncError())); | 174 WillOnce(Return(csync::SyncError())); |
175 } | 175 } |
176 EXPECT_CALL(*dtc_mock_, RecordStartFailure(result)); | 176 EXPECT_CALL(*dtc_mock_, RecordStartFailure(result)); |
177 EXPECT_CALL(start_callback_, Run(result,_)); | 177 EXPECT_CALL(start_callback_, Run(result,_)); |
178 } | 178 } |
179 | 179 |
180 static void SignalDone(WaitableEvent* done) { | 180 static void SignalDone(WaitableEvent* done) { |
181 done->Signal(); | 181 done->Signal(); |
182 } | 182 } |
183 | 183 |
184 void WaitForDTC() { | 184 void WaitForDTC() { |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
226 EXPECT_EQ(DataTypeController::RUNNING, non_frontend_dtc_->state()); | 226 EXPECT_EQ(DataTypeController::RUNNING, non_frontend_dtc_->state()); |
227 } | 227 } |
228 | 228 |
229 TEST_F(SyncNonFrontendDataTypeControllerTest, StartFirstRun) { | 229 TEST_F(SyncNonFrontendDataTypeControllerTest, StartFirstRun) { |
230 SetStartExpectations(); | 230 SetStartExpectations(); |
231 EXPECT_CALL(*model_associator_, CryptoReadyIfNecessary()). | 231 EXPECT_CALL(*model_associator_, CryptoReadyIfNecessary()). |
232 WillOnce(Return(true)); | 232 WillOnce(Return(true)); |
233 EXPECT_CALL(*model_associator_, SyncModelHasUserCreatedNodes(_)). | 233 EXPECT_CALL(*model_associator_, SyncModelHasUserCreatedNodes(_)). |
234 WillOnce(DoAll(SetArgumentPointee<0>(false), Return(true))); | 234 WillOnce(DoAll(SetArgumentPointee<0>(false), Return(true))); |
235 EXPECT_CALL(*model_associator_, AssociateModels()). | 235 EXPECT_CALL(*model_associator_, AssociateModels()). |
236 WillOnce(Return(SyncError())); | 236 WillOnce(Return(csync::SyncError())); |
237 EXPECT_CALL(*dtc_mock_, RecordAssociationTime(_)); | 237 EXPECT_CALL(*dtc_mock_, RecordAssociationTime(_)); |
238 SetActivateExpectations(DataTypeController::OK_FIRST_RUN); | 238 SetActivateExpectations(DataTypeController::OK_FIRST_RUN); |
239 EXPECT_EQ(DataTypeController::NOT_RUNNING, non_frontend_dtc_->state()); | 239 EXPECT_EQ(DataTypeController::NOT_RUNNING, non_frontend_dtc_->state()); |
240 Start(); | 240 Start(); |
241 WaitForDTC(); | 241 WaitForDTC(); |
242 EXPECT_EQ(DataTypeController::RUNNING, non_frontend_dtc_->state()); | 242 EXPECT_EQ(DataTypeController::RUNNING, non_frontend_dtc_->state()); |
243 } | 243 } |
244 | 244 |
245 TEST_F(SyncNonFrontendDataTypeControllerTest, StartAssociationFailed) { | 245 TEST_F(SyncNonFrontendDataTypeControllerTest, StartAssociationFailed) { |
246 SetStartExpectations(); | 246 SetStartExpectations(); |
247 EXPECT_CALL(*model_associator_, CryptoReadyIfNecessary()). | 247 EXPECT_CALL(*model_associator_, CryptoReadyIfNecessary()). |
248 WillOnce(Return(true)); | 248 WillOnce(Return(true)); |
249 EXPECT_CALL(*model_associator_, SyncModelHasUserCreatedNodes(_)). | 249 EXPECT_CALL(*model_associator_, SyncModelHasUserCreatedNodes(_)). |
250 WillOnce(DoAll(SetArgumentPointee<0>(true), Return(true))); | 250 WillOnce(DoAll(SetArgumentPointee<0>(true), Return(true))); |
251 EXPECT_CALL(*model_associator_, AssociateModels()). | 251 EXPECT_CALL(*model_associator_, AssociateModels()). |
252 WillOnce(Return(SyncError(FROM_HERE, "Error", syncable::AUTOFILL))); | 252 WillOnce( |
| 253 Return(csync::SyncError(FROM_HERE, "Error", syncable::AUTOFILL))); |
253 EXPECT_CALL(*dtc_mock_, RecordAssociationTime(_)); | 254 EXPECT_CALL(*dtc_mock_, RecordAssociationTime(_)); |
254 SetStartFailExpectations(DataTypeController::ASSOCIATION_FAILED); | 255 SetStartFailExpectations(DataTypeController::ASSOCIATION_FAILED); |
255 // Set up association to fail with an association failed error. | 256 // Set up association to fail with an association failed error. |
256 EXPECT_EQ(DataTypeController::NOT_RUNNING, non_frontend_dtc_->state()); | 257 EXPECT_EQ(DataTypeController::NOT_RUNNING, non_frontend_dtc_->state()); |
257 Start(); | 258 Start(); |
258 WaitForDTC(); | 259 WaitForDTC(); |
259 EXPECT_EQ(DataTypeController::DISABLED, non_frontend_dtc_->state()); | 260 EXPECT_EQ(DataTypeController::DISABLED, non_frontend_dtc_->state()); |
260 } | 261 } |
261 | 262 |
262 TEST_F(SyncNonFrontendDataTypeControllerTest, | 263 TEST_F(SyncNonFrontendDataTypeControllerTest, |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
297 WillOnce(Return(true)); | 298 WillOnce(Return(true)); |
298 EXPECT_CALL(*model_associator_, SyncModelHasUserCreatedNodes(_)). | 299 EXPECT_CALL(*model_associator_, SyncModelHasUserCreatedNodes(_)). |
299 WillOnce(DoAll( | 300 WillOnce(DoAll( |
300 SignalEvent(&wait_for_db_thread_pause), | 301 SignalEvent(&wait_for_db_thread_pause), |
301 WaitOnEvent(&pause_db_thread), | 302 WaitOnEvent(&pause_db_thread), |
302 SetArgumentPointee<0>(true), | 303 SetArgumentPointee<0>(true), |
303 Return(true))); | 304 Return(true))); |
304 EXPECT_CALL(*model_associator_, AbortAssociation()).WillOnce( | 305 EXPECT_CALL(*model_associator_, AbortAssociation()).WillOnce( |
305 SignalEvent(&pause_db_thread)); | 306 SignalEvent(&pause_db_thread)); |
306 EXPECT_CALL(*model_associator_, AssociateModels()). | 307 EXPECT_CALL(*model_associator_, AssociateModels()). |
307 WillOnce(Return(SyncError())); | 308 WillOnce(Return(csync::SyncError())); |
308 EXPECT_CALL(*dtc_mock_, RecordAssociationTime(_)); | 309 EXPECT_CALL(*dtc_mock_, RecordAssociationTime(_)); |
309 EXPECT_CALL(service_, ActivateDataType(_, _, _)); | 310 EXPECT_CALL(service_, ActivateDataType(_, _, _)); |
310 EXPECT_CALL(start_callback_, Run(DataTypeController::ABORTED,_)); | 311 EXPECT_CALL(start_callback_, Run(DataTypeController::ABORTED,_)); |
311 EXPECT_CALL(*dtc_mock_, RecordStartFailure(DataTypeController::ABORTED)); | 312 EXPECT_CALL(*dtc_mock_, RecordStartFailure(DataTypeController::ABORTED)); |
312 SetStopExpectations(); | 313 SetStopExpectations(); |
313 EXPECT_EQ(DataTypeController::NOT_RUNNING, non_frontend_dtc_->state()); | 314 EXPECT_EQ(DataTypeController::NOT_RUNNING, non_frontend_dtc_->state()); |
314 Start(); | 315 Start(); |
315 wait_for_db_thread_pause.Wait(); | 316 wait_for_db_thread_pause.Wait(); |
316 non_frontend_dtc_->Stop(); | 317 non_frontend_dtc_->Stop(); |
317 WaitForDTC(); | 318 WaitForDTC(); |
318 EXPECT_EQ(DataTypeController::NOT_RUNNING, non_frontend_dtc_->state()); | 319 EXPECT_EQ(DataTypeController::NOT_RUNNING, non_frontend_dtc_->state()); |
319 } | 320 } |
320 | 321 |
321 // Same as above but abort during the Activate call. | 322 // Same as above but abort during the Activate call. |
322 TEST_F(SyncNonFrontendDataTypeControllerTest, AbortDuringAssociationActivated) { | 323 TEST_F(SyncNonFrontendDataTypeControllerTest, AbortDuringAssociationActivated) { |
323 WaitableEvent wait_for_db_thread_pause(false, false); | 324 WaitableEvent wait_for_db_thread_pause(false, false); |
324 WaitableEvent pause_db_thread(false, false); | 325 WaitableEvent pause_db_thread(false, false); |
325 | 326 |
326 SetStartExpectations(); | 327 SetStartExpectations(); |
327 EXPECT_CALL(*model_associator_, CryptoReadyIfNecessary()). | 328 EXPECT_CALL(*model_associator_, CryptoReadyIfNecessary()). |
328 WillOnce(Return(true)); | 329 WillOnce(Return(true)); |
329 EXPECT_CALL(*model_associator_, SyncModelHasUserCreatedNodes(_)). | 330 EXPECT_CALL(*model_associator_, SyncModelHasUserCreatedNodes(_)). |
330 WillOnce(DoAll( | 331 WillOnce(DoAll( |
331 SetArgumentPointee<0>(true), | 332 SetArgumentPointee<0>(true), |
332 Return(true))); | 333 Return(true))); |
333 EXPECT_CALL(*model_associator_, AbortAssociation()).WillOnce( | 334 EXPECT_CALL(*model_associator_, AbortAssociation()).WillOnce( |
334 SignalEvent(&pause_db_thread)); | 335 SignalEvent(&pause_db_thread)); |
335 EXPECT_CALL(*model_associator_, AssociateModels()). | 336 EXPECT_CALL(*model_associator_, AssociateModels()). |
336 WillOnce(Return(SyncError())); | 337 WillOnce(Return(csync::SyncError())); |
337 EXPECT_CALL(*dtc_mock_, RecordAssociationTime(_)); | 338 EXPECT_CALL(*dtc_mock_, RecordAssociationTime(_)); |
338 EXPECT_CALL(service_, ActivateDataType(_, _, _)).WillOnce(DoAll( | 339 EXPECT_CALL(service_, ActivateDataType(_, _, _)).WillOnce(DoAll( |
339 SignalEvent(&wait_for_db_thread_pause), | 340 SignalEvent(&wait_for_db_thread_pause), |
340 WaitOnEvent(&pause_db_thread))); | 341 WaitOnEvent(&pause_db_thread))); |
341 EXPECT_CALL(start_callback_, Run(DataTypeController::ABORTED,_)); | 342 EXPECT_CALL(start_callback_, Run(DataTypeController::ABORTED,_)); |
342 EXPECT_CALL(*dtc_mock_, RecordStartFailure(DataTypeController::ABORTED)); | 343 EXPECT_CALL(*dtc_mock_, RecordStartFailure(DataTypeController::ABORTED)); |
343 SetStopExpectations(); | 344 SetStopExpectations(); |
344 EXPECT_EQ(DataTypeController::NOT_RUNNING, non_frontend_dtc_->state()); | 345 EXPECT_EQ(DataTypeController::NOT_RUNNING, non_frontend_dtc_->state()); |
345 Start(); | 346 Start(); |
346 wait_for_db_thread_pause.Wait(); | 347 wait_for_db_thread_pause.Wait(); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
378 EXPECT_EQ(DataTypeController::RUNNING, non_frontend_dtc_->state()); | 379 EXPECT_EQ(DataTypeController::RUNNING, non_frontend_dtc_->state()); |
379 // This should cause non_frontend_dtc_->Stop() to be called. | 380 // This should cause non_frontend_dtc_->Stop() to be called. |
380 BrowserThread::PostTask(BrowserThread::DB, FROM_HERE, base::Bind( | 381 BrowserThread::PostTask(BrowserThread::DB, FROM_HERE, base::Bind( |
381 &NonFrontendDataTypeControllerFake::OnSingleDatatypeUnrecoverableError, | 382 &NonFrontendDataTypeControllerFake::OnSingleDatatypeUnrecoverableError, |
382 non_frontend_dtc_.get(), | 383 non_frontend_dtc_.get(), |
383 FROM_HERE, | 384 FROM_HERE, |
384 std::string("Test"))); | 385 std::string("Test"))); |
385 WaitForDTC(); | 386 WaitForDTC(); |
386 EXPECT_EQ(DataTypeController::NOT_RUNNING, non_frontend_dtc_->state()); | 387 EXPECT_EQ(DataTypeController::NOT_RUNNING, non_frontend_dtc_->state()); |
387 } | 388 } |
OLD | NEW |