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

Side by Side Diff: components/sync/device_info/device_info_sync_bridge_unittest.cc

Issue 2923363004: [Sync] Migrate bridge implementations to change list based MergeSyncData (Closed)
Patch Set: Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 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/device_info/device_info_sync_bridge.h" 5 #include "components/sync/device_info/device_info_sync_bridge.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <set> 8 #include <set>
9 #include <utility> 9 #include <utility>
10 10
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
151 EntityChangeList EntityAddList( 151 EntityChangeList EntityAddList(
152 const std::vector<DeviceInfoSpecifics>& specifics_list) { 152 const std::vector<DeviceInfoSpecifics>& specifics_list) {
153 EntityChangeList changes; 153 EntityChangeList changes;
154 for (const auto& specifics : specifics_list) { 154 for (const auto& specifics : specifics_list) {
155 changes.push_back(EntityChange::CreateAdd(specifics.cache_guid(), 155 changes.push_back(EntityChange::CreateAdd(specifics.cache_guid(),
156 SpecificsToEntity(specifics))); 156 SpecificsToEntity(specifics)));
157 } 157 }
158 return changes; 158 return changes;
159 } 159 }
160 160
161 // Similar helper to EntityAddList(...), only wraps in a EntityDataMap for a
162 // merge call. Order is irrelevant, since the map sorts by key. Should not
163 // contain multiple specifics with the same guid.
164 EntityDataMap InlineEntityDataMap(
165 const std::vector<DeviceInfoSpecifics>& specifics_list) {
166 EntityDataMap map;
167 for (const auto& specifics : specifics_list) {
168 EXPECT_EQ(map.end(), map.find(specifics.cache_guid()));
169 map[specifics.cache_guid()] = SpecificsToEntity(specifics);
170 }
171 return map;
172 }
173
174 } // namespace 161 } // namespace
175 162
176 class DeviceInfoSyncBridgeTest : public testing::Test, 163 class DeviceInfoSyncBridgeTest : public testing::Test,
177 public DeviceInfoTracker::Observer { 164 public DeviceInfoTracker::Observer {
178 protected: 165 protected:
179 DeviceInfoSyncBridgeTest() 166 DeviceInfoSyncBridgeTest()
180 : store_(ModelTypeStoreTestUtil::CreateInMemoryStoreForTest()), 167 : store_(ModelTypeStoreTestUtil::CreateInMemoryStoreForTest()),
181 provider_(new LocalDeviceInfoProviderMock()) { 168 provider_(new LocalDeviceInfoProviderMock()) {
182 provider_->Initialize(CreateModel(kDefaultLocalSuffix)); 169 provider_->Initialize(CreateModel(kDefaultLocalSuffix));
183 } 170 }
(...skipping 381 matching lines...) Expand 10 before | Expand all | Expand 10 after
565 auto error2 = bridge()->ApplySyncChanges(bridge()->CreateMetadataChangeList(), 552 auto error2 = bridge()->ApplySyncChanges(bridge()->CreateMetadataChangeList(),
566 EntityAddList({specifics})); 553 EntityAddList({specifics}));
567 EXPECT_FALSE(error2); 554 EXPECT_FALSE(error2);
568 EXPECT_EQ(2u, bridge()->GetAllDeviceInfo().size()); 555 EXPECT_EQ(2u, bridge()->GetAllDeviceInfo().size());
569 } 556 }
570 557
571 TEST_F(DeviceInfoSyncBridgeTest, MergeEmpty) { 558 TEST_F(DeviceInfoSyncBridgeTest, MergeEmpty) {
572 InitializeAndPump(); 559 InitializeAndPump();
573 EXPECT_EQ(1, change_count()); 560 EXPECT_EQ(1, change_count());
574 auto error = bridge()->MergeSyncData(bridge()->CreateMetadataChangeList(), 561 auto error = bridge()->MergeSyncData(bridge()->CreateMetadataChangeList(),
575 EntityDataMap()); 562 EntityChangeList());
576 EXPECT_FALSE(error); 563 EXPECT_FALSE(error);
577 EXPECT_EQ(1, change_count()); 564 EXPECT_EQ(1, change_count());
578 // TODO(skym): Stop sending local twice. The first of the two puts will 565 // TODO(skym): Stop sending local twice. The first of the two puts will
579 // probably happen before the processor is tracking metadata yet, and so there 566 // probably happen before the processor is tracking metadata yet, and so there
580 // should not be much overhead. 567 // should not be much overhead.
581 EXPECT_EQ(2u, processor().put_multimap().size()); 568 EXPECT_EQ(2u, processor().put_multimap().size());
582 EXPECT_EQ(2u, processor().put_multimap().count( 569 EXPECT_EQ(2u, processor().put_multimap().count(
583 local_device()->GetLocalDeviceInfo()->guid())); 570 local_device()->GetLocalDeviceInfo()->guid()));
584 EXPECT_EQ(0u, processor().delete_set().size()); 571 EXPECT_EQ(0u, processor().delete_set().size());
585 } 572 }
(...skipping 10 matching lines...) Expand all
596 583
597 WriteToStore({unique_local, conflict_local}); 584 WriteToStore({unique_local, conflict_local});
598 InitializeAndPump(); 585 InitializeAndPump();
599 EXPECT_EQ(1, change_count()); 586 EXPECT_EQ(1, change_count());
600 587
601 ModelTypeState state = StateWithEncryption("ekn"); 588 ModelTypeState state = StateWithEncryption("ekn");
602 std::unique_ptr<MetadataChangeList> metadata_changes = 589 std::unique_ptr<MetadataChangeList> metadata_changes =
603 bridge()->CreateMetadataChangeList(); 590 bridge()->CreateMetadataChangeList();
604 metadata_changes->UpdateModelTypeState(state); 591 metadata_changes->UpdateModelTypeState(state);
605 592
606 auto error = bridge()->MergeSyncData( 593 auto error =
607 std::move(metadata_changes), 594 bridge()->MergeSyncData(std::move(metadata_changes),
608 InlineEntityDataMap({conflict_remote, unique_remote})); 595 EntityAddList({conflict_remote, unique_remote}));
609 EXPECT_FALSE(error); 596 EXPECT_FALSE(error);
610 EXPECT_EQ(2, change_count()); 597 EXPECT_EQ(2, change_count());
611 598
612 // The remote should beat the local in conflict. 599 // The remote should beat the local in conflict.
613 EXPECT_EQ(4u, bridge()->GetAllDeviceInfo().size()); 600 EXPECT_EQ(4u, bridge()->GetAllDeviceInfo().size());
614 VerifyEqual(unique_local, 601 VerifyEqual(unique_local,
615 *bridge()->GetDeviceInfo(unique_local.cache_guid()).get()); 602 *bridge()->GetDeviceInfo(unique_local.cache_guid()).get());
616 VerifyEqual(unique_remote, 603 VerifyEqual(unique_remote,
617 *bridge()->GetDeviceInfo(unique_remote.cache_guid()).get()); 604 *bridge()->GetDeviceInfo(unique_remote.cache_guid()).get());
618 VerifyEqual(conflict_remote, *bridge()->GetDeviceInfo(conflict_guid).get()); 605 VerifyEqual(conflict_remote, *bridge()->GetDeviceInfo(conflict_guid).get());
(...skipping 13 matching lines...) Expand all
632 619
633 TEST_F(DeviceInfoSyncBridgeTest, MergeLocalGuid) { 620 TEST_F(DeviceInfoSyncBridgeTest, MergeLocalGuid) {
634 // If not recent, then reconcile is going to try to send an updated version to 621 // If not recent, then reconcile is going to try to send an updated version to
635 // Sync, which makes interpreting change_count() more difficult. 622 // Sync, which makes interpreting change_count() more difficult.
636 const DeviceInfoSpecifics specifics = 623 const DeviceInfoSpecifics specifics =
637 CreateSpecifics(kDefaultLocalSuffix, Time::Now()); 624 CreateSpecifics(kDefaultLocalSuffix, Time::Now());
638 WriteToStore({specifics}); 625 WriteToStore({specifics});
639 InitializeAndPump(); 626 InitializeAndPump();
640 627
641 auto error = bridge()->MergeSyncData(bridge()->CreateMetadataChangeList(), 628 auto error = bridge()->MergeSyncData(bridge()->CreateMetadataChangeList(),
642 InlineEntityDataMap({specifics})); 629 EntityAddList({specifics}));
643 EXPECT_FALSE(error); 630 EXPECT_FALSE(error);
644 EXPECT_EQ(0, change_count()); 631 EXPECT_EQ(0, change_count());
645 EXPECT_EQ(1u, bridge()->GetAllDeviceInfo().size()); 632 EXPECT_EQ(1u, bridge()->GetAllDeviceInfo().size());
646 EXPECT_TRUE(processor().delete_set().empty()); 633 EXPECT_TRUE(processor().delete_set().empty());
647 EXPECT_TRUE(processor().put_multimap().empty()); 634 EXPECT_TRUE(processor().put_multimap().empty());
648 } 635 }
649 636
650 TEST_F(DeviceInfoSyncBridgeTest, MergeLocalGuidBeforeReconcile) { 637 TEST_F(DeviceInfoSyncBridgeTest, MergeLocalGuidBeforeReconcile) {
651 InitializeBridge(); 638 InitializeBridge();
652 639
653 // The message loop is never pumped, which means local data/metadata is never 640 // The message loop is never pumped, which means local data/metadata is never
654 // loaded, and thus reconcile is never called. The bridge should ignore this 641 // loaded, and thus reconcile is never called. The bridge should ignore this
655 // EntityData because its cache guid is the same the local device's. 642 // EntityData because its cache guid is the same the local device's.
656 auto error = bridge()->MergeSyncData( 643 auto error = bridge()->MergeSyncData(
657 bridge()->CreateMetadataChangeList(), 644 bridge()->CreateMetadataChangeList(),
658 InlineEntityDataMap({CreateSpecifics(kDefaultLocalSuffix)})); 645 EntityAddList({CreateSpecifics(kDefaultLocalSuffix)}));
659 EXPECT_FALSE(error); 646 EXPECT_FALSE(error);
660 EXPECT_EQ(0, change_count()); 647 EXPECT_EQ(0, change_count());
661 EXPECT_EQ(0u, bridge()->GetAllDeviceInfo().size()); 648 EXPECT_EQ(0u, bridge()->GetAllDeviceInfo().size());
662 } 649 }
663 650
664 TEST_F(DeviceInfoSyncBridgeTest, ClearProviderAndMerge) { 651 TEST_F(DeviceInfoSyncBridgeTest, ClearProviderAndMerge) {
665 // This will initialize the provider a first time. 652 // This will initialize the provider a first time.
666 InitializeAndPump(); 653 InitializeAndPump();
667 EXPECT_EQ(1u, bridge()->GetAllDeviceInfo().size()); 654 EXPECT_EQ(1u, bridge()->GetAllDeviceInfo().size());
668 655
669 const DeviceInfoSpecifics specifics = CreateSpecifics(1, Time::Now()); 656 const DeviceInfoSpecifics specifics = CreateSpecifics(1, Time::Now());
670 657
671 local_device()->Clear(); 658 local_device()->Clear();
672 auto error1 = bridge()->MergeSyncData(bridge()->CreateMetadataChangeList(), 659 auto error1 = bridge()->MergeSyncData(bridge()->CreateMetadataChangeList(),
673 InlineEntityDataMap({specifics})); 660 EntityAddList({specifics}));
674 EXPECT_FALSE(error1); 661 EXPECT_FALSE(error1);
675 EXPECT_EQ(1u, bridge()->GetAllDeviceInfo().size()); 662 EXPECT_EQ(1u, bridge()->GetAllDeviceInfo().size());
676 663
677 local_device()->Initialize(CreateModel(kDefaultLocalSuffix)); 664 local_device()->Initialize(CreateModel(kDefaultLocalSuffix));
678 auto error2 = bridge()->MergeSyncData(bridge()->CreateMetadataChangeList(), 665 auto error2 = bridge()->MergeSyncData(bridge()->CreateMetadataChangeList(),
679 InlineEntityDataMap({specifics})); 666 EntityAddList({specifics}));
680 EXPECT_FALSE(error2); 667 EXPECT_FALSE(error2);
681 EXPECT_EQ(2u, bridge()->GetAllDeviceInfo().size()); 668 EXPECT_EQ(2u, bridge()->GetAllDeviceInfo().size());
682 } 669 }
683 670
684 TEST_F(DeviceInfoSyncBridgeTest, CountActiveDevices) { 671 TEST_F(DeviceInfoSyncBridgeTest, CountActiveDevices) {
685 InitializeAndPump(); 672 InitializeAndPump();
686 EXPECT_EQ(1, bridge()->CountActiveDevices()); 673 EXPECT_EQ(1, bridge()->CountActiveDevices());
687 674
688 // Regardless of the time, these following two ApplySyncChanges(...) calls 675 // Regardless of the time, these following two ApplySyncChanges(...) calls
689 // have the same guid as the local device. 676 // have the same guid as the local device.
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
763 750
764 // Reloading from storage shouldn't contain remote data. 751 // Reloading from storage shouldn't contain remote data.
765 RestartBridge(); 752 RestartBridge();
766 EXPECT_EQ(1u, bridge()->GetAllDeviceInfo().size()); 753 EXPECT_EQ(1u, bridge()->GetAllDeviceInfo().size());
767 EXPECT_EQ(4, change_count()); 754 EXPECT_EQ(4, change_count());
768 } 755 }
769 756
770 } // namespace 757 } // namespace
771 758
772 } // namespace syncer 759 } // namespace syncer
OLDNEW
« no previous file with comments | « components/sync/device_info/device_info_sync_bridge.cc ('k') | components/sync/model/entity_change.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698