OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/json/json_reader.h" | 8 #include "base/json/json_reader.h" |
9 #include "base/json/json_writer.h" | 9 #include "base/json/json_writer.h" |
10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
155 // SettingsStorageFactory implementation. | 155 // SettingsStorageFactory implementation. |
156 virtual SettingsStorage* Create( | 156 virtual SettingsStorage* Create( |
157 const FilePath& base_path, const std::string& extension_id) OVERRIDE { | 157 const FilePath& base_path, const std::string& extension_id) OVERRIDE { |
158 TestingSettingsStorage* new_storage = new TestingSettingsStorage(); | 158 TestingSettingsStorage* new_storage = new TestingSettingsStorage(); |
159 DCHECK(!created_.count(extension_id)); | 159 DCHECK(!created_.count(extension_id)); |
160 created_[extension_id] = new_storage; | 160 created_[extension_id] = new_storage; |
161 return new_storage; | 161 return new_storage; |
162 } | 162 } |
163 | 163 |
164 private: | 164 private: |
| 165 // SettingsStorageFactory is refcounted. |
| 166 virtual ~TestingSettingsStorageFactory() {} |
| 167 |
165 // None of these storage areas are owned by this factory, so care must be | 168 // None of these storage areas are owned by this factory, so care must be |
166 // taken when calling GetExisting. | 169 // taken when calling GetExisting. |
167 std::map<std::string, TestingSettingsStorage*> created_; | 170 std::map<std::string, TestingSettingsStorage*> created_; |
168 }; | 171 }; |
169 | 172 |
170 void AssignSettingsService(SyncableService** dst, SyncableService* src) { | 173 void AssignSettingsService(SyncableService** dst, SyncableService* src) { |
171 *dst = src; | 174 *dst = src; |
172 } | 175 } |
173 | 176 |
174 } // namespace | 177 } // namespace |
175 | 178 |
176 class ExtensionSettingsSyncTest : public testing::Test { | 179 class ExtensionSettingsSyncTest : public testing::Test { |
177 public: | 180 public: |
178 ExtensionSettingsSyncTest() | 181 ExtensionSettingsSyncTest() |
179 : ui_thread_(BrowserThread::UI, MessageLoop::current()), | 182 : ui_thread_(BrowserThread::UI, MessageLoop::current()), |
180 file_thread_(BrowserThread::FILE, MessageLoop::current()) {} | 183 file_thread_(BrowserThread::FILE, MessageLoop::current()), |
| 184 storage_factory_(new ScopedSettingsStorageFactory()) {} |
181 | 185 |
182 virtual void SetUp() OVERRIDE { | 186 virtual void SetUp() OVERRIDE { |
183 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); | 187 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); |
184 profile_.reset(new MockProfile(temp_dir_.path())); | 188 profile_.reset(new MockProfile(temp_dir_.path())); |
185 storage_factory_ = | 189 storage_factory_->Reset(new SettingsLeveldbStorage::Factory()); |
186 new ScopedSettingsStorageFactory(new SettingsLeveldbStorage::Factory()); | 190 frontend_.reset( |
187 frontend_.reset(SettingsFrontend::Create(storage_factory_, profile_.get())); | 191 SettingsFrontend::Create(storage_factory_.get(), profile_.get())); |
188 } | 192 } |
189 | 193 |
190 virtual void TearDown() OVERRIDE { | 194 virtual void TearDown() OVERRIDE { |
191 frontend_.reset(); | 195 frontend_.reset(); |
192 profile_.reset(); | 196 profile_.reset(); |
193 } | 197 } |
194 | 198 |
195 protected: | 199 protected: |
196 // Adds a record of an extension or app to the extension service, then returns | 200 // Adds a record of an extension or app to the extension service, then returns |
197 // its storage area. | 201 // its storage area. |
(...skipping 29 matching lines...) Expand all Loading... |
227 | 231 |
228 // Need these so that the DCHECKs for running on FILE or UI threads pass. | 232 // Need these so that the DCHECKs for running on FILE or UI threads pass. |
229 MessageLoop message_loop_; | 233 MessageLoop message_loop_; |
230 content::TestBrowserThread ui_thread_; | 234 content::TestBrowserThread ui_thread_; |
231 content::TestBrowserThread file_thread_; | 235 content::TestBrowserThread file_thread_; |
232 | 236 |
233 ScopedTempDir temp_dir_; | 237 ScopedTempDir temp_dir_; |
234 MockSyncChangeProcessor sync_; | 238 MockSyncChangeProcessor sync_; |
235 scoped_ptr<MockProfile> profile_; | 239 scoped_ptr<MockProfile> profile_; |
236 scoped_ptr<SettingsFrontend> frontend_; | 240 scoped_ptr<SettingsFrontend> frontend_; |
237 | 241 scoped_refptr<ScopedSettingsStorageFactory> storage_factory_; |
238 // Owned by |frontend_|. | |
239 ScopedSettingsStorageFactory* storage_factory_; | |
240 }; | 242 }; |
241 | 243 |
242 // Get a semblance of coverage for both EXTENSION_SETTINGS and APP_SETTINGS | 244 // Get a semblance of coverage for both EXTENSION_SETTINGS and APP_SETTINGS |
243 // sync by roughly alternative which one to test. | 245 // sync by roughly alternative which one to test. |
244 | 246 |
245 TEST_F(ExtensionSettingsSyncTest, NoDataDoesNotInvokeSync) { | 247 TEST_F(ExtensionSettingsSyncTest, NoDataDoesNotInvokeSync) { |
246 syncable::ModelType model_type = syncable::EXTENSION_SETTINGS; | 248 syncable::ModelType model_type = syncable::EXTENSION_SETTINGS; |
247 Extension::Type type = Extension::TYPE_EXTENSION; | 249 Extension::Type type = Extension::TYPE_EXTENSION; |
248 | 250 |
249 ASSERT_EQ(0u, GetAllSyncData(model_type).size()); | 251 EXPECT_EQ(0u, GetAllSyncData(model_type).size()); |
250 | 252 |
251 // Have one extension created before sync is set up, the other created after. | 253 // Have one extension created before sync is set up, the other created after. |
252 AddExtensionAndGetStorage("s1", type); | 254 AddExtensionAndGetStorage("s1", type); |
253 ASSERT_EQ(0u, GetAllSyncData(model_type).size()); | 255 EXPECT_EQ(0u, GetAllSyncData(model_type).size()); |
254 | 256 |
255 GetSyncableService(model_type)->MergeDataAndStartSyncing( | 257 GetSyncableService(model_type)->MergeDataAndStartSyncing( |
256 model_type, SyncDataList(), &sync_); | 258 model_type, SyncDataList(), &sync_); |
257 | 259 |
258 AddExtensionAndGetStorage("s2", type); | 260 AddExtensionAndGetStorage("s2", type); |
259 ASSERT_EQ(0u, GetAllSyncData(model_type).size()); | 261 EXPECT_EQ(0u, GetAllSyncData(model_type).size()); |
260 | 262 |
261 GetSyncableService(model_type)->StopSyncing(model_type); | 263 GetSyncableService(model_type)->StopSyncing(model_type); |
262 | 264 |
263 ASSERT_EQ(0u, sync_.changes().size()); | 265 EXPECT_EQ(0u, sync_.changes().size()); |
264 ASSERT_EQ(0u, GetAllSyncData(model_type).size()); | 266 EXPECT_EQ(0u, GetAllSyncData(model_type).size()); |
265 } | 267 } |
266 | 268 |
267 TEST_F(ExtensionSettingsSyncTest, InSyncDataDoesNotInvokeSync) { | 269 TEST_F(ExtensionSettingsSyncTest, InSyncDataDoesNotInvokeSync) { |
268 syncable::ModelType model_type = syncable::APP_SETTINGS; | 270 syncable::ModelType model_type = syncable::APP_SETTINGS; |
269 Extension::Type type = Extension::TYPE_PACKAGED_APP; | 271 Extension::Type type = Extension::TYPE_PACKAGED_APP; |
270 | 272 |
271 StringValue value1("fooValue"); | 273 StringValue value1("fooValue"); |
272 ListValue value2; | 274 ListValue value2; |
273 value2.Append(StringValue::CreateStringValue("barValue")); | 275 value2.Append(StringValue::CreateStringValue("barValue")); |
274 | 276 |
275 SettingsStorage* storage1 = AddExtensionAndGetStorage("s1", type); | 277 SettingsStorage* storage1 = AddExtensionAndGetStorage("s1", type); |
276 SettingsStorage* storage2 = AddExtensionAndGetStorage("s2", type); | 278 SettingsStorage* storage2 = AddExtensionAndGetStorage("s2", type); |
277 | 279 |
278 storage1->Set(DEFAULTS, "foo", value1); | 280 storage1->Set(DEFAULTS, "foo", value1); |
279 storage2->Set(DEFAULTS, "bar", value2); | 281 storage2->Set(DEFAULTS, "bar", value2); |
280 | 282 |
281 std::map<std::string, SettingSyncDataList> all_sync_data = | 283 std::map<std::string, SettingSyncDataList> all_sync_data = |
282 GetAllSyncData(model_type); | 284 GetAllSyncData(model_type); |
283 ASSERT_EQ(2u, all_sync_data.size()); | 285 EXPECT_EQ(2u, all_sync_data.size()); |
284 ASSERT_EQ(1u, all_sync_data["s1"].size()); | 286 EXPECT_EQ(1u, all_sync_data["s1"].size()); |
285 ASSERT_PRED_FORMAT2(ValuesEq, &value1, &all_sync_data["s1"][0].value()); | 287 EXPECT_PRED_FORMAT2(ValuesEq, &value1, &all_sync_data["s1"][0].value()); |
286 ASSERT_EQ(1u, all_sync_data["s2"].size()); | 288 EXPECT_EQ(1u, all_sync_data["s2"].size()); |
287 ASSERT_PRED_FORMAT2(ValuesEq, &value2, &all_sync_data["s2"][0].value()); | 289 EXPECT_PRED_FORMAT2(ValuesEq, &value2, &all_sync_data["s2"][0].value()); |
288 | 290 |
289 SyncDataList sync_data; | 291 SyncDataList sync_data; |
290 sync_data.push_back(settings_sync_util::CreateData( | 292 sync_data.push_back(settings_sync_util::CreateData( |
291 "s1", "foo", value1)); | 293 "s1", "foo", value1)); |
292 sync_data.push_back(settings_sync_util::CreateData( | 294 sync_data.push_back(settings_sync_util::CreateData( |
293 "s2", "bar", value2)); | 295 "s2", "bar", value2)); |
294 | 296 |
295 GetSyncableService(model_type)->MergeDataAndStartSyncing( | 297 GetSyncableService(model_type)->MergeDataAndStartSyncing( |
296 model_type, sync_data, &sync_); | 298 model_type, sync_data, &sync_); |
297 | 299 |
298 // Already in sync, so no changes. | 300 // Already in sync, so no changes. |
299 ASSERT_EQ(0u, sync_.changes().size()); | 301 EXPECT_EQ(0u, sync_.changes().size()); |
300 | 302 |
301 // Regression test: not-changing the synced value shouldn't result in a sync | 303 // Regression test: not-changing the synced value shouldn't result in a sync |
302 // change, and changing the synced value should result in an update. | 304 // change, and changing the synced value should result in an update. |
303 storage1->Set(DEFAULTS, "foo", value1); | 305 storage1->Set(DEFAULTS, "foo", value1); |
304 ASSERT_EQ(0u, sync_.changes().size()); | 306 EXPECT_EQ(0u, sync_.changes().size()); |
305 | 307 |
306 storage1->Set(DEFAULTS, "foo", value2); | 308 storage1->Set(DEFAULTS, "foo", value2); |
307 ASSERT_EQ(1u, sync_.changes().size()); | 309 EXPECT_EQ(1u, sync_.changes().size()); |
308 SettingSyncData change = sync_.GetOnlyChange("s1", "foo"); | 310 SettingSyncData change = sync_.GetOnlyChange("s1", "foo"); |
309 ASSERT_EQ(SyncChange::ACTION_UPDATE, change.change_type()); | 311 EXPECT_EQ(SyncChange::ACTION_UPDATE, change.change_type()); |
310 ASSERT_TRUE(value2.Equals(&change.value())); | 312 EXPECT_TRUE(value2.Equals(&change.value())); |
311 | 313 |
312 GetSyncableService(model_type)->StopSyncing(model_type); | 314 GetSyncableService(model_type)->StopSyncing(model_type); |
313 } | 315 } |
314 | 316 |
315 TEST_F(ExtensionSettingsSyncTest, LocalDataWithNoSyncDataIsPushedToSync) { | 317 TEST_F(ExtensionSettingsSyncTest, LocalDataWithNoSyncDataIsPushedToSync) { |
316 syncable::ModelType model_type = syncable::EXTENSION_SETTINGS; | 318 syncable::ModelType model_type = syncable::EXTENSION_SETTINGS; |
317 Extension::Type type = Extension::TYPE_EXTENSION; | 319 Extension::Type type = Extension::TYPE_EXTENSION; |
318 | 320 |
319 StringValue value1("fooValue"); | 321 StringValue value1("fooValue"); |
320 ListValue value2; | 322 ListValue value2; |
321 value2.Append(StringValue::CreateStringValue("barValue")); | 323 value2.Append(StringValue::CreateStringValue("barValue")); |
322 | 324 |
323 SettingsStorage* storage1 = AddExtensionAndGetStorage("s1", type); | 325 SettingsStorage* storage1 = AddExtensionAndGetStorage("s1", type); |
324 SettingsStorage* storage2 = AddExtensionAndGetStorage("s2", type); | 326 SettingsStorage* storage2 = AddExtensionAndGetStorage("s2", type); |
325 | 327 |
326 storage1->Set(DEFAULTS, "foo", value1); | 328 storage1->Set(DEFAULTS, "foo", value1); |
327 storage2->Set(DEFAULTS, "bar", value2); | 329 storage2->Set(DEFAULTS, "bar", value2); |
328 | 330 |
329 GetSyncableService(model_type)->MergeDataAndStartSyncing( | 331 GetSyncableService(model_type)->MergeDataAndStartSyncing( |
330 model_type, SyncDataList(), &sync_); | 332 model_type, SyncDataList(), &sync_); |
331 | 333 |
332 // All settings should have been pushed to sync. | 334 // All settings should have been pushed to sync. |
333 ASSERT_EQ(2u, sync_.changes().size()); | 335 EXPECT_EQ(2u, sync_.changes().size()); |
334 SettingSyncData change = sync_.GetOnlyChange("s1", "foo"); | 336 SettingSyncData change = sync_.GetOnlyChange("s1", "foo"); |
335 ASSERT_EQ(SyncChange::ACTION_ADD, change.change_type()); | 337 EXPECT_EQ(SyncChange::ACTION_ADD, change.change_type()); |
336 ASSERT_TRUE(value1.Equals(&change.value())); | 338 EXPECT_TRUE(value1.Equals(&change.value())); |
337 change = sync_.GetOnlyChange("s2", "bar"); | 339 change = sync_.GetOnlyChange("s2", "bar"); |
338 ASSERT_EQ(SyncChange::ACTION_ADD, change.change_type()); | 340 EXPECT_EQ(SyncChange::ACTION_ADD, change.change_type()); |
339 ASSERT_TRUE(value2.Equals(&change.value())); | 341 EXPECT_TRUE(value2.Equals(&change.value())); |
340 | 342 |
341 GetSyncableService(model_type)->StopSyncing(model_type); | 343 GetSyncableService(model_type)->StopSyncing(model_type); |
342 } | 344 } |
343 | 345 |
344 TEST_F(ExtensionSettingsSyncTest, AnySyncDataOverwritesLocalData) { | 346 TEST_F(ExtensionSettingsSyncTest, AnySyncDataOverwritesLocalData) { |
345 syncable::ModelType model_type = syncable::APP_SETTINGS; | 347 syncable::ModelType model_type = syncable::APP_SETTINGS; |
346 Extension::Type type = Extension::TYPE_PACKAGED_APP; | 348 Extension::Type type = Extension::TYPE_PACKAGED_APP; |
347 | 349 |
348 StringValue value1("fooValue"); | 350 StringValue value1("fooValue"); |
349 ListValue value2; | 351 ListValue value2; |
(...skipping 13 matching lines...) Expand all Loading... |
363 sync_data.push_back(settings_sync_util::CreateData( | 365 sync_data.push_back(settings_sync_util::CreateData( |
364 "s2", "bar", value2)); | 366 "s2", "bar", value2)); |
365 GetSyncableService(model_type)->MergeDataAndStartSyncing( | 367 GetSyncableService(model_type)->MergeDataAndStartSyncing( |
366 model_type, sync_data, &sync_); | 368 model_type, sync_data, &sync_); |
367 expected1.Set("foo", value1.DeepCopy()); | 369 expected1.Set("foo", value1.DeepCopy()); |
368 expected2.Set("bar", value2.DeepCopy()); | 370 expected2.Set("bar", value2.DeepCopy()); |
369 | 371 |
370 SettingsStorage* storage2 = AddExtensionAndGetStorage("s2", type); | 372 SettingsStorage* storage2 = AddExtensionAndGetStorage("s2", type); |
371 | 373 |
372 // All changes should be local, so no sync changes. | 374 // All changes should be local, so no sync changes. |
373 ASSERT_EQ(0u, sync_.changes().size()); | 375 EXPECT_EQ(0u, sync_.changes().size()); |
374 | 376 |
375 // Sync settings should have been pushed to local settings. | 377 // Sync settings should have been pushed to local settings. |
376 ASSERT_PRED_FORMAT2(SettingsEq, expected1, storage1->Get()); | 378 EXPECT_PRED_FORMAT2(SettingsEq, expected1, storage1->Get()); |
377 ASSERT_PRED_FORMAT2(SettingsEq, expected2, storage2->Get()); | 379 EXPECT_PRED_FORMAT2(SettingsEq, expected2, storage2->Get()); |
378 | 380 |
379 GetSyncableService(model_type)->StopSyncing(model_type); | 381 GetSyncableService(model_type)->StopSyncing(model_type); |
380 } | 382 } |
381 | 383 |
382 TEST_F(ExtensionSettingsSyncTest, ProcessSyncChanges) { | 384 TEST_F(ExtensionSettingsSyncTest, ProcessSyncChanges) { |
383 syncable::ModelType model_type = syncable::EXTENSION_SETTINGS; | 385 syncable::ModelType model_type = syncable::EXTENSION_SETTINGS; |
384 Extension::Type type = Extension::TYPE_EXTENSION; | 386 Extension::Type type = Extension::TYPE_EXTENSION; |
385 | 387 |
386 StringValue value1("fooValue"); | 388 StringValue value1("fooValue"); |
387 ListValue value2; | 389 ListValue value2; |
(...skipping 21 matching lines...) Expand all Loading... |
409 // Make sync add some settings. | 411 // Make sync add some settings. |
410 SyncChangeList change_list; | 412 SyncChangeList change_list; |
411 change_list.push_back(settings_sync_util::CreateAdd( | 413 change_list.push_back(settings_sync_util::CreateAdd( |
412 "s1", "bar", value2)); | 414 "s1", "bar", value2)); |
413 change_list.push_back(settings_sync_util::CreateAdd( | 415 change_list.push_back(settings_sync_util::CreateAdd( |
414 "s2", "foo", value1)); | 416 "s2", "foo", value1)); |
415 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); | 417 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); |
416 expected1.Set("bar", value2.DeepCopy()); | 418 expected1.Set("bar", value2.DeepCopy()); |
417 expected2.Set("foo", value1.DeepCopy()); | 419 expected2.Set("foo", value1.DeepCopy()); |
418 | 420 |
419 ASSERT_PRED_FORMAT2(SettingsEq, expected1, storage1->Get()); | 421 EXPECT_PRED_FORMAT2(SettingsEq, expected1, storage1->Get()); |
420 ASSERT_PRED_FORMAT2(SettingsEq, expected2, storage2->Get()); | 422 EXPECT_PRED_FORMAT2(SettingsEq, expected2, storage2->Get()); |
421 | 423 |
422 // Make sync update some settings, storage1 the new setting, storage2 the | 424 // Make sync update some settings, storage1 the new setting, storage2 the |
423 // initial setting. | 425 // initial setting. |
424 change_list.clear(); | 426 change_list.clear(); |
425 change_list.push_back(settings_sync_util::CreateUpdate( | 427 change_list.push_back(settings_sync_util::CreateUpdate( |
426 "s1", "bar", value2)); | 428 "s1", "bar", value2)); |
427 change_list.push_back(settings_sync_util::CreateUpdate( | 429 change_list.push_back(settings_sync_util::CreateUpdate( |
428 "s2", "bar", value1)); | 430 "s2", "bar", value1)); |
429 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); | 431 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); |
430 expected1.Set("bar", value2.DeepCopy()); | 432 expected1.Set("bar", value2.DeepCopy()); |
431 expected2.Set("bar", value1.DeepCopy()); | 433 expected2.Set("bar", value1.DeepCopy()); |
432 | 434 |
433 ASSERT_PRED_FORMAT2(SettingsEq, expected1, storage1->Get()); | 435 EXPECT_PRED_FORMAT2(SettingsEq, expected1, storage1->Get()); |
434 ASSERT_PRED_FORMAT2(SettingsEq, expected2, storage2->Get()); | 436 EXPECT_PRED_FORMAT2(SettingsEq, expected2, storage2->Get()); |
435 | 437 |
436 // Make sync remove some settings, storage1 the initial setting, storage2 the | 438 // Make sync remove some settings, storage1 the initial setting, storage2 the |
437 // new setting. | 439 // new setting. |
438 change_list.clear(); | 440 change_list.clear(); |
439 change_list.push_back(settings_sync_util::CreateDelete( | 441 change_list.push_back(settings_sync_util::CreateDelete( |
440 "s1", "foo")); | 442 "s1", "foo")); |
441 change_list.push_back(settings_sync_util::CreateDelete( | 443 change_list.push_back(settings_sync_util::CreateDelete( |
442 "s2", "foo")); | 444 "s2", "foo")); |
443 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); | 445 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); |
444 expected1.Remove("foo", NULL); | 446 expected1.Remove("foo", NULL); |
445 expected2.Remove("foo", NULL); | 447 expected2.Remove("foo", NULL); |
446 | 448 |
447 ASSERT_PRED_FORMAT2(SettingsEq, expected1, storage1->Get()); | 449 EXPECT_PRED_FORMAT2(SettingsEq, expected1, storage1->Get()); |
448 ASSERT_PRED_FORMAT2(SettingsEq, expected2, storage2->Get()); | 450 EXPECT_PRED_FORMAT2(SettingsEq, expected2, storage2->Get()); |
449 | 451 |
450 GetSyncableService(model_type)->StopSyncing(model_type); | 452 GetSyncableService(model_type)->StopSyncing(model_type); |
451 } | 453 } |
452 | 454 |
453 TEST_F(ExtensionSettingsSyncTest, PushToSync) { | 455 TEST_F(ExtensionSettingsSyncTest, PushToSync) { |
454 syncable::ModelType model_type = syncable::APP_SETTINGS; | 456 syncable::ModelType model_type = syncable::APP_SETTINGS; |
455 Extension::Type type = Extension::TYPE_PACKAGED_APP; | 457 Extension::Type type = Extension::TYPE_PACKAGED_APP; |
456 | 458 |
457 StringValue value1("fooValue"); | 459 StringValue value1("fooValue"); |
458 ListValue value2; | 460 ListValue value2; |
(...skipping 18 matching lines...) Expand all Loading... |
477 GetSyncableService(model_type)->MergeDataAndStartSyncing( | 479 GetSyncableService(model_type)->MergeDataAndStartSyncing( |
478 model_type, sync_data, &sync_); | 480 model_type, sync_data, &sync_); |
479 | 481 |
480 // Add something locally. | 482 // Add something locally. |
481 storage1->Set(DEFAULTS, "bar", value2); | 483 storage1->Set(DEFAULTS, "bar", value2); |
482 storage2->Set(DEFAULTS, "bar", value2); | 484 storage2->Set(DEFAULTS, "bar", value2); |
483 storage3->Set(DEFAULTS, "foo", value1); | 485 storage3->Set(DEFAULTS, "foo", value1); |
484 storage4->Set(DEFAULTS, "foo", value1); | 486 storage4->Set(DEFAULTS, "foo", value1); |
485 | 487 |
486 SettingSyncData change = sync_.GetOnlyChange("s1", "bar"); | 488 SettingSyncData change = sync_.GetOnlyChange("s1", "bar"); |
487 ASSERT_EQ(SyncChange::ACTION_ADD, change.change_type()); | 489 EXPECT_EQ(SyncChange::ACTION_ADD, change.change_type()); |
488 ASSERT_TRUE(value2.Equals(&change.value())); | 490 EXPECT_TRUE(value2.Equals(&change.value())); |
489 sync_.GetOnlyChange("s2", "bar"); | 491 sync_.GetOnlyChange("s2", "bar"); |
490 ASSERT_EQ(SyncChange::ACTION_ADD, change.change_type()); | 492 EXPECT_EQ(SyncChange::ACTION_ADD, change.change_type()); |
491 ASSERT_TRUE(value2.Equals(&change.value())); | 493 EXPECT_TRUE(value2.Equals(&change.value())); |
492 change = sync_.GetOnlyChange("s3", "foo"); | 494 change = sync_.GetOnlyChange("s3", "foo"); |
493 ASSERT_EQ(SyncChange::ACTION_ADD, change.change_type()); | 495 EXPECT_EQ(SyncChange::ACTION_ADD, change.change_type()); |
494 ASSERT_TRUE(value1.Equals(&change.value())); | 496 EXPECT_TRUE(value1.Equals(&change.value())); |
495 change = sync_.GetOnlyChange("s4", "foo"); | 497 change = sync_.GetOnlyChange("s4", "foo"); |
496 ASSERT_EQ(SyncChange::ACTION_ADD, change.change_type()); | 498 EXPECT_EQ(SyncChange::ACTION_ADD, change.change_type()); |
497 ASSERT_TRUE(value1.Equals(&change.value())); | 499 EXPECT_TRUE(value1.Equals(&change.value())); |
498 | 500 |
499 // Change something locally, storage1/3 the new setting and storage2/4 the | 501 // Change something locally, storage1/3 the new setting and storage2/4 the |
500 // initial setting, for all combinations of local vs sync intialisation and | 502 // initial setting, for all combinations of local vs sync intialisation and |
501 // new vs initial. | 503 // new vs initial. |
502 sync_.ClearChanges(); | 504 sync_.ClearChanges(); |
503 storage1->Set(DEFAULTS, "bar", value1); | 505 storage1->Set(DEFAULTS, "bar", value1); |
504 storage2->Set(DEFAULTS, "foo", value2); | 506 storage2->Set(DEFAULTS, "foo", value2); |
505 storage3->Set(DEFAULTS, "bar", value1); | 507 storage3->Set(DEFAULTS, "bar", value1); |
506 storage4->Set(DEFAULTS, "foo", value2); | 508 storage4->Set(DEFAULTS, "foo", value2); |
507 | 509 |
508 change = sync_.GetOnlyChange("s1", "bar"); | 510 change = sync_.GetOnlyChange("s1", "bar"); |
509 ASSERT_EQ(SyncChange::ACTION_UPDATE, change.change_type()); | 511 EXPECT_EQ(SyncChange::ACTION_UPDATE, change.change_type()); |
510 ASSERT_TRUE(value1.Equals(&change.value())); | 512 EXPECT_TRUE(value1.Equals(&change.value())); |
511 change = sync_.GetOnlyChange("s2", "foo"); | 513 change = sync_.GetOnlyChange("s2", "foo"); |
512 ASSERT_EQ(SyncChange::ACTION_UPDATE, change.change_type()); | 514 EXPECT_EQ(SyncChange::ACTION_UPDATE, change.change_type()); |
513 ASSERT_TRUE(value2.Equals(&change.value())); | 515 EXPECT_TRUE(value2.Equals(&change.value())); |
514 change = sync_.GetOnlyChange("s3", "bar"); | 516 change = sync_.GetOnlyChange("s3", "bar"); |
515 ASSERT_EQ(SyncChange::ACTION_UPDATE, change.change_type()); | 517 EXPECT_EQ(SyncChange::ACTION_UPDATE, change.change_type()); |
516 ASSERT_TRUE(value1.Equals(&change.value())); | 518 EXPECT_TRUE(value1.Equals(&change.value())); |
517 change = sync_.GetOnlyChange("s4", "foo"); | 519 change = sync_.GetOnlyChange("s4", "foo"); |
518 ASSERT_EQ(SyncChange::ACTION_UPDATE, change.change_type()); | 520 EXPECT_EQ(SyncChange::ACTION_UPDATE, change.change_type()); |
519 ASSERT_TRUE(value2.Equals(&change.value())); | 521 EXPECT_TRUE(value2.Equals(&change.value())); |
520 | 522 |
521 // Remove something locally, storage1/3 the new setting and storage2/4 the | 523 // Remove something locally, storage1/3 the new setting and storage2/4 the |
522 // initial setting, for all combinations of local vs sync intialisation and | 524 // initial setting, for all combinations of local vs sync intialisation and |
523 // new vs initial. | 525 // new vs initial. |
524 sync_.ClearChanges(); | 526 sync_.ClearChanges(); |
525 storage1->Remove("foo"); | 527 storage1->Remove("foo"); |
526 storage2->Remove("bar"); | 528 storage2->Remove("bar"); |
527 storage3->Remove("foo"); | 529 storage3->Remove("foo"); |
528 storage4->Remove("bar"); | 530 storage4->Remove("bar"); |
529 | 531 |
530 ASSERT_EQ( | 532 EXPECT_EQ( |
531 SyncChange::ACTION_DELETE, | 533 SyncChange::ACTION_DELETE, |
532 sync_.GetOnlyChange("s1", "foo").change_type()); | 534 sync_.GetOnlyChange("s1", "foo").change_type()); |
533 ASSERT_EQ( | 535 EXPECT_EQ( |
534 SyncChange::ACTION_DELETE, | 536 SyncChange::ACTION_DELETE, |
535 sync_.GetOnlyChange("s2", "bar").change_type()); | 537 sync_.GetOnlyChange("s2", "bar").change_type()); |
536 ASSERT_EQ( | 538 EXPECT_EQ( |
537 SyncChange::ACTION_DELETE, | 539 SyncChange::ACTION_DELETE, |
538 sync_.GetOnlyChange("s3", "foo").change_type()); | 540 sync_.GetOnlyChange("s3", "foo").change_type()); |
539 ASSERT_EQ( | 541 EXPECT_EQ( |
540 SyncChange::ACTION_DELETE, | 542 SyncChange::ACTION_DELETE, |
541 sync_.GetOnlyChange("s4", "bar").change_type()); | 543 sync_.GetOnlyChange("s4", "bar").change_type()); |
542 | 544 |
543 // Remove some nonexistent settings. | 545 // Remove some nonexistent settings. |
544 sync_.ClearChanges(); | 546 sync_.ClearChanges(); |
545 storage1->Remove("foo"); | 547 storage1->Remove("foo"); |
546 storage2->Remove("bar"); | 548 storage2->Remove("bar"); |
547 storage3->Remove("foo"); | 549 storage3->Remove("foo"); |
548 storage4->Remove("bar"); | 550 storage4->Remove("bar"); |
549 | 551 |
550 ASSERT_EQ(0u, sync_.changes().size()); | 552 EXPECT_EQ(0u, sync_.changes().size()); |
551 | 553 |
552 // Clear the rest of the settings. Add the removed ones back first so that | 554 // Clear the rest of the settings. Add the removed ones back first so that |
553 // more than one setting is cleared. | 555 // more than one setting is cleared. |
554 storage1->Set(DEFAULTS, "foo", value1); | 556 storage1->Set(DEFAULTS, "foo", value1); |
555 storage2->Set(DEFAULTS, "bar", value2); | 557 storage2->Set(DEFAULTS, "bar", value2); |
556 storage3->Set(DEFAULTS, "foo", value1); | 558 storage3->Set(DEFAULTS, "foo", value1); |
557 storage4->Set(DEFAULTS, "bar", value2); | 559 storage4->Set(DEFAULTS, "bar", value2); |
558 | 560 |
559 sync_.ClearChanges(); | 561 sync_.ClearChanges(); |
560 storage1->Clear(); | 562 storage1->Clear(); |
561 storage2->Clear(); | 563 storage2->Clear(); |
562 storage3->Clear(); | 564 storage3->Clear(); |
563 storage4->Clear(); | 565 storage4->Clear(); |
564 | 566 |
565 ASSERT_EQ( | 567 EXPECT_EQ( |
566 SyncChange::ACTION_DELETE, | 568 SyncChange::ACTION_DELETE, |
567 sync_.GetOnlyChange("s1", "foo").change_type()); | 569 sync_.GetOnlyChange("s1", "foo").change_type()); |
568 ASSERT_EQ( | 570 EXPECT_EQ( |
569 SyncChange::ACTION_DELETE, | 571 SyncChange::ACTION_DELETE, |
570 sync_.GetOnlyChange("s1", "bar").change_type()); | 572 sync_.GetOnlyChange("s1", "bar").change_type()); |
571 ASSERT_EQ( | 573 EXPECT_EQ( |
572 SyncChange::ACTION_DELETE, | 574 SyncChange::ACTION_DELETE, |
573 sync_.GetOnlyChange("s2", "foo").change_type()); | 575 sync_.GetOnlyChange("s2", "foo").change_type()); |
574 ASSERT_EQ( | 576 EXPECT_EQ( |
575 SyncChange::ACTION_DELETE, | 577 SyncChange::ACTION_DELETE, |
576 sync_.GetOnlyChange("s2", "bar").change_type()); | 578 sync_.GetOnlyChange("s2", "bar").change_type()); |
577 ASSERT_EQ( | 579 EXPECT_EQ( |
578 SyncChange::ACTION_DELETE, | 580 SyncChange::ACTION_DELETE, |
579 sync_.GetOnlyChange("s3", "foo").change_type()); | 581 sync_.GetOnlyChange("s3", "foo").change_type()); |
580 ASSERT_EQ( | 582 EXPECT_EQ( |
581 SyncChange::ACTION_DELETE, | 583 SyncChange::ACTION_DELETE, |
582 sync_.GetOnlyChange("s3", "bar").change_type()); | 584 sync_.GetOnlyChange("s3", "bar").change_type()); |
583 ASSERT_EQ( | 585 EXPECT_EQ( |
584 SyncChange::ACTION_DELETE, | 586 SyncChange::ACTION_DELETE, |
585 sync_.GetOnlyChange("s4", "foo").change_type()); | 587 sync_.GetOnlyChange("s4", "foo").change_type()); |
586 ASSERT_EQ( | 588 EXPECT_EQ( |
587 SyncChange::ACTION_DELETE, | 589 SyncChange::ACTION_DELETE, |
588 sync_.GetOnlyChange("s4", "bar").change_type()); | 590 sync_.GetOnlyChange("s4", "bar").change_type()); |
589 | 591 |
590 GetSyncableService(model_type)->StopSyncing(model_type); | 592 GetSyncableService(model_type)->StopSyncing(model_type); |
591 } | 593 } |
592 | 594 |
593 TEST_F(ExtensionSettingsSyncTest, ExtensionAndAppSettingsSyncSeparately) { | 595 TEST_F(ExtensionSettingsSyncTest, ExtensionAndAppSettingsSyncSeparately) { |
594 StringValue value1("fooValue"); | 596 StringValue value1("fooValue"); |
595 ListValue value2; | 597 ListValue value2; |
596 value2.Append(StringValue::CreateStringValue("barValue")); | 598 value2.Append(StringValue::CreateStringValue("barValue")); |
597 | 599 |
598 // storage1 is an extension, storage2 is an app. | 600 // storage1 is an extension, storage2 is an app. |
599 SettingsStorage* storage1 = AddExtensionAndGetStorage( | 601 SettingsStorage* storage1 = AddExtensionAndGetStorage( |
600 "s1", Extension::TYPE_EXTENSION); | 602 "s1", Extension::TYPE_EXTENSION); |
601 SettingsStorage* storage2 = AddExtensionAndGetStorage( | 603 SettingsStorage* storage2 = AddExtensionAndGetStorage( |
602 "s2", Extension::TYPE_PACKAGED_APP); | 604 "s2", Extension::TYPE_PACKAGED_APP); |
603 | 605 |
604 storage1->Set(DEFAULTS, "foo", value1); | 606 storage1->Set(DEFAULTS, "foo", value1); |
605 storage2->Set(DEFAULTS, "bar", value2); | 607 storage2->Set(DEFAULTS, "bar", value2); |
606 | 608 |
607 std::map<std::string, SettingSyncDataList> extension_sync_data = | 609 std::map<std::string, SettingSyncDataList> extension_sync_data = |
608 GetAllSyncData(syncable::EXTENSION_SETTINGS); | 610 GetAllSyncData(syncable::EXTENSION_SETTINGS); |
609 ASSERT_EQ(1u, extension_sync_data.size()); | 611 EXPECT_EQ(1u, extension_sync_data.size()); |
610 ASSERT_EQ(1u, extension_sync_data["s1"].size()); | 612 EXPECT_EQ(1u, extension_sync_data["s1"].size()); |
611 ASSERT_PRED_FORMAT2(ValuesEq, &value1, &extension_sync_data["s1"][0].value()); | 613 EXPECT_PRED_FORMAT2(ValuesEq, &value1, &extension_sync_data["s1"][0].value()); |
612 | 614 |
613 std::map<std::string, SettingSyncDataList> app_sync_data = | 615 std::map<std::string, SettingSyncDataList> app_sync_data = |
614 GetAllSyncData(syncable::APP_SETTINGS); | 616 GetAllSyncData(syncable::APP_SETTINGS); |
615 ASSERT_EQ(1u, app_sync_data.size()); | 617 EXPECT_EQ(1u, app_sync_data.size()); |
616 ASSERT_EQ(1u, app_sync_data["s2"].size()); | 618 EXPECT_EQ(1u, app_sync_data["s2"].size()); |
617 ASSERT_PRED_FORMAT2(ValuesEq, &value2, &app_sync_data["s2"][0].value()); | 619 EXPECT_PRED_FORMAT2(ValuesEq, &value2, &app_sync_data["s2"][0].value()); |
618 | 620 |
619 // Stop each separately, there should be no changes either time. | 621 // Stop each separately, there should be no changes either time. |
620 SyncDataList sync_data; | 622 SyncDataList sync_data; |
621 sync_data.push_back(settings_sync_util::CreateData( | 623 sync_data.push_back(settings_sync_util::CreateData( |
622 "s1", "foo", value1)); | 624 "s1", "foo", value1)); |
623 | 625 |
624 GetSyncableService(syncable::EXTENSION_SETTINGS)-> | 626 GetSyncableService(syncable::EXTENSION_SETTINGS)-> |
625 MergeDataAndStartSyncing(syncable::EXTENSION_SETTINGS, sync_data, &sync_); | 627 MergeDataAndStartSyncing(syncable::EXTENSION_SETTINGS, sync_data, &sync_); |
626 GetSyncableService(syncable::EXTENSION_SETTINGS)-> | 628 GetSyncableService(syncable::EXTENSION_SETTINGS)-> |
627 StopSyncing(syncable::EXTENSION_SETTINGS); | 629 StopSyncing(syncable::EXTENSION_SETTINGS); |
628 ASSERT_EQ(0u, sync_.changes().size()); | 630 EXPECT_EQ(0u, sync_.changes().size()); |
629 | 631 |
630 sync_data.clear(); | 632 sync_data.clear(); |
631 sync_data.push_back(settings_sync_util::CreateData( | 633 sync_data.push_back(settings_sync_util::CreateData( |
632 "s2", "bar", value2)); | 634 "s2", "bar", value2)); |
633 | 635 |
634 GetSyncableService(syncable::APP_SETTINGS)-> | 636 GetSyncableService(syncable::APP_SETTINGS)-> |
635 MergeDataAndStartSyncing(syncable::APP_SETTINGS, sync_data, &sync_); | 637 MergeDataAndStartSyncing(syncable::APP_SETTINGS, sync_data, &sync_); |
636 GetSyncableService(syncable::APP_SETTINGS)-> | 638 GetSyncableService(syncable::APP_SETTINGS)-> |
637 StopSyncing(syncable::APP_SETTINGS); | 639 StopSyncing(syncable::APP_SETTINGS); |
638 ASSERT_EQ(0u, sync_.changes().size()); | 640 EXPECT_EQ(0u, sync_.changes().size()); |
639 } | 641 } |
640 | 642 |
641 TEST_F(ExtensionSettingsSyncTest, FailingStartSyncingDisablesSync) { | 643 TEST_F(ExtensionSettingsSyncTest, FailingStartSyncingDisablesSync) { |
642 syncable::ModelType model_type = syncable::EXTENSION_SETTINGS; | 644 syncable::ModelType model_type = syncable::EXTENSION_SETTINGS; |
643 Extension::Type type = Extension::TYPE_EXTENSION; | 645 Extension::Type type = Extension::TYPE_EXTENSION; |
644 | 646 |
645 StringValue fooValue("fooValue"); | 647 StringValue fooValue("fooValue"); |
646 StringValue barValue("barValue"); | 648 StringValue barValue("barValue"); |
647 | 649 |
648 // There is a bit of a convoluted method to get storage areas that can fail; | 650 // There is a bit of a convoluted method to get storage areas that can fail; |
(...skipping 634 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1283 DictionaryValue expected; | 1285 DictionaryValue expected; |
1284 expected.Set("large_value", large_value.DeepCopy()); | 1286 expected.Set("large_value", large_value.DeepCopy()); |
1285 EXPECT_PRED_FORMAT2(SettingsEq, expected, storage1->Get()); | 1287 EXPECT_PRED_FORMAT2(SettingsEq, expected, storage1->Get()); |
1286 EXPECT_PRED_FORMAT2(SettingsEq, expected, storage2->Get()); | 1288 EXPECT_PRED_FORMAT2(SettingsEq, expected, storage2->Get()); |
1287 } | 1289 } |
1288 | 1290 |
1289 GetSyncableService(model_type)->StopSyncing(model_type); | 1291 GetSyncableService(model_type)->StopSyncing(model_type); |
1290 } | 1292 } |
1291 | 1293 |
1292 } // namespace extensions | 1294 } // namespace extensions |
OLD | NEW |