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

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

Issue 2376123003: [Sync] Move //components/sync to the syncer namespace. (Closed)
Patch Set: Rebase. 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_blocking_data_type_controller.h" 5 #include "components/sync/driver/non_blocking_data_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/location.h" 12 #include "base/location.h"
13 #include "base/logging.h" 13 #include "base/logging.h"
14 #include "base/memory/ref_counted.h" 14 #include "base/memory/ref_counted.h"
15 #include "base/message_loop/message_loop.h" 15 #include "base/message_loop/message_loop.h"
16 #include "base/run_loop.h" 16 #include "base/run_loop.h"
17 #include "base/threading/thread_task_runner_handle.h" 17 #include "base/threading/thread_task_runner_handle.h"
18 #include "components/sync/api/fake_model_type_change_processor.h" 18 #include "components/sync/api/fake_model_type_change_processor.h"
19 #include "components/sync/api/stub_model_type_service.h" 19 #include "components/sync/api/stub_model_type_service.h"
20 #include "components/sync/base/model_type.h" 20 #include "components/sync/base/model_type.h"
21 #include "components/sync/driver/fake_sync_client.h" 21 #include "components/sync/driver/fake_sync_client.h"
22 #include "components/sync/driver/sync_prefs.h" 22 #include "components/sync/driver/sync_prefs.h"
23 #include "testing/gtest/include/gtest/gtest.h" 23 #include "testing/gtest/include/gtest/gtest.h"
24 24
25 namespace sync_driver { 25 namespace syncer {
26 class SyncClient; 26 class SyncClient;
27 } // namespace sync_driver 27 } // namespace syncer
28 28
29 namespace sync_driver_v2 { 29 namespace syncer {
30 30
31 namespace { 31 namespace {
32 32
33 syncer::ModelType kTestModelType = syncer::AUTOFILL; 33 ModelType kTestModelType = AUTOFILL;
34 34
35 // Implementation of NonBlockingDataTypeController being tested. 35 // Implementation of NonBlockingDataTypeController being tested.
36 // It posts all tasks to current thread. 36 // It posts all tasks to current thread.
37 class TestDataTypeController : public NonBlockingDataTypeController { 37 class TestDataTypeController : public NonBlockingDataTypeController {
38 public: 38 public:
39 explicit TestDataTypeController(sync_driver::SyncClient* sync_client) 39 explicit TestDataTypeController(SyncClient* sync_client)
40 : NonBlockingDataTypeController(kTestModelType, 40 : NonBlockingDataTypeController(kTestModelType,
41 base::Closure(), 41 base::Closure(),
42 sync_client) {} 42 sync_client) {}
43 ~TestDataTypeController() override {} 43 ~TestDataTypeController() override {}
44 44
45 protected: 45 protected:
46 bool RunOnModelThread(const tracked_objects::Location& from_here, 46 bool RunOnModelThread(const tracked_objects::Location& from_here,
47 const base::Closure& task) override { 47 const base::Closure& task) override {
48 base::ThreadTaskRunnerHandle::Get()->PostTask(from_here, task); 48 base::ThreadTaskRunnerHandle::Get()->PostTask(from_here, task);
49 return true; 49 return true;
50 } 50 }
51 }; 51 };
52 52
53 // Mock change processor to observe calls to DisableSync. 53 // Mock change processor to observe calls to DisableSync.
54 class MockModelTypeChangeProcessor 54 class MockModelTypeChangeProcessor : public FakeModelTypeChangeProcessor {
55 : public syncer_v2::FakeModelTypeChangeProcessor {
56 public: 55 public:
57 explicit MockModelTypeChangeProcessor(int* disable_sync_call_count) 56 explicit MockModelTypeChangeProcessor(int* disable_sync_call_count)
58 : disable_sync_call_count_(disable_sync_call_count) {} 57 : disable_sync_call_count_(disable_sync_call_count) {}
59 58
60 void DisableSync() override { (*disable_sync_call_count_)++; } 59 void DisableSync() override { (*disable_sync_call_count_)++; }
61 60
62 private: 61 private:
63 int* disable_sync_call_count_; 62 int* disable_sync_call_count_;
64 }; 63 };
65 64
66 class NonBlockingDataTypeControllerTest : public testing::Test { 65 class NonBlockingDataTypeControllerTest : public testing::Test {
67 public: 66 public:
68 NonBlockingDataTypeControllerTest() 67 NonBlockingDataTypeControllerTest()
69 : disable_sync_call_count_(0), 68 : disable_sync_call_count_(0),
70 sync_prefs_(sync_client_.GetPrefService()), 69 sync_prefs_(sync_client_.GetPrefService()),
71 model_type_service_( 70 model_type_service_(
72 base::Bind(&NonBlockingDataTypeControllerTest::CreateProcessor, 71 base::Bind(&NonBlockingDataTypeControllerTest::CreateProcessor,
73 base::Unretained(this))), 72 base::Unretained(this))),
74 controller_(&sync_client_) {} 73 controller_(&sync_client_) {}
75 74
76 void SetUp() override { 75 void SetUp() override {
77 sync_client_.SetModelTypeService(&model_type_service_); 76 sync_client_.SetModelTypeService(&model_type_service_);
78 } 77 }
79 78
80 void TearDown() override { PumpLoop(); } 79 void TearDown() override { PumpLoop(); }
81 80
82 protected: 81 protected:
83 std::unique_ptr<syncer_v2::ModelTypeChangeProcessor> CreateProcessor( 82 std::unique_ptr<ModelTypeChangeProcessor> CreateProcessor(
84 syncer::ModelType type, 83 ModelType type,
85 syncer_v2::ModelTypeService* service) { 84 ModelTypeService* service) {
86 auto processor = base::MakeUnique<MockModelTypeChangeProcessor>( 85 auto processor = base::MakeUnique<MockModelTypeChangeProcessor>(
87 &disable_sync_call_count_); 86 &disable_sync_call_count_);
88 processor_ = processor.get(); 87 processor_ = processor.get();
89 return std::move(processor); 88 return std::move(processor);
90 } 89 }
91 90
92 // Gets controller from NOT_RUNNING to RUNNING state. 91 // Gets controller from NOT_RUNNING to RUNNING state.
93 void ActivateController() { 92 void ActivateController() {
94 EXPECT_EQ(sync_driver::DataTypeController::NOT_RUNNING, 93 EXPECT_EQ(DataTypeController::NOT_RUNNING, controller_.state());
95 controller_.state());
96 controller_.LoadModels( 94 controller_.LoadModels(
97 base::Bind(&NonBlockingDataTypeControllerTest::LoadModelsDone, 95 base::Bind(&NonBlockingDataTypeControllerTest::LoadModelsDone,
98 base::Unretained(this))); 96 base::Unretained(this)));
99 97
100 EXPECT_EQ(sync_driver::DataTypeController::MODEL_STARTING, 98 EXPECT_EQ(DataTypeController::MODEL_STARTING, controller_.state());
101 controller_.state());
102 PumpLoop(); 99 PumpLoop();
103 EXPECT_EQ(sync_driver::DataTypeController::MODEL_LOADED, 100 EXPECT_EQ(DataTypeController::MODEL_LOADED, controller_.state());
104 controller_.state());
105 controller_.StartAssociating( 101 controller_.StartAssociating(
106 base::Bind(&NonBlockingDataTypeControllerTest::AssociationDone, 102 base::Bind(&NonBlockingDataTypeControllerTest::AssociationDone,
107 base::Unretained(this))); 103 base::Unretained(this)));
108 EXPECT_EQ(sync_driver::DataTypeController::RUNNING, controller_.state()); 104 EXPECT_EQ(DataTypeController::RUNNING, controller_.state());
109 } 105 }
110 106
111 void LoadModelsDone(syncer::ModelType type, const syncer::SyncError& error) {} 107 void LoadModelsDone(ModelType type, const SyncError& error) {}
112 108
113 void AssociationDone(sync_driver::DataTypeController::ConfigureResult result, 109 void AssociationDone(DataTypeController::ConfigureResult result,
114 const syncer::SyncMergeResult& local_merge_result, 110 const SyncMergeResult& local_merge_result,
115 const syncer::SyncMergeResult& syncer_merge_result) {} 111 const SyncMergeResult& syncer_merge_result) {}
116 112
117 void PumpLoop() { base::RunLoop().RunUntilIdle(); } 113 void PumpLoop() { base::RunLoop().RunUntilIdle(); }
118 114
119 int disable_sync_call_count_; 115 int disable_sync_call_count_;
120 base::MessageLoop message_loop_; 116 base::MessageLoop message_loop_;
121 sync_driver::FakeSyncClient sync_client_; 117 FakeSyncClient sync_client_;
122 sync_driver::SyncPrefs sync_prefs_; 118 SyncPrefs sync_prefs_;
123 MockModelTypeChangeProcessor* processor_; 119 MockModelTypeChangeProcessor* processor_;
124 syncer_v2::StubModelTypeService model_type_service_; 120 StubModelTypeService model_type_service_;
125 TestDataTypeController controller_; 121 TestDataTypeController controller_;
126 }; 122 };
127 123
128 // Test emulates normal browser shutdown. Ensures that DisableSync is not 124 // Test emulates normal browser shutdown. Ensures that DisableSync is not
129 // called. 125 // called.
130 TEST_F(NonBlockingDataTypeControllerTest, StopWhenDatatypeEnabled) { 126 TEST_F(NonBlockingDataTypeControllerTest, StopWhenDatatypeEnabled) {
131 // Enable datatype through preferences. 127 // Enable datatype through preferences.
132 sync_prefs_.SetFirstSetupComplete(); 128 sync_prefs_.SetFirstSetupComplete();
133 sync_prefs_.SetKeepEverythingSynced(true); 129 sync_prefs_.SetKeepEverythingSynced(true);
134 130
135 ActivateController(); 131 ActivateController();
136 132
137 controller_.Stop(); 133 controller_.Stop();
138 PumpLoop(); 134 PumpLoop();
139 EXPECT_EQ(sync_driver::DataTypeController::NOT_RUNNING, controller_.state()); 135 EXPECT_EQ(DataTypeController::NOT_RUNNING, controller_.state());
140 // Ensure that DisableSync is not called and service still has valid change 136 // Ensure that DisableSync is not called and service still has valid change
141 // processor. 137 // processor.
142 EXPECT_EQ(0, disable_sync_call_count_); 138 EXPECT_EQ(0, disable_sync_call_count_);
143 EXPECT_TRUE(model_type_service_.HasChangeProcessor()); 139 EXPECT_TRUE(model_type_service_.HasChangeProcessor());
144 } 140 }
145 141
146 // Test emulates scenario when user disables datatype. DisableSync should be 142 // Test emulates scenario when user disables datatype. DisableSync should be
147 // called. 143 // called.
148 TEST_F(NonBlockingDataTypeControllerTest, StopWhenDatatypeDisabled) { 144 TEST_F(NonBlockingDataTypeControllerTest, StopWhenDatatypeDisabled) {
149 // Enable datatype through preferences. 145 // Enable datatype through preferences.
150 sync_prefs_.SetFirstSetupComplete(); 146 sync_prefs_.SetFirstSetupComplete();
151 sync_prefs_.SetKeepEverythingSynced(true); 147 sync_prefs_.SetKeepEverythingSynced(true);
152 ActivateController(); 148 ActivateController();
153 149
154 // Disable datatype through preferences. 150 // Disable datatype through preferences.
155 sync_prefs_.SetKeepEverythingSynced(false); 151 sync_prefs_.SetKeepEverythingSynced(false);
156 sync_prefs_.SetPreferredDataTypes(syncer::ModelTypeSet(kTestModelType), 152 sync_prefs_.SetPreferredDataTypes(ModelTypeSet(kTestModelType),
157 syncer::ModelTypeSet()); 153 ModelTypeSet());
158 154
159 controller_.Stop(); 155 controller_.Stop();
160 PumpLoop(); 156 PumpLoop();
161 EXPECT_EQ(sync_driver::DataTypeController::NOT_RUNNING, controller_.state()); 157 EXPECT_EQ(DataTypeController::NOT_RUNNING, controller_.state());
162 // Ensure that DisableSync is called and change processor is reset. 158 // Ensure that DisableSync is called and change processor is reset.
163 EXPECT_EQ(1, disable_sync_call_count_); 159 EXPECT_EQ(1, disable_sync_call_count_);
164 EXPECT_FALSE(model_type_service_.HasChangeProcessor()); 160 EXPECT_FALSE(model_type_service_.HasChangeProcessor());
165 } 161 }
166 162
167 // Test emulates disabling sync by signing out. DisableSync should be called. 163 // Test emulates disabling sync by signing out. DisableSync should be called.
168 TEST_F(NonBlockingDataTypeControllerTest, StopWithInitialSyncPrefs) { 164 TEST_F(NonBlockingDataTypeControllerTest, StopWithInitialSyncPrefs) {
169 // Enable datatype through preferences. 165 // Enable datatype through preferences.
170 sync_prefs_.SetFirstSetupComplete(); 166 sync_prefs_.SetFirstSetupComplete();
171 sync_prefs_.SetKeepEverythingSynced(true); 167 sync_prefs_.SetKeepEverythingSynced(true);
172 ActivateController(); 168 ActivateController();
173 169
174 // Clearing preferences emulates signing out. 170 // Clearing preferences emulates signing out.
175 sync_prefs_.ClearPreferences(); 171 sync_prefs_.ClearPreferences();
176 controller_.Stop(); 172 controller_.Stop();
177 PumpLoop(); 173 PumpLoop();
178 EXPECT_EQ(sync_driver::DataTypeController::NOT_RUNNING, controller_.state()); 174 EXPECT_EQ(DataTypeController::NOT_RUNNING, controller_.state());
179 // Ensure that DisableSync is called and change processor is reset. 175 // Ensure that DisableSync is called and change processor is reset.
180 EXPECT_EQ(1, disable_sync_call_count_); 176 EXPECT_EQ(1, disable_sync_call_count_);
181 EXPECT_FALSE(model_type_service_.HasChangeProcessor()); 177 EXPECT_FALSE(model_type_service_.HasChangeProcessor());
182 } 178 }
183 179
184 // Test emulates disabling sync when datatype is not loaded yet. DisableSync 180 // Test emulates disabling sync when datatype is not loaded yet. DisableSync
185 // should not be called as service is potentially not ready to handle it. 181 // should not be called as service is potentially not ready to handle it.
186 TEST_F(NonBlockingDataTypeControllerTest, StopBeforeLoadModels) { 182 TEST_F(NonBlockingDataTypeControllerTest, StopBeforeLoadModels) {
187 // Enable datatype through preferences. 183 // Enable datatype through preferences.
188 sync_prefs_.SetFirstSetupComplete(); 184 sync_prefs_.SetFirstSetupComplete();
189 sync_prefs_.SetKeepEverythingSynced(true); 185 sync_prefs_.SetKeepEverythingSynced(true);
190 EXPECT_EQ(sync_driver::DataTypeController::NOT_RUNNING, controller_.state()); 186 EXPECT_EQ(DataTypeController::NOT_RUNNING, controller_.state());
191 187
192 // Clearing preferences emulates signing out. 188 // Clearing preferences emulates signing out.
193 sync_prefs_.ClearPreferences(); 189 sync_prefs_.ClearPreferences();
194 controller_.Stop(); 190 controller_.Stop();
195 PumpLoop(); 191 PumpLoop();
196 EXPECT_EQ(sync_driver::DataTypeController::NOT_RUNNING, controller_.state()); 192 EXPECT_EQ(DataTypeController::NOT_RUNNING, controller_.state());
197 // Ensure that DisableSync is not called. 193 // Ensure that DisableSync is not called.
198 EXPECT_EQ(0, disable_sync_call_count_); 194 EXPECT_EQ(0, disable_sync_call_count_);
199 } 195 }
200 196
201 } // namespace 197 } // namespace
202 198
203 } // namespace sync_driver_v2 199 } // namespace syncer
OLDNEW
« no previous file with comments | « components/sync/driver/non_blocking_data_type_controller.cc ('k') | components/sync/driver/non_ui_data_type_controller.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698