| OLD | NEW |
| 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 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 108 EXPECT_EQ(specifics.cache_guid(), model.guid()); | 108 EXPECT_EQ(specifics.cache_guid(), model.guid()); |
| 109 EXPECT_EQ(specifics.client_name(), model.client_name()); | 109 EXPECT_EQ(specifics.client_name(), model.client_name()); |
| 110 EXPECT_EQ(specifics.device_type(), model.device_type()); | 110 EXPECT_EQ(specifics.device_type(), model.device_type()); |
| 111 EXPECT_EQ(specifics.sync_user_agent(), model.sync_user_agent()); | 111 EXPECT_EQ(specifics.sync_user_agent(), model.sync_user_agent()); |
| 112 EXPECT_EQ(specifics.chrome_version(), model.chrome_version()); | 112 EXPECT_EQ(specifics.chrome_version(), model.chrome_version()); |
| 113 EXPECT_EQ(specifics.signin_scoped_device_id(), | 113 EXPECT_EQ(specifics.signin_scoped_device_id(), |
| 114 model.signin_scoped_device_id()); | 114 model.signin_scoped_device_id()); |
| 115 } | 115 } |
| 116 | 116 |
| 117 void VerifyDataBatch(std::map<std::string, DeviceInfoSpecifics> expected, | 117 void VerifyDataBatch(std::map<std::string, DeviceInfoSpecifics> expected, |
| 118 SyncError error, | |
| 119 std::unique_ptr<DataBatch> batch) { | 118 std::unique_ptr<DataBatch> batch) { |
| 120 EXPECT_FALSE(error.IsSet()); | |
| 121 while (batch->HasNext()) { | 119 while (batch->HasNext()) { |
| 122 const KeyAndData& pair = batch->Next(); | 120 const KeyAndData& pair = batch->Next(); |
| 123 auto iter = expected.find(pair.first); | 121 auto iter = expected.find(pair.first); |
| 124 ASSERT_NE(iter, expected.end()); | 122 ASSERT_NE(iter, expected.end()); |
| 125 VerifyEqual(iter->second, pair.second->specifics.device_info()); | 123 VerifyEqual(iter->second, pair.second->specifics.device_info()); |
| 126 // Removing allows us to verify we don't see the same item multiple times, | 124 // Removing allows us to verify we don't see the same item multiple times, |
| 127 // and that we saw everything we expected. | 125 // and that we saw everything we expected. |
| 128 expected.erase(iter); | 126 expected.erase(iter); |
| 129 } | 127 } |
| 130 EXPECT_TRUE(expected.empty()); | 128 EXPECT_TRUE(expected.empty()); |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 185 std::unique_ptr<EntityData> entity_data, | 183 std::unique_ptr<EntityData> entity_data, |
| 186 MetadataChangeList* metadata_changes) override { | 184 MetadataChangeList* metadata_changes) override { |
| 187 put_multimap_.insert(std::make_pair(storage_key, std::move(entity_data))); | 185 put_multimap_.insert(std::make_pair(storage_key, std::move(entity_data))); |
| 188 } | 186 } |
| 189 | 187 |
| 190 void Delete(const std::string& storage_key, | 188 void Delete(const std::string& storage_key, |
| 191 MetadataChangeList* metadata_changes) override { | 189 MetadataChangeList* metadata_changes) override { |
| 192 delete_set_.insert(storage_key); | 190 delete_set_.insert(storage_key); |
| 193 } | 191 } |
| 194 | 192 |
| 195 void OnMetadataLoaded(SyncError error, | 193 void OnMetadataLoaded(std::unique_ptr<MetadataBatch> batch) override { |
| 196 std::unique_ptr<MetadataBatch> batch) override { | |
| 197 std::swap(metadata_, batch); | 194 std::swap(metadata_, batch); |
| 198 } | 195 } |
| 199 | 196 |
| 200 const std::multimap<std::string, std::unique_ptr<EntityData>>& put_multimap() | 197 const std::multimap<std::string, std::unique_ptr<EntityData>>& put_multimap() |
| 201 const { | 198 const { |
| 202 return put_multimap_; | 199 return put_multimap_; |
| 203 } | 200 } |
| 204 const std::set<std::string>& delete_set() const { return delete_set_; } | 201 const std::set<std::string>& delete_set() const { return delete_set_; } |
| 205 const MetadataBatch* metadata() const { return metadata_.get(); } | 202 const MetadataBatch* metadata() const { return metadata_.get(); } |
| 206 | 203 |
| (...skipping 287 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 494 const std::map<std::string, DeviceInfoSpecifics> expected{ | 491 const std::map<std::string, DeviceInfoSpecifics> expected{ |
| 495 {specifics1.cache_guid(), specifics1}, | 492 {specifics1.cache_guid(), specifics1}, |
| 496 {specifics2.cache_guid(), specifics2}}; | 493 {specifics2.cache_guid(), specifics2}}; |
| 497 bridge()->GetData({specifics1.cache_guid(), specifics2.cache_guid()}, | 494 bridge()->GetData({specifics1.cache_guid(), specifics2.cache_guid()}, |
| 498 base::Bind(&VerifyDataBatch, expected)); | 495 base::Bind(&VerifyDataBatch, expected)); |
| 499 } | 496 } |
| 500 | 497 |
| 501 TEST_F(DeviceInfoSyncBridgeTest, ApplySyncChangesEmpty) { | 498 TEST_F(DeviceInfoSyncBridgeTest, ApplySyncChangesEmpty) { |
| 502 InitializeAndPump(); | 499 InitializeAndPump(); |
| 503 EXPECT_EQ(1, change_count()); | 500 EXPECT_EQ(1, change_count()); |
| 504 const SyncError error = bridge()->ApplySyncChanges( | 501 const ModelError error = bridge()->ApplySyncChanges( |
| 505 bridge()->CreateMetadataChangeList(), EntityChangeList()); | 502 bridge()->CreateMetadataChangeList(), EntityChangeList()); |
| 506 EXPECT_FALSE(error.IsSet()); | 503 EXPECT_FALSE(error.IsSet()); |
| 507 EXPECT_EQ(1, change_count()); | 504 EXPECT_EQ(1, change_count()); |
| 508 } | 505 } |
| 509 | 506 |
| 510 TEST_F(DeviceInfoSyncBridgeTest, ApplySyncChangesInMemory) { | 507 TEST_F(DeviceInfoSyncBridgeTest, ApplySyncChangesInMemory) { |
| 511 InitializeAndPump(); | 508 InitializeAndPump(); |
| 512 EXPECT_EQ(1, change_count()); | 509 EXPECT_EQ(1, change_count()); |
| 513 | 510 |
| 514 const DeviceInfoSpecifics specifics = CreateSpecifics(1); | 511 const DeviceInfoSpecifics specifics = CreateSpecifics(1); |
| 515 const SyncError error_on_add = bridge()->ApplySyncChanges( | 512 const ModelError error_on_add = bridge()->ApplySyncChanges( |
| 516 bridge()->CreateMetadataChangeList(), EntityAddList({specifics})); | 513 bridge()->CreateMetadataChangeList(), EntityAddList({specifics})); |
| 517 | 514 |
| 518 EXPECT_FALSE(error_on_add.IsSet()); | 515 EXPECT_FALSE(error_on_add.IsSet()); |
| 519 std::unique_ptr<DeviceInfo> info = | 516 std::unique_ptr<DeviceInfo> info = |
| 520 bridge()->GetDeviceInfo(specifics.cache_guid()); | 517 bridge()->GetDeviceInfo(specifics.cache_guid()); |
| 521 ASSERT_TRUE(info); | 518 ASSERT_TRUE(info); |
| 522 VerifyEqual(specifics, *info.get()); | 519 VerifyEqual(specifics, *info.get()); |
| 523 EXPECT_EQ(2, change_count()); | 520 EXPECT_EQ(2, change_count()); |
| 524 | 521 |
| 525 const SyncError error_on_delete = bridge()->ApplySyncChanges( | 522 const ModelError error_on_delete = bridge()->ApplySyncChanges( |
| 526 bridge()->CreateMetadataChangeList(), | 523 bridge()->CreateMetadataChangeList(), |
| 527 {EntityChange::CreateDelete(specifics.cache_guid())}); | 524 {EntityChange::CreateDelete(specifics.cache_guid())}); |
| 528 | 525 |
| 529 EXPECT_FALSE(error_on_delete.IsSet()); | 526 EXPECT_FALSE(error_on_delete.IsSet()); |
| 530 EXPECT_FALSE(bridge()->GetDeviceInfo(specifics.cache_guid())); | 527 EXPECT_FALSE(bridge()->GetDeviceInfo(specifics.cache_guid())); |
| 531 EXPECT_EQ(3, change_count()); | 528 EXPECT_EQ(3, change_count()); |
| 532 } | 529 } |
| 533 | 530 |
| 534 TEST_F(DeviceInfoSyncBridgeTest, ApplySyncChangesStore) { | 531 TEST_F(DeviceInfoSyncBridgeTest, ApplySyncChangesStore) { |
| 535 InitializeAndPump(); | 532 InitializeAndPump(); |
| 536 EXPECT_EQ(1, change_count()); | 533 EXPECT_EQ(1, change_count()); |
| 537 | 534 |
| 538 const DeviceInfoSpecifics specifics = CreateSpecifics(1); | 535 const DeviceInfoSpecifics specifics = CreateSpecifics(1); |
| 539 ModelTypeState state = StateWithEncryption("ekn"); | 536 ModelTypeState state = StateWithEncryption("ekn"); |
| 540 std::unique_ptr<MetadataChangeList> metadata_changes = | 537 std::unique_ptr<MetadataChangeList> metadata_changes = |
| 541 bridge()->CreateMetadataChangeList(); | 538 bridge()->CreateMetadataChangeList(); |
| 542 metadata_changes->UpdateModelTypeState(state); | 539 metadata_changes->UpdateModelTypeState(state); |
| 543 | 540 |
| 544 const SyncError error = bridge()->ApplySyncChanges( | 541 const ModelError error = bridge()->ApplySyncChanges( |
| 545 std::move(metadata_changes), EntityAddList({specifics})); | 542 std::move(metadata_changes), EntityAddList({specifics})); |
| 546 EXPECT_FALSE(error.IsSet()); | 543 EXPECT_FALSE(error.IsSet()); |
| 547 EXPECT_EQ(2, change_count()); | 544 EXPECT_EQ(2, change_count()); |
| 548 | 545 |
| 549 RestartBridge(); | 546 RestartBridge(); |
| 550 | 547 |
| 551 std::unique_ptr<DeviceInfo> info = | 548 std::unique_ptr<DeviceInfo> info = |
| 552 bridge()->GetDeviceInfo(specifics.cache_guid()); | 549 bridge()->GetDeviceInfo(specifics.cache_guid()); |
| 553 ASSERT_TRUE(info); | 550 ASSERT_TRUE(info); |
| 554 VerifyEqual(specifics, *info.get()); | 551 VerifyEqual(specifics, *info.get()); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 571 EXPECT_EQ(1, change_count()); | 568 EXPECT_EQ(1, change_count()); |
| 572 // Ensure |last_updated| is about now, plus or minus a little bit. | 569 // Ensure |last_updated| is about now, plus or minus a little bit. |
| 573 const Time last_updated(ProtoTimeToTime(processor() | 570 const Time last_updated(ProtoTimeToTime(processor() |
| 574 ->put_multimap() | 571 ->put_multimap() |
| 575 .begin() | 572 .begin() |
| 576 ->second->specifics.device_info() | 573 ->second->specifics.device_info() |
| 577 .last_updated_timestamp())); | 574 .last_updated_timestamp())); |
| 578 EXPECT_LT(Time::Now() - TimeDelta::FromMinutes(1), last_updated); | 575 EXPECT_LT(Time::Now() - TimeDelta::FromMinutes(1), last_updated); |
| 579 EXPECT_GT(Time::Now() + TimeDelta::FromMinutes(1), last_updated); | 576 EXPECT_GT(Time::Now() + TimeDelta::FromMinutes(1), last_updated); |
| 580 | 577 |
| 581 const SyncError error_on_add = bridge()->ApplySyncChanges( | 578 const ModelError error_on_add = bridge()->ApplySyncChanges( |
| 582 bridge()->CreateMetadataChangeList(), EntityAddList({specifics})); | 579 bridge()->CreateMetadataChangeList(), EntityAddList({specifics})); |
| 583 EXPECT_FALSE(error_on_add.IsSet()); | 580 EXPECT_FALSE(error_on_add.IsSet()); |
| 584 EXPECT_EQ(1, change_count()); | 581 EXPECT_EQ(1, change_count()); |
| 585 | 582 |
| 586 const SyncError error_on_delete = bridge()->ApplySyncChanges( | 583 const ModelError error_on_delete = bridge()->ApplySyncChanges( |
| 587 bridge()->CreateMetadataChangeList(), | 584 bridge()->CreateMetadataChangeList(), |
| 588 {EntityChange::CreateDelete(specifics.cache_guid())}); | 585 {EntityChange::CreateDelete(specifics.cache_guid())}); |
| 589 EXPECT_FALSE(error_on_delete.IsSet()); | 586 EXPECT_FALSE(error_on_delete.IsSet()); |
| 590 EXPECT_EQ(1, change_count()); | 587 EXPECT_EQ(1, change_count()); |
| 591 } | 588 } |
| 592 | 589 |
| 593 TEST_F(DeviceInfoSyncBridgeTest, ApplyDeleteNonexistent) { | 590 TEST_F(DeviceInfoSyncBridgeTest, ApplyDeleteNonexistent) { |
| 594 InitializeAndPump(); | 591 InitializeAndPump(); |
| 595 EXPECT_EQ(1, change_count()); | 592 EXPECT_EQ(1, change_count()); |
| 596 const SyncError error = | 593 const ModelError error = |
| 597 bridge()->ApplySyncChanges(bridge()->CreateMetadataChangeList(), | 594 bridge()->ApplySyncChanges(bridge()->CreateMetadataChangeList(), |
| 598 {EntityChange::CreateDelete("guid")}); | 595 {EntityChange::CreateDelete("guid")}); |
| 599 EXPECT_FALSE(error.IsSet()); | 596 EXPECT_FALSE(error.IsSet()); |
| 600 EXPECT_EQ(1, change_count()); | 597 EXPECT_EQ(1, change_count()); |
| 601 } | 598 } |
| 602 | 599 |
| 603 TEST_F(DeviceInfoSyncBridgeTest, ClearProviderAndApply) { | 600 TEST_F(DeviceInfoSyncBridgeTest, ClearProviderAndApply) { |
| 604 // This will initialize the provider a first time. | 601 // This will initialize the provider a first time. |
| 605 InitializeAndPump(); | 602 InitializeAndPump(); |
| 606 EXPECT_EQ(1u, bridge()->GetAllDeviceInfo().size()); | 603 EXPECT_EQ(1u, bridge()->GetAllDeviceInfo().size()); |
| 607 | 604 |
| 608 const DeviceInfoSpecifics specifics = CreateSpecifics(1, Time::Now()); | 605 const DeviceInfoSpecifics specifics = CreateSpecifics(1, Time::Now()); |
| 609 | 606 |
| 610 local_device()->Clear(); | 607 local_device()->Clear(); |
| 611 SyncError error = bridge()->ApplySyncChanges( | 608 ModelError error = bridge()->ApplySyncChanges( |
| 612 bridge()->CreateMetadataChangeList(), EntityAddList({specifics})); | 609 bridge()->CreateMetadataChangeList(), EntityAddList({specifics})); |
| 613 EXPECT_FALSE(error.IsSet()); | 610 EXPECT_FALSE(error.IsSet()); |
| 614 EXPECT_EQ(1u, bridge()->GetAllDeviceInfo().size()); | 611 EXPECT_EQ(1u, bridge()->GetAllDeviceInfo().size()); |
| 615 | 612 |
| 616 local_device()->Initialize(CreateModel(kDefaultLocalSuffix)); | 613 local_device()->Initialize(CreateModel(kDefaultLocalSuffix)); |
| 617 error = bridge()->ApplySyncChanges(bridge()->CreateMetadataChangeList(), | 614 error = bridge()->ApplySyncChanges(bridge()->CreateMetadataChangeList(), |
| 618 EntityAddList({specifics})); | 615 EntityAddList({specifics})); |
| 619 EXPECT_EQ(2u, bridge()->GetAllDeviceInfo().size()); | 616 EXPECT_EQ(2u, bridge()->GetAllDeviceInfo().size()); |
| 620 } | 617 } |
| 621 | 618 |
| 622 TEST_F(DeviceInfoSyncBridgeTest, MergeEmpty) { | 619 TEST_F(DeviceInfoSyncBridgeTest, MergeEmpty) { |
| 623 InitializeAndPump(); | 620 InitializeAndPump(); |
| 624 EXPECT_EQ(1, change_count()); | 621 EXPECT_EQ(1, change_count()); |
| 625 const SyncError error = bridge()->MergeSyncData( | 622 const ModelError error = bridge()->MergeSyncData( |
| 626 bridge()->CreateMetadataChangeList(), EntityDataMap()); | 623 bridge()->CreateMetadataChangeList(), EntityDataMap()); |
| 627 EXPECT_FALSE(error.IsSet()); | 624 EXPECT_FALSE(error.IsSet()); |
| 628 EXPECT_EQ(1, change_count()); | 625 EXPECT_EQ(1, change_count()); |
| 629 // TODO(skym): Stop sending local twice. The first of the two puts will | 626 // TODO(skym): Stop sending local twice. The first of the two puts will |
| 630 // probably happen before the processor is tracking metadata yet, and so there | 627 // probably happen before the processor is tracking metadata yet, and so there |
| 631 // should not be much overhead. | 628 // should not be much overhead. |
| 632 EXPECT_EQ(2u, processor()->put_multimap().size()); | 629 EXPECT_EQ(2u, processor()->put_multimap().size()); |
| 633 EXPECT_EQ(2u, processor()->put_multimap().count( | 630 EXPECT_EQ(2u, processor()->put_multimap().count( |
| 634 local_device()->GetLocalDeviceInfo()->guid())); | 631 local_device()->GetLocalDeviceInfo()->guid())); |
| 635 EXPECT_EQ(0u, processor()->delete_set().size()); | 632 EXPECT_EQ(0u, processor()->delete_set().size()); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 647 | 644 |
| 648 WriteToStore({unique_local, conflict_local}); | 645 WriteToStore({unique_local, conflict_local}); |
| 649 InitializeAndPump(); | 646 InitializeAndPump(); |
| 650 EXPECT_EQ(1, change_count()); | 647 EXPECT_EQ(1, change_count()); |
| 651 | 648 |
| 652 ModelTypeState state = StateWithEncryption("ekn"); | 649 ModelTypeState state = StateWithEncryption("ekn"); |
| 653 std::unique_ptr<MetadataChangeList> metadata_changes = | 650 std::unique_ptr<MetadataChangeList> metadata_changes = |
| 654 bridge()->CreateMetadataChangeList(); | 651 bridge()->CreateMetadataChangeList(); |
| 655 metadata_changes->UpdateModelTypeState(state); | 652 metadata_changes->UpdateModelTypeState(state); |
| 656 | 653 |
| 657 const SyncError error = bridge()->MergeSyncData( | 654 const ModelError error = bridge()->MergeSyncData( |
| 658 std::move(metadata_changes), | 655 std::move(metadata_changes), |
| 659 InlineEntityDataMap({conflict_remote, unique_remote})); | 656 InlineEntityDataMap({conflict_remote, unique_remote})); |
| 660 EXPECT_FALSE(error.IsSet()); | 657 EXPECT_FALSE(error.IsSet()); |
| 661 EXPECT_EQ(2, change_count()); | 658 EXPECT_EQ(2, change_count()); |
| 662 | 659 |
| 663 // The remote should beat the local in conflict. | 660 // The remote should beat the local in conflict. |
| 664 EXPECT_EQ(4u, bridge()->GetAllDeviceInfo().size()); | 661 EXPECT_EQ(4u, bridge()->GetAllDeviceInfo().size()); |
| 665 VerifyEqual(unique_local, | 662 VerifyEqual(unique_local, |
| 666 *bridge()->GetDeviceInfo(unique_local.cache_guid()).get()); | 663 *bridge()->GetDeviceInfo(unique_local.cache_guid()).get()); |
| 667 VerifyEqual(unique_remote, | 664 VerifyEqual(unique_remote, |
| (...skipping 14 matching lines...) Expand all Loading... |
| 682 } | 679 } |
| 683 | 680 |
| 684 TEST_F(DeviceInfoSyncBridgeTest, MergeLocalGuid) { | 681 TEST_F(DeviceInfoSyncBridgeTest, MergeLocalGuid) { |
| 685 // If not recent, then reconcile is going to try to send an updated version to | 682 // If not recent, then reconcile is going to try to send an updated version to |
| 686 // Sync, which makes interpreting change_count() more difficult. | 683 // Sync, which makes interpreting change_count() more difficult. |
| 687 const DeviceInfoSpecifics specifics = | 684 const DeviceInfoSpecifics specifics = |
| 688 CreateSpecifics(kDefaultLocalSuffix, Time::Now()); | 685 CreateSpecifics(kDefaultLocalSuffix, Time::Now()); |
| 689 WriteToStore({specifics}); | 686 WriteToStore({specifics}); |
| 690 InitializeAndPump(); | 687 InitializeAndPump(); |
| 691 | 688 |
| 692 const SyncError error = bridge()->MergeSyncData( | 689 const ModelError error = bridge()->MergeSyncData( |
| 693 bridge()->CreateMetadataChangeList(), InlineEntityDataMap({specifics})); | 690 bridge()->CreateMetadataChangeList(), InlineEntityDataMap({specifics})); |
| 694 EXPECT_FALSE(error.IsSet()); | 691 EXPECT_FALSE(error.IsSet()); |
| 695 EXPECT_EQ(0, change_count()); | 692 EXPECT_EQ(0, change_count()); |
| 696 EXPECT_EQ(1u, bridge()->GetAllDeviceInfo().size()); | 693 EXPECT_EQ(1u, bridge()->GetAllDeviceInfo().size()); |
| 697 EXPECT_TRUE(processor()->delete_set().empty()); | 694 EXPECT_TRUE(processor()->delete_set().empty()); |
| 698 EXPECT_TRUE(processor()->put_multimap().empty()); | 695 EXPECT_TRUE(processor()->put_multimap().empty()); |
| 699 } | 696 } |
| 700 | 697 |
| 701 TEST_F(DeviceInfoSyncBridgeTest, MergeLocalGuidBeforeReconcile) { | 698 TEST_F(DeviceInfoSyncBridgeTest, MergeLocalGuidBeforeReconcile) { |
| 702 InitializeBridge(); | 699 InitializeBridge(); |
| 703 | 700 |
| 704 // The message loop is never pumped, which means local data/metadata is never | 701 // The message loop is never pumped, which means local data/metadata is never |
| 705 // loaded, and thus reconcile is never called. The bridge should ignore this | 702 // loaded, and thus reconcile is never called. The bridge should ignore this |
| 706 // EntityData because its cache guid is the same the local device's. | 703 // EntityData because its cache guid is the same the local device's. |
| 707 const SyncError error = bridge()->MergeSyncData( | 704 const ModelError error = bridge()->MergeSyncData( |
| 708 bridge()->CreateMetadataChangeList(), | 705 bridge()->CreateMetadataChangeList(), |
| 709 InlineEntityDataMap({CreateSpecifics(kDefaultLocalSuffix)})); | 706 InlineEntityDataMap({CreateSpecifics(kDefaultLocalSuffix)})); |
| 710 EXPECT_FALSE(error.IsSet()); | 707 EXPECT_FALSE(error.IsSet()); |
| 711 EXPECT_EQ(0, change_count()); | 708 EXPECT_EQ(0, change_count()); |
| 712 EXPECT_EQ(0u, bridge()->GetAllDeviceInfo().size()); | 709 EXPECT_EQ(0u, bridge()->GetAllDeviceInfo().size()); |
| 713 } | 710 } |
| 714 | 711 |
| 715 TEST_F(DeviceInfoSyncBridgeTest, ClearProviderAndMerge) { | 712 TEST_F(DeviceInfoSyncBridgeTest, ClearProviderAndMerge) { |
| 716 // This will initialize the provider a first time. | 713 // This will initialize the provider a first time. |
| 717 InitializeAndPump(); | 714 InitializeAndPump(); |
| 718 EXPECT_EQ(1u, bridge()->GetAllDeviceInfo().size()); | 715 EXPECT_EQ(1u, bridge()->GetAllDeviceInfo().size()); |
| 719 | 716 |
| 720 const DeviceInfoSpecifics specifics = CreateSpecifics(1, Time::Now()); | 717 const DeviceInfoSpecifics specifics = CreateSpecifics(1, Time::Now()); |
| 721 | 718 |
| 722 local_device()->Clear(); | 719 local_device()->Clear(); |
| 723 SyncError error = bridge()->MergeSyncData( | 720 ModelError error = bridge()->MergeSyncData( |
| 724 bridge()->CreateMetadataChangeList(), InlineEntityDataMap({specifics})); | 721 bridge()->CreateMetadataChangeList(), InlineEntityDataMap({specifics})); |
| 725 EXPECT_FALSE(error.IsSet()); | 722 EXPECT_FALSE(error.IsSet()); |
| 726 EXPECT_EQ(1u, bridge()->GetAllDeviceInfo().size()); | 723 EXPECT_EQ(1u, bridge()->GetAllDeviceInfo().size()); |
| 727 local_device()->Initialize(CreateModel(kDefaultLocalSuffix)); | 724 local_device()->Initialize(CreateModel(kDefaultLocalSuffix)); |
| 728 error = bridge()->MergeSyncData(bridge()->CreateMetadataChangeList(), | 725 error = bridge()->MergeSyncData(bridge()->CreateMetadataChangeList(), |
| 729 InlineEntityDataMap({specifics})); | 726 InlineEntityDataMap({specifics})); |
| 730 EXPECT_EQ(2u, bridge()->GetAllDeviceInfo().size()); | 727 EXPECT_EQ(2u, bridge()->GetAllDeviceInfo().size()); |
| 731 } | 728 } |
| 732 | 729 |
| 733 TEST_F(DeviceInfoSyncBridgeTest, CountActiveDevices) { | 730 TEST_F(DeviceInfoSyncBridgeTest, CountActiveDevices) { |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 791 EXPECT_EQ(2, change_count()); | 788 EXPECT_EQ(2, change_count()); |
| 792 EXPECT_EQ(2u, processor()->put_multimap().size()); | 789 EXPECT_EQ(2u, processor()->put_multimap().size()); |
| 793 } | 790 } |
| 794 | 791 |
| 795 TEST_F(DeviceInfoSyncBridgeTest, DisableSync) { | 792 TEST_F(DeviceInfoSyncBridgeTest, DisableSync) { |
| 796 InitializeAndPump(); | 793 InitializeAndPump(); |
| 797 EXPECT_EQ(1u, bridge()->GetAllDeviceInfo().size()); | 794 EXPECT_EQ(1u, bridge()->GetAllDeviceInfo().size()); |
| 798 EXPECT_EQ(1, change_count()); | 795 EXPECT_EQ(1, change_count()); |
| 799 | 796 |
| 800 const DeviceInfoSpecifics specifics = CreateSpecifics(1); | 797 const DeviceInfoSpecifics specifics = CreateSpecifics(1); |
| 801 const SyncError error = bridge()->ApplySyncChanges( | 798 const ModelError error = bridge()->ApplySyncChanges( |
| 802 bridge()->CreateMetadataChangeList(), EntityAddList({specifics})); | 799 bridge()->CreateMetadataChangeList(), EntityAddList({specifics})); |
| 803 | 800 |
| 804 EXPECT_FALSE(error.IsSet()); | 801 EXPECT_FALSE(error.IsSet()); |
| 805 EXPECT_EQ(2u, bridge()->GetAllDeviceInfo().size()); | 802 EXPECT_EQ(2u, bridge()->GetAllDeviceInfo().size()); |
| 806 EXPECT_EQ(2, change_count()); | 803 EXPECT_EQ(2, change_count()); |
| 807 | 804 |
| 808 // Should clear out all local data and notify observers. | 805 // Should clear out all local data and notify observers. |
| 809 bridge()->DisableSync(); | 806 bridge()->DisableSync(); |
| 810 EXPECT_EQ(0u, bridge()->GetAllDeviceInfo().size()); | 807 EXPECT_EQ(0u, bridge()->GetAllDeviceInfo().size()); |
| 811 EXPECT_EQ(3, change_count()); | 808 EXPECT_EQ(3, change_count()); |
| 812 | 809 |
| 813 // Reloading from storage shouldn't contain remote data. | 810 // Reloading from storage shouldn't contain remote data. |
| 814 RestartBridge(); | 811 RestartBridge(); |
| 815 EXPECT_EQ(1u, bridge()->GetAllDeviceInfo().size()); | 812 EXPECT_EQ(1u, bridge()->GetAllDeviceInfo().size()); |
| 816 EXPECT_EQ(4, change_count()); | 813 EXPECT_EQ(4, change_count()); |
| 817 } | 814 } |
| 818 | 815 |
| 819 } // namespace | 816 } // namespace |
| 820 | 817 |
| 821 } // namespace syncer | 818 } // namespace syncer |
| OLD | NEW |