OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "chrome/browser/supervised_user/supervised_user_settings_service.h" | 5 #include "chrome/browser/supervised_user/supervised_user_settings_service.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/callback.h" | 10 #include "base/callback.h" |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
63 protected: | 63 protected: |
64 SupervisedUserSettingsServiceTest() : settings_service_(nullptr) {} | 64 SupervisedUserSettingsServiceTest() : settings_service_(nullptr) {} |
65 ~SupervisedUserSettingsServiceTest() override {} | 65 ~SupervisedUserSettingsServiceTest() override {} |
66 | 66 |
67 scoped_ptr<syncer::SyncChangeProcessor> CreateSyncProcessor() { | 67 scoped_ptr<syncer::SyncChangeProcessor> CreateSyncProcessor() { |
68 sync_processor_.reset(new syncer::FakeSyncChangeProcessor); | 68 sync_processor_.reset(new syncer::FakeSyncChangeProcessor); |
69 return scoped_ptr<syncer::SyncChangeProcessor>( | 69 return scoped_ptr<syncer::SyncChangeProcessor>( |
70 new syncer::SyncChangeProcessorWrapperForTest(sync_processor_.get())); | 70 new syncer::SyncChangeProcessorWrapperForTest(sync_processor_.get())); |
71 } | 71 } |
72 | 72 |
73 void StartSyncing(const syncer::SyncDataList& initial_sync_data) { | 73 syncer::SyncMergeResult StartSyncing( |
74 const syncer::SyncDataList& initial_sync_data) { | |
74 scoped_ptr<syncer::SyncErrorFactory> error_handler( | 75 scoped_ptr<syncer::SyncErrorFactory> error_handler( |
75 new MockSyncErrorFactory(syncer::SUPERVISED_USER_SETTINGS)); | 76 new MockSyncErrorFactory(syncer::SUPERVISED_USER_SETTINGS)); |
76 syncer::SyncMergeResult result = settings_service_.MergeDataAndStartSyncing( | 77 syncer::SyncMergeResult result = settings_service_.MergeDataAndStartSyncing( |
77 syncer::SUPERVISED_USER_SETTINGS, initial_sync_data, | 78 syncer::SUPERVISED_USER_SETTINGS, initial_sync_data, |
78 CreateSyncProcessor(), std::move(error_handler)); | 79 CreateSyncProcessor(), std::move(error_handler)); |
79 EXPECT_FALSE(result.error().IsSet()); | 80 EXPECT_FALSE(result.error().IsSet()); |
81 return result; | |
80 } | 82 } |
81 | 83 |
82 void UploadSplitItem(const std::string& key, const std::string& value) { | 84 void UploadSplitItem(const std::string& key, const std::string& value) { |
83 split_items_.SetStringWithoutPathExpansion(key, value); | 85 split_items_.SetStringWithoutPathExpansion(key, value); |
84 settings_service_.UploadItem( | 86 settings_service_.UploadItem( |
85 SupervisedUserSettingsService::MakeSplitSettingKey(kSplitItemName, | 87 SupervisedUserSettingsService::MakeSplitSettingKey(kSplitItemName, key), |
86 key), | |
87 scoped_ptr<base::Value>(new base::StringValue(value))); | 88 scoped_ptr<base::Value>(new base::StringValue(value))); |
88 } | 89 } |
89 | 90 |
90 void UploadAtomicItem(const std::string& value) { | 91 void UploadAtomicItem(const std::string& value) { |
91 atomic_setting_value_.reset(new base::StringValue(value)); | 92 atomic_setting_value_.reset(new base::StringValue(value)); |
92 settings_service_.UploadItem( | 93 settings_service_.UploadItem( |
93 kAtomicItemName, | 94 kAtomicItemName, |
94 scoped_ptr<base::Value>(new base::StringValue(value))); | 95 scoped_ptr<base::Value>(new base::StringValue(value))); |
95 } | 96 } |
96 | 97 |
97 void VerifySyncDataItem(syncer::SyncData sync_data) { | 98 void VerifySyncDataItem(syncer::SyncData sync_data) { |
98 const sync_pb::ManagedUserSettingSpecifics& supervised_user_setting = | 99 const sync_pb::ManagedUserSettingSpecifics& supervised_user_setting = |
99 sync_data.GetSpecifics().managed_user_setting(); | 100 sync_data.GetSpecifics().managed_user_setting(); |
100 base::Value* expected_value = NULL; | 101 base::Value* expected_value = nullptr; |
101 if (supervised_user_setting.name() == kAtomicItemName) { | 102 if (supervised_user_setting.name() == kAtomicItemName) { |
102 expected_value = atomic_setting_value_.get(); | 103 expected_value = atomic_setting_value_.get(); |
103 } else { | 104 } else { |
104 EXPECT_TRUE(base::StartsWith(supervised_user_setting.name(), | 105 EXPECT_TRUE(base::StartsWith(supervised_user_setting.name(), |
105 std::string(kSplitItemName) + ':', | 106 std::string(kSplitItemName) + ':', |
106 base::CompareCase::SENSITIVE)); | 107 base::CompareCase::SENSITIVE)); |
107 std::string key = | 108 std::string key = |
108 supervised_user_setting.name().substr(strlen(kSplitItemName) + 1); | 109 supervised_user_setting.name().substr(strlen(kSplitItemName) + 1); |
109 EXPECT_TRUE(split_items_.GetWithoutPathExpansion(key, &expected_value)); | 110 EXPECT_TRUE(split_items_.GetWithoutPathExpansion(key, &expected_value)); |
110 } | 111 } |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
143 scoped_ptr<base::DictionaryValue> settings_; | 144 scoped_ptr<base::DictionaryValue> settings_; |
144 scoped_ptr<base::CallbackList<void( | 145 scoped_ptr<base::CallbackList<void( |
145 const base::DictionaryValue*)>::Subscription> user_settings_subscription_; | 146 const base::DictionaryValue*)>::Subscription> user_settings_subscription_; |
146 | 147 |
147 scoped_ptr<syncer::FakeSyncChangeProcessor> sync_processor_; | 148 scoped_ptr<syncer::FakeSyncChangeProcessor> sync_processor_; |
148 }; | 149 }; |
149 | 150 |
150 TEST_F(SupervisedUserSettingsServiceTest, ProcessAtomicSetting) { | 151 TEST_F(SupervisedUserSettingsServiceTest, ProcessAtomicSetting) { |
151 StartSyncing(syncer::SyncDataList()); | 152 StartSyncing(syncer::SyncDataList()); |
152 ASSERT_TRUE(settings_); | 153 ASSERT_TRUE(settings_); |
153 const base::Value* value = NULL; | 154 const base::Value* value = nullptr; |
154 EXPECT_FALSE(settings_->GetWithoutPathExpansion(kSettingsName, &value)); | 155 EXPECT_FALSE(settings_->GetWithoutPathExpansion(kSettingsName, &value)); |
155 | 156 |
156 settings_.reset(); | 157 settings_.reset(); |
157 syncer::SyncData data = | 158 syncer::SyncData data = |
158 SupervisedUserSettingsService::CreateSyncDataForSetting( | 159 SupervisedUserSettingsService::CreateSyncDataForSetting( |
159 kSettingsName, base::StringValue(kSettingsValue)); | 160 kSettingsName, base::StringValue(kSettingsValue)); |
160 syncer::SyncChangeList change_list; | 161 syncer::SyncChangeList change_list; |
161 change_list.push_back( | 162 change_list.push_back( |
162 syncer::SyncChange(FROM_HERE, syncer::SyncChange::ACTION_ADD, data)); | 163 syncer::SyncChange(FROM_HERE, syncer::SyncChange::ACTION_ADD, data)); |
163 syncer::SyncError error = | 164 syncer::SyncError error = |
164 settings_service_.ProcessSyncChanges(FROM_HERE, change_list); | 165 settings_service_.ProcessSyncChanges(FROM_HERE, change_list); |
165 EXPECT_FALSE(error.IsSet()) << error.ToString(); | 166 EXPECT_FALSE(error.IsSet()) << error.ToString(); |
166 ASSERT_TRUE(settings_); | 167 ASSERT_TRUE(settings_); |
167 ASSERT_TRUE(settings_->GetWithoutPathExpansion(kSettingsName, &value)); | 168 ASSERT_TRUE(settings_->GetWithoutPathExpansion(kSettingsName, &value)); |
168 std::string string_value; | 169 std::string string_value; |
169 EXPECT_TRUE(value->GetAsString(&string_value)); | 170 EXPECT_TRUE(value->GetAsString(&string_value)); |
170 EXPECT_EQ(kSettingsValue, string_value); | 171 EXPECT_EQ(kSettingsValue, string_value); |
171 } | 172 } |
172 | 173 |
173 TEST_F(SupervisedUserSettingsServiceTest, ProcessSplitSetting) { | 174 TEST_F(SupervisedUserSettingsServiceTest, ProcessSplitSetting) { |
174 StartSyncing(syncer::SyncDataList()); | 175 StartSyncing(syncer::SyncDataList()); |
175 ASSERT_TRUE(settings_); | 176 ASSERT_TRUE(settings_); |
176 const base::Value* value = NULL; | 177 const base::Value* value = nullptr; |
177 EXPECT_FALSE(settings_->GetWithoutPathExpansion(kSettingsName, &value)); | 178 EXPECT_FALSE(settings_->GetWithoutPathExpansion(kSettingsName, &value)); |
178 | 179 |
179 base::DictionaryValue dict; | 180 base::DictionaryValue dict; |
180 dict.SetString("foo", "bar"); | 181 dict.SetString("foo", "bar"); |
181 dict.SetBoolean("awesomesauce", true); | 182 dict.SetBoolean("awesomesauce", true); |
182 dict.SetInteger("eaudecologne", 4711); | 183 dict.SetInteger("eaudecologne", 4711); |
183 | 184 |
184 settings_.reset(); | 185 settings_.reset(); |
185 syncer::SyncChangeList change_list; | 186 syncer::SyncChangeList change_list; |
186 for (base::DictionaryValue::Iterator it(dict); !it.IsAtEnd(); it.Advance()) { | 187 for (base::DictionaryValue::Iterator it(dict); !it.IsAtEnd(); it.Advance()) { |
187 syncer::SyncData data = | 188 syncer::SyncData data = |
188 SupervisedUserSettingsService::CreateSyncDataForSetting( | 189 SupervisedUserSettingsService::CreateSyncDataForSetting( |
189 SupervisedUserSettingsService::MakeSplitSettingKey(kSettingsName, | 190 SupervisedUserSettingsService::MakeSplitSettingKey(kSettingsName, |
190 it.key()), | 191 it.key()), |
191 it.value()); | 192 it.value()); |
192 change_list.push_back( | 193 change_list.push_back( |
193 syncer::SyncChange(FROM_HERE, syncer::SyncChange::ACTION_ADD, data)); | 194 syncer::SyncChange(FROM_HERE, syncer::SyncChange::ACTION_ADD, data)); |
194 } | 195 } |
195 syncer::SyncError error = | 196 syncer::SyncError error = |
196 settings_service_.ProcessSyncChanges(FROM_HERE, change_list); | 197 settings_service_.ProcessSyncChanges(FROM_HERE, change_list); |
197 EXPECT_FALSE(error.IsSet()) << error.ToString(); | 198 EXPECT_FALSE(error.IsSet()) << error.ToString(); |
198 ASSERT_TRUE(settings_); | 199 ASSERT_TRUE(settings_); |
199 ASSERT_TRUE(settings_->GetWithoutPathExpansion(kSettingsName, &value)); | 200 ASSERT_TRUE(settings_->GetWithoutPathExpansion(kSettingsName, &value)); |
200 const base::DictionaryValue* dict_value = NULL; | 201 const base::DictionaryValue* dict_value = nullptr; |
201 ASSERT_TRUE(value->GetAsDictionary(&dict_value)); | 202 ASSERT_TRUE(value->GetAsDictionary(&dict_value)); |
202 EXPECT_TRUE(dict_value->Equals(&dict)); | 203 EXPECT_TRUE(dict_value->Equals(&dict)); |
203 } | 204 } |
204 | 205 |
206 TEST_F(SupervisedUserSettingsServiceTest, Merge) { | |
207 syncer::SyncMergeResult result = StartSyncing(syncer::SyncDataList()); | |
208 EXPECT_EQ(0, result.num_items_added()); | |
209 EXPECT_EQ(0, result.num_items_deleted()); | |
210 EXPECT_EQ(0, result.num_items_modified()); | |
211 EXPECT_EQ(0, result.num_items_before_association()); | |
212 EXPECT_EQ(0, result.num_items_after_association()); | |
213 | |
214 ASSERT_TRUE(settings_); | |
215 const base::Value* value = nullptr; | |
216 EXPECT_FALSE(settings_->GetWithoutPathExpansion(kSettingsName, &value)); | |
217 | |
218 base::DictionaryValue dict; | |
Bernhard Bauer
2016/01/28 13:56:33
Could you move this to right after line 227, so it
Deepak
2016/01/29 07:00:29
Done.
| |
219 dict.SetString("foo", "bar"); | |
220 dict.SetInteger("eaudecologne", 4711); | |
221 | |
222 settings_.reset(); | |
223 syncer::SyncDataList sync_data; | |
224 // Adding 1 Atomic entry. | |
225 sync_data.push_back(SupervisedUserSettingsService::CreateSyncDataForSetting( | |
226 kSettingsName, base::StringValue(kSettingsValue))); | |
227 // Adding 2 SplitSettings from dictionary. | |
228 for (base::DictionaryValue::Iterator it(dict); !it.IsAtEnd(); it.Advance()) { | |
229 sync_data.push_back(SupervisedUserSettingsService::CreateSyncDataForSetting( | |
230 SupervisedUserSettingsService::MakeSplitSettingKey(kSplitItemName, | |
231 it.key()), | |
232 it.value())); | |
233 } | |
234 | |
235 result = StartSyncing(sync_data); | |
236 EXPECT_EQ(3, result.num_items_added()); | |
237 EXPECT_EQ(0, result.num_items_deleted()); | |
238 EXPECT_EQ(0, result.num_items_modified()); | |
239 EXPECT_EQ(0, result.num_items_before_association()); | |
240 EXPECT_EQ(3, result.num_items_after_association()); | |
241 | |
242 settings_service_.StopSyncing(syncer::SUPERVISED_USER_SETTINGS); | |
243 sync_data.clear(); | |
244 | |
245 // Adding 1 atomic Item in the queue. | |
246 UploadAtomicItem("hurdle"); | |
247 // Adding 2 split Item in the queue. | |
248 UploadSplitItem("burp", "baz"); | |
249 UploadSplitItem("item", "second"); | |
250 | |
251 dict.Clear(); | |
252 dict.SetString("foo", "burp"); | |
253 dict.SetString("item", "first"); | |
254 // Adding 2 SplitSettings from dictionary. | |
255 for (base::DictionaryValue::Iterator it(dict); !it.IsAtEnd(); it.Advance()) { | |
256 sync_data.push_back(SupervisedUserSettingsService::CreateSyncDataForSetting( | |
257 SupervisedUserSettingsService::MakeSplitSettingKey(kSplitItemName, | |
258 it.key()), | |
259 it.value())); | |
260 } | |
261 | |
262 result = StartSyncing(sync_data); | |
263 EXPECT_EQ(0, result.num_items_added()); | |
264 EXPECT_EQ(2, result.num_items_deleted()); | |
265 EXPECT_EQ(2, result.num_items_modified()); | |
266 EXPECT_EQ(3, result.num_items_before_association()); | |
267 EXPECT_EQ(4, result.num_items_after_association()); | |
268 } | |
269 | |
205 TEST_F(SupervisedUserSettingsServiceTest, SetLocalSetting) { | 270 TEST_F(SupervisedUserSettingsServiceTest, SetLocalSetting) { |
206 const base::Value* value = NULL; | 271 const base::Value* value = nullptr; |
207 EXPECT_FALSE(settings_->GetWithoutPathExpansion(kSettingsName, &value)); | 272 EXPECT_FALSE(settings_->GetWithoutPathExpansion(kSettingsName, &value)); |
208 | 273 |
209 settings_.reset(); | 274 settings_.reset(); |
210 settings_service_.SetLocalSetting( | 275 settings_service_.SetLocalSetting( |
211 kSettingsName, | 276 kSettingsName, |
212 scoped_ptr<base::Value>(new base::StringValue(kSettingsValue))); | 277 scoped_ptr<base::Value>(new base::StringValue(kSettingsValue))); |
213 ASSERT_TRUE(settings_); | 278 ASSERT_TRUE(settings_); |
214 ASSERT_TRUE(settings_->GetWithoutPathExpansion(kSettingsName, &value)); | 279 ASSERT_TRUE(settings_->GetWithoutPathExpansion(kSettingsName, &value)); |
215 std::string string_value; | 280 std::string string_value; |
216 EXPECT_TRUE(value->GetAsString(&string_value)); | 281 EXPECT_TRUE(value->GetAsString(&string_value)); |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
277 EXPECT_EQ(syncer::SyncChange::ACTION_UPDATE, change.change_type()); | 342 EXPECT_EQ(syncer::SyncChange::ACTION_UPDATE, change.change_type()); |
278 VerifySyncDataItem(change.sync_data()); | 343 VerifySyncDataItem(change.sync_data()); |
279 | 344 |
280 sync_data = settings_service_.GetAllSyncData( | 345 sync_data = settings_service_.GetAllSyncData( |
281 syncer::SUPERVISED_USER_SETTINGS); | 346 syncer::SUPERVISED_USER_SETTINGS); |
282 EXPECT_EQ(4u, sync_data.size()); | 347 EXPECT_EQ(4u, sync_data.size()); |
283 for (const syncer::SyncData& sync_data_item : sync_data) | 348 for (const syncer::SyncData& sync_data_item : sync_data) |
284 VerifySyncDataItem(sync_data_item); | 349 VerifySyncDataItem(sync_data_item); |
285 | 350 |
286 // The uploaded items should not show up as settings. | 351 // The uploaded items should not show up as settings. |
287 const base::Value* value = NULL; | 352 const base::Value* value = nullptr; |
288 EXPECT_FALSE(settings_->GetWithoutPathExpansion(kAtomicItemName, &value)); | 353 EXPECT_FALSE(settings_->GetWithoutPathExpansion(kAtomicItemName, &value)); |
289 EXPECT_FALSE(settings_->GetWithoutPathExpansion(kSplitItemName, &value)); | 354 EXPECT_FALSE(settings_->GetWithoutPathExpansion(kSplitItemName, &value)); |
290 | 355 |
291 // Restarting sync should not create any new changes. | 356 // Restarting sync should not create any new changes. |
292 settings_service_.StopSyncing(syncer::SUPERVISED_USER_SETTINGS); | 357 settings_service_.StopSyncing(syncer::SUPERVISED_USER_SETTINGS); |
293 StartSyncing(sync_data); | 358 StartSyncing(sync_data); |
294 ASSERT_EQ(0u, sync_processor_->changes().size()); | 359 ASSERT_EQ(0u, sync_processor_->changes().size()); |
295 } | 360 } |
OLD | NEW |