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

Side by Side Diff: components/sync_driver/device_info_service_unittest.cc

Issue 1888923003: [Sync] DeviceInfoService should format ClientTag in backwards compatible way (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address Sky's and Max's comments. Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « components/sync_driver/device_info_service.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/sync_driver/device_info_service.h" 5 #include "components/sync_driver/device_info_service.h"
6 6
7 #include <map> 7 #include <map>
8 #include <set> 8 #include <set>
9 #include <string> 9 #include <string>
10 #include <utility> 10 #include <utility>
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 EntityData data; 106 EntityData data;
107 // These tests do not care about the tag hash, but EntityData and friends 107 // These tests do not care about the tag hash, but EntityData and friends
108 // cannot differentiate between the default EntityData object if the hash 108 // cannot differentiate between the default EntityData object if the hash
109 // is unset, which causes pass/copy operations to no-op and things start to 109 // is unset, which causes pass/copy operations to no-op and things start to
110 // break, so we throw in a junk value and forget about it. 110 // break, so we throw in a junk value and forget about it.
111 data.client_tag_hash = "junk"; 111 data.client_tag_hash = "junk";
112 *data.specifics.mutable_device_info() = specifics; 112 *data.specifics.mutable_device_info() = specifics;
113 return data.PassToPtr(); 113 return data.PassToPtr();
114 } 114 }
115 115
116 std::string CacheGuidToTag(const std::string& guid) {
117 return "DeviceInfo_" + guid;
118 }
119
116 // Instead of actually processing anything, simply accumulates all instructions 120 // Instead of actually processing anything, simply accumulates all instructions
117 // in members that can then be accessed. TODO(skym): If this ends up being 121 // in members that can then be accessed. TODO(skym): If this ends up being
118 // useful for other model type unittests it should be moved out to a shared 122 // useful for other model type unittests it should be moved out to a shared
119 // location. 123 // location.
120 class RecordingModelTypeChangeProcessor 124 class RecordingModelTypeChangeProcessor
121 : public syncer_v2::FakeModelTypeChangeProcessor { 125 : public syncer_v2::FakeModelTypeChangeProcessor {
122 public: 126 public:
123 RecordingModelTypeChangeProcessor() {} 127 RecordingModelTypeChangeProcessor() {}
124 ~RecordingModelTypeChangeProcessor() override {} 128 ~RecordingModelTypeChangeProcessor() override {}
125 129
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after
356 local_device()->GetLocalDeviceInfo()->Equals(*all_device_info[0])); 360 local_device()->GetLocalDeviceInfo()->Equals(*all_device_info[0]));
357 } 361 }
358 362
359 TEST_F(DeviceInfoServiceTest, GetClientTagNormal) { 363 TEST_F(DeviceInfoServiceTest, GetClientTagNormal) {
360 InitializeService(); 364 InitializeService();
361 const std::string guid = "abc"; 365 const std::string guid = "abc";
362 EntitySpecifics entity_specifics; 366 EntitySpecifics entity_specifics;
363 entity_specifics.mutable_device_info()->set_cache_guid(guid); 367 entity_specifics.mutable_device_info()->set_cache_guid(guid);
364 EntityData entity_data; 368 EntityData entity_data;
365 entity_data.specifics = entity_specifics; 369 entity_data.specifics = entity_specifics;
366 EXPECT_EQ(guid, service()->GetClientTag(entity_data)); 370 EXPECT_EQ(CacheGuidToTag(guid), service()->GetClientTag(entity_data));
367 } 371 }
368 372
369 TEST_F(DeviceInfoServiceTest, GetClientTagEmpty) { 373 TEST_F(DeviceInfoServiceTest, GetClientTagEmpty) {
370 InitializeService(); 374 InitializeService();
371 EntitySpecifics entity_specifics; 375 EntitySpecifics entity_specifics;
372 entity_specifics.mutable_device_info(); 376 entity_specifics.mutable_device_info();
373 EntityData entity_data; 377 EntityData entity_data;
374 entity_data.specifics = entity_specifics; 378 entity_data.specifics = entity_specifics;
375 EXPECT_EQ("", service()->GetClientTag(entity_data)); 379 EXPECT_EQ(CacheGuidToTag(""), service()->GetClientTag(entity_data));
376 } 380 }
377 381
378 TEST_F(DeviceInfoServiceTest, TestWithLocalData) { 382 TEST_F(DeviceInfoServiceTest, TestWithLocalData) {
379 scoped_ptr<WriteBatch> batch = store()->CreateWriteBatch(); 383 scoped_ptr<WriteBatch> batch = store()->CreateWriteBatch();
380 DeviceInfoSpecifics specifics(GenerateTestSpecifics()); 384 DeviceInfoSpecifics specifics(GenerateTestSpecifics());
381 store()->WriteData(batch.get(), "tag", specifics.SerializeAsString()); 385 store()->WriteData(batch.get(), specifics.cache_guid(),
386 specifics.SerializeAsString());
382 store()->CommitWriteBatch(std::move(batch), 387 store()->CommitWriteBatch(std::move(batch),
383 base::Bind(&AssertResultIsSuccess)); 388 base::Bind(&AssertResultIsSuccess));
384 389
385 InitializeAndPump(); 390 InitializeAndPump();
386 391
387 ScopedVector<DeviceInfo> all_device_info(service()->GetAllDeviceInfo()); 392 ScopedVector<DeviceInfo> all_device_info(service()->GetAllDeviceInfo());
388 ASSERT_EQ(1u, all_device_info.size()); 393 ASSERT_EQ(1u, all_device_info.size());
389 AssertEqual(specifics, *all_device_info[0]); 394 AssertEqual(specifics, *all_device_info[0]);
390 AssertEqual(specifics, *service()->GetDeviceInfo("tag").get()); 395 AssertEqual(specifics,
396 *service()->GetDeviceInfo(specifics.cache_guid()).get());
391 } 397 }
392 398
393 TEST_F(DeviceInfoServiceTest, TestWithLocalMetadata) { 399 TEST_F(DeviceInfoServiceTest, TestWithLocalMetadata) {
394 scoped_ptr<WriteBatch> batch = store()->CreateWriteBatch(); 400 scoped_ptr<WriteBatch> batch = store()->CreateWriteBatch();
395 DataTypeState state; 401 DataTypeState state;
396 state.set_encryption_key_name("ekn"); 402 state.set_encryption_key_name("ekn");
397 store()->WriteGlobalMetadata(batch.get(), state.SerializeAsString()); 403 store()->WriteGlobalMetadata(batch.get(), state.SerializeAsString());
398 store()->CommitWriteBatch(std::move(batch), 404 store()->CommitWriteBatch(std::move(batch),
399 base::Bind(&AssertResultIsSuccess)); 405 base::Bind(&AssertResultIsSuccess));
400 InitializeAndPump(); 406 InitializeAndPump();
401 ScopedVector<DeviceInfo> all_device_info(service()->GetAllDeviceInfo()); 407 ScopedVector<DeviceInfo> all_device_info(service()->GetAllDeviceInfo());
402 ASSERT_EQ(1u, all_device_info.size()); 408 ASSERT_EQ(1u, all_device_info.size());
403 ASSERT_TRUE( 409 ASSERT_TRUE(
404 local_device()->GetLocalDeviceInfo()->Equals(*all_device_info[0])); 410 local_device()->GetLocalDeviceInfo()->Equals(*all_device_info[0]));
405 EXPECT_EQ(1u, processor()->put_map().size()); 411 EXPECT_EQ(1u, processor()->put_map().size());
406 } 412 }
407 413
408 TEST_F(DeviceInfoServiceTest, TestWithLocalDataAndMetadata) { 414 TEST_F(DeviceInfoServiceTest, TestWithLocalDataAndMetadata) {
409 scoped_ptr<WriteBatch> batch = store()->CreateWriteBatch(); 415 scoped_ptr<WriteBatch> batch = store()->CreateWriteBatch();
410 DeviceInfoSpecifics specifics(GenerateTestSpecifics()); 416 DeviceInfoSpecifics specifics(GenerateTestSpecifics());
411 store()->WriteData(batch.get(), "tag", specifics.SerializeAsString()); 417 store()->WriteData(batch.get(), specifics.cache_guid(),
418 specifics.SerializeAsString());
412 DataTypeState state; 419 DataTypeState state;
413 state.set_encryption_key_name("ekn"); 420 state.set_encryption_key_name("ekn");
414 store()->WriteGlobalMetadata(batch.get(), state.SerializeAsString()); 421 store()->WriteGlobalMetadata(batch.get(), state.SerializeAsString());
415 store()->CommitWriteBatch(std::move(batch), 422 store()->CommitWriteBatch(std::move(batch),
416 base::Bind(&AssertResultIsSuccess)); 423 base::Bind(&AssertResultIsSuccess));
417 424
418 InitializeAndPump(); 425 InitializeAndPump();
419 426
420 ScopedVector<DeviceInfo> all_device_info(service()->GetAllDeviceInfo()); 427 ScopedVector<DeviceInfo> all_device_info(service()->GetAllDeviceInfo());
421 ASSERT_EQ(2u, all_device_info.size()); 428 ASSERT_EQ(2u, all_device_info.size());
422 AssertEqual(specifics, *service()->GetDeviceInfo("tag").get()); 429 AssertEqual(specifics,
430 *service()->GetDeviceInfo(specifics.cache_guid()).get());
423 ASSERT_TRUE(processor()->metadata()); 431 ASSERT_TRUE(processor()->metadata());
424 ASSERT_EQ(state.encryption_key_name(), 432 ASSERT_EQ(state.encryption_key_name(),
425 processor()->metadata()->GetDataTypeState().encryption_key_name()); 433 processor()->metadata()->GetDataTypeState().encryption_key_name());
426 } 434 }
427 435
428 TEST_F(DeviceInfoServiceTest, GetData) { 436 TEST_F(DeviceInfoServiceTest, GetData) {
429 scoped_ptr<WriteBatch> batch = store()->CreateWriteBatch(); 437 scoped_ptr<WriteBatch> batch = store()->CreateWriteBatch();
430 DeviceInfoSpecifics specifics1(GenerateTestSpecifics()); 438 DeviceInfoSpecifics specifics1(GenerateTestSpecifics());
439 DeviceInfoSpecifics specifics2(GenerateTestSpecifics());
431 DeviceInfoSpecifics specifics3(GenerateTestSpecifics()); 440 DeviceInfoSpecifics specifics3(GenerateTestSpecifics());
432 store()->WriteData(batch.get(), "tag1", specifics1.SerializeAsString()); 441 store()->WriteData(batch.get(), specifics1.cache_guid(),
433 store()->WriteData(batch.get(), "tag2", 442 specifics1.SerializeAsString());
434 GenerateTestSpecifics().SerializeAsString()); 443 store()->WriteData(batch.get(), specifics2.cache_guid(),
435 store()->WriteData(batch.get(), "tag3", specifics3.SerializeAsString()); 444 specifics2.SerializeAsString());
445 store()->WriteData(batch.get(), specifics3.cache_guid(),
446 specifics3.SerializeAsString());
436 store()->CommitWriteBatch(std::move(batch), 447 store()->CommitWriteBatch(std::move(batch),
437 base::Bind(&AssertResultIsSuccess)); 448 base::Bind(&AssertResultIsSuccess));
438 449
439 InitializeAndPump(); 450 InitializeAndPump();
440 451
441 std::map<std::string, DeviceInfoSpecifics> expected; 452 std::map<std::string, DeviceInfoSpecifics> expected;
442 expected["tag1"] = specifics1; 453 expected[CacheGuidToTag(specifics1.cache_guid())] = specifics1;
443 expected["tag3"] = specifics3; 454 expected[CacheGuidToTag(specifics3.cache_guid())] = specifics3;
444 ClientTagList client_tags; 455 ClientTagList client_tags;
445 client_tags.push_back("tag1"); 456 client_tags.push_back(CacheGuidToTag(specifics1.cache_guid()));
446 client_tags.push_back("tag3"); 457 client_tags.push_back(CacheGuidToTag(specifics3.cache_guid()));
447 service()->GetData(client_tags, 458 service()->GetData(client_tags,
448 base::Bind(&AssertExpectedFromDataBatch, expected)); 459 base::Bind(&AssertExpectedFromDataBatch, expected));
449 } 460 }
450 461
451 TEST_F(DeviceInfoServiceTest, GetDataMissing) { 462 TEST_F(DeviceInfoServiceTest, GetDataMissing) {
452 InitializeAndPump(); 463 InitializeAndPump();
453 std::map<std::string, DeviceInfoSpecifics> expected; 464 std::map<std::string, DeviceInfoSpecifics> expected;
454 ClientTagList client_tags; 465 ClientTagList client_tags;
455 client_tags.push_back("tag1"); 466 client_tags.push_back(CacheGuidToTag("tag1"));
456 service()->GetData(client_tags, 467 service()->GetData(client_tags,
457 base::Bind(&AssertExpectedFromDataBatch, expected)); 468 base::Bind(&AssertExpectedFromDataBatch, expected));
458 } 469 }
459 470
460 TEST_F(DeviceInfoServiceTest, GetDataNotInitialized) { 471 TEST_F(DeviceInfoServiceTest, GetDataNotInitialized) {
461 InitializeService(); 472 InitializeService();
462 ClientTagList client_tags; 473 ClientTagList client_tags;
463 service()->GetData(client_tags, base::Bind(&AssertErrorFromDataBatch)); 474 service()->GetData(client_tags, base::Bind(&AssertErrorFromDataBatch));
464 } 475 }
465 476
466 TEST_F(DeviceInfoServiceTest, GetAllData) { 477 TEST_F(DeviceInfoServiceTest, GetAllData) {
467 scoped_ptr<WriteBatch> batch = store()->CreateWriteBatch(); 478 scoped_ptr<WriteBatch> batch = store()->CreateWriteBatch();
468 DeviceInfoSpecifics specifics1(GenerateTestSpecifics()); 479 DeviceInfoSpecifics specifics1(GenerateTestSpecifics());
469 DeviceInfoSpecifics specifics2(GenerateTestSpecifics()); 480 DeviceInfoSpecifics specifics2(GenerateTestSpecifics());
470 store()->WriteData(batch.get(), "tag1", specifics1.SerializeAsString()); 481 const std::string& tag1 = CacheGuidToTag(specifics1.cache_guid());
471 store()->WriteData(batch.get(), "tag2", specifics2.SerializeAsString()); 482 const std::string& tag2 = CacheGuidToTag(specifics2.cache_guid());
483 store()->WriteData(batch.get(), specifics1.cache_guid(),
484 specifics1.SerializeAsString());
485 store()->WriteData(batch.get(), specifics2.cache_guid(),
486 specifics2.SerializeAsString());
472 store()->CommitWriteBatch(std::move(batch), 487 store()->CommitWriteBatch(std::move(batch),
473 base::Bind(&AssertResultIsSuccess)); 488 base::Bind(&AssertResultIsSuccess));
474 489
475 InitializeAndPump(); 490 InitializeAndPump();
476 491
477 std::map<std::string, DeviceInfoSpecifics> expected; 492 std::map<std::string, DeviceInfoSpecifics> expected;
478 expected["tag1"] = specifics1; 493 expected[tag1] = specifics1;
479 expected["tag2"] = specifics2; 494 expected[tag2] = specifics2;
480 ClientTagList client_tags; 495 ClientTagList client_tags;
481 client_tags.push_back("tag1"); 496 client_tags.push_back(tag1);
482 client_tags.push_back("tag2"); 497 client_tags.push_back(tag2);
483 service()->GetData(client_tags, 498 service()->GetData(client_tags,
484 base::Bind(&AssertExpectedFromDataBatch, expected)); 499 base::Bind(&AssertExpectedFromDataBatch, expected));
485 } 500 }
486 501
487 TEST_F(DeviceInfoServiceTest, GetAllDataNotInitialized) { 502 TEST_F(DeviceInfoServiceTest, GetAllDataNotInitialized) {
488 InitializeService(); 503 InitializeService();
489 service()->GetAllData(base::Bind(&AssertErrorFromDataBatch)); 504 service()->GetAllData(base::Bind(&AssertErrorFromDataBatch));
490 } 505 }
491 506
492 TEST_F(DeviceInfoServiceTest, ApplySyncChangesBeforeInit) { 507 TEST_F(DeviceInfoServiceTest, ApplySyncChangesBeforeInit) {
(...skipping 15 matching lines...) Expand all
508 TEST_F(DeviceInfoServiceTest, ApplySyncChangesInMemory) { 523 TEST_F(DeviceInfoServiceTest, ApplySyncChangesInMemory) {
509 InitializeAndPump(); 524 InitializeAndPump();
510 525
511 DeviceInfoSpecifics specifics = GenerateTestSpecifics(); 526 DeviceInfoSpecifics specifics = GenerateTestSpecifics();
512 EntityChangeList add_changes; 527 EntityChangeList add_changes;
513 const std::string tag = PushBackEntityChangeAdd(specifics, &add_changes); 528 const std::string tag = PushBackEntityChangeAdd(specifics, &add_changes);
514 SyncError error = service()->ApplySyncChanges( 529 SyncError error = service()->ApplySyncChanges(
515 service()->CreateMetadataChangeList(), add_changes); 530 service()->CreateMetadataChangeList(), add_changes);
516 531
517 EXPECT_FALSE(error.IsSet()); 532 EXPECT_FALSE(error.IsSet());
518 scoped_ptr<DeviceInfo> info = service()->GetDeviceInfo(tag); 533 scoped_ptr<DeviceInfo> info =
534 service()->GetDeviceInfo(specifics.cache_guid());
519 ASSERT_TRUE(info); 535 ASSERT_TRUE(info);
520 AssertEqual(specifics, *info.get()); 536 AssertEqual(specifics, *info.get());
521 EXPECT_EQ(1, change_count()); 537 EXPECT_EQ(1, change_count());
522 538
523 EntityChangeList delete_changes; 539 EntityChangeList delete_changes;
524 delete_changes.push_back(EntityChange::CreateDelete(tag)); 540 delete_changes.push_back(EntityChange::CreateDelete(tag));
525 error = service()->ApplySyncChanges(service()->CreateMetadataChangeList(), 541 error = service()->ApplySyncChanges(service()->CreateMetadataChangeList(),
526 delete_changes); 542 delete_changes);
527 543
528 EXPECT_FALSE(error.IsSet()); 544 EXPECT_FALSE(error.IsSet());
529 EXPECT_FALSE(service()->GetDeviceInfo(tag)); 545 EXPECT_FALSE(service()->GetDeviceInfo(specifics.cache_guid()));
530 EXPECT_EQ(2, change_count()); 546 EXPECT_EQ(2, change_count());
531 } 547 }
532 548
533 TEST_F(DeviceInfoServiceTest, ApplySyncChangesStore) { 549 TEST_F(DeviceInfoServiceTest, ApplySyncChangesStore) {
534 InitializeAndPump(); 550 InitializeAndPump();
535 551
536 DeviceInfoSpecifics specifics = GenerateTestSpecifics(); 552 DeviceInfoSpecifics specifics = GenerateTestSpecifics();
537 EntityChangeList data_changes; 553 EntityChangeList data_changes;
538 const std::string tag = PushBackEntityChangeAdd(specifics, &data_changes); 554 const std::string tag = PushBackEntityChangeAdd(specifics, &data_changes);
539 DataTypeState state; 555 DataTypeState state;
540 state.set_encryption_key_name("ekn"); 556 state.set_encryption_key_name("ekn");
541 scoped_ptr<MetadataChangeList> metadata_changes( 557 scoped_ptr<MetadataChangeList> metadata_changes(
542 service()->CreateMetadataChangeList()); 558 service()->CreateMetadataChangeList());
543 metadata_changes->UpdateDataTypeState(state); 559 metadata_changes->UpdateDataTypeState(state);
544 560
545 const SyncError error = 561 const SyncError error =
546 service()->ApplySyncChanges(std::move(metadata_changes), data_changes); 562 service()->ApplySyncChanges(std::move(metadata_changes), data_changes);
547 EXPECT_FALSE(error.IsSet()); 563 EXPECT_FALSE(error.IsSet());
548 EXPECT_EQ(1, change_count()); 564 EXPECT_EQ(1, change_count());
549 565
550 PumpAndShutdown(); 566 PumpAndShutdown();
551 InitializeAndPump(); 567 InitializeAndPump();
552 568
553 scoped_ptr<DeviceInfo> info = service()->GetDeviceInfo(tag); 569 scoped_ptr<DeviceInfo> info =
570 service()->GetDeviceInfo(specifics.cache_guid());
554 ASSERT_TRUE(info); 571 ASSERT_TRUE(info);
555 AssertEqual(specifics, *info.get()); 572 AssertEqual(specifics, *info.get());
556 // TODO(skym): Uncomment once SimpleMetadataChangeList::TransferChanges is 573 // TODO(skym): Uncomment once SimpleMetadataChangeList::TransferChanges is
557 // implemented. 574 // implemented.
558 // EXPECT_TRUE(processor()->metadata()); 575 // EXPECT_TRUE(processor()->metadata());
559 // EXPECT_EQ(state.encryption_key_name(), 576 // EXPECT_EQ(state.encryption_key_name(),
560 // processor()->metadata()->GetDataTypeState().encryption_key_name()); 577 // processor()->metadata()->GetDataTypeState().encryption_key_name());
561 } 578 }
562 579
563 TEST_F(DeviceInfoServiceTest, ApplySyncChangesWithLocalGuid) { 580 TEST_F(DeviceInfoServiceTest, ApplySyncChangesWithLocalGuid) {
564 InitializeAndPumpAndStart(); 581 InitializeAndPumpAndStart();
565 582
566 // The point of this test is to try to apply remote changes that have the same 583 // The point of this test is to try to apply remote changes that have the same
567 // cache guid as the local device. The service should ignore these changes 584 // cache guid as the local device. The service should ignore these changes
568 // since only it should be performing writes on its data. 585 // since only it should be performing writes on its data.
569 DeviceInfoSpecifics specifics = 586 DeviceInfoSpecifics specifics =
570 GenerateTestSpecifics(local_device()->GetLocalDeviceInfo()->guid()); 587 GenerateTestSpecifics(local_device()->GetLocalDeviceInfo()->guid());
571 EntityChangeList change_list; 588 EntityChangeList change_list;
572 const std::string tag = PushBackEntityChangeAdd(specifics, &change_list); 589 const std::string tag = PushBackEntityChangeAdd(specifics, &change_list);
573 590
574 // Should have a single change from reconciliation. 591 // Should have a single change from reconciliation.
575 EXPECT_TRUE(service()->GetDeviceInfo(tag)); 592 EXPECT_TRUE(
593 service()->GetDeviceInfo(local_device()->GetLocalDeviceInfo()->guid()));
576 EXPECT_EQ(1, change_count()); 594 EXPECT_EQ(1, change_count());
577 595
578 EXPECT_FALSE( 596 EXPECT_FALSE(
579 service() 597 service()
580 ->ApplySyncChanges(service()->CreateMetadataChangeList(), change_list) 598 ->ApplySyncChanges(service()->CreateMetadataChangeList(), change_list)
581 .IsSet()); 599 .IsSet());
582 EXPECT_EQ(1, change_count()); 600 EXPECT_EQ(1, change_count());
583 601
584 change_list.clear(); 602 change_list.clear();
585 change_list.push_back(EntityChange::CreateDelete(tag)); 603 change_list.push_back(EntityChange::CreateDelete(tag));
586 EXPECT_FALSE( 604 EXPECT_FALSE(
587 service() 605 service()
588 ->ApplySyncChanges(service()->CreateMetadataChangeList(), change_list) 606 ->ApplySyncChanges(service()->CreateMetadataChangeList(), change_list)
589 .IsSet()); 607 .IsSet());
590 EXPECT_EQ(1, change_count()); 608 EXPECT_EQ(1, change_count());
591 } 609 }
592 610
593 TEST_F(DeviceInfoServiceTest, ApplyDeleteNonexistent) { 611 TEST_F(DeviceInfoServiceTest, ApplyDeleteNonexistent) {
594 InitializeAndPumpAndStart(); 612 InitializeAndPumpAndStart();
595 EXPECT_EQ(1, change_count()); 613 EXPECT_EQ(1, change_count());
596 EntityChangeList delete_changes; 614 EntityChangeList delete_changes;
597 delete_changes.push_back(EntityChange::CreateDelete("tag")); 615 delete_changes.push_back(EntityChange::CreateDelete(CacheGuidToTag("tag")));
598 const SyncError error = service()->ApplySyncChanges( 616 const SyncError error = service()->ApplySyncChanges(
599 service()->CreateMetadataChangeList(), delete_changes); 617 service()->CreateMetadataChangeList(), delete_changes);
600 EXPECT_FALSE(error.IsSet()); 618 EXPECT_FALSE(error.IsSet());
601 EXPECT_EQ(1, change_count()); 619 EXPECT_EQ(1, change_count());
602 } 620 }
603 621
604 TEST_F(DeviceInfoServiceTest, MergeWithoutProcessor) { 622 TEST_F(DeviceInfoServiceTest, MergeWithoutProcessor) {
605 InitializeService(); 623 InitializeService();
606 const SyncError error = service()->MergeSyncData( 624 const SyncError error = service()->MergeSyncData(
607 service()->CreateMetadataChangeList(), EntityDataMap()); 625 service()->CreateMetadataChangeList(), EntityDataMap());
(...skipping 23 matching lines...) Expand all
631 unique_local.SerializeAsString()); 649 unique_local.SerializeAsString());
632 store()->WriteData(batch.get(), conflict_local.cache_guid(), 650 store()->WriteData(batch.get(), conflict_local.cache_guid(),
633 conflict_local.SerializeAsString()); 651 conflict_local.SerializeAsString());
634 store()->CommitWriteBatch(std::move(batch), 652 store()->CommitWriteBatch(std::move(batch),
635 base::Bind(&AssertResultIsSuccess)); 653 base::Bind(&AssertResultIsSuccess));
636 654
637 InitializeAndPumpAndStart(); 655 InitializeAndPumpAndStart();
638 EXPECT_EQ(1, change_count()); 656 EXPECT_EQ(1, change_count());
639 657
640 EntityDataMap remote_input; 658 EntityDataMap remote_input;
641 remote_input[conflict_remote.cache_guid()] = 659 remote_input[CacheGuidToTag(conflict_remote.cache_guid())] =
642 SpecificsToEntity(conflict_remote); 660 SpecificsToEntity(conflict_remote);
643 remote_input[unique_remote.cache_guid()] = SpecificsToEntity(unique_remote); 661 remote_input[CacheGuidToTag(unique_remote.cache_guid())] =
662 SpecificsToEntity(unique_remote);
644 663
645 DataTypeState state; 664 DataTypeState state;
646 state.set_encryption_key_name("ekn"); 665 state.set_encryption_key_name("ekn");
647 scoped_ptr<MetadataChangeList> metadata_changes( 666 scoped_ptr<MetadataChangeList> metadata_changes(
648 service()->CreateMetadataChangeList()); 667 service()->CreateMetadataChangeList());
649 metadata_changes->UpdateDataTypeState(state); 668 metadata_changes->UpdateDataTypeState(state);
650 669
651 const SyncError error = 670 const SyncError error =
652 service()->MergeSyncData(std::move(metadata_changes), remote_input); 671 service()->MergeSyncData(std::move(metadata_changes), remote_input);
653 EXPECT_FALSE(error.IsSet()); 672 EXPECT_FALSE(error.IsSet());
654 EXPECT_EQ(2, change_count()); 673 EXPECT_EQ(2, change_count());
655 674
656 // The remote should beat the local in conflict. 675 // The remote should beat the local in conflict.
657 EXPECT_EQ(4u, service()->GetAllDeviceInfo().size()); 676 EXPECT_EQ(4u, service()->GetAllDeviceInfo().size());
658 AssertEqual(unique_local, *service()->GetDeviceInfo("unique_local").get()); 677 AssertEqual(unique_local, *service()->GetDeviceInfo("unique_local").get());
659 AssertEqual(unique_remote, *service()->GetDeviceInfo("unique_remote").get()); 678 AssertEqual(unique_remote, *service()->GetDeviceInfo("unique_remote").get());
660 AssertEqual(conflict_remote, *service()->GetDeviceInfo("conflict").get()); 679 AssertEqual(conflict_remote, *service()->GetDeviceInfo("conflict").get());
661 680
662 // Service should have told the processor about the existance of unique_local. 681 // Service should have told the processor about the existance of unique_local.
663 EXPECT_TRUE(processor()->delete_set().empty()); 682 EXPECT_TRUE(processor()->delete_set().empty());
664 EXPECT_EQ(2u, processor()->put_map().size()); 683 EXPECT_EQ(2u, processor()->put_map().size());
665 const auto& it = processor()->put_map().find("unique_local"); 684 const auto& it = processor()->put_map().find(CacheGuidToTag("unique_local"));
666 ASSERT_NE(processor()->put_map().end(), it); 685 ASSERT_NE(processor()->put_map().end(), it);
667 AssertEqual(unique_local, it->second->specifics.device_info()); 686 AssertEqual(unique_local, it->second->specifics.device_info());
668 687
669 // TODO(skym): Uncomment once SimpleMetadataChangeList::TransferChanges is 688 // TODO(skym): Uncomment once SimpleMetadataChangeList::TransferChanges is
670 // implemented. 689 // implemented.
671 // ASSERT_EQ(state.encryption_key_name(), 690 // ASSERT_EQ(state.encryption_key_name(),
672 // processor()->metadata()->GetDataTypeState().encryption_key_name()); 691 // processor()->metadata()->GetDataTypeState().encryption_key_name());
673 } 692 }
674 693
675 TEST_F(DeviceInfoServiceTest, MergeLocalGuid) { 694 TEST_F(DeviceInfoServiceTest, MergeLocalGuid) {
676 const DeviceInfo* local_device_info = local_device()->GetLocalDeviceInfo(); 695 const DeviceInfo* local_device_info = local_device()->GetLocalDeviceInfo();
677 scoped_ptr<DeviceInfoSpecifics> specifics( 696 scoped_ptr<DeviceInfoSpecifics> specifics(
678 CopyToSpecifics(*local_device_info)); 697 CopyToSpecifics(*local_device_info));
679 const std::string tag = local_device_info->guid(); 698 const std::string guid = local_device_info->guid();
680 699
681 scoped_ptr<WriteBatch> batch = store()->CreateWriteBatch(); 700 scoped_ptr<WriteBatch> batch = store()->CreateWriteBatch();
682 store()->WriteData(batch.get(), tag, specifics->SerializeAsString()); 701 store()->WriteData(batch.get(), guid, specifics->SerializeAsString());
683 store()->CommitWriteBatch(std::move(batch), 702 store()->CommitWriteBatch(std::move(batch),
684 base::Bind(&AssertResultIsSuccess)); 703 base::Bind(&AssertResultIsSuccess));
685 704
686 InitializeAndPumpAndStart(); 705 InitializeAndPumpAndStart();
687 706
688 EntityDataMap remote_input; 707 EntityDataMap remote_input;
689 remote_input[tag] = SpecificsToEntity(*specifics); 708 remote_input[CacheGuidToTag(guid)] = SpecificsToEntity(*specifics);
690 709
691 const SyncError error = service()->MergeSyncData( 710 const SyncError error = service()->MergeSyncData(
692 service()->CreateMetadataChangeList(), remote_input); 711 service()->CreateMetadataChangeList(), remote_input);
693 EXPECT_FALSE(error.IsSet()); 712 EXPECT_FALSE(error.IsSet());
694 EXPECT_EQ(0, change_count()); 713 EXPECT_EQ(0, change_count());
695 EXPECT_EQ(1u, service()->GetAllDeviceInfo().size()); 714 EXPECT_EQ(1u, service()->GetAllDeviceInfo().size());
696 EXPECT_TRUE(processor()->delete_set().empty()); 715 EXPECT_TRUE(processor()->delete_set().empty());
697 EXPECT_TRUE(processor()->put_map().empty()); 716 EXPECT_TRUE(processor()->put_map().empty());
698 } 717 }
699 718
700 } // namespace 719 } // namespace
701 720
702 } // namespace sync_driver_v2 721 } // namespace sync_driver_v2
OLDNEW
« no previous file with comments | « components/sync_driver/device_info_service.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698