Index: components/autofill/core/browser/webdata/autofill_wallet_metadata_syncable_service_unittest.cc |
diff --git a/components/autofill/core/browser/webdata/autofill_wallet_metadata_syncable_service_unittest.cc b/components/autofill/core/browser/webdata/autofill_wallet_metadata_syncable_service_unittest.cc |
deleted file mode 100644 |
index 3ee21e0770d4a39afe204e4d5199e8b47bb303e3..0000000000000000000000000000000000000000 |
--- a/components/autofill/core/browser/webdata/autofill_wallet_metadata_syncable_service_unittest.cc |
+++ /dev/null |
@@ -1,771 +0,0 @@ |
-// Copyright 2015 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "components/autofill/core/browser/webdata/autofill_wallet_metadata_syncable_service.h" |
- |
-#include <utility> |
-#include <vector> |
- |
-#include "base/strings/string_number_conversions.h" |
-#include "base/time/time.h" |
-#include "components/autofill/core/browser/autofill_profile.h" |
-#include "components/autofill/core/browser/credit_card.h" |
-#include "sync/api/sync_change.h" |
-#include "sync/api/sync_change_processor_wrapper_for_test.h" |
-#include "sync/api/sync_error_factory_mock.h" |
-#include "sync/protocol/autofill_specifics.pb.h" |
-#include "sync/protocol/sync.pb.h" |
-#include "testing/gmock/include/gmock/gmock.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
- |
-namespace autofill { |
-namespace { |
- |
-using testing::DoAll; |
-using testing::ElementsAre; |
-using testing::Invoke; |
-using testing::NiceMock; |
-using testing::Return; |
-using testing::UnorderedElementsAre; |
-using testing::Value; |
-using testing::_; |
- |
-ACTION_P2(GetPointersTo, profiles, cards) { |
- for (auto& profile : *profiles) |
- arg0->insert(std::make_pair(profile.server_id(), &profile)); |
- |
- for (auto& card : *cards) |
- arg1->insert(std::make_pair(card.server_id(), &card)); |
-} |
- |
-ACTION_P(SaveDataIn, list) { |
- for (auto it = list->begin(); it != list->end(); ++it) { |
- if (it->server_id() == arg0.server_id()) { |
- *it = arg0; |
- return; |
- } |
- } |
- |
- list->push_back(arg0); |
-} |
- |
-// A syncable service for Wallet metadata that mocks out disk IO. |
-class MockService : public AutofillWalletMetadataSyncableService { |
- public: |
- MockService() |
- : AutofillWalletMetadataSyncableService(nullptr, std::string()) { |
- ON_CALL(*this, GetLocalData(_, _)) |
- .WillByDefault(DoAll(GetPointersTo(&server_profiles_, &server_cards_), |
- Return(true))); |
- |
- ON_CALL(*this, UpdateAddressStats(_)) |
- .WillByDefault(DoAll(SaveDataIn(&server_profiles_), Return(true))); |
- |
- ON_CALL(*this, UpdateCardStats(_)) |
- .WillByDefault(DoAll(SaveDataIn(&server_cards_), Return(true))); |
- |
- ON_CALL(*this, SendChangesToSyncServer(_)) |
- .WillByDefault( |
- Invoke(this, &MockService::SendChangesToSyncServerConcrete)); |
- } |
- |
- ~MockService() override {} |
- |
- MOCK_METHOD1(UpdateAddressStats, bool(const AutofillProfile&)); |
- MOCK_METHOD1(UpdateCardStats, bool(const CreditCard&)); |
- MOCK_METHOD1(SendChangesToSyncServer, |
- syncer::SyncError(const syncer::SyncChangeList&)); |
- |
- void ClearServerData() { |
- server_profiles_.clear(); |
- server_cards_.clear(); |
- } |
- |
- private: |
- MOCK_CONST_METHOD2(GetLocalData, |
- bool(std::map<std::string, AutofillProfile*>*, |
- std::map<std::string, CreditCard*>*)); |
- |
- syncer::SyncError SendChangesToSyncServerConcrete( |
- const syncer::SyncChangeList& changes) { |
- return AutofillWalletMetadataSyncableService::SendChangesToSyncServer( |
- changes); |
- } |
- |
- syncer::SyncDataList GetAllSyncDataConcrete(syncer::ModelType type) const { |
- return AutofillWalletMetadataSyncableService::GetAllSyncData(type); |
- } |
- |
- std::vector<AutofillProfile> server_profiles_; |
- std::vector<CreditCard> server_cards_; |
- |
- DISALLOW_COPY_AND_ASSIGN(MockService); |
-}; |
- |
-// Verify that nothing is sent to the sync server when there's no metadata on |
-// disk. |
-TEST(AutofillWalletMetadataSyncableServiceTest, NoMetadataToReturn) { |
- EXPECT_TRUE(NiceMock<MockService>() |
- .GetAllSyncData(syncer::AUTOFILL_WALLET_METADATA) |
- .empty()); |
-} |
- |
-AutofillProfile BuildAddress(const std::string& server_id, |
- int64 use_count, |
- int64 use_date) { |
- AutofillProfile profile(AutofillProfile::SERVER_PROFILE, server_id); |
- profile.set_use_count(use_count); |
- profile.set_use_date(base::Time::FromInternalValue(use_date)); |
- return profile; |
-} |
- |
-CreditCard BuildCard(const std::string& server_id, |
- int64 use_count, |
- int64 use_date) { |
- CreditCard card(CreditCard::MASKED_SERVER_CARD, server_id); |
- card.set_use_count(use_count); |
- card.set_use_date(base::Time::FromInternalValue(use_date)); |
- return card; |
-} |
- |
-MATCHER_P5(SyncDataMatches, |
- sync_tag, |
- metadata_type, |
- server_id, |
- use_count, |
- use_date, |
- "") { |
- return arg.IsValid() && |
- syncer::AUTOFILL_WALLET_METADATA == arg.GetDataType() && |
- sync_tag == syncer::SyncDataLocal(arg).GetTag() && |
- metadata_type == arg.GetSpecifics().wallet_metadata().type() && |
- server_id == arg.GetSpecifics().wallet_metadata().id() && |
- use_count == arg.GetSpecifics().wallet_metadata().use_count() && |
- use_date == arg.GetSpecifics().wallet_metadata().use_date(); |
-} |
- |
-// Verify that all metadata from disk is sent to the sync server. |
-TEST(AutofillWalletMetadataSyncableServiceTest, ReturnAllMetadata) { |
- NiceMock<MockService> local; |
- local.UpdateAddressStats(BuildAddress("addr", 1, 2)); |
- local.UpdateCardStats(BuildCard("card", 3, 4)); |
- |
- EXPECT_THAT( |
- local.GetAllSyncData(syncer::AUTOFILL_WALLET_METADATA), |
- UnorderedElementsAre( |
- SyncDataMatches("address-addr", |
- sync_pb::WalletMetadataSpecifics::ADDRESS, "addr", 1, |
- 2), |
- SyncDataMatches("card-card", sync_pb::WalletMetadataSpecifics::CARD, |
- "card", 3, 4))); |
-} |
- |
-void MergeMetadata(MockService* local, MockService* remote) { |
- // The wrapper for |remote| gives it a null change processor, so sending |
- // changes is not possible. |
- ON_CALL(*remote, SendChangesToSyncServer(_)) |
- .WillByDefault(Return(syncer::SyncError())); |
- |
- scoped_ptr<syncer::SyncErrorFactoryMock> errors( |
- new syncer::SyncErrorFactoryMock); |
- EXPECT_CALL(*errors, CreateAndUploadError(_, _)).Times(0); |
- EXPECT_FALSE( |
- local->MergeDataAndStartSyncing( |
- syncer::AUTOFILL_WALLET_METADATA, |
- remote->GetAllSyncData(syncer::AUTOFILL_WALLET_METADATA), |
- scoped_ptr<syncer::SyncChangeProcessor>( |
- new syncer::SyncChangeProcessorWrapperForTest(remote)), |
- errors.Pass()) |
- .error() |
- .IsSet()); |
-} |
- |
-// Verify that nothing is written to disk or sent to the sync server when two |
-// empty clients are syncing. |
-TEST(AutofillWalletMetadataSyncableServiceTest, TwoEmptyClients) { |
- NiceMock<MockService> local; |
- NiceMock<MockService> remote; |
- |
- EXPECT_CALL(local, UpdateAddressStats(_)).Times(0); |
- EXPECT_CALL(local, UpdateCardStats(_)).Times(0); |
- EXPECT_CALL(local, SendChangesToSyncServer(_)).Times(0); |
- |
- MergeMetadata(&local, &remote); |
-} |
- |
-MATCHER_P2(SyncChangeMatches, change_type, sync_tag, "") { |
- return arg.IsValid() && change_type == arg.change_type() && |
- sync_tag == syncer::SyncDataLocal(arg.sync_data()).GetTag() && |
- syncer::AUTOFILL_WALLET_METADATA == arg.sync_data().GetDataType(); |
-} |
- |
-// Verify that remote data without local counterpart is deleted during the |
-// initial merge. |
-TEST(AutofillWalletMetadataSyncableServiceTest, DeleteFromServerOnMerge) { |
- NiceMock<MockService> local; |
- NiceMock<MockService> remote; |
- remote.UpdateAddressStats(BuildAddress("addr", 1, 2)); |
- remote.UpdateCardStats(BuildCard("card", 3, 4)); |
- |
- EXPECT_CALL(local, UpdateAddressStats(_)).Times(0); |
- EXPECT_CALL(local, UpdateCardStats(_)).Times(0); |
- EXPECT_CALL( |
- local, |
- SendChangesToSyncServer(UnorderedElementsAre( |
- SyncChangeMatches(syncer::SyncChange::ACTION_DELETE, "address-addr"), |
- SyncChangeMatches(syncer::SyncChange::ACTION_DELETE, "card-card")))); |
- |
- MergeMetadata(&local, &remote); |
-} |
- |
-MATCHER_P6(SyncChangeAndDataMatch, |
- change_type, |
- sync_tag, |
- metadata_type, |
- server_id, |
- use_count, |
- use_date, |
- "") { |
- return Value(arg, SyncChangeMatches(change_type, sync_tag)) && |
- Value(arg.sync_data(), |
- SyncDataMatches(sync_tag, metadata_type, server_id, use_count, |
- use_date)); |
-} |
- |
-// Verify that local data is sent to the sync server during the initial merge, |
-// if the server does not have the data already. |
-TEST(AutofillWalletMetadataSyncableServiceTest, AddToServerOnMerge) { |
- NiceMock<MockService> local; |
- local.UpdateAddressStats(BuildAddress("addr", 1, 2)); |
- local.UpdateCardStats(BuildCard("card", 3, 4)); |
- NiceMock<MockService> remote; |
- |
- EXPECT_CALL(local, UpdateAddressStats(_)).Times(0); |
- EXPECT_CALL(local, UpdateCardStats(_)).Times(0); |
- EXPECT_CALL(local, |
- SendChangesToSyncServer(UnorderedElementsAre( |
- SyncChangeAndDataMatch( |
- syncer::SyncChange::ACTION_ADD, "address-addr", |
- sync_pb::WalletMetadataSpecifics::ADDRESS, "addr", 1, 2), |
- SyncChangeAndDataMatch( |
- syncer::SyncChange::ACTION_ADD, "card-card", |
- sync_pb::WalletMetadataSpecifics::CARD, "card", 3, 4)))); |
- |
- MergeMetadata(&local, &remote); |
-} |
- |
-// Verify that no data is written to disk or sent to the sync server if the |
-// local and remote data are identical during the initial merge. |
-TEST(AutofillWalletMetadataSyncableServiceTest, IgnoreIdenticalValuesOnMerge) { |
- NiceMock<MockService> local; |
- local.UpdateAddressStats(BuildAddress("addr", 1, 2)); |
- local.UpdateCardStats(BuildCard("card", 3, 4)); |
- NiceMock<MockService> remote; |
- remote.UpdateAddressStats(BuildAddress("addr", 1, 2)); |
- remote.UpdateCardStats(BuildCard("card", 3, 4)); |
- |
- EXPECT_CALL(local, UpdateAddressStats(_)).Times(0); |
- EXPECT_CALL(local, UpdateCardStats(_)).Times(0); |
- EXPECT_CALL(local, SendChangesToSyncServer(_)).Times(0); |
- |
- MergeMetadata(&local, &remote); |
-} |
- |
-MATCHER_P3(AutofillMetadataMatches, server_id, use_count, use_date, "") { |
- return arg.server_id() == server_id && |
- arg.use_count() == static_cast<size_t>(use_count) && |
- arg.use_date() == base::Time::FromInternalValue(use_date); |
-} |
- |
-// Verify that remote data with higher values of use count and last use date is |
-// saved to disk during the initial merge. |
-TEST(AutofillWalletMetadataSyncableServiceTest, |
- SaveHigherValuesLocallyOnMerge) { |
- NiceMock<MockService> local; |
- local.UpdateAddressStats(BuildAddress("addr", 1, 2)); |
- local.UpdateCardStats(BuildCard("card", 3, 4)); |
- NiceMock<MockService> remote; |
- remote.UpdateAddressStats(BuildAddress("addr", 10, 20)); |
- remote.UpdateCardStats(BuildCard("card", 30, 40)); |
- |
- EXPECT_CALL(local, |
- UpdateAddressStats(AutofillMetadataMatches("addr", 10, 20))); |
- EXPECT_CALL(local, UpdateCardStats(AutofillMetadataMatches("card", 30, 40))); |
- EXPECT_CALL(local, SendChangesToSyncServer(_)).Times(0); |
- |
- MergeMetadata(&local, &remote); |
-} |
- |
-// Verify that local data with higher values of use count and last use date is |
-// sent to the sync server during the initial merge. |
-TEST(AutofillWalletMetadataSyncableServiceTest, |
- SendHigherValuesToServerOnMerge) { |
- NiceMock<MockService> local; |
- local.UpdateAddressStats(BuildAddress("addr", 10, 20)); |
- local.UpdateCardStats(BuildCard("card", 30, 40)); |
- NiceMock<MockService> remote; |
- remote.UpdateAddressStats(BuildAddress("addr", 1, 2)); |
- remote.UpdateCardStats(BuildCard("card", 3, 4)); |
- |
- EXPECT_CALL(local, UpdateAddressStats(_)).Times(0); |
- EXPECT_CALL(local, UpdateCardStats(_)).Times(0); |
- EXPECT_CALL( |
- local, SendChangesToSyncServer(UnorderedElementsAre( |
- SyncChangeAndDataMatch( |
- syncer::SyncChange::ACTION_UPDATE, "address-addr", |
- sync_pb::WalletMetadataSpecifics::ADDRESS, "addr", 10, 20), |
- SyncChangeAndDataMatch( |
- syncer::SyncChange::ACTION_UPDATE, "card-card", |
- sync_pb::WalletMetadataSpecifics::CARD, "card", 30, 40)))); |
- |
- MergeMetadata(&local, &remote); |
-} |
- |
-// Verify that lower values of metadata are not sent to the sync server when |
-// local metadata is updated. |
-TEST(AutofillWalletMetadataSyncableServiceTest, |
- DontSendLowerValueToServerOnSingleChange) { |
- NiceMock<MockService> local; |
- local.UpdateAddressStats(BuildAddress("addr", 1, 2)); |
- local.UpdateCardStats(BuildCard("card", 3, 4)); |
- NiceMock<MockService> remote; |
- remote.UpdateAddressStats(BuildAddress("addr", 1, 2)); |
- remote.UpdateCardStats(BuildCard("card", 3, 4)); |
- MergeMetadata(&local, &remote); |
- AutofillProfile address = BuildAddress("addr", 0, 0); |
- CreditCard card = BuildCard("card", 0, 0); |
- |
- EXPECT_CALL(local, SendChangesToSyncServer(_)).Times(0); |
- |
- local.AutofillProfileChanged(AutofillProfileChange( |
- AutofillProfileChange::UPDATE, address.guid(), &address)); |
- local.CreditCardChanged( |
- CreditCardChange(CreditCardChange::UPDATE, card.guid(), &card)); |
-} |
- |
-// Verify that higher values of metadata are sent to the sync server when local |
-// metadata is updated. |
-TEST(AutofillWalletMetadataSyncableServiceTest, |
- SendHigherValuesToServerOnLocalSingleChange) { |
- NiceMock<MockService> local; |
- local.UpdateAddressStats(BuildAddress("addr", 1, 2)); |
- local.UpdateCardStats(BuildCard("card", 3, 4)); |
- NiceMock<MockService> remote; |
- remote.UpdateAddressStats(BuildAddress("addr", 1, 2)); |
- remote.UpdateCardStats(BuildCard("card", 3, 4)); |
- MergeMetadata(&local, &remote); |
- AutofillProfile address = BuildAddress("addr", 10, 20); |
- CreditCard card = BuildCard("card", 30, 40); |
- |
- EXPECT_CALL(local, |
- SendChangesToSyncServer(ElementsAre(SyncChangeAndDataMatch( |
- syncer::SyncChange::ACTION_UPDATE, "address-addr", |
- sync_pb::WalletMetadataSpecifics::ADDRESS, "addr", 10, 20)))); |
- EXPECT_CALL(local, |
- SendChangesToSyncServer(ElementsAre(SyncChangeAndDataMatch( |
- syncer::SyncChange::ACTION_UPDATE, "card-card", |
- sync_pb::WalletMetadataSpecifics::CARD, "card", 30, 40)))); |
- |
- local.AutofillProfileChanged(AutofillProfileChange( |
- AutofillProfileChange::UPDATE, address.guid(), &address)); |
- local.CreditCardChanged( |
- CreditCardChange(CreditCardChange::UPDATE, card.guid(), &card)); |
-} |
- |
-// Verify that one-off addition of metadata is not sent to the sync |
-// server. Metadata add and delete trigger multiple changes notification |
-// instead. |
-TEST(AutofillWalletMetadataSyncableServiceTest, DontAddToServerOnSingleChange) { |
- NiceMock<MockService> local; |
- local.UpdateAddressStats(BuildAddress("addr", 1, 2)); |
- local.UpdateCardStats(BuildCard("card", 3, 4)); |
- NiceMock<MockService> remote; |
- remote.UpdateAddressStats(BuildAddress("addr", 1, 2)); |
- remote.UpdateCardStats(BuildCard("card", 3, 4)); |
- MergeMetadata(&local, &remote); |
- AutofillProfile address = BuildAddress("new-addr", 5, 6); |
- CreditCard card = BuildCard("new-card", 7, 8); |
- |
- EXPECT_CALL(local, SendChangesToSyncServer(_)).Times(0); |
- |
- local.AutofillProfileChanged(AutofillProfileChange( |
- AutofillProfileChange::UPDATE, address.guid(), &address)); |
- local.CreditCardChanged( |
- CreditCardChange(CreditCardChange::UPDATE, card.guid(), &card)); |
-} |
- |
-// Verify that new metadata is sent to the sync server when multiple metadata |
-// values change at once. |
-TEST(AutofillWalletMetadataSyncableServiceTest, AddToServerOnMultiChange) { |
- NiceMock<MockService> local; |
- local.UpdateAddressStats(BuildAddress("addr", 1, 2)); |
- local.UpdateCardStats(BuildCard("card", 3, 4)); |
- NiceMock<MockService> remote; |
- remote.UpdateAddressStats(BuildAddress("addr", 1, 2)); |
- remote.UpdateCardStats(BuildCard("card", 3, 4)); |
- MergeMetadata(&local, &remote); |
- // These methods do not trigger notifications or sync: |
- local.UpdateAddressStats(BuildAddress("new-addr", 5, 6)); |
- local.UpdateCardStats(BuildCard("new-card", 7, 8)); |
- |
- EXPECT_CALL( |
- local, |
- SendChangesToSyncServer(UnorderedElementsAre( |
- SyncChangeAndDataMatch( |
- syncer::SyncChange::ACTION_ADD, "address-new-addr", |
- sync_pb::WalletMetadataSpecifics::ADDRESS, "new-addr", 5, 6), |
- SyncChangeAndDataMatch( |
- syncer::SyncChange::ACTION_ADD, "card-new-card", |
- sync_pb::WalletMetadataSpecifics::CARD, "new-card", 7, 8)))); |
- |
- local.AutofillMultipleChanged(); |
-} |
- |
-// Verify that higher values of existing metadata are sent to the sync server |
-// when multiple metadata values change at once. |
-TEST(AutofillWalletMetadataSyncableServiceTest, |
- UpdateToHigherValueOnServerOnMultiChange) { |
- NiceMock<MockService> local; |
- local.UpdateAddressStats(BuildAddress("addr", 1, 2)); |
- local.UpdateCardStats(BuildCard("card", 3, 4)); |
- NiceMock<MockService> remote; |
- remote.UpdateAddressStats(BuildAddress("addr", 1, 2)); |
- remote.UpdateCardStats(BuildCard("card", 3, 4)); |
- MergeMetadata(&local, &remote); |
- // These methods do not trigger notifications or sync: |
- local.UpdateAddressStats(BuildAddress("addr", 5, 6)); |
- local.UpdateCardStats(BuildCard("card", 7, 8)); |
- |
- EXPECT_CALL(local, |
- SendChangesToSyncServer(UnorderedElementsAre( |
- SyncChangeAndDataMatch( |
- syncer::SyncChange::ACTION_UPDATE, "address-addr", |
- sync_pb::WalletMetadataSpecifics::ADDRESS, "addr", 5, 6), |
- SyncChangeAndDataMatch( |
- syncer::SyncChange::ACTION_UPDATE, "card-card", |
- sync_pb::WalletMetadataSpecifics::CARD, "card", 7, 8)))); |
- |
- local.AutofillMultipleChanged(); |
-} |
- |
-// Verify that lower values of existing metadata are not sent to the sync server |
-// when multiple metadata values change at once. |
-TEST(AutofillWalletMetadataSyncableServiceTest, |
- DontUpdateToLowerValueOnServerOnMultiChange) { |
- NiceMock<MockService> local; |
- local.UpdateAddressStats(BuildAddress("addr", 1, 2)); |
- local.UpdateCardStats(BuildCard("card", 3, 4)); |
- NiceMock<MockService> remote; |
- remote.UpdateAddressStats(BuildAddress("addr", 1, 2)); |
- remote.UpdateCardStats(BuildCard("card", 3, 4)); |
- MergeMetadata(&local, &remote); |
- // These methods do not trigger notifications or sync: |
- local.UpdateAddressStats(BuildAddress("addr", 0, 0)); |
- local.UpdateCardStats(BuildCard("card", 0, 0)); |
- |
- EXPECT_CALL(local, SendChangesToSyncServer(_)).Times(0); |
- |
- local.AutofillMultipleChanged(); |
-} |
- |
-// Verify that erased local metadata is also erased from the sync server when |
-// multiple metadata values change at once. |
-TEST(AutofillWalletMetadataSyncableServiceTest, DeleteFromServerOnMultiChange) { |
- NiceMock<MockService> local; |
- local.UpdateAddressStats(BuildAddress("addr", 1, 2)); |
- local.UpdateCardStats(BuildCard("card", 3, 4)); |
- NiceMock<MockService> remote; |
- remote.UpdateAddressStats(BuildAddress("addr", 1, 2)); |
- remote.UpdateCardStats(BuildCard("card", 3, 4)); |
- MergeMetadata(&local, &remote); |
- // This method dooes not trigger notifications or sync: |
- local.ClearServerData(); |
- |
- EXPECT_CALL( |
- local, |
- SendChangesToSyncServer(UnorderedElementsAre( |
- SyncChangeMatches(syncer::SyncChange::ACTION_DELETE, "address-addr"), |
- SyncChangeMatches(syncer::SyncChange::ACTION_DELETE, "card-card")))); |
- |
- local.AutofillMultipleChanged(); |
-} |
- |
-// Verify that empty sync change from the sync server does not trigger writing |
-// to disk or sending any data to the sync server. |
-TEST(AutofillWalletMetadataSyncableServiceTest, EmptySyncChange) { |
- NiceMock<MockService> local; |
- local.UpdateAddressStats(BuildAddress("addr", 1, 2)); |
- local.UpdateCardStats(BuildCard("card", 3, 4)); |
- NiceMock<MockService> remote; |
- remote.UpdateAddressStats(BuildAddress("addr", 1, 2)); |
- remote.UpdateCardStats(BuildCard("card", 3, 4)); |
- MergeMetadata(&local, &remote); |
- |
- EXPECT_CALL(local, UpdateAddressStats(_)).Times(0); |
- EXPECT_CALL(local, UpdateCardStats(_)).Times(0); |
- EXPECT_CALL(local, SendChangesToSyncServer(_)).Times(0); |
- |
- local.ProcessSyncChanges(FROM_HERE, syncer::SyncChangeList()); |
-} |
- |
-syncer::SyncChange BuildChange( |
- syncer::SyncChange::SyncChangeType change_type, |
- const std::string& sync_tag, |
- sync_pb::WalletMetadataSpecifics::Type metadata_type, |
- const std::string& server_id, |
- int64 use_count, |
- int64 use_date) { |
- sync_pb::EntitySpecifics entity; |
- entity.mutable_wallet_metadata()->set_type(metadata_type); |
- entity.mutable_wallet_metadata()->set_id(server_id); |
- entity.mutable_wallet_metadata()->set_use_count(use_count); |
- entity.mutable_wallet_metadata()->set_use_date(use_date); |
- return syncer::SyncChange( |
- FROM_HERE, change_type, |
- syncer::SyncData::CreateLocalData(sync_tag, sync_tag, entity)); |
-} |
- |
-// Verify that new metadata from the sync server is ignored when processing |
-// on-going sync changes. There should be no disk writes or messages to the sync |
-// server. |
-TEST(AutofillWalletMetadataSyncableServiceTest, |
- IgnoreNewMetadataFromServerOnSyncChange) { |
- NiceMock<MockService> local; |
- local.UpdateAddressStats(BuildAddress("addr", 1, 2)); |
- local.UpdateCardStats(BuildCard("card", 3, 4)); |
- NiceMock<MockService> remote; |
- remote.UpdateAddressStats(BuildAddress("addr", 1, 2)); |
- remote.UpdateCardStats(BuildCard("card", 3, 4)); |
- MergeMetadata(&local, &remote); |
- syncer::SyncChangeList changes; |
- changes.push_back( |
- BuildChange(syncer::SyncChange::ACTION_ADD, "address-new-addr", |
- sync_pb::WalletMetadataSpecifics::ADDRESS, "new-addr", 5, 6)); |
- changes.push_back(BuildChange(syncer::SyncChange::ACTION_ADD, "card-new-card", |
- sync_pb::WalletMetadataSpecifics::CARD, |
- "new-card", 7, 8)); |
- |
- EXPECT_CALL(local, UpdateAddressStats(_)).Times(0); |
- EXPECT_CALL(local, UpdateCardStats(_)).Times(0); |
- EXPECT_CALL(local, SendChangesToSyncServer(_)).Times(0); |
- |
- local.ProcessSyncChanges(FROM_HERE, changes); |
-} |
- |
-// Verify that higher values of metadata from the sync server are saved to |
-// disk when processing on-going sync changes. |
-TEST(AutofillWalletMetadataSyncableServiceTest, |
- SaveHigherValuesFromServerOnSyncChange) { |
- NiceMock<MockService> local; |
- local.UpdateAddressStats(BuildAddress("addr", 1, 2)); |
- local.UpdateCardStats(BuildCard("card", 3, 4)); |
- NiceMock<MockService> remote; |
- remote.UpdateAddressStats(BuildAddress("addr", 1, 2)); |
- remote.UpdateCardStats(BuildCard("card", 3, 4)); |
- MergeMetadata(&local, &remote); |
- syncer::SyncChangeList changes; |
- changes.push_back( |
- BuildChange(syncer::SyncChange::ACTION_UPDATE, "address-addr", |
- sync_pb::WalletMetadataSpecifics::ADDRESS, "addr", 10, 20)); |
- changes.push_back(BuildChange(syncer::SyncChange::ACTION_UPDATE, "card-card", |
- sync_pb::WalletMetadataSpecifics::CARD, "card", |
- 30, 40)); |
- |
- EXPECT_CALL(local, |
- UpdateAddressStats(AutofillMetadataMatches("addr", 10, 20))); |
- EXPECT_CALL(local, UpdateCardStats(AutofillMetadataMatches("card", 30, 40))); |
- EXPECT_CALL(local, SendChangesToSyncServer(_)).Times(0); |
- |
- local.ProcessSyncChanges(FROM_HERE, changes); |
-} |
- |
-// Verify that higher local values of metadata are sent to the sync server when |
-// processing on-going sync changes. |
-TEST(AutofillWalletMetadataSyncableServiceTest, |
- SendHigherValuesToServerOnSyncChange) { |
- NiceMock<MockService> local; |
- local.UpdateAddressStats(BuildAddress("addr", 1, 2)); |
- local.UpdateCardStats(BuildCard("card", 3, 4)); |
- NiceMock<MockService> remote; |
- remote.UpdateAddressStats(BuildAddress("addr", 1, 2)); |
- remote.UpdateCardStats(BuildCard("card", 3, 4)); |
- MergeMetadata(&local, &remote); |
- syncer::SyncChangeList changes; |
- changes.push_back( |
- BuildChange(syncer::SyncChange::ACTION_UPDATE, "address-addr", |
- sync_pb::WalletMetadataSpecifics::ADDRESS, "addr", 0, 0)); |
- changes.push_back(BuildChange(syncer::SyncChange::ACTION_UPDATE, "card-card", |
- sync_pb::WalletMetadataSpecifics::CARD, "card", |
- 0, 0)); |
- |
- EXPECT_CALL(local, UpdateAddressStats(_)).Times(0); |
- EXPECT_CALL(local, UpdateCardStats(_)).Times(0); |
- EXPECT_CALL(local, |
- SendChangesToSyncServer(UnorderedElementsAre( |
- SyncChangeAndDataMatch( |
- syncer::SyncChange::ACTION_UPDATE, "address-addr", |
- sync_pb::WalletMetadataSpecifics::ADDRESS, "addr", 1, 2), |
- SyncChangeAndDataMatch( |
- syncer::SyncChange::ACTION_UPDATE, "card-card", |
- sync_pb::WalletMetadataSpecifics::CARD, "card", 3, 4)))); |
- |
- local.ProcessSyncChanges(FROM_HERE, changes); |
-} |
- |
-// Verify that addition of known metadata is treated the same as an update. |
-TEST(AutofillWalletMetadataSyncableServiceTest, |
- TreatAdditionOfKnownMetadataAsUpdateOnSyncChange) { |
- NiceMock<MockService> local; |
- local.UpdateAddressStats(BuildAddress("addr", 1, 2)); |
- local.UpdateCardStats(BuildCard("card", 3, 4)); |
- NiceMock<MockService> remote; |
- remote.UpdateAddressStats(BuildAddress("addr", 1, 2)); |
- remote.UpdateCardStats(BuildCard("card", 3, 4)); |
- MergeMetadata(&local, &remote); |
- syncer::SyncChangeList changes; |
- changes.push_back(BuildChange(syncer::SyncChange::ACTION_ADD, "address-addr", |
- sync_pb::WalletMetadataSpecifics::ADDRESS, |
- "addr", 0, 0)); |
- changes.push_back(BuildChange(syncer::SyncChange::ACTION_ADD, "card-card", |
- sync_pb::WalletMetadataSpecifics::CARD, "card", |
- 0, 0)); |
- |
- EXPECT_CALL(local, UpdateAddressStats(_)).Times(0); |
- EXPECT_CALL(local, UpdateCardStats(_)).Times(0); |
- EXPECT_CALL(local, |
- SendChangesToSyncServer(UnorderedElementsAre( |
- SyncChangeAndDataMatch( |
- syncer::SyncChange::ACTION_UPDATE, "address-addr", |
- sync_pb::WalletMetadataSpecifics::ADDRESS, "addr", 1, 2), |
- SyncChangeAndDataMatch( |
- syncer::SyncChange::ACTION_UPDATE, "card-card", |
- sync_pb::WalletMetadataSpecifics::CARD, "card", 3, 4)))); |
- |
- local.ProcessSyncChanges(FROM_HERE, changes); |
-} |
- |
-// Verify that an update of locally unknown metadata is ignored. There should be |
-// no disk writes and no messages sent to the server. |
-TEST(AutofillWalletMetadataSyncableServiceTest, |
- IgnoreUpdateOfUnknownMetadataOnSyncChange) { |
- NiceMock<MockService> local; |
- local.UpdateAddressStats(BuildAddress("addr", 1, 2)); |
- local.UpdateCardStats(BuildCard("card", 3, 4)); |
- NiceMock<MockService> remote; |
- remote.UpdateAddressStats(BuildAddress("addr", 1, 2)); |
- remote.UpdateCardStats(BuildCard("card", 3, 4)); |
- MergeMetadata(&local, &remote); |
- syncer::SyncChangeList changes; |
- changes.push_back(BuildChange( |
- syncer::SyncChange::ACTION_UPDATE, "address-unknown-addr", |
- sync_pb::WalletMetadataSpecifics::ADDRESS, "unknown-addr", 0, 0)); |
- changes.push_back(BuildChange( |
- syncer::SyncChange::ACTION_UPDATE, "card-unknown-card", |
- sync_pb::WalletMetadataSpecifics::CARD, "unknown-card", 0, 0)); |
- |
- EXPECT_CALL(local, UpdateAddressStats(_)).Times(0); |
- EXPECT_CALL(local, UpdateCardStats(_)).Times(0); |
- EXPECT_CALL(local, SendChangesToSyncServer(_)).Times(0); |
- |
- local.ProcessSyncChanges(FROM_HERE, changes); |
-} |
- |
-// Verify that deletion from the sync server of locally unknown metadata is |
-// ignored. There should be no disk writes and no messages sent to the server. |
-TEST(AutofillWalletMetadataSyncableServiceTest, |
- IgnoreDeleteOfUnknownMetadataOnSyncChange) { |
- NiceMock<MockService> local; |
- local.UpdateAddressStats(BuildAddress("addr", 1, 2)); |
- local.UpdateCardStats(BuildCard("card", 3, 4)); |
- NiceMock<MockService> remote; |
- remote.UpdateAddressStats(BuildAddress("addr", 1, 2)); |
- remote.UpdateCardStats(BuildCard("card", 3, 4)); |
- MergeMetadata(&local, &remote); |
- syncer::SyncChangeList changes; |
- changes.push_back(BuildChange( |
- syncer::SyncChange::ACTION_DELETE, "address-unknown-addr", |
- sync_pb::WalletMetadataSpecifics::ADDRESS, "unknown-addr", 0, 0)); |
- changes.push_back(BuildChange( |
- syncer::SyncChange::ACTION_DELETE, "card-unknown-card", |
- sync_pb::WalletMetadataSpecifics::CARD, "unknown-card", 0, 0)); |
- |
- EXPECT_CALL(local, UpdateAddressStats(_)).Times(0); |
- EXPECT_CALL(local, UpdateCardStats(_)).Times(0); |
- EXPECT_CALL(local, SendChangesToSyncServer(_)).Times(0); |
- |
- local.ProcessSyncChanges(FROM_HERE, changes); |
-} |
- |
-// Verify that deletion from the sync server of locally existing metadata will |
-// trigger an undelete message sent to the server. |
-TEST(AutofillWalletMetadataSyncableServiceTest, |
- UndeleteExistingMetadataOnSyncChange) { |
- NiceMock<MockService> local; |
- local.UpdateAddressStats(BuildAddress("addr", 1, 2)); |
- local.UpdateCardStats(BuildCard("card", 3, 4)); |
- NiceMock<MockService> remote; |
- remote.UpdateAddressStats(BuildAddress("addr", 1, 2)); |
- remote.UpdateCardStats(BuildCard("card", 3, 4)); |
- MergeMetadata(&local, &remote); |
- syncer::SyncChangeList changes; |
- changes.push_back( |
- BuildChange(syncer::SyncChange::ACTION_DELETE, "address-addr", |
- sync_pb::WalletMetadataSpecifics::ADDRESS, "addr", 0, 0)); |
- changes.push_back(BuildChange(syncer::SyncChange::ACTION_DELETE, "card-card", |
- sync_pb::WalletMetadataSpecifics::CARD, "card", |
- 0, 0)); |
- |
- EXPECT_CALL(local, UpdateAddressStats(_)).Times(0); |
- EXPECT_CALL(local, UpdateCardStats(_)).Times(0); |
- EXPECT_CALL(local, |
- SendChangesToSyncServer(UnorderedElementsAre( |
- SyncChangeAndDataMatch( |
- syncer::SyncChange::ACTION_ADD, "address-addr", |
- sync_pb::WalletMetadataSpecifics::ADDRESS, "addr", 1, 2), |
- SyncChangeAndDataMatch( |
- syncer::SyncChange::ACTION_ADD, "card-card", |
- sync_pb::WalletMetadataSpecifics::CARD, "card", 3, 4)))); |
- |
- local.ProcessSyncChanges(FROM_HERE, changes); |
-} |
- |
-// Verify that processing sync changes maintains the local cache of sync server |
-// data, which is used to avoid calling the expensive GetAllSyncData() function. |
-TEST(AutofillWalletMetadataSyncableServiceTest, |
- CacheIsUpToDateAfterSyncChange) { |
- NiceMock<MockService> local; |
- local.UpdateAddressStats(BuildAddress("addr1", 1, 2)); |
- local.UpdateAddressStats(BuildAddress("addr2", 3, 4)); |
- local.UpdateCardStats(BuildCard("card1", 5, 6)); |
- local.UpdateCardStats(BuildCard("card2", 7, 8)); |
- NiceMock<MockService> remote; |
- remote.UpdateAddressStats(BuildAddress("addr1", 1, 2)); |
- remote.UpdateAddressStats(BuildAddress("addr2", 3, 4)); |
- remote.UpdateCardStats(BuildCard("card1", 5, 6)); |
- remote.UpdateCardStats(BuildCard("card2", 7, 8)); |
- MergeMetadata(&local, &remote); |
- syncer::SyncChangeList changes; |
- changes.push_back( |
- BuildChange(syncer::SyncChange::ACTION_UPDATE, "address-addr1", |
- sync_pb::WalletMetadataSpecifics::ADDRESS, "addr1", 10, 20)); |
- changes.push_back(BuildChange(syncer::SyncChange::ACTION_UPDATE, "card-card1", |
- sync_pb::WalletMetadataSpecifics::CARD, "card1", |
- 50, 60)); |
- local.ProcessSyncChanges(FROM_HERE, changes); |
- // This method dooes not trigger notifications or sync: |
- local.ClearServerData(); |
- |
- EXPECT_CALL( |
- local, |
- SendChangesToSyncServer(UnorderedElementsAre( |
- SyncChangeMatches(syncer::SyncChange::ACTION_DELETE, "address-addr1"), |
- SyncChangeMatches(syncer::SyncChange::ACTION_DELETE, "address-addr2"), |
- SyncChangeMatches(syncer::SyncChange::ACTION_DELETE, "card-card1"), |
- SyncChangeMatches(syncer::SyncChange::ACTION_DELETE, "card-card2")))); |
- |
- local.AutofillMultipleChanged(); |
-} |
- |
-} // namespace |
-} // namespace autofill |