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

Side by Side Diff: components/sync/driver/non_ui_model_type_controller_unittest.cc

Issue 2388673002: Revert of [Sync] Move //components/sync to the syncer namespace. (patchset #5 id:40001 of https://co (Closed)
Patch Set: Created 4 years, 2 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
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 "components/sync/driver/non_ui_model_type_controller.h" 5 #include "components/sync/driver/non_ui_model_type_controller.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
11 #include "base/callback.h" 11 #include "base/callback.h"
12 #include "base/logging.h" 12 #include "base/logging.h"
13 #include "base/memory/ptr_util.h" 13 #include "base/memory/ptr_util.h"
14 #include "base/memory/ref_counted.h" 14 #include "base/memory/ref_counted.h"
15 #include "base/memory/weak_ptr.h" 15 #include "base/memory/weak_ptr.h"
16 #include "base/message_loop/message_loop.h" 16 #include "base/message_loop/message_loop.h"
17 #include "base/run_loop.h" 17 #include "base/run_loop.h"
18 #include "base/sequenced_task_runner.h" 18 #include "base/sequenced_task_runner.h"
19 #include "base/test/test_simple_task_runner.h" 19 #include "base/test/test_simple_task_runner.h"
20 #include "base/threading/thread.h" 20 #include "base/threading/thread.h"
21 #include "components/sync/api/stub_model_type_service.h" 21 #include "components/sync/api/stub_model_type_service.h"
22 #include "components/sync/core/activation_context.h" 22 #include "components/sync/core/activation_context.h"
23 #include "components/sync/core/shared_model_type_processor.h" 23 #include "components/sync/core/shared_model_type_processor.h"
24 #include "components/sync/driver/backend_data_type_configurer.h" 24 #include "components/sync/driver/backend_data_type_configurer.h"
25 #include "components/sync/driver/fake_sync_client.h" 25 #include "components/sync/driver/fake_sync_client.h"
26 #include "components/sync/engine/commit_queue.h" 26 #include "components/sync/engine/commit_queue.h"
27 #include "testing/gtest/include/gtest/gtest.h" 27 #include "testing/gtest/include/gtest/gtest.h"
28 28
29 namespace syncer { 29 namespace sync_driver_v2 {
30 30
31 namespace { 31 namespace {
32 32
33 // Test controller derived from NonUIModelTypeController. 33 // Test controller derived from NonUIModelTypeController.
34 class TestNonUIModelTypeController : public NonUIModelTypeController { 34 class TestNonUIModelTypeController : public NonUIModelTypeController {
35 public: 35 public:
36 TestNonUIModelTypeController( 36 TestNonUIModelTypeController(
37 ModelType model_type, 37 syncer::ModelType model_type,
38 const scoped_refptr<base::TaskRunner>& model_task_runner, 38 const scoped_refptr<base::TaskRunner>& model_task_runner,
39 const base::Closure& dump_stack, 39 const base::Closure& dump_stack,
40 SyncClient* sync_client) 40 sync_driver::SyncClient* sync_client)
41 : NonUIModelTypeController(model_type, dump_stack, sync_client), 41 : NonUIModelTypeController(model_type, dump_stack, sync_client),
42 model_task_runner_(model_task_runner) {} 42 model_task_runner_(model_task_runner) {}
43 ~TestNonUIModelTypeController() override {} 43 ~TestNonUIModelTypeController() override {}
44 44
45 bool RunOnModelThread(const tracked_objects::Location& from_here, 45 bool RunOnModelThread(const tracked_objects::Location& from_here,
46 const base::Closure& task) override { 46 const base::Closure& task) override {
47 DCHECK(model_task_runner_); 47 DCHECK(model_task_runner_);
48 return model_task_runner_->PostTask(from_here, task); 48 return model_task_runner_->PostTask(from_here, task);
49 } 49 }
50 50
51 private: 51 private:
52 scoped_refptr<base::TaskRunner> model_task_runner_; 52 scoped_refptr<base::TaskRunner> model_task_runner_;
53 }; 53 };
54 54
55 // A no-op instance of CommitQueue. 55 // A no-op instance of CommitQueue.
56 class NullCommitQueue : public CommitQueue { 56 class NullCommitQueue : public syncer_v2::CommitQueue {
57 public: 57 public:
58 NullCommitQueue() {} 58 NullCommitQueue() {}
59 ~NullCommitQueue() override {} 59 ~NullCommitQueue() override {}
60 60
61 void EnqueueForCommit(const CommitRequestDataList& list) override { 61 void EnqueueForCommit(const syncer_v2::CommitRequestDataList& list) override {
62 NOTREACHED() << "Not implemented."; 62 NOTREACHED() << "Not implemented.";
63 } 63 }
64 }; 64 };
65 65
66 // A class that pretends to be the sync backend. 66 // A class that pretends to be the sync backend.
67 class MockSyncBackend { 67 class MockSyncBackend {
68 public: 68 public:
69 void Connect(ModelType type, 69 void Connect(
70 std::unique_ptr<ActivationContext> activation_context) { 70 syncer::ModelType type,
71 std::unique_ptr<syncer_v2::ActivationContext> activation_context) {
71 enabled_types_.Put(type); 72 enabled_types_.Put(type);
72 activation_context->type_processor->ConnectSync( 73 activation_context->type_processor->ConnectSync(
73 base::MakeUnique<NullCommitQueue>()); 74 base::MakeUnique<NullCommitQueue>());
74 } 75 }
75 76
76 void Disconnect(ModelType type) { 77 void Disconnect(syncer::ModelType type) {
77 DCHECK(enabled_types_.Has(type)); 78 DCHECK(enabled_types_.Has(type));
78 enabled_types_.Remove(type); 79 enabled_types_.Remove(type);
79 } 80 }
80 81
81 private: 82 private:
82 ModelTypeSet enabled_types_; 83 syncer::ModelTypeSet enabled_types_;
83 }; 84 };
84 85
85 // Fake implementation of BackendDataTypeConfigurer that pretends to be Sync 86 // Fake implementation of BackendDataTypeConfigurer that pretends to be Sync
86 // backend. 87 // backend.
87 class MockBackendDataTypeConfigurer : public BackendDataTypeConfigurer { 88 class MockBackendDataTypeConfigurer
89 : public sync_driver::BackendDataTypeConfigurer {
88 public: 90 public:
89 MockBackendDataTypeConfigurer( 91 MockBackendDataTypeConfigurer(
90 MockSyncBackend* backend, 92 MockSyncBackend* backend,
91 const scoped_refptr<base::TaskRunner>& sync_task_runner) 93 const scoped_refptr<base::TaskRunner>& sync_task_runner)
92 : backend_(backend), sync_task_runner_(sync_task_runner) {} 94 : backend_(backend), sync_task_runner_(sync_task_runner) {}
93 ~MockBackendDataTypeConfigurer() override {} 95 ~MockBackendDataTypeConfigurer() override {}
94 96
95 ModelTypeSet ConfigureDataTypes( 97 syncer::ModelTypeSet ConfigureDataTypes(
96 ConfigureReason reason, 98 syncer::ConfigureReason reason,
97 const DataTypeConfigStateMap& config_state_map, 99 const DataTypeConfigStateMap& config_state_map,
98 const base::Callback<void(ModelTypeSet, ModelTypeSet)>& ready_task, 100 const base::Callback<void(syncer::ModelTypeSet, syncer::ModelTypeSet)>&
101 ready_task,
99 const base::Callback<void()>& retry_callback) override { 102 const base::Callback<void()>& retry_callback) override {
100 NOTREACHED() << "Not implemented."; 103 NOTREACHED() << "Not implemented.";
101 return ModelTypeSet(); 104 return syncer::ModelTypeSet();
102 } 105 }
103 106
104 void ActivateDirectoryDataType(ModelType type, 107 void ActivateDirectoryDataType(
105 ModelSafeGroup group, 108 syncer::ModelType type,
106 ChangeProcessor* change_processor) override { 109 syncer::ModelSafeGroup group,
110 sync_driver::ChangeProcessor* change_processor) override {
107 NOTREACHED() << "Not implemented."; 111 NOTREACHED() << "Not implemented.";
108 } 112 }
109 113
110 void DeactivateDirectoryDataType(ModelType type) override { 114 void DeactivateDirectoryDataType(syncer::ModelType type) override {
111 NOTREACHED() << "Not implemented."; 115 NOTREACHED() << "Not implemented.";
112 } 116 }
113 117
114 void ActivateNonBlockingDataType( 118 void ActivateNonBlockingDataType(syncer::ModelType type,
115 ModelType type, 119 std::unique_ptr<syncer_v2::ActivationContext>
116 std::unique_ptr<ActivationContext> activation_context) override { 120 activation_context) override {
117 // Post on Sync thread just like the real implementation does. 121 // Post on Sync thread just like the real implementation does.
118 sync_task_runner_->PostTask( 122 sync_task_runner_->PostTask(
119 FROM_HERE, 123 FROM_HERE,
120 base::Bind(&MockSyncBackend::Connect, base::Unretained(backend_), type, 124 base::Bind(&MockSyncBackend::Connect, base::Unretained(backend_), type,
121 base::Passed(std::move(activation_context)))); 125 base::Passed(std::move(activation_context))));
122 } 126 }
123 127
124 void DeactivateNonBlockingDataType(ModelType type) override { 128 void DeactivateNonBlockingDataType(syncer::ModelType type) override {
125 sync_task_runner_->PostTask(FROM_HERE, 129 sync_task_runner_->PostTask(FROM_HERE,
126 base::Bind(&MockSyncBackend::Disconnect, 130 base::Bind(&MockSyncBackend::Disconnect,
127 base::Unretained(backend_), type)); 131 base::Unretained(backend_), type));
128 } 132 }
129 133
130 private: 134 private:
131 MockSyncBackend* backend_; 135 MockSyncBackend* backend_;
132 scoped_refptr<base::TaskRunner> sync_task_runner_; 136 scoped_refptr<base::TaskRunner> sync_task_runner_;
133 }; 137 };
134 138
135 } // namespace 139 } // namespace
136 140
137 class NonUIModelTypeControllerTest : public testing::Test, 141 class NonUIModelTypeControllerTest : public testing::Test,
138 public FakeSyncClient { 142 public sync_driver::FakeSyncClient {
139 public: 143 public:
140 NonUIModelTypeControllerTest() 144 NonUIModelTypeControllerTest()
141 : auto_run_tasks_(true), 145 : auto_run_tasks_(true),
142 load_models_callback_called_(false), 146 load_models_callback_called_(false),
143 association_callback_called_(false), 147 association_callback_called_(false),
144 model_thread_("modelthread"), 148 model_thread_("modelthread"),
145 configurer_(&backend_, ui_loop_.task_runner()) {} 149 configurer_(&backend_, ui_loop_.task_runner()) {}
146 150
147 ~NonUIModelTypeControllerTest() override {} 151 ~NonUIModelTypeControllerTest() override {}
148 152
149 void SetUp() override { 153 void SetUp() override {
150 model_thread_.Start(); 154 model_thread_.Start();
151 model_thread_runner_ = model_thread_.task_runner(); 155 model_thread_runner_ = model_thread_.task_runner();
152 InitializeModelTypeService(); 156 InitializeModelTypeService();
153 controller_.reset(new TestNonUIModelTypeController( 157 controller_.reset(new TestNonUIModelTypeController(
154 DICTIONARY, model_thread_runner_, base::Closure(), this)); 158 syncer::DICTIONARY, model_thread_runner_, base::Closure(), this));
155 } 159 }
156 160
157 void TearDown() override { 161 void TearDown() override {
158 ClearModelTypeService(); 162 ClearModelTypeService();
159 RunQueuedUIThreadTasks(); 163 RunQueuedUIThreadTasks();
160 } 164 }
161 165
162 base::WeakPtr<ModelTypeService> GetModelTypeServiceForType( 166 base::WeakPtr<syncer_v2::ModelTypeService> GetModelTypeServiceForType(
163 ModelType type) override { 167 syncer::ModelType type) override {
164 return service_->AsWeakPtr(); 168 return service_->AsWeakPtr();
165 } 169 }
166 170
167 protected: 171 protected:
168 std::unique_ptr<ModelTypeChangeProcessor> CreateProcessor( 172 std::unique_ptr<syncer_v2::ModelTypeChangeProcessor> CreateProcessor(
169 ModelType type, 173 syncer::ModelType type,
170 ModelTypeService* service) { 174 syncer_v2::ModelTypeService* service) {
171 std::unique_ptr<SharedModelTypeProcessor> processor = 175 std::unique_ptr<syncer_v2::SharedModelTypeProcessor> processor =
172 base::MakeUnique<SharedModelTypeProcessor>(type, service); 176 base::MakeUnique<syncer_v2::SharedModelTypeProcessor>(type, service);
173 type_processor_ = processor.get(); 177 type_processor_ = processor.get();
174 return std::move(processor); 178 return std::move(processor);
175 } 179 }
176 180
177 void InitializeModelTypeService() { 181 void InitializeModelTypeService() {
178 if (!model_thread_runner_ || 182 if (!model_thread_runner_ ||
179 model_thread_runner_->BelongsToCurrentThread()) { 183 model_thread_runner_->BelongsToCurrentThread()) {
180 service_.reset(new StubModelTypeService( 184 service_.reset(new syncer_v2::StubModelTypeService(
181 base::Bind(&NonUIModelTypeControllerTest::CreateProcessor, 185 base::Bind(&NonUIModelTypeControllerTest::CreateProcessor,
182 base::Unretained(this)))); 186 base::Unretained(this))));
183 } else { 187 } else {
184 model_thread_runner_->PostTask( 188 model_thread_runner_->PostTask(
185 FROM_HERE, 189 FROM_HERE,
186 base::Bind(&NonUIModelTypeControllerTest::InitializeModelTypeService, 190 base::Bind(&NonUIModelTypeControllerTest::InitializeModelTypeService,
187 base::Unretained(this))); 191 base::Unretained(this)));
188 RunQueuedModelThreadTasks(); 192 RunQueuedModelThreadTasks();
189 } 193 }
190 } 194 }
(...skipping 20 matching lines...) Expand all
211 FROM_HERE, 215 FROM_HERE,
212 base::Bind(&NonUIModelTypeControllerTest::ExpectProcessorConnected, 216 base::Bind(&NonUIModelTypeControllerTest::ExpectProcessorConnected,
213 base::Unretained(this), isConnected)); 217 base::Unretained(this), isConnected));
214 RunQueuedModelThreadTasks(); 218 RunQueuedModelThreadTasks();
215 } 219 }
216 } 220 }
217 221
218 void OnMetadataLoaded() { 222 void OnMetadataLoaded() {
219 if (model_thread_runner_->BelongsToCurrentThread()) { 223 if (model_thread_runner_->BelongsToCurrentThread()) {
220 if (!type_processor_->IsAllowingChanges()) { 224 if (!type_processor_->IsAllowingChanges()) {
221 type_processor_->OnMetadataLoaded(SyncError(), 225 type_processor_->OnMetadataLoaded(
222 base::MakeUnique<MetadataBatch>()); 226 syncer::SyncError(), base::MakeUnique<syncer_v2::MetadataBatch>());
223 } 227 }
224 } else { 228 } else {
225 model_thread_runner_->PostTask( 229 model_thread_runner_->PostTask(
226 FROM_HERE, base::Bind(&NonUIModelTypeControllerTest::OnMetadataLoaded, 230 FROM_HERE, base::Bind(&NonUIModelTypeControllerTest::OnMetadataLoaded,
227 base::Unretained(this))); 231 base::Unretained(this)));
228 } 232 }
229 } 233 }
230 234
231 void LoadModels() { 235 void LoadModels() {
232 controller_->LoadModels(base::Bind( 236 controller_->LoadModels(base::Bind(
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
277 model_thread_runner_->PostTaskAndReply( 281 model_thread_runner_->PostTaskAndReply(
278 FROM_HERE, base::Bind(&base::DoNothing), 282 FROM_HERE, base::Bind(&base::DoNothing),
279 base::Bind(&base::RunLoop::Quit, base::Unretained(&run_loop))); 283 base::Bind(&base::RunLoop::Quit, base::Unretained(&run_loop)));
280 run_loop.Run(); 284 run_loop.Run();
281 } 285 }
282 286
283 void SetAutoRunTasks(bool auto_run_tasks) { 287 void SetAutoRunTasks(bool auto_run_tasks) {
284 auto_run_tasks_ = auto_run_tasks; 288 auto_run_tasks_ = auto_run_tasks;
285 } 289 }
286 290
287 void LoadModelsDone(ModelType type, const SyncError& error) { 291 void LoadModelsDone(syncer::ModelType type, const syncer::SyncError& error) {
288 load_models_callback_called_ = true; 292 load_models_callback_called_ = true;
289 load_models_error_ = error; 293 load_models_error_ = error;
290 } 294 }
291 295
292 void AssociationDone(DataTypeController::ConfigureResult result, 296 void AssociationDone(sync_driver::DataTypeController::ConfigureResult result,
293 const SyncMergeResult& local_merge_result, 297 const syncer::SyncMergeResult& local_merge_result,
294 const SyncMergeResult& syncer_merge_result) { 298 const syncer::SyncMergeResult& syncer_merge_result) {
295 EXPECT_EQ(DataTypeController::OK, result); 299 EXPECT_EQ(sync_driver::DataTypeController::OK, result);
296 association_callback_called_ = true; 300 association_callback_called_ = true;
297 } 301 }
298 302
299 SharedModelTypeProcessor* type_processor_; 303 syncer_v2::SharedModelTypeProcessor* type_processor_;
300 std::unique_ptr<TestNonUIModelTypeController> controller_; 304 std::unique_ptr<TestNonUIModelTypeController> controller_;
301 305
302 bool auto_run_tasks_; 306 bool auto_run_tasks_;
303 bool load_models_callback_called_; 307 bool load_models_callback_called_;
304 SyncError load_models_error_; 308 syncer::SyncError load_models_error_;
305 bool association_callback_called_; 309 bool association_callback_called_;
306 base::MessageLoopForUI ui_loop_; 310 base::MessageLoopForUI ui_loop_;
307 base::Thread model_thread_; 311 base::Thread model_thread_;
308 scoped_refptr<base::SingleThreadTaskRunner> model_thread_runner_; 312 scoped_refptr<base::SingleThreadTaskRunner> model_thread_runner_;
309 MockSyncBackend backend_; 313 MockSyncBackend backend_;
310 MockBackendDataTypeConfigurer configurer_; 314 MockBackendDataTypeConfigurer configurer_;
311 std::unique_ptr<StubModelTypeService> service_; 315 std::unique_ptr<syncer_v2::StubModelTypeService> service_;
312 }; 316 };
313 317
314 TEST_F(NonUIModelTypeControllerTest, InitialState) { 318 TEST_F(NonUIModelTypeControllerTest, InitialState) {
315 EXPECT_EQ(DICTIONARY, controller_->type()); 319 EXPECT_EQ(syncer::DICTIONARY, controller_->type());
316 EXPECT_EQ(DataTypeController::NOT_RUNNING, controller_->state()); 320 EXPECT_EQ(sync_driver::DataTypeController::NOT_RUNNING, controller_->state());
317 } 321 }
318 322
319 TEST_F(NonUIModelTypeControllerTest, LoadModelsOnBackendThread) { 323 TEST_F(NonUIModelTypeControllerTest, LoadModelsOnBackendThread) {
320 SetAutoRunTasks(false); 324 SetAutoRunTasks(false);
321 LoadModels(); 325 LoadModels();
322 EXPECT_EQ(DataTypeController::MODEL_STARTING, controller_->state()); 326 EXPECT_EQ(sync_driver::DataTypeController::MODEL_STARTING,
327 controller_->state());
323 RunAllTasks(); 328 RunAllTasks();
324 EXPECT_EQ(DataTypeController::MODEL_LOADED, controller_->state()); 329 EXPECT_EQ(sync_driver::DataTypeController::MODEL_LOADED,
330 controller_->state());
325 EXPECT_TRUE(load_models_callback_called_); 331 EXPECT_TRUE(load_models_callback_called_);
326 EXPECT_FALSE(load_models_error_.IsSet()); 332 EXPECT_FALSE(load_models_error_.IsSet());
327 ExpectProcessorConnected(false); 333 ExpectProcessorConnected(false);
328 } 334 }
329 335
330 TEST_F(NonUIModelTypeControllerTest, LoadModelsTwice) { 336 TEST_F(NonUIModelTypeControllerTest, LoadModelsTwice) {
331 LoadModels(); 337 LoadModels();
332 SetAutoRunTasks(false); 338 SetAutoRunTasks(false);
333 LoadModels(); 339 LoadModels();
334 EXPECT_EQ(DataTypeController::MODEL_LOADED, controller_->state()); 340 EXPECT_EQ(sync_driver::DataTypeController::MODEL_LOADED,
341 controller_->state());
335 // The second LoadModels call should set the error. 342 // The second LoadModels call should set the error.
336 EXPECT_TRUE(load_models_error_.IsSet()); 343 EXPECT_TRUE(load_models_error_.IsSet());
337 } 344 }
338 345
339 TEST_F(NonUIModelTypeControllerTest, ActivateDataTypeOnBackendThread) { 346 TEST_F(NonUIModelTypeControllerTest, ActivateDataTypeOnBackendThread) {
340 LoadModels(); 347 LoadModels();
341 EXPECT_EQ(DataTypeController::MODEL_LOADED, controller_->state()); 348 EXPECT_EQ(sync_driver::DataTypeController::MODEL_LOADED,
349 controller_->state());
342 RegisterWithBackend(); 350 RegisterWithBackend();
343 ExpectProcessorConnected(true); 351 ExpectProcessorConnected(true);
344 352
345 StartAssociating(); 353 StartAssociating();
346 EXPECT_EQ(DataTypeController::RUNNING, controller_->state()); 354 EXPECT_EQ(sync_driver::DataTypeController::RUNNING, controller_->state());
347 } 355 }
348 356
349 TEST_F(NonUIModelTypeControllerTest, Stop) { 357 TEST_F(NonUIModelTypeControllerTest, Stop) {
350 LoadModels(); 358 LoadModels();
351 RegisterWithBackend(); 359 RegisterWithBackend();
352 ExpectProcessorConnected(true); 360 ExpectProcessorConnected(true);
353 361
354 StartAssociating(); 362 StartAssociating();
355 363
356 DeactivateDataTypeAndStop(); 364 DeactivateDataTypeAndStop();
357 EXPECT_EQ(DataTypeController::NOT_RUNNING, controller_->state()); 365 EXPECT_EQ(sync_driver::DataTypeController::NOT_RUNNING, controller_->state());
358 } 366 }
359 367
360 } // namespace syncer 368 } // namespace sync_driver_v2
OLDNEW
« no previous file with comments | « components/sync/driver/non_ui_model_type_controller.cc ('k') | components/sync/driver/pref_names.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698