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/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
92 dtc_mock_ = new StrictMock<FrontendDataTypeControllerMock>(); | 92 dtc_mock_ = new StrictMock<FrontendDataTypeControllerMock>(); |
93 frontend_dtc_ = | 93 frontend_dtc_ = |
94 new FrontendDataTypeControllerFake(profile_sync_factory_.get(), | 94 new FrontendDataTypeControllerFake(profile_sync_factory_.get(), |
95 &profile_, | 95 &profile_, |
96 &service_, | 96 &service_, |
97 dtc_mock_.get()); | 97 dtc_mock_.get()); |
98 } | 98 } |
99 | 99 |
100 protected: | 100 protected: |
101 void SetStartExpectations() { | 101 void SetStartExpectations() { |
102 EXPECT_CALL(*dtc_mock_, StartModels()).WillOnce(Return(true)); | 102 EXPECT_CALL(*dtc_mock_.get(), StartModels()).WillOnce(Return(true)); |
103 EXPECT_CALL(model_load_callback_, Run(_, _)); | 103 EXPECT_CALL(model_load_callback_, Run(_, _)); |
104 model_associator_ = new ModelAssociatorMock(); | 104 model_associator_ = new ModelAssociatorMock(); |
105 change_processor_ = new ChangeProcessorMock(); | 105 change_processor_ = new ChangeProcessorMock(); |
106 EXPECT_CALL(*profile_sync_factory_, CreateBookmarkSyncComponents(_, _)). | 106 EXPECT_CALL(*profile_sync_factory_, CreateBookmarkSyncComponents(_, _)). |
107 WillOnce(Return(ProfileSyncComponentsFactory::SyncComponents( | 107 WillOnce(Return(ProfileSyncComponentsFactory::SyncComponents( |
108 model_associator_, change_processor_))); | 108 model_associator_, change_processor_))); |
109 } | 109 } |
110 | 110 |
111 void SetAssociateExpectations() { | 111 void SetAssociateExpectations() { |
112 EXPECT_CALL(*model_associator_, CryptoReadyIfNecessary()). | 112 EXPECT_CALL(*model_associator_, CryptoReadyIfNecessary()). |
113 WillOnce(Return(true)); | 113 WillOnce(Return(true)); |
114 EXPECT_CALL(*model_associator_, SyncModelHasUserCreatedNodes(_)). | 114 EXPECT_CALL(*model_associator_, SyncModelHasUserCreatedNodes(_)). |
115 WillOnce(DoAll(SetArgumentPointee<0>(true), Return(true))); | 115 WillOnce(DoAll(SetArgumentPointee<0>(true), Return(true))); |
116 EXPECT_CALL(*model_associator_, AssociateModels(_, _)). | 116 EXPECT_CALL(*model_associator_, AssociateModels(_, _)). |
117 WillOnce(Return(syncer::SyncError())); | 117 WillOnce(Return(syncer::SyncError())); |
118 EXPECT_CALL(*dtc_mock_, RecordAssociationTime(_)); | 118 EXPECT_CALL(*dtc_mock_.get(), RecordAssociationTime(_)); |
119 } | 119 } |
120 | 120 |
121 void SetActivateExpectations(DataTypeController::StartResult result) { | 121 void SetActivateExpectations(DataTypeController::StartResult result) { |
122 EXPECT_CALL(service_, ActivateDataType(_, _, _)); | 122 EXPECT_CALL(service_, ActivateDataType(_, _, _)); |
123 EXPECT_CALL(start_callback_, Run(result, _, _)); | 123 EXPECT_CALL(start_callback_, Run(result, _, _)); |
124 } | 124 } |
125 | 125 |
126 void SetStopExpectations() { | 126 void SetStopExpectations() { |
127 EXPECT_CALL(*dtc_mock_, CleanUpState()); | 127 EXPECT_CALL(*dtc_mock_.get(), CleanUpState()); |
128 EXPECT_CALL(service_, DeactivateDataType(_)); | 128 EXPECT_CALL(service_, DeactivateDataType(_)); |
129 EXPECT_CALL(*model_associator_, DisassociateModels()). | 129 EXPECT_CALL(*model_associator_, DisassociateModels()). |
130 WillOnce(Return(syncer::SyncError())); | 130 WillOnce(Return(syncer::SyncError())); |
131 } | 131 } |
132 | 132 |
133 void SetStartFailExpectations(DataTypeController::StartResult result) { | 133 void SetStartFailExpectations(DataTypeController::StartResult result) { |
134 if (DataTypeController::IsUnrecoverableResult(result)) | 134 if (DataTypeController::IsUnrecoverableResult(result)) |
135 EXPECT_CALL(*dtc_mock_, RecordUnrecoverableError(_, _)); | 135 EXPECT_CALL(*dtc_mock_.get(), RecordUnrecoverableError(_, _)); |
136 EXPECT_CALL(*dtc_mock_, CleanUpState()); | 136 EXPECT_CALL(*dtc_mock_.get(), CleanUpState()); |
137 EXPECT_CALL(*dtc_mock_, RecordStartFailure(result)); | 137 EXPECT_CALL(*dtc_mock_.get(), RecordStartFailure(result)); |
138 EXPECT_CALL(start_callback_, Run(result, _, _)); | 138 EXPECT_CALL(start_callback_, Run(result, _, _)); |
139 } | 139 } |
140 | 140 |
141 void Start() { | 141 void Start() { |
142 frontend_dtc_->LoadModels( | 142 frontend_dtc_->LoadModels( |
143 base::Bind(&ModelLoadCallbackMock::Run, | 143 base::Bind(&ModelLoadCallbackMock::Run, |
144 base::Unretained(&model_load_callback_))); | 144 base::Unretained(&model_load_callback_))); |
145 frontend_dtc_->StartAssociating( | 145 frontend_dtc_->StartAssociating( |
146 base::Bind(&StartCallbackMock::Run, | 146 base::Bind(&StartCallbackMock::Run, |
147 base::Unretained(&start_callback_))); | 147 base::Unretained(&start_callback_))); |
(...skipping 26 matching lines...) Expand all Loading... |
174 } | 174 } |
175 | 175 |
176 TEST_F(SyncFrontendDataTypeControllerTest, StartFirstRun) { | 176 TEST_F(SyncFrontendDataTypeControllerTest, StartFirstRun) { |
177 SetStartExpectations(); | 177 SetStartExpectations(); |
178 EXPECT_CALL(*model_associator_, CryptoReadyIfNecessary()). | 178 EXPECT_CALL(*model_associator_, CryptoReadyIfNecessary()). |
179 WillOnce(Return(true)); | 179 WillOnce(Return(true)); |
180 EXPECT_CALL(*model_associator_, SyncModelHasUserCreatedNodes(_)). | 180 EXPECT_CALL(*model_associator_, SyncModelHasUserCreatedNodes(_)). |
181 WillOnce(DoAll(SetArgumentPointee<0>(false), Return(true))); | 181 WillOnce(DoAll(SetArgumentPointee<0>(false), Return(true))); |
182 EXPECT_CALL(*model_associator_, AssociateModels(_, _)). | 182 EXPECT_CALL(*model_associator_, AssociateModels(_, _)). |
183 WillOnce(Return(syncer::SyncError())); | 183 WillOnce(Return(syncer::SyncError())); |
184 EXPECT_CALL(*dtc_mock_, RecordAssociationTime(_)); | 184 EXPECT_CALL(*dtc_mock_.get(), RecordAssociationTime(_)); |
185 SetActivateExpectations(DataTypeController::OK_FIRST_RUN); | 185 SetActivateExpectations(DataTypeController::OK_FIRST_RUN); |
186 EXPECT_EQ(DataTypeController::NOT_RUNNING, frontend_dtc_->state()); | 186 EXPECT_EQ(DataTypeController::NOT_RUNNING, frontend_dtc_->state()); |
187 Start(); | 187 Start(); |
188 EXPECT_EQ(DataTypeController::RUNNING, frontend_dtc_->state()); | 188 EXPECT_EQ(DataTypeController::RUNNING, frontend_dtc_->state()); |
189 } | 189 } |
190 | 190 |
191 TEST_F(SyncFrontendDataTypeControllerTest, AbortDuringStartModels) { | 191 TEST_F(SyncFrontendDataTypeControllerTest, AbortDuringStartModels) { |
192 EXPECT_CALL(*dtc_mock_, StartModels()).WillOnce(Return(false)); | 192 EXPECT_CALL(*dtc_mock_.get(), StartModels()).WillOnce(Return(false)); |
193 EXPECT_CALL(*dtc_mock_, CleanUpState()); | 193 EXPECT_CALL(*dtc_mock_.get(), CleanUpState()); |
194 EXPECT_CALL(model_load_callback_, Run(_, _)); | 194 EXPECT_CALL(model_load_callback_, Run(_, _)); |
195 EXPECT_EQ(DataTypeController::NOT_RUNNING, frontend_dtc_->state()); | 195 EXPECT_EQ(DataTypeController::NOT_RUNNING, frontend_dtc_->state()); |
196 frontend_dtc_->LoadModels( | 196 frontend_dtc_->LoadModels( |
197 base::Bind(&ModelLoadCallbackMock::Run, | 197 base::Bind(&ModelLoadCallbackMock::Run, |
198 base::Unretained(&model_load_callback_))); | 198 base::Unretained(&model_load_callback_))); |
199 EXPECT_EQ(DataTypeController::MODEL_STARTING, frontend_dtc_->state()); | 199 EXPECT_EQ(DataTypeController::MODEL_STARTING, frontend_dtc_->state()); |
200 frontend_dtc_->Stop(); | 200 frontend_dtc_->Stop(); |
201 EXPECT_EQ(DataTypeController::NOT_RUNNING, frontend_dtc_->state()); | 201 EXPECT_EQ(DataTypeController::NOT_RUNNING, frontend_dtc_->state()); |
202 } | 202 } |
203 | 203 |
204 TEST_F(SyncFrontendDataTypeControllerTest, StartAssociationFailed) { | 204 TEST_F(SyncFrontendDataTypeControllerTest, StartAssociationFailed) { |
205 SetStartExpectations(); | 205 SetStartExpectations(); |
206 EXPECT_CALL(*model_associator_, CryptoReadyIfNecessary()). | 206 EXPECT_CALL(*model_associator_, CryptoReadyIfNecessary()). |
207 WillOnce(Return(true)); | 207 WillOnce(Return(true)); |
208 EXPECT_CALL(*model_associator_, SyncModelHasUserCreatedNodes(_)). | 208 EXPECT_CALL(*model_associator_, SyncModelHasUserCreatedNodes(_)). |
209 WillOnce(DoAll(SetArgumentPointee<0>(true), Return(true))); | 209 WillOnce(DoAll(SetArgumentPointee<0>(true), Return(true))); |
210 EXPECT_CALL(*model_associator_, AssociateModels(_, _)). | 210 EXPECT_CALL(*model_associator_, AssociateModels(_, _)). |
211 WillOnce(Return(syncer::SyncError(FROM_HERE, | 211 WillOnce(Return(syncer::SyncError(FROM_HERE, |
212 "error", | 212 "error", |
213 syncer::BOOKMARKS))); | 213 syncer::BOOKMARKS))); |
214 | 214 |
215 EXPECT_CALL(*dtc_mock_, RecordAssociationTime(_)); | 215 EXPECT_CALL(*dtc_mock_.get(), RecordAssociationTime(_)); |
216 SetStartFailExpectations(DataTypeController::ASSOCIATION_FAILED); | 216 SetStartFailExpectations(DataTypeController::ASSOCIATION_FAILED); |
217 // Set up association to fail with an association failed error. | 217 // Set up association to fail with an association failed error. |
218 EXPECT_EQ(DataTypeController::NOT_RUNNING, frontend_dtc_->state()); | 218 EXPECT_EQ(DataTypeController::NOT_RUNNING, frontend_dtc_->state()); |
219 Start(); | 219 Start(); |
220 EXPECT_EQ(DataTypeController::DISABLED, frontend_dtc_->state()); | 220 EXPECT_EQ(DataTypeController::DISABLED, frontend_dtc_->state()); |
221 } | 221 } |
222 | 222 |
223 TEST_F(SyncFrontendDataTypeControllerTest, | 223 TEST_F(SyncFrontendDataTypeControllerTest, |
224 StartAssociationTriggersUnrecoverableError) { | 224 StartAssociationTriggersUnrecoverableError) { |
225 SetStartExpectations(); | 225 SetStartExpectations(); |
(...skipping 28 matching lines...) Expand all Loading... |
254 Start(); | 254 Start(); |
255 EXPECT_EQ(DataTypeController::RUNNING, frontend_dtc_->state()); | 255 EXPECT_EQ(DataTypeController::RUNNING, frontend_dtc_->state()); |
256 frontend_dtc_->Stop(); | 256 frontend_dtc_->Stop(); |
257 EXPECT_EQ(DataTypeController::NOT_RUNNING, frontend_dtc_->state()); | 257 EXPECT_EQ(DataTypeController::NOT_RUNNING, frontend_dtc_->state()); |
258 } | 258 } |
259 | 259 |
260 TEST_F(SyncFrontendDataTypeControllerTest, OnSingleDatatypeUnrecoverableError) { | 260 TEST_F(SyncFrontendDataTypeControllerTest, OnSingleDatatypeUnrecoverableError) { |
261 SetStartExpectations(); | 261 SetStartExpectations(); |
262 SetAssociateExpectations(); | 262 SetAssociateExpectations(); |
263 SetActivateExpectations(DataTypeController::OK); | 263 SetActivateExpectations(DataTypeController::OK); |
264 EXPECT_CALL(*dtc_mock_, RecordUnrecoverableError(_, "Test")); | 264 EXPECT_CALL(*dtc_mock_.get(), RecordUnrecoverableError(_, "Test")); |
265 EXPECT_CALL(service_, DisableBrokenDatatype(_,_,_)). | 265 EXPECT_CALL(service_, DisableBrokenDatatype(_, _, _)) |
266 WillOnce(InvokeWithoutArgs(frontend_dtc_.get(), | 266 .WillOnce(InvokeWithoutArgs(frontend_dtc_.get(), |
267 &FrontendDataTypeController::Stop)); | 267 &FrontendDataTypeController::Stop)); |
268 SetStopExpectations(); | 268 SetStopExpectations(); |
269 EXPECT_EQ(DataTypeController::NOT_RUNNING, frontend_dtc_->state()); | 269 EXPECT_EQ(DataTypeController::NOT_RUNNING, frontend_dtc_->state()); |
270 Start(); | 270 Start(); |
271 EXPECT_EQ(DataTypeController::RUNNING, frontend_dtc_->state()); | 271 EXPECT_EQ(DataTypeController::RUNNING, frontend_dtc_->state()); |
272 // This should cause frontend_dtc_->Stop() to be called. | 272 // This should cause frontend_dtc_->Stop() to be called. |
273 frontend_dtc_->OnSingleDatatypeUnrecoverableError(FROM_HERE, "Test"); | 273 frontend_dtc_->OnSingleDatatypeUnrecoverableError(FROM_HERE, "Test"); |
274 PumpLoop(); | 274 PumpLoop(); |
275 EXPECT_EQ(DataTypeController::NOT_RUNNING, frontend_dtc_->state()); | 275 EXPECT_EQ(DataTypeController::NOT_RUNNING, frontend_dtc_->state()); |
276 } | 276 } |
OLD | NEW |