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 14 matching lines...) Expand all Loading... | |
25 // TODO(kalman): Integration tests for sync. | 25 // TODO(kalman): Integration tests for sync. |
26 | 26 |
27 using content::BrowserThread; | 27 using content::BrowserThread; |
28 | 28 |
29 namespace extensions { | 29 namespace extensions { |
30 | 30 |
31 using namespace settings_test_util; | 31 using namespace settings_test_util; |
32 | 32 |
33 namespace { | 33 namespace { |
34 | 34 |
35 // To save typing SettingsStorage::DEFAULTS everywhere. | |
36 const SettingsStorage::WriteOptions DEFAULTS = SettingsStorage::DEFAULTS; | |
37 | |
35 // Gets the pretty-printed JSON for a value. | 38 // Gets the pretty-printed JSON for a value. |
36 static std::string GetJson(const Value& value) { | 39 static std::string GetJson(const Value& value) { |
37 std::string json; | 40 std::string json; |
38 base::JSONWriter::Write(&value, true, &json); | 41 base::JSONWriter::Write(&value, true, &json); |
39 return json; | 42 return json; |
40 } | 43 } |
41 | 44 |
42 // Returns whether two Values are equal. | 45 // Returns whether two Values are equal. |
43 testing::AssertionResult ValuesEq( | 46 testing::AssertionResult ValuesEq( |
44 const char* _1, const char* _2, | 47 const char* _1, const char* _2, |
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
265 syncable::ModelType model_type = syncable::APP_SETTINGS; | 268 syncable::ModelType model_type = syncable::APP_SETTINGS; |
266 Extension::Type type = Extension::TYPE_PACKAGED_APP; | 269 Extension::Type type = Extension::TYPE_PACKAGED_APP; |
267 | 270 |
268 StringValue value1("fooValue"); | 271 StringValue value1("fooValue"); |
269 ListValue value2; | 272 ListValue value2; |
270 value2.Append(StringValue::CreateStringValue("barValue")); | 273 value2.Append(StringValue::CreateStringValue("barValue")); |
271 | 274 |
272 SettingsStorage* storage1 = AddExtensionAndGetStorage("s1", type); | 275 SettingsStorage* storage1 = AddExtensionAndGetStorage("s1", type); |
273 SettingsStorage* storage2 = AddExtensionAndGetStorage("s2", type); | 276 SettingsStorage* storage2 = AddExtensionAndGetStorage("s2", type); |
274 | 277 |
275 storage1->Set("foo", value1); | 278 storage1->Set(DEFAULTS, "foo", value1); |
276 storage2->Set("bar", value2); | 279 storage2->Set(DEFAULTS, "bar", value2); |
277 | 280 |
278 std::map<std::string, SettingSyncDataList> all_sync_data = | 281 std::map<std::string, SettingSyncDataList> all_sync_data = |
279 GetAllSyncData(model_type); | 282 GetAllSyncData(model_type); |
280 ASSERT_EQ(2u, all_sync_data.size()); | 283 ASSERT_EQ(2u, all_sync_data.size()); |
281 ASSERT_EQ(1u, all_sync_data["s1"].size()); | 284 ASSERT_EQ(1u, all_sync_data["s1"].size()); |
282 ASSERT_PRED_FORMAT2(ValuesEq, &value1, &all_sync_data["s1"][0].value()); | 285 ASSERT_PRED_FORMAT2(ValuesEq, &value1, &all_sync_data["s1"][0].value()); |
283 ASSERT_EQ(1u, all_sync_data["s2"].size()); | 286 ASSERT_EQ(1u, all_sync_data["s2"].size()); |
284 ASSERT_PRED_FORMAT2(ValuesEq, &value2, &all_sync_data["s2"][0].value()); | 287 ASSERT_PRED_FORMAT2(ValuesEq, &value2, &all_sync_data["s2"][0].value()); |
285 | 288 |
286 SyncDataList sync_data; | 289 SyncDataList sync_data; |
287 sync_data.push_back(settings_sync_util::CreateData( | 290 sync_data.push_back(settings_sync_util::CreateData( |
288 "s1", "foo", value1)); | 291 "s1", "foo", value1)); |
289 sync_data.push_back(settings_sync_util::CreateData( | 292 sync_data.push_back(settings_sync_util::CreateData( |
290 "s2", "bar", value2)); | 293 "s2", "bar", value2)); |
291 | 294 |
292 GetSyncableService(model_type)->MergeDataAndStartSyncing( | 295 GetSyncableService(model_type)->MergeDataAndStartSyncing( |
293 model_type, sync_data, &sync_); | 296 model_type, sync_data, &sync_); |
294 | 297 |
295 // Already in sync, so no changes. | 298 // Already in sync, so no changes. |
296 ASSERT_EQ(0u, sync_.changes().size()); | 299 ASSERT_EQ(0u, sync_.changes().size()); |
297 | 300 |
298 // Regression test: not-changing the synced value shouldn't result in a sync | 301 // Regression test: not-changing the synced value shouldn't result in a sync |
299 // change, and changing the synced value should result in an update. | 302 // change, and changing the synced value should result in an update. |
300 storage1->Set("foo", value1); | 303 storage1->Set(DEFAULTS, "foo", value1); |
301 ASSERT_EQ(0u, sync_.changes().size()); | 304 ASSERT_EQ(0u, sync_.changes().size()); |
302 | 305 |
303 storage1->Set("foo", value2); | 306 storage1->Set(DEFAULTS, "foo", value2); |
304 ASSERT_EQ(1u, sync_.changes().size()); | 307 ASSERT_EQ(1u, sync_.changes().size()); |
305 SettingSyncData change = sync_.GetOnlyChange("s1", "foo"); | 308 SettingSyncData change = sync_.GetOnlyChange("s1", "foo"); |
306 ASSERT_EQ(SyncChange::ACTION_UPDATE, change.change_type()); | 309 ASSERT_EQ(SyncChange::ACTION_UPDATE, change.change_type()); |
307 ASSERT_TRUE(value2.Equals(&change.value())); | 310 ASSERT_TRUE(value2.Equals(&change.value())); |
308 | 311 |
309 GetSyncableService(model_type)->StopSyncing(model_type); | 312 GetSyncableService(model_type)->StopSyncing(model_type); |
310 } | 313 } |
311 | 314 |
312 TEST_F(ExtensionSettingsSyncTest, LocalDataWithNoSyncDataIsPushedToSync) { | 315 TEST_F(ExtensionSettingsSyncTest, LocalDataWithNoSyncDataIsPushedToSync) { |
313 syncable::ModelType model_type = syncable::EXTENSION_SETTINGS; | 316 syncable::ModelType model_type = syncable::EXTENSION_SETTINGS; |
314 Extension::Type type = Extension::TYPE_EXTENSION; | 317 Extension::Type type = Extension::TYPE_EXTENSION; |
315 | 318 |
316 StringValue value1("fooValue"); | 319 StringValue value1("fooValue"); |
317 ListValue value2; | 320 ListValue value2; |
318 value2.Append(StringValue::CreateStringValue("barValue")); | 321 value2.Append(StringValue::CreateStringValue("barValue")); |
319 | 322 |
320 SettingsStorage* storage1 = AddExtensionAndGetStorage("s1", type); | 323 SettingsStorage* storage1 = AddExtensionAndGetStorage("s1", type); |
321 SettingsStorage* storage2 = AddExtensionAndGetStorage("s2", type); | 324 SettingsStorage* storage2 = AddExtensionAndGetStorage("s2", type); |
322 | 325 |
323 storage1->Set("foo", value1); | 326 storage1->Set(DEFAULTS, "foo", value1); |
324 storage2->Set("bar", value2); | 327 storage2->Set(DEFAULTS, "bar", value2); |
325 | 328 |
326 GetSyncableService(model_type)->MergeDataAndStartSyncing( | 329 GetSyncableService(model_type)->MergeDataAndStartSyncing( |
327 model_type, SyncDataList(), &sync_); | 330 model_type, SyncDataList(), &sync_); |
328 | 331 |
329 // All settings should have been pushed to sync. | 332 // All settings should have been pushed to sync. |
330 ASSERT_EQ(2u, sync_.changes().size()); | 333 ASSERT_EQ(2u, sync_.changes().size()); |
331 SettingSyncData change = sync_.GetOnlyChange("s1", "foo"); | 334 SettingSyncData change = sync_.GetOnlyChange("s1", "foo"); |
332 ASSERT_EQ(SyncChange::ACTION_ADD, change.change_type()); | 335 ASSERT_EQ(SyncChange::ACTION_ADD, change.change_type()); |
333 ASSERT_TRUE(value1.Equals(&change.value())); | 336 ASSERT_TRUE(value1.Equals(&change.value())); |
334 change = sync_.GetOnlyChange("s2", "bar"); | 337 change = sync_.GetOnlyChange("s2", "bar"); |
(...skipping 10 matching lines...) Expand all Loading... | |
345 StringValue value1("fooValue"); | 348 StringValue value1("fooValue"); |
346 ListValue value2; | 349 ListValue value2; |
347 value2.Append(StringValue::CreateStringValue("barValue")); | 350 value2.Append(StringValue::CreateStringValue("barValue")); |
348 | 351 |
349 // Maintain dictionaries mirrored to the expected values of the settings in | 352 // Maintain dictionaries mirrored to the expected values of the settings in |
350 // each storage area. | 353 // each storage area. |
351 DictionaryValue expected1, expected2; | 354 DictionaryValue expected1, expected2; |
352 | 355 |
353 // Pre-populate one of the storage areas. | 356 // Pre-populate one of the storage areas. |
354 SettingsStorage* storage1 = AddExtensionAndGetStorage("s1", type); | 357 SettingsStorage* storage1 = AddExtensionAndGetStorage("s1", type); |
355 storage1->Set("overwriteMe", value1); | 358 storage1->Set(DEFAULTS, "overwriteMe", value1); |
356 | 359 |
357 SyncDataList sync_data; | 360 SyncDataList sync_data; |
358 sync_data.push_back(settings_sync_util::CreateData( | 361 sync_data.push_back(settings_sync_util::CreateData( |
359 "s1", "foo", value1)); | 362 "s1", "foo", value1)); |
360 sync_data.push_back(settings_sync_util::CreateData( | 363 sync_data.push_back(settings_sync_util::CreateData( |
361 "s2", "bar", value2)); | 364 "s2", "bar", value2)); |
362 GetSyncableService(model_type)->MergeDataAndStartSyncing( | 365 GetSyncableService(model_type)->MergeDataAndStartSyncing( |
363 model_type, sync_data, &sync_); | 366 model_type, sync_data, &sync_); |
364 expected1.Set("foo", value1.DeepCopy()); | 367 expected1.Set("foo", value1.DeepCopy()); |
365 expected2.Set("bar", value2.DeepCopy()); | 368 expected2.Set("bar", value2.DeepCopy()); |
(...skipping 19 matching lines...) Expand all Loading... | |
385 value2.Append(StringValue::CreateStringValue("barValue")); | 388 value2.Append(StringValue::CreateStringValue("barValue")); |
386 | 389 |
387 // Maintain dictionaries mirrored to the expected values of the settings in | 390 // Maintain dictionaries mirrored to the expected values of the settings in |
388 // each storage area. | 391 // each storage area. |
389 DictionaryValue expected1, expected2; | 392 DictionaryValue expected1, expected2; |
390 | 393 |
391 // Make storage1 initialised from local data, storage2 initialised from sync. | 394 // Make storage1 initialised from local data, storage2 initialised from sync. |
392 SettingsStorage* storage1 = AddExtensionAndGetStorage("s1", type); | 395 SettingsStorage* storage1 = AddExtensionAndGetStorage("s1", type); |
393 SettingsStorage* storage2 = AddExtensionAndGetStorage("s2", type); | 396 SettingsStorage* storage2 = AddExtensionAndGetStorage("s2", type); |
394 | 397 |
395 storage1->Set("foo", value1); | 398 storage1->Set(DEFAULTS, "foo", value1); |
396 expected1.Set("foo", value1.DeepCopy()); | 399 expected1.Set("foo", value1.DeepCopy()); |
397 | 400 |
398 SyncDataList sync_data; | 401 SyncDataList sync_data; |
399 sync_data.push_back(settings_sync_util::CreateData( | 402 sync_data.push_back(settings_sync_util::CreateData( |
400 "s2", "bar", value2)); | 403 "s2", "bar", value2)); |
401 | 404 |
402 GetSyncableService(model_type)->MergeDataAndStartSyncing( | 405 GetSyncableService(model_type)->MergeDataAndStartSyncing( |
403 model_type, sync_data, &sync_); | 406 model_type, sync_data, &sync_); |
404 expected2.Set("bar", value2.DeepCopy()); | 407 expected2.Set("bar", value2.DeepCopy()); |
405 | 408 |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
455 ListValue value2; | 458 ListValue value2; |
456 value2.Append(StringValue::CreateStringValue("barValue")); | 459 value2.Append(StringValue::CreateStringValue("barValue")); |
457 | 460 |
458 // Make storage1/2 initialised from local data, storage3/4 initialised from | 461 // Make storage1/2 initialised from local data, storage3/4 initialised from |
459 // sync. | 462 // sync. |
460 SettingsStorage* storage1 = AddExtensionAndGetStorage("s1", type); | 463 SettingsStorage* storage1 = AddExtensionAndGetStorage("s1", type); |
461 SettingsStorage* storage2 = AddExtensionAndGetStorage("s2", type); | 464 SettingsStorage* storage2 = AddExtensionAndGetStorage("s2", type); |
462 SettingsStorage* storage3 = AddExtensionAndGetStorage("s3", type); | 465 SettingsStorage* storage3 = AddExtensionAndGetStorage("s3", type); |
463 SettingsStorage* storage4 = AddExtensionAndGetStorage("s4", type); | 466 SettingsStorage* storage4 = AddExtensionAndGetStorage("s4", type); |
464 | 467 |
465 storage1->Set("foo", value1); | 468 storage1->Set(DEFAULTS, "foo", value1); |
466 storage2->Set("foo", value1); | 469 storage2->Set(DEFAULTS, "foo", value1); |
467 | 470 |
468 SyncDataList sync_data; | 471 SyncDataList sync_data; |
469 sync_data.push_back(settings_sync_util::CreateData( | 472 sync_data.push_back(settings_sync_util::CreateData( |
470 "s3", "bar", value2)); | 473 "s3", "bar", value2)); |
471 sync_data.push_back(settings_sync_util::CreateData( | 474 sync_data.push_back(settings_sync_util::CreateData( |
472 "s4", "bar", value2)); | 475 "s4", "bar", value2)); |
473 | 476 |
474 GetSyncableService(model_type)->MergeDataAndStartSyncing( | 477 GetSyncableService(model_type)->MergeDataAndStartSyncing( |
475 model_type, sync_data, &sync_); | 478 model_type, sync_data, &sync_); |
476 | 479 |
477 // Add something locally. | 480 // Add something locally. |
478 storage1->Set("bar", value2); | 481 storage1->Set(DEFAULTS, "bar", value2); |
479 storage2->Set("bar", value2); | 482 storage2->Set(DEFAULTS, "bar", value2); |
480 storage3->Set("foo", value1); | 483 storage3->Set(DEFAULTS, "foo", value1); |
481 storage4->Set("foo", value1); | 484 storage4->Set(DEFAULTS, "foo", value1); |
482 | 485 |
483 SettingSyncData change = sync_.GetOnlyChange("s1", "bar"); | 486 SettingSyncData change = sync_.GetOnlyChange("s1", "bar"); |
484 ASSERT_EQ(SyncChange::ACTION_ADD, change.change_type()); | 487 ASSERT_EQ(SyncChange::ACTION_ADD, change.change_type()); |
485 ASSERT_TRUE(value2.Equals(&change.value())); | 488 ASSERT_TRUE(value2.Equals(&change.value())); |
486 sync_.GetOnlyChange("s2", "bar"); | 489 sync_.GetOnlyChange("s2", "bar"); |
487 ASSERT_EQ(SyncChange::ACTION_ADD, change.change_type()); | 490 ASSERT_EQ(SyncChange::ACTION_ADD, change.change_type()); |
488 ASSERT_TRUE(value2.Equals(&change.value())); | 491 ASSERT_TRUE(value2.Equals(&change.value())); |
489 change = sync_.GetOnlyChange("s3", "foo"); | 492 change = sync_.GetOnlyChange("s3", "foo"); |
490 ASSERT_EQ(SyncChange::ACTION_ADD, change.change_type()); | 493 ASSERT_EQ(SyncChange::ACTION_ADD, change.change_type()); |
491 ASSERT_TRUE(value1.Equals(&change.value())); | 494 ASSERT_TRUE(value1.Equals(&change.value())); |
492 change = sync_.GetOnlyChange("s4", "foo"); | 495 change = sync_.GetOnlyChange("s4", "foo"); |
493 ASSERT_EQ(SyncChange::ACTION_ADD, change.change_type()); | 496 ASSERT_EQ(SyncChange::ACTION_ADD, change.change_type()); |
494 ASSERT_TRUE(value1.Equals(&change.value())); | 497 ASSERT_TRUE(value1.Equals(&change.value())); |
495 | 498 |
496 // Change something locally, storage1/3 the new setting and storage2/4 the | 499 // Change something locally, storage1/3 the new setting and storage2/4 the |
497 // initial setting, for all combinations of local vs sync intialisation and | 500 // initial setting, for all combinations of local vs sync intialisation and |
498 // new vs initial. | 501 // new vs initial. |
499 sync_.ClearChanges(); | 502 sync_.ClearChanges(); |
500 storage1->Set("bar", value1); | 503 storage1->Set(DEFAULTS, "bar", value1); |
501 storage2->Set("foo", value2); | 504 storage2->Set(DEFAULTS, "foo", value2); |
502 storage3->Set("bar", value1); | 505 storage3->Set(DEFAULTS, "bar", value1); |
503 storage4->Set("foo", value2); | 506 storage4->Set(DEFAULTS, "foo", value2); |
504 | 507 |
505 change = sync_.GetOnlyChange("s1", "bar"); | 508 change = sync_.GetOnlyChange("s1", "bar"); |
506 ASSERT_EQ(SyncChange::ACTION_UPDATE, change.change_type()); | 509 ASSERT_EQ(SyncChange::ACTION_UPDATE, change.change_type()); |
507 ASSERT_TRUE(value1.Equals(&change.value())); | 510 ASSERT_TRUE(value1.Equals(&change.value())); |
508 change = sync_.GetOnlyChange("s2", "foo"); | 511 change = sync_.GetOnlyChange("s2", "foo"); |
509 ASSERT_EQ(SyncChange::ACTION_UPDATE, change.change_type()); | 512 ASSERT_EQ(SyncChange::ACTION_UPDATE, change.change_type()); |
510 ASSERT_TRUE(value2.Equals(&change.value())); | 513 ASSERT_TRUE(value2.Equals(&change.value())); |
511 change = sync_.GetOnlyChange("s3", "bar"); | 514 change = sync_.GetOnlyChange("s3", "bar"); |
512 ASSERT_EQ(SyncChange::ACTION_UPDATE, change.change_type()); | 515 ASSERT_EQ(SyncChange::ACTION_UPDATE, change.change_type()); |
513 ASSERT_TRUE(value1.Equals(&change.value())); | 516 ASSERT_TRUE(value1.Equals(&change.value())); |
514 change = sync_.GetOnlyChange("s4", "foo"); | 517 change = sync_.GetOnlyChange("s4", "foo"); |
515 ASSERT_EQ(SyncChange::ACTION_UPDATE, change.change_type()); | 518 ASSERT_EQ(SyncChange::ACTION_UPDATE, change.change_type()); |
516 ASSERT_TRUE(value2.Equals(&change.value())); | 519 ASSERT_TRUE(value2.Equals(&change.value())); |
517 | 520 |
518 // Remove something locally, storage1/3 the new setting and storage2/4 the | 521 // Remove something locally, storage1/3 the new setting and storage2/4 the |
519 // initial setting, for all combinations of local vs sync intialisation and | 522 // initial setting, for all combinations of local vs sync intialisation and |
520 // new vs initial. | 523 // new vs initial. |
521 sync_.ClearChanges(); | 524 sync_.ClearChanges(); |
522 storage1->Remove("foo"); | 525 storage1->Remove(DEFAULTS, "foo"); |
523 storage2->Remove("bar"); | 526 storage2->Remove(DEFAULTS, "bar"); |
524 storage3->Remove("foo"); | 527 storage3->Remove(DEFAULTS, "foo"); |
525 storage4->Remove("bar"); | 528 storage4->Remove(DEFAULTS, "bar"); |
526 | 529 |
527 ASSERT_EQ( | 530 ASSERT_EQ( |
528 SyncChange::ACTION_DELETE, | 531 SyncChange::ACTION_DELETE, |
529 sync_.GetOnlyChange("s1", "foo").change_type()); | 532 sync_.GetOnlyChange("s1", "foo").change_type()); |
530 ASSERT_EQ( | 533 ASSERT_EQ( |
531 SyncChange::ACTION_DELETE, | 534 SyncChange::ACTION_DELETE, |
532 sync_.GetOnlyChange("s2", "bar").change_type()); | 535 sync_.GetOnlyChange("s2", "bar").change_type()); |
533 ASSERT_EQ( | 536 ASSERT_EQ( |
534 SyncChange::ACTION_DELETE, | 537 SyncChange::ACTION_DELETE, |
535 sync_.GetOnlyChange("s3", "foo").change_type()); | 538 sync_.GetOnlyChange("s3", "foo").change_type()); |
536 ASSERT_EQ( | 539 ASSERT_EQ( |
537 SyncChange::ACTION_DELETE, | 540 SyncChange::ACTION_DELETE, |
538 sync_.GetOnlyChange("s4", "bar").change_type()); | 541 sync_.GetOnlyChange("s4", "bar").change_type()); |
539 | 542 |
540 // Remove some nonexistent settings. | 543 // Remove some nonexistent settings. |
541 sync_.ClearChanges(); | 544 sync_.ClearChanges(); |
542 storage1->Remove("foo"); | 545 storage1->Remove(DEFAULTS, "foo"); |
543 storage2->Remove("bar"); | 546 storage2->Remove(DEFAULTS, "bar"); |
544 storage3->Remove("foo"); | 547 storage3->Remove(DEFAULTS, "foo"); |
545 storage4->Remove("bar"); | 548 storage4->Remove(DEFAULTS, "bar"); |
546 | 549 |
547 ASSERT_EQ(0u, sync_.changes().size()); | 550 ASSERT_EQ(0u, sync_.changes().size()); |
548 | 551 |
549 // Clear the rest of the settings. Add the removed ones back first so that | 552 // Clear the rest of the settings. Add the removed ones back first so that |
550 // more than one setting is cleared. | 553 // more than one setting is cleared. |
551 storage1->Set("foo", value1); | 554 storage1->Set(DEFAULTS, "foo", value1); |
552 storage2->Set("bar", value2); | 555 storage2->Set(DEFAULTS, "bar", value2); |
553 storage3->Set("foo", value1); | 556 storage3->Set(DEFAULTS, "foo", value1); |
554 storage4->Set("bar", value2); | 557 storage4->Set(DEFAULTS, "bar", value2); |
555 | 558 |
556 sync_.ClearChanges(); | 559 sync_.ClearChanges(); |
557 storage1->Clear(); | 560 storage1->Clear(DEFAULTS); |
558 storage2->Clear(); | 561 storage2->Clear(DEFAULTS); |
559 storage3->Clear(); | 562 storage3->Clear(DEFAULTS); |
560 storage4->Clear(); | 563 storage4->Clear(DEFAULTS); |
561 | 564 |
562 ASSERT_EQ( | 565 ASSERT_EQ( |
563 SyncChange::ACTION_DELETE, | 566 SyncChange::ACTION_DELETE, |
564 sync_.GetOnlyChange("s1", "foo").change_type()); | 567 sync_.GetOnlyChange("s1", "foo").change_type()); |
565 ASSERT_EQ( | 568 ASSERT_EQ( |
566 SyncChange::ACTION_DELETE, | 569 SyncChange::ACTION_DELETE, |
567 sync_.GetOnlyChange("s1", "bar").change_type()); | 570 sync_.GetOnlyChange("s1", "bar").change_type()); |
568 ASSERT_EQ( | 571 ASSERT_EQ( |
569 SyncChange::ACTION_DELETE, | 572 SyncChange::ACTION_DELETE, |
570 sync_.GetOnlyChange("s2", "foo").change_type()); | 573 sync_.GetOnlyChange("s2", "foo").change_type()); |
(...skipping 20 matching lines...) Expand all Loading... | |
591 StringValue value1("fooValue"); | 594 StringValue value1("fooValue"); |
592 ListValue value2; | 595 ListValue value2; |
593 value2.Append(StringValue::CreateStringValue("barValue")); | 596 value2.Append(StringValue::CreateStringValue("barValue")); |
594 | 597 |
595 // storage1 is an extension, storage2 is an app. | 598 // storage1 is an extension, storage2 is an app. |
596 SettingsStorage* storage1 = AddExtensionAndGetStorage( | 599 SettingsStorage* storage1 = AddExtensionAndGetStorage( |
597 "s1", Extension::TYPE_EXTENSION); | 600 "s1", Extension::TYPE_EXTENSION); |
598 SettingsStorage* storage2 = AddExtensionAndGetStorage( | 601 SettingsStorage* storage2 = AddExtensionAndGetStorage( |
599 "s2", Extension::TYPE_PACKAGED_APP); | 602 "s2", Extension::TYPE_PACKAGED_APP); |
600 | 603 |
601 storage1->Set("foo", value1); | 604 storage1->Set(DEFAULTS, "foo", value1); |
602 storage2->Set("bar", value2); | 605 storage2->Set(DEFAULTS, "bar", value2); |
603 | 606 |
604 std::map<std::string, SettingSyncDataList> extension_sync_data = | 607 std::map<std::string, SettingSyncDataList> extension_sync_data = |
605 GetAllSyncData(syncable::EXTENSION_SETTINGS); | 608 GetAllSyncData(syncable::EXTENSION_SETTINGS); |
606 ASSERT_EQ(1u, extension_sync_data.size()); | 609 ASSERT_EQ(1u, extension_sync_data.size()); |
607 ASSERT_EQ(1u, extension_sync_data["s1"].size()); | 610 ASSERT_EQ(1u, extension_sync_data["s1"].size()); |
608 ASSERT_PRED_FORMAT2(ValuesEq, &value1, &extension_sync_data["s1"][0].value()); | 611 ASSERT_PRED_FORMAT2(ValuesEq, &value1, &extension_sync_data["s1"][0].value()); |
609 | 612 |
610 std::map<std::string, SettingSyncDataList> app_sync_data = | 613 std::map<std::string, SettingSyncDataList> app_sync_data = |
611 GetAllSyncData(syncable::APP_SETTINGS); | 614 GetAllSyncData(syncable::APP_SETTINGS); |
612 ASSERT_EQ(1u, app_sync_data.size()); | 615 ASSERT_EQ(1u, app_sync_data.size()); |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
670 dict.Set("foo", fooValue.DeepCopy()); | 673 dict.Set("foo", fooValue.DeepCopy()); |
671 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); | 674 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
672 } | 675 } |
673 { | 676 { |
674 DictionaryValue dict; | 677 DictionaryValue dict; |
675 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); | 678 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); |
676 } | 679 } |
677 | 680 |
678 // Changes made to good should be sent to sync, changes from bad shouldn't. | 681 // Changes made to good should be sent to sync, changes from bad shouldn't. |
679 sync_.ClearChanges(); | 682 sync_.ClearChanges(); |
680 good->Set("bar", barValue); | 683 good->Set(DEFAULTS, "bar", barValue); |
681 bad->Set("bar", barValue); | 684 bad->Set(DEFAULTS, "bar", barValue); |
682 | 685 |
683 EXPECT_EQ( | 686 EXPECT_EQ( |
684 SyncChange::ACTION_ADD, | 687 SyncChange::ACTION_ADD, |
685 sync_.GetOnlyChange("good", "bar").change_type()); | 688 sync_.GetOnlyChange("good", "bar").change_type()); |
686 EXPECT_EQ(1u, sync_.changes().size()); | 689 EXPECT_EQ(1u, sync_.changes().size()); |
687 | 690 |
688 { | 691 { |
689 DictionaryValue dict; | 692 DictionaryValue dict; |
690 dict.Set("foo", fooValue.DeepCopy()); | 693 dict.Set("foo", fooValue.DeepCopy()); |
691 dict.Set("bar", barValue.DeepCopy()); | 694 dict.Set("bar", barValue.DeepCopy()); |
(...skipping 26 matching lines...) Expand all Loading... | |
718 } | 721 } |
719 { | 722 { |
720 DictionaryValue dict; | 723 DictionaryValue dict; |
721 dict.Set("bar", barValue.DeepCopy()); | 724 dict.Set("bar", barValue.DeepCopy()); |
722 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); | 725 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); |
723 } | 726 } |
724 | 727 |
725 // Changes made to bad still shouldn't go to sync, even though it didn't fail | 728 // Changes made to bad still shouldn't go to sync, even though it didn't fail |
726 // last time. | 729 // last time. |
727 sync_.ClearChanges(); | 730 sync_.ClearChanges(); |
728 good->Set("bar", fooValue); | 731 good->Set(DEFAULTS, "bar", fooValue); |
729 bad->Set("bar", fooValue); | 732 bad->Set(DEFAULTS, "bar", fooValue); |
730 | 733 |
731 EXPECT_EQ( | 734 EXPECT_EQ( |
732 SyncChange::ACTION_UPDATE, | 735 SyncChange::ACTION_UPDATE, |
733 sync_.GetOnlyChange("good", "bar").change_type()); | 736 sync_.GetOnlyChange("good", "bar").change_type()); |
734 EXPECT_EQ(1u, sync_.changes().size()); | 737 EXPECT_EQ(1u, sync_.changes().size()); |
735 | 738 |
736 { | 739 { |
737 DictionaryValue dict; | 740 DictionaryValue dict; |
738 dict.Set("foo", barValue.DeepCopy()); | 741 dict.Set("foo", barValue.DeepCopy()); |
739 dict.Set("bar", fooValue.DeepCopy()); | 742 dict.Set("bar", fooValue.DeepCopy()); |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
784 EXPECT_EQ( | 787 EXPECT_EQ( |
785 SyncChange::ACTION_ADD, | 788 SyncChange::ACTION_ADD, |
786 sync_.GetOnlyChange("good", "bar").change_type()); | 789 sync_.GetOnlyChange("good", "bar").change_type()); |
787 EXPECT_EQ( | 790 EXPECT_EQ( |
788 SyncChange::ACTION_ADD, | 791 SyncChange::ACTION_ADD, |
789 sync_.GetOnlyChange("bad", "bar").change_type()); | 792 sync_.GetOnlyChange("bad", "bar").change_type()); |
790 EXPECT_EQ(3u, sync_.changes().size()); | 793 EXPECT_EQ(3u, sync_.changes().size()); |
791 | 794 |
792 // Live local changes now get pushed, too. | 795 // Live local changes now get pushed, too. |
793 sync_.ClearChanges(); | 796 sync_.ClearChanges(); |
794 good->Set("bar", barValue); | 797 good->Set(DEFAULTS, "bar", barValue); |
795 bad->Set("bar", barValue); | 798 bad->Set(DEFAULTS, "bar", barValue); |
796 | 799 |
797 EXPECT_EQ( | 800 EXPECT_EQ( |
798 SyncChange::ACTION_UPDATE, | 801 SyncChange::ACTION_UPDATE, |
799 sync_.GetOnlyChange("good", "bar").change_type()); | 802 sync_.GetOnlyChange("good", "bar").change_type()); |
800 EXPECT_EQ( | 803 EXPECT_EQ( |
801 SyncChange::ACTION_UPDATE, | 804 SyncChange::ACTION_UPDATE, |
802 sync_.GetOnlyChange("bad", "bar").change_type()); | 805 sync_.GetOnlyChange("bad", "bar").change_type()); |
803 EXPECT_EQ(2u, sync_.changes().size()); | 806 EXPECT_EQ(2u, sync_.changes().size()); |
804 | 807 |
805 // And ProcessSyncChanges work, too. | 808 // And ProcessSyncChanges work, too. |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
884 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); | 887 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
885 } | 888 } |
886 { | 889 { |
887 DictionaryValue dict; | 890 DictionaryValue dict; |
888 dict.Set("foo", fooValue.DeepCopy()); | 891 dict.Set("foo", fooValue.DeepCopy()); |
889 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); | 892 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); |
890 } | 893 } |
891 | 894 |
892 // No more changes sent to sync for bad. | 895 // No more changes sent to sync for bad. |
893 sync_.ClearChanges(); | 896 sync_.ClearChanges(); |
894 good->Set("foo", barValue); | 897 good->Set(DEFAULTS, "foo", barValue); |
895 bad->Set("foo", barValue); | 898 bad->Set(DEFAULTS, "foo", barValue); |
896 | 899 |
897 EXPECT_EQ( | 900 EXPECT_EQ( |
898 SyncChange::ACTION_UPDATE, | 901 SyncChange::ACTION_UPDATE, |
899 sync_.GetOnlyChange("good", "foo").change_type()); | 902 sync_.GetOnlyChange("good", "foo").change_type()); |
900 EXPECT_EQ(1u, sync_.changes().size()); | 903 EXPECT_EQ(1u, sync_.changes().size()); |
901 | 904 |
902 // No more changes received from sync should go to bad. | 905 // No more changes received from sync should go to bad. |
903 { | 906 { |
904 SyncChangeList change_list; | 907 SyncChangeList change_list; |
905 change_list.push_back( | 908 change_list.push_back( |
(...skipping 23 matching lines...) Expand all Loading... | |
929 StringValue fooValue("fooValue"); | 932 StringValue fooValue("fooValue"); |
930 StringValue barValue("barValue"); | 933 StringValue barValue("barValue"); |
931 | 934 |
932 TestingSettingsStorageFactory* testing_factory = | 935 TestingSettingsStorageFactory* testing_factory = |
933 new TestingSettingsStorageFactory(); | 936 new TestingSettingsStorageFactory(); |
934 storage_factory_->Reset(testing_factory); | 937 storage_factory_->Reset(testing_factory); |
935 | 938 |
936 SettingsStorage* good = AddExtensionAndGetStorage("good", type); | 939 SettingsStorage* good = AddExtensionAndGetStorage("good", type); |
937 SettingsStorage* bad = AddExtensionAndGetStorage("bad", type); | 940 SettingsStorage* bad = AddExtensionAndGetStorage("bad", type); |
938 | 941 |
939 good->Set("foo", fooValue); | 942 good->Set(DEFAULTS, "foo", fooValue); |
940 bad->Set("foo", fooValue); | 943 bad->Set(DEFAULTS, "foo", fooValue); |
941 | 944 |
942 // Even though bad will fail to get all sync data, sync data should still | 945 // Even though bad will fail to get all sync data, sync data should still |
943 // include that from good. | 946 // include that from good. |
944 testing_factory->GetExisting("bad")->SetFailAllRequests(true); | 947 testing_factory->GetExisting("bad")->SetFailAllRequests(true); |
945 { | 948 { |
946 SyncDataList all_sync_data = | 949 SyncDataList all_sync_data = |
947 GetSyncableService(model_type)->GetAllSyncData(model_type); | 950 GetSyncableService(model_type)->GetAllSyncData(model_type); |
948 EXPECT_EQ(1u, all_sync_data.size()); | 951 EXPECT_EQ(1u, all_sync_data.size()); |
949 EXPECT_EQ("good/foo", all_sync_data[0].GetTag()); | 952 EXPECT_EQ("good/foo", all_sync_data[0].GetTag()); |
950 } | 953 } |
951 testing_factory->GetExisting("bad")->SetFailAllRequests(false); | 954 testing_factory->GetExisting("bad")->SetFailAllRequests(false); |
952 | 955 |
953 // Sync shouldn't be disabled for good (nor bad -- but this is unimportant). | 956 // Sync shouldn't be disabled for good (nor bad -- but this is unimportant). |
954 GetSyncableService(model_type)->MergeDataAndStartSyncing( | 957 GetSyncableService(model_type)->MergeDataAndStartSyncing( |
955 model_type, SyncDataList(), &sync_); | 958 model_type, SyncDataList(), &sync_); |
956 | 959 |
957 EXPECT_EQ( | 960 EXPECT_EQ( |
958 SyncChange::ACTION_ADD, | 961 SyncChange::ACTION_ADD, |
959 sync_.GetOnlyChange("good", "foo").change_type()); | 962 sync_.GetOnlyChange("good", "foo").change_type()); |
960 EXPECT_EQ( | 963 EXPECT_EQ( |
961 SyncChange::ACTION_ADD, | 964 SyncChange::ACTION_ADD, |
962 sync_.GetOnlyChange("bad", "foo").change_type()); | 965 sync_.GetOnlyChange("bad", "foo").change_type()); |
963 EXPECT_EQ(2u, sync_.changes().size()); | 966 EXPECT_EQ(2u, sync_.changes().size()); |
964 | 967 |
965 sync_.ClearChanges(); | 968 sync_.ClearChanges(); |
966 good->Set("bar", barValue); | 969 good->Set(DEFAULTS, "bar", barValue); |
967 bad->Set("bar", barValue); | 970 bad->Set(DEFAULTS, "bar", barValue); |
968 | 971 |
969 EXPECT_EQ( | 972 EXPECT_EQ( |
970 SyncChange::ACTION_ADD, | 973 SyncChange::ACTION_ADD, |
971 sync_.GetOnlyChange("good", "bar").change_type()); | 974 sync_.GetOnlyChange("good", "bar").change_type()); |
972 EXPECT_EQ( | 975 EXPECT_EQ( |
973 SyncChange::ACTION_ADD, | 976 SyncChange::ACTION_ADD, |
974 sync_.GetOnlyChange("bad", "bar").change_type()); | 977 sync_.GetOnlyChange("bad", "bar").change_type()); |
975 EXPECT_EQ(2u, sync_.changes().size()); | 978 EXPECT_EQ(2u, sync_.changes().size()); |
976 } | 979 } |
977 | 980 |
978 TEST_F(ExtensionSettingsSyncTest, FailureToReadChangesToPushDisablesSync) { | 981 TEST_F(ExtensionSettingsSyncTest, FailureToReadChangesToPushDisablesSync) { |
979 syncable::ModelType model_type = syncable::APP_SETTINGS; | 982 syncable::ModelType model_type = syncable::APP_SETTINGS; |
980 Extension::Type type = Extension::TYPE_PACKAGED_APP; | 983 Extension::Type type = Extension::TYPE_PACKAGED_APP; |
981 | 984 |
982 StringValue fooValue("fooValue"); | 985 StringValue fooValue("fooValue"); |
983 StringValue barValue("barValue"); | 986 StringValue barValue("barValue"); |
984 | 987 |
985 TestingSettingsStorageFactory* testing_factory = | 988 TestingSettingsStorageFactory* testing_factory = |
986 new TestingSettingsStorageFactory(); | 989 new TestingSettingsStorageFactory(); |
987 storage_factory_->Reset(testing_factory); | 990 storage_factory_->Reset(testing_factory); |
988 | 991 |
989 SettingsStorage* good = AddExtensionAndGetStorage("good", type); | 992 SettingsStorage* good = AddExtensionAndGetStorage("good", type); |
990 SettingsStorage* bad = AddExtensionAndGetStorage("bad", type); | 993 SettingsStorage* bad = AddExtensionAndGetStorage("bad", type); |
991 | 994 |
992 good->Set("foo", fooValue); | 995 good->Set(DEFAULTS, "foo", fooValue); |
993 bad->Set("foo", fooValue); | 996 bad->Set(DEFAULTS, "foo", fooValue); |
994 | 997 |
995 // good will successfully push foo:fooValue to sync, but bad will fail to | 998 // good will successfully push foo:fooValue to sync, but bad will fail to |
996 // get them so won't. | 999 // get them so won't. |
997 testing_factory->GetExisting("bad")->SetFailAllRequests(true); | 1000 testing_factory->GetExisting("bad")->SetFailAllRequests(true); |
998 GetSyncableService(model_type)->MergeDataAndStartSyncing( | 1001 GetSyncableService(model_type)->MergeDataAndStartSyncing( |
999 model_type, SyncDataList(), &sync_); | 1002 model_type, SyncDataList(), &sync_); |
1000 testing_factory->GetExisting("bad")->SetFailAllRequests(false); | 1003 testing_factory->GetExisting("bad")->SetFailAllRequests(false); |
1001 | 1004 |
1002 EXPECT_EQ( | 1005 EXPECT_EQ( |
1003 SyncChange::ACTION_ADD, | 1006 SyncChange::ACTION_ADD, |
1004 sync_.GetOnlyChange("good", "foo").change_type()); | 1007 sync_.GetOnlyChange("good", "foo").change_type()); |
1005 EXPECT_EQ(1u, sync_.changes().size()); | 1008 EXPECT_EQ(1u, sync_.changes().size()); |
1006 | 1009 |
1007 // bad should now be disabled for sync. | 1010 // bad should now be disabled for sync. |
1008 sync_.ClearChanges(); | 1011 sync_.ClearChanges(); |
1009 good->Set("bar", barValue); | 1012 good->Set(DEFAULTS, "bar", barValue); |
1010 bad->Set("bar", barValue); | 1013 bad->Set(DEFAULTS, "bar", barValue); |
1011 | 1014 |
1012 EXPECT_EQ( | 1015 EXPECT_EQ( |
1013 SyncChange::ACTION_ADD, | 1016 SyncChange::ACTION_ADD, |
1014 sync_.GetOnlyChange("good", "bar").change_type()); | 1017 sync_.GetOnlyChange("good", "bar").change_type()); |
1015 EXPECT_EQ(1u, sync_.changes().size()); | 1018 EXPECT_EQ(1u, sync_.changes().size()); |
1016 | 1019 |
1017 { | 1020 { |
1018 SyncChangeList change_list; | 1021 SyncChangeList change_list; |
1019 change_list.push_back( | 1022 change_list.push_back( |
1020 settings_sync_util::CreateUpdate("good", "foo", barValue)); | 1023 settings_sync_util::CreateUpdate("good", "foo", barValue)); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1053 sync_.GetOnlyChange("good", "bar").change_type()); | 1056 sync_.GetOnlyChange("good", "bar").change_type()); |
1054 EXPECT_EQ( | 1057 EXPECT_EQ( |
1055 SyncChange::ACTION_ADD, | 1058 SyncChange::ACTION_ADD, |
1056 sync_.GetOnlyChange("bad", "foo").change_type()); | 1059 sync_.GetOnlyChange("bad", "foo").change_type()); |
1057 EXPECT_EQ( | 1060 EXPECT_EQ( |
1058 SyncChange::ACTION_ADD, | 1061 SyncChange::ACTION_ADD, |
1059 sync_.GetOnlyChange("bad", "bar").change_type()); | 1062 sync_.GetOnlyChange("bad", "bar").change_type()); |
1060 EXPECT_EQ(4u, sync_.changes().size()); | 1063 EXPECT_EQ(4u, sync_.changes().size()); |
1061 | 1064 |
1062 sync_.ClearChanges(); | 1065 sync_.ClearChanges(); |
1063 good->Set("bar", fooValue); | 1066 good->Set(DEFAULTS, "bar", fooValue); |
1064 bad->Set("bar", fooValue); | 1067 bad->Set(DEFAULTS, "bar", fooValue); |
1065 | 1068 |
1066 EXPECT_EQ( | 1069 EXPECT_EQ( |
1067 SyncChange::ACTION_UPDATE, | 1070 SyncChange::ACTION_UPDATE, |
1068 sync_.GetOnlyChange("good", "bar").change_type()); | 1071 sync_.GetOnlyChange("good", "bar").change_type()); |
1069 EXPECT_EQ( | 1072 EXPECT_EQ( |
1070 SyncChange::ACTION_UPDATE, | 1073 SyncChange::ACTION_UPDATE, |
1071 sync_.GetOnlyChange("good", "bar").change_type()); | 1074 sync_.GetOnlyChange("good", "bar").change_type()); |
1072 EXPECT_EQ(2u, sync_.changes().size()); | 1075 EXPECT_EQ(2u, sync_.changes().size()); |
1073 } | 1076 } |
1074 | 1077 |
1075 TEST_F(ExtensionSettingsSyncTest, FailureToPushLocalStateDisablesSync) { | 1078 TEST_F(ExtensionSettingsSyncTest, FailureToPushLocalStateDisablesSync) { |
1076 syncable::ModelType model_type = syncable::EXTENSION_SETTINGS; | 1079 syncable::ModelType model_type = syncable::EXTENSION_SETTINGS; |
1077 Extension::Type type = Extension::TYPE_EXTENSION; | 1080 Extension::Type type = Extension::TYPE_EXTENSION; |
1078 | 1081 |
1079 StringValue fooValue("fooValue"); | 1082 StringValue fooValue("fooValue"); |
1080 StringValue barValue("barValue"); | 1083 StringValue barValue("barValue"); |
1081 | 1084 |
1082 TestingSettingsStorageFactory* testing_factory = | 1085 TestingSettingsStorageFactory* testing_factory = |
1083 new TestingSettingsStorageFactory(); | 1086 new TestingSettingsStorageFactory(); |
1084 storage_factory_->Reset(testing_factory); | 1087 storage_factory_->Reset(testing_factory); |
1085 | 1088 |
1086 SettingsStorage* good = AddExtensionAndGetStorage("good", type); | 1089 SettingsStorage* good = AddExtensionAndGetStorage("good", type); |
1087 SettingsStorage* bad = AddExtensionAndGetStorage("bad", type); | 1090 SettingsStorage* bad = AddExtensionAndGetStorage("bad", type); |
1088 | 1091 |
1089 // Only set bad; setting good will cause it to fail below. | 1092 // Only set bad; setting good will cause it to fail below. |
1090 bad->Set("foo", fooValue); | 1093 bad->Set(DEFAULTS, "foo", fooValue); |
1091 | 1094 |
1092 sync_.SetFailAllRequests(true); | 1095 sync_.SetFailAllRequests(true); |
1093 GetSyncableService(model_type)->MergeDataAndStartSyncing( | 1096 GetSyncableService(model_type)->MergeDataAndStartSyncing( |
1094 model_type, SyncDataList(), &sync_); | 1097 model_type, SyncDataList(), &sync_); |
1095 sync_.SetFailAllRequests(false); | 1098 sync_.SetFailAllRequests(false); |
1096 | 1099 |
1097 // Changes from good will be send to sync, changes from bad won't. | 1100 // Changes from good will be send to sync, changes from bad won't. |
1098 sync_.ClearChanges(); | 1101 sync_.ClearChanges(); |
1099 good->Set("foo", barValue); | 1102 good->Set(DEFAULTS, "foo", barValue); |
1100 bad->Set("foo", barValue); | 1103 bad->Set(DEFAULTS, "foo", barValue); |
1101 | 1104 |
1102 EXPECT_EQ( | 1105 EXPECT_EQ( |
1103 SyncChange::ACTION_ADD, | 1106 SyncChange::ACTION_ADD, |
1104 sync_.GetOnlyChange("good", "foo").change_type()); | 1107 sync_.GetOnlyChange("good", "foo").change_type()); |
1105 EXPECT_EQ(1u, sync_.changes().size()); | 1108 EXPECT_EQ(1u, sync_.changes().size()); |
1106 | 1109 |
1107 // Changes from sync will be sent to good, not to bad. | 1110 // Changes from sync will be sent to good, not to bad. |
1108 { | 1111 { |
1109 SyncChangeList change_list; | 1112 SyncChangeList change_list; |
1110 change_list.push_back( | 1113 change_list.push_back( |
(...skipping 26 matching lines...) Expand all Loading... | |
1137 sync_.GetOnlyChange("good", "foo").change_type()); | 1140 sync_.GetOnlyChange("good", "foo").change_type()); |
1138 EXPECT_EQ( | 1141 EXPECT_EQ( |
1139 SyncChange::ACTION_ADD, | 1142 SyncChange::ACTION_ADD, |
1140 sync_.GetOnlyChange("good", "bar").change_type()); | 1143 sync_.GetOnlyChange("good", "bar").change_type()); |
1141 EXPECT_EQ( | 1144 EXPECT_EQ( |
1142 SyncChange::ACTION_ADD, | 1145 SyncChange::ACTION_ADD, |
1143 sync_.GetOnlyChange("bad", "foo").change_type()); | 1146 sync_.GetOnlyChange("bad", "foo").change_type()); |
1144 EXPECT_EQ(3u, sync_.changes().size()); | 1147 EXPECT_EQ(3u, sync_.changes().size()); |
1145 | 1148 |
1146 sync_.ClearChanges(); | 1149 sync_.ClearChanges(); |
1147 good->Set("foo", fooValue); | 1150 good->Set(DEFAULTS, "foo", fooValue); |
1148 bad->Set("foo", fooValue); | 1151 bad->Set(DEFAULTS, "foo", fooValue); |
1149 | 1152 |
1150 EXPECT_EQ( | 1153 EXPECT_EQ( |
1151 SyncChange::ACTION_UPDATE, | 1154 SyncChange::ACTION_UPDATE, |
1152 sync_.GetOnlyChange("good", "foo").change_type()); | 1155 sync_.GetOnlyChange("good", "foo").change_type()); |
1153 EXPECT_EQ( | 1156 EXPECT_EQ( |
1154 SyncChange::ACTION_UPDATE, | 1157 SyncChange::ACTION_UPDATE, |
1155 sync_.GetOnlyChange("good", "foo").change_type()); | 1158 sync_.GetOnlyChange("good", "foo").change_type()); |
1156 EXPECT_EQ(2u, sync_.changes().size()); | 1159 EXPECT_EQ(2u, sync_.changes().size()); |
1157 } | 1160 } |
1158 | 1161 |
1159 TEST_F(ExtensionSettingsSyncTest, FailureToPushLocalChangeDisablesSync) { | 1162 TEST_F(ExtensionSettingsSyncTest, FailureToPushLocalChangeDisablesSync) { |
1160 syncable::ModelType model_type = syncable::EXTENSION_SETTINGS; | 1163 syncable::ModelType model_type = syncable::EXTENSION_SETTINGS; |
1161 Extension::Type type = Extension::TYPE_EXTENSION; | 1164 Extension::Type type = Extension::TYPE_EXTENSION; |
1162 | 1165 |
1163 StringValue fooValue("fooValue"); | 1166 StringValue fooValue("fooValue"); |
1164 StringValue barValue("barValue"); | 1167 StringValue barValue("barValue"); |
1165 | 1168 |
1166 TestingSettingsStorageFactory* testing_factory = | 1169 TestingSettingsStorageFactory* testing_factory = |
1167 new TestingSettingsStorageFactory(); | 1170 new TestingSettingsStorageFactory(); |
1168 storage_factory_->Reset(testing_factory); | 1171 storage_factory_->Reset(testing_factory); |
1169 | 1172 |
1170 SettingsStorage* good = AddExtensionAndGetStorage("good", type); | 1173 SettingsStorage* good = AddExtensionAndGetStorage("good", type); |
1171 SettingsStorage* bad = AddExtensionAndGetStorage("bad", type); | 1174 SettingsStorage* bad = AddExtensionAndGetStorage("bad", type); |
1172 | 1175 |
1173 GetSyncableService(model_type)->MergeDataAndStartSyncing( | 1176 GetSyncableService(model_type)->MergeDataAndStartSyncing( |
1174 model_type, SyncDataList(), &sync_); | 1177 model_type, SyncDataList(), &sync_); |
1175 | 1178 |
1176 // bad will fail to send changes. | 1179 // bad will fail to send changes. |
1177 good->Set("foo", fooValue); | 1180 good->Set(DEFAULTS, "foo", fooValue); |
1178 sync_.SetFailAllRequests(true); | 1181 sync_.SetFailAllRequests(true); |
1179 bad->Set("foo", fooValue); | 1182 bad->Set(DEFAULTS, "foo", fooValue); |
1180 sync_.SetFailAllRequests(false); | 1183 sync_.SetFailAllRequests(false); |
1181 | 1184 |
1182 EXPECT_EQ( | 1185 EXPECT_EQ( |
1183 SyncChange::ACTION_ADD, | 1186 SyncChange::ACTION_ADD, |
1184 sync_.GetOnlyChange("good", "foo").change_type()); | 1187 sync_.GetOnlyChange("good", "foo").change_type()); |
1185 EXPECT_EQ(1u, sync_.changes().size()); | 1188 EXPECT_EQ(1u, sync_.changes().size()); |
1186 | 1189 |
1187 // No further changes should be sent from bad. | 1190 // No further changes should be sent from bad. |
1188 sync_.ClearChanges(); | 1191 sync_.ClearChanges(); |
1189 good->Set("foo", barValue); | 1192 good->Set(DEFAULTS, "foo", barValue); |
1190 bad->Set("foo", barValue); | 1193 bad->Set(DEFAULTS, "foo", barValue); |
1191 | 1194 |
1192 EXPECT_EQ( | 1195 EXPECT_EQ( |
1193 SyncChange::ACTION_UPDATE, | 1196 SyncChange::ACTION_UPDATE, |
1194 sync_.GetOnlyChange("good", "foo").change_type()); | 1197 sync_.GetOnlyChange("good", "foo").change_type()); |
1195 EXPECT_EQ(1u, sync_.changes().size()); | 1198 EXPECT_EQ(1u, sync_.changes().size()); |
1196 | 1199 |
1197 // Changes from sync will be sent to good, not to bad. | 1200 // Changes from sync will be sent to good, not to bad. |
1198 { | 1201 { |
1199 SyncChangeList change_list; | 1202 SyncChangeList change_list; |
1200 change_list.push_back( | 1203 change_list.push_back( |
(...skipping 26 matching lines...) Expand all Loading... | |
1227 sync_.GetOnlyChange("good", "foo").change_type()); | 1230 sync_.GetOnlyChange("good", "foo").change_type()); |
1228 EXPECT_EQ( | 1231 EXPECT_EQ( |
1229 SyncChange::ACTION_ADD, | 1232 SyncChange::ACTION_ADD, |
1230 sync_.GetOnlyChange("good", "bar").change_type()); | 1233 sync_.GetOnlyChange("good", "bar").change_type()); |
1231 EXPECT_EQ( | 1234 EXPECT_EQ( |
1232 SyncChange::ACTION_ADD, | 1235 SyncChange::ACTION_ADD, |
1233 sync_.GetOnlyChange("bad", "foo").change_type()); | 1236 sync_.GetOnlyChange("bad", "foo").change_type()); |
1234 EXPECT_EQ(3u, sync_.changes().size()); | 1237 EXPECT_EQ(3u, sync_.changes().size()); |
1235 | 1238 |
1236 sync_.ClearChanges(); | 1239 sync_.ClearChanges(); |
1237 good->Set("foo", fooValue); | 1240 good->Set(DEFAULTS, "foo", fooValue); |
1238 bad->Set("foo", fooValue); | 1241 bad->Set(DEFAULTS, "foo", fooValue); |
1239 | 1242 |
1240 EXPECT_EQ( | 1243 EXPECT_EQ( |
1241 SyncChange::ACTION_UPDATE, | 1244 SyncChange::ACTION_UPDATE, |
1242 sync_.GetOnlyChange("good", "foo").change_type()); | 1245 sync_.GetOnlyChange("good", "foo").change_type()); |
1243 EXPECT_EQ( | 1246 EXPECT_EQ( |
1244 SyncChange::ACTION_UPDATE, | 1247 SyncChange::ACTION_UPDATE, |
1245 sync_.GetOnlyChange("good", "foo").change_type()); | 1248 sync_.GetOnlyChange("good", "foo").change_type()); |
1246 EXPECT_EQ(2u, sync_.changes().size()); | 1249 EXPECT_EQ(2u, sync_.changes().size()); |
1247 } | 1250 } |
1248 | 1251 |
1252 TEST_F(ExtensionSettingsSyncTest, | |
1253 LargeOutgoingChangeRejectedButIncomingAccepted) { | |
not at google - send to devlin
2011/11/17 07:02:53
Change #4: another test
| |
1254 syncable::ModelType model_type = syncable::APP_SETTINGS; | |
1255 Extension::Type type = Extension::TYPE_PACKAGED_APP; | |
1256 | |
1257 // This value should be larger than the limit in settings_backend.cc. | |
1258 std::string string_5k; | |
1259 for (size_t i = 0; i < 5000; ++i) { | |
1260 string_5k.append("a"); | |
1261 } | |
1262 StringValue large_value(string_5k); | |
1263 | |
1264 GetSyncableService(model_type)->MergeDataAndStartSyncing( | |
1265 model_type, SyncDataList(), &sync_); | |
1266 | |
1267 // Large local change rejected and doesn't get sent out. | |
1268 SettingsStorage* storage1 = AddExtensionAndGetStorage("s1", type); | |
1269 EXPECT_TRUE(storage1->Set(DEFAULTS, "large_value", large_value).HasError()); | |
1270 EXPECT_EQ(0u, sync_.changes().size()); | |
1271 | |
1272 // Large incoming change should still get accepted. | |
1273 SettingsStorage* storage2 = AddExtensionAndGetStorage("s2", type); | |
1274 { | |
1275 SyncChangeList change_list; | |
1276 change_list.push_back( | |
1277 settings_sync_util::CreateAdd("s1", "large_value", large_value)); | |
1278 change_list.push_back( | |
1279 settings_sync_util::CreateAdd("s2", "large_value", large_value)); | |
1280 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); | |
1281 } | |
1282 { | |
1283 DictionaryValue expected; | |
1284 expected.Set("large_value", large_value.DeepCopy()); | |
1285 EXPECT_PRED_FORMAT2(SettingsEq, expected, storage1->Get()); | |
1286 EXPECT_PRED_FORMAT2(SettingsEq, expected, storage2->Get()); | |
1287 } | |
1288 | |
1289 GetSyncableService(model_type)->StopSyncing(model_type); | |
1290 } | |
1291 | |
1249 } // namespace extensions | 1292 } // namespace extensions |
OLD | NEW |