Commit 90230246 authored by Rushan Suleymanov's avatar Rushan Suleymanov Committed by Commit Bot

[Sync] Use mock change type processor in typed url sync bridge tests.

This is the second CL in chain which extends usage of the mock_processor
in typed url sync bridge tests.

This CL removes usage of old processor() method from all tests. The
following patch will finally replace the existing processor with
mock_processor.

Bug: 791939
Change-Id: Iee7070cdd2fe5f584c2f9b7da99486b7412a78a9
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2465851Reviewed-by: default avatarMarc Treib <treib@chromium.org>
Commit-Queue: Rushan Suleymanov <rushans@google.com>
Cr-Commit-Position: refs/heads/master@{#816567}
parent b0864983
...@@ -40,6 +40,7 @@ using syncer::MockModelTypeChangeProcessor; ...@@ -40,6 +40,7 @@ using syncer::MockModelTypeChangeProcessor;
using syncer::RecordingModelTypeChangeProcessor; using syncer::RecordingModelTypeChangeProcessor;
using testing::_; using testing::_;
using testing::AllOf; using testing::AllOf;
using testing::Mock;
using testing::NiceMock; using testing::NiceMock;
using testing::Pointee; using testing::Pointee;
...@@ -224,7 +225,7 @@ void VerifyDataBatch(std::map<std::string, TypedUrlSpecifics> expected, ...@@ -224,7 +225,7 @@ void VerifyDataBatch(std::map<std::string, TypedUrlSpecifics> expected,
EXPECT_TRUE(expected.empty()); EXPECT_TRUE(expected.empty());
} }
std::string IntToStroageKey(int id) { std::string IntToStorageKey(int id) {
std::string storage_key(sizeof(URLID), 0); std::string storage_key(sizeof(URLID), 0);
base::WriteBigEndian<URLID>(&storage_key[0], id); base::WriteBigEndian<URLID>(&storage_key[0], id);
return storage_key; return storage_key;
...@@ -294,9 +295,6 @@ class TestHistoryBackend : public HistoryBackend { ...@@ -294,9 +295,6 @@ class TestHistoryBackend : public HistoryBackend {
class TypedURLSyncBridgeTest : public testing::Test { class TypedURLSyncBridgeTest : public testing::Test {
public: public:
TypedURLSyncBridgeTest() : typed_url_sync_bridge_(nullptr) {}
~TypedURLSyncBridgeTest() override {}
void SetUp() override { void SetUp() override {
fake_history_backend_ = new TestHistoryBackend(); fake_history_backend_ = new TestHistoryBackend();
ASSERT_TRUE(test_dir_.CreateUniqueTempDir()); ASSERT_TRUE(test_dir_.CreateUniqueTempDir());
...@@ -329,23 +327,22 @@ class TypedURLSyncBridgeTest : public testing::Test { ...@@ -329,23 +327,22 @@ class TypedURLSyncBridgeTest : public testing::Test {
EXPECT_FALSE(error); EXPECT_FALSE(error);
} }
bool BuildAndPushLocalChanges(unsigned int num_typed_urls, void BuildAndPushLocalChanges(size_t num_typed_urls,
unsigned int num_reload_urls, size_t num_reload_urls,
const std::vector<std::string>& urls, const std::vector<std::string>& urls,
URLRows* rows, URLRows* rows,
std::vector<VisitVector>* visit_vectors) { std::vector<VisitVector>* visit_vectors) {
unsigned int total_urls = num_typed_urls + num_reload_urls; const size_t total_urls = num_typed_urls + num_reload_urls;
DCHECK(urls.size() >= total_urls); DCHECK(urls.size() >= total_urls);
if (!bridge()) DCHECK(bridge());
return false;
if (total_urls) { if (total_urls) {
// Create new URL rows, populate the mock backend with its visits, and // Create new URL rows, populate the mock backend with its visits, and
// send to the sync service. // send to the sync service.
URLRows changed_urls; URLRows changed_urls;
for (unsigned int i = 0; i < total_urls; ++i) { for (size_t i = 0; i < total_urls; ++i) {
int typed = i < num_typed_urls ? 1 : 0; const int typed = i < num_typed_urls ? 1 : 0;
VisitVector visits; VisitVector visits;
visit_vectors->push_back(visits); visit_vectors->push_back(visits);
rows->push_back(MakeTypedUrlRow(urls[i], kTitle, typed, i + 3, false, rows->push_back(MakeTypedUrlRow(urls[i], kTitle, typed, i + 3, false,
...@@ -358,11 +355,6 @@ class TypedURLSyncBridgeTest : public testing::Test { ...@@ -358,11 +355,6 @@ class TypedURLSyncBridgeTest : public testing::Test {
bridge()->OnURLsModified(fake_history_backend_.get(), changed_urls, bridge()->OnURLsModified(fake_history_backend_.get(), changed_urls,
/*is_from_expiration=*/false); /*is_from_expiration=*/false);
} }
// Check that communication with sync was successful.
if (num_typed_urls != processor().put_multimap().size())
return false;
return true;
} }
VisitVector ApplyUrlAndVisitsChange(const std::string& url, VisitVector ApplyUrlAndVisitsChange(const std::string& url,
...@@ -464,25 +456,12 @@ class TypedURLSyncBridgeTest : public testing::Test { ...@@ -464,25 +456,12 @@ class TypedURLSyncBridgeTest : public testing::Test {
} }
void VerifyProcessorReceivedValidEntityData() { void VerifyProcessorReceivedValidEntityData() {
for (const auto& it : processor().put_multimap()) { for (const auto& it : processor_.put_multimap()) {
EXPECT_GT(TypedURLSyncMetadataDatabase::StorageKeyToURLID(it.first), 0); EXPECT_GT(TypedURLSyncMetadataDatabase::StorageKeyToURLID(it.first), 0);
EXPECT_TRUE(it.second->specifics.has_typed_url()); EXPECT_TRUE(it.second->specifics.has_typed_url());
} }
} }
sync_pb::TypedUrlSpecifics GetLastUpdateForURL(const std::string& url) {
const std::string storage_key = GetStorageKey(url);
auto eq_range = processor().put_multimap().equal_range(storage_key);
if (eq_range.first == eq_range.second)
return sync_pb::TypedUrlSpecifics();
auto recorded_specifics_iterator = --eq_range.second;
EXPECT_NE(processor().put_multimap().end(), recorded_specifics_iterator);
EXPECT_TRUE(recorded_specifics_iterator->second->specifics.has_typed_url());
return recorded_specifics_iterator->second->specifics.typed_url();
}
static void DiffVisits(const VisitVector& history_visits, static void DiffVisits(const VisitVector& history_visits,
const sync_pb::TypedUrlSpecifics& sync_specifics, const sync_pb::TypedUrlSpecifics& sync_specifics,
std::vector<VisitInfo>* new_visits, std::vector<VisitInfo>* new_visits,
...@@ -534,13 +513,11 @@ class TypedURLSyncBridgeTest : public testing::Test { ...@@ -534,13 +513,11 @@ class TypedURLSyncBridgeTest : public testing::Test {
return bridge()->sync_metadata_database_; return bridge()->sync_metadata_database_;
} }
RecordingModelTypeChangeProcessor& processor() { return processor_; }
protected: protected:
base::test::SingleThreadTaskEnvironment task_environment_; base::test::SingleThreadTaskEnvironment task_environment_;
base::ScopedTempDir test_dir_; base::ScopedTempDir test_dir_;
scoped_refptr<TestHistoryBackend> fake_history_backend_; scoped_refptr<TestHistoryBackend> fake_history_backend_;
TypedURLSyncBridge* typed_url_sync_bridge_; TypedURLSyncBridge* typed_url_sync_bridge_ = nullptr;
// TODO(crbug.com/791939): should be removed after moving to // TODO(crbug.com/791939): should be removed after moving to
// |mock_processor_|. // |mock_processor_|.
RecordingModelTypeChangeProcessor processor_; RecordingModelTypeChangeProcessor processor_;
...@@ -586,8 +563,8 @@ TEST_F(TypedURLSyncBridgeTest, GetData) { ...@@ -586,8 +563,8 @@ TEST_F(TypedURLSyncBridgeTest, GetData) {
WriteToTypedUrlSpecifics(row2, visits2, &typed_url2); WriteToTypedUrlSpecifics(row2, visits2, &typed_url2);
// Check that the local cache is still correct. // Check that the local cache is still correct.
VerifyGetData({IntToStroageKey(1)}, {typed_url1}); VerifyGetData({IntToStorageKey(1)}, {typed_url1});
VerifyGetData({IntToStroageKey(2)}, {typed_url2}); VerifyGetData({IntToStorageKey(2)}, {typed_url2});
} }
// Add a typed url locally and one to sync with the same data. Starting sync // Add a typed url locally and one to sync with the same data. Starting sync
...@@ -607,7 +584,7 @@ TEST_F(TypedURLSyncBridgeTest, MergeUrlNoChange) { ...@@ -607,7 +584,7 @@ TEST_F(TypedURLSyncBridgeTest, MergeUrlNoChange) {
// Even Sync already know the url, bridge still need to tell sync about // Even Sync already know the url, bridge still need to tell sync about
// storage keys. // storage keys.
const std::string expected_storage_key = IntToStroageKey(1); const std::string expected_storage_key = IntToStorageKey(1);
EXPECT_CALL(mock_processor_, EXPECT_CALL(mock_processor_,
UpdateStorageKey( UpdateStorageKey(
AllOf(HasURLInSpecifics(kURL), HasTitleInSpecifics(kTitle)), AllOf(HasURLInSpecifics(kURL), HasTitleInSpecifics(kTitle)),
...@@ -629,8 +606,8 @@ TEST_F(TypedURLSyncBridgeTest, MergeUrlNoTypedUrl) { ...@@ -629,8 +606,8 @@ TEST_F(TypedURLSyncBridgeTest, MergeUrlNoTypedUrl) {
row.set_typed_count(1); row.set_typed_count(1);
fake_history_backend_->SetVisitsForUrl(&row, visits); fake_history_backend_->SetVisitsForUrl(&row, visits);
EXPECT_CALL(mock_processor_, Put(_, _, _)).Times(0);
StartSyncing(std::vector<TypedUrlSpecifics>()); StartSyncing(std::vector<TypedUrlSpecifics>());
EXPECT_TRUE(processor().put_multimap().empty());
MetadataBatch metadata_batch; MetadataBatch metadata_batch;
metadata_store()->GetAllSyncMetadata(&metadata_batch); metadata_store()->GetAllSyncMetadata(&metadata_batch);
...@@ -644,6 +621,9 @@ TEST_F(TypedURLSyncBridgeTest, MergeUrlEmptySync) { ...@@ -644,6 +621,9 @@ TEST_F(TypedURLSyncBridgeTest, MergeUrlEmptySync) {
URLRow row = MakeTypedUrlRow(kURL, kTitle, 1, 3, false, &visits); URLRow row = MakeTypedUrlRow(kURL, kTitle, 1, 3, false, &visits);
fake_history_backend_->SetVisitsForUrl(&row, visits); fake_history_backend_->SetVisitsForUrl(&row, visits);
EntityData entity_data;
EXPECT_CALL(mock_processor_, Put(GetStorageKey(kURL), _, _))
.WillOnce(SaveArgPointeeMove<1>(&entity_data));
StartSyncing(std::vector<TypedUrlSpecifics>()); StartSyncing(std::vector<TypedUrlSpecifics>());
// Check that the local cache was is still correct. // Check that the local cache was is still correct.
...@@ -653,18 +633,14 @@ TEST_F(TypedURLSyncBridgeTest, MergeUrlEmptySync) { ...@@ -653,18 +633,14 @@ TEST_F(TypedURLSyncBridgeTest, MergeUrlEmptySync) {
VerifyAllLocalHistoryData({*typed_url}); VerifyAllLocalHistoryData({*typed_url});
// Check that the server was updated correctly. // Check that the server was updated correctly.
ASSERT_EQ(1U, processor().put_multimap().size()); const TypedUrlSpecifics& committed_specifics =
auto recorded_specifics_iterator = entity_data.specifics.typed_url();
processor().put_multimap().find(GetStorageKey(typed_url->url()));
EXPECT_NE(processor().put_multimap().end(), recorded_specifics_iterator); ASSERT_EQ(1, committed_specifics.visits_size());
TypedUrlSpecifics recorded_specifics = EXPECT_EQ(3, committed_specifics.visits(0));
recorded_specifics_iterator->second->specifics.typed_url(); ASSERT_EQ(1, committed_specifics.visit_transitions_size());
ASSERT_EQ(1, recorded_specifics.visits_size());
EXPECT_EQ(3, recorded_specifics.visits(0));
ASSERT_EQ(1, recorded_specifics.visit_transitions_size());
EXPECT_EQ(static_cast<const int>(visits[0].transition), EXPECT_EQ(static_cast<const int>(visits[0].transition),
recorded_specifics.visit_transitions(0)); committed_specifics.visit_transitions(0));
} }
// Starting sync with no local data should just push the synced url into the // Starting sync with no local data should just push the synced url into the
...@@ -677,16 +653,13 @@ TEST_F(TypedURLSyncBridgeTest, MergeUrlEmptyLocal) { ...@@ -677,16 +653,13 @@ TEST_F(TypedURLSyncBridgeTest, MergeUrlEmptyLocal) {
sync_pb::TypedUrlSpecifics* typed_url = entity_specifics.mutable_typed_url(); sync_pb::TypedUrlSpecifics* typed_url = entity_specifics.mutable_typed_url();
WriteToTypedUrlSpecifics(row, visits, typed_url); WriteToTypedUrlSpecifics(row, visits, typed_url);
// Verify processor receive correct update storage key.
EXPECT_CALL(mock_processor_, Put(_, _, _)).Times(0);
EXPECT_CALL(mock_processor_,
UpdateStorageKey(
AllOf(HasURLInSpecifics(kURL), HasTitleInSpecifics(kTitle)),
IntToStorageKey(1), _));
StartSyncing({*typed_url}); StartSyncing({*typed_url});
EXPECT_EQ(0u, processor().put_multimap().size());
EXPECT_EQ(1u, processor().update_multimap().size());
// Verify processor receive correct upate storage key.
const auto& it = processor().update_multimap().begin();
EXPECT_EQ(it->first, IntToStroageKey(1));
EXPECT_TRUE(it->second->specifics.has_typed_url());
EXPECT_EQ(it->second->specifics.typed_url().url(), kURL);
EXPECT_EQ(it->second->specifics.typed_url().title(), kTitle);
// Check that the backend was updated correctly. // Check that the backend was updated correctly.
VisitVector all_visits; VisitVector all_visits;
...@@ -719,6 +692,10 @@ TEST_F(TypedURLSyncBridgeTest, MergeUrlOldLocal) { ...@@ -719,6 +692,10 @@ TEST_F(TypedURLSyncBridgeTest, MergeUrlOldLocal) {
sync_pb::EntitySpecifics entity_specifics; sync_pb::EntitySpecifics entity_specifics;
sync_pb::TypedUrlSpecifics* typed_url = entity_specifics.mutable_typed_url(); sync_pb::TypedUrlSpecifics* typed_url = entity_specifics.mutable_typed_url();
WriteToTypedUrlSpecifics(server_row, server_visits, typed_url); WriteToTypedUrlSpecifics(server_row, server_visits, typed_url);
EntityData entity_data;
EXPECT_CALL(mock_processor_, Put(GetStorageKey(kURL), _, _))
.WillOnce(SaveArgPointeeMove<1>(&entity_data));
StartSyncing({*typed_url}); StartSyncing({*typed_url});
// Check that the backend was updated correctly. // Check that the backend was updated correctly.
...@@ -738,9 +715,8 @@ TEST_F(TypedURLSyncBridgeTest, MergeUrlOldLocal) { ...@@ -738,9 +715,8 @@ TEST_F(TypedURLSyncBridgeTest, MergeUrlOldLocal) {
// Check that the sync was updated correctly. // Check that the sync was updated correctly.
// The local history visit should not be added to sync because it is older // The local history visit should not be added to sync because it is older
// than sync's oldest visit. // than sync's oldest visit.
ASSERT_EQ(1U, processor().put_multimap().size()); const sync_pb::TypedUrlSpecifics& url_specifics =
entity_data.specifics.typed_url();
sync_pb::TypedUrlSpecifics url_specifics = GetLastUpdateForURL(kURL);
ASSERT_EQ(1, url_specifics.visits_size()); ASSERT_EQ(1, url_specifics.visits_size());
EXPECT_EQ(6, url_specifics.visits(0)); EXPECT_EQ(6, url_specifics.visits(0));
ASSERT_EQ(1, url_specifics.visit_transitions_size()); ASSERT_EQ(1, url_specifics.visit_transitions_size());
...@@ -766,6 +742,10 @@ TEST_F(TypedURLSyncBridgeTest, MergeUrlOldSync) { ...@@ -766,6 +742,10 @@ TEST_F(TypedURLSyncBridgeTest, MergeUrlOldSync) {
sync_pb::EntitySpecifics entity_specifics; sync_pb::EntitySpecifics entity_specifics;
sync_pb::TypedUrlSpecifics* typed_url = entity_specifics.mutable_typed_url(); sync_pb::TypedUrlSpecifics* typed_url = entity_specifics.mutable_typed_url();
WriteToTypedUrlSpecifics(server_row, server_visits, typed_url); WriteToTypedUrlSpecifics(server_row, server_visits, typed_url);
EntityData entity_data;
EXPECT_CALL(mock_processor_, Put(GetStorageKey(kURL), _, _))
.WillOnce(SaveArgPointeeMove<1>(&entity_data));
StartSyncing({*typed_url}); StartSyncing({*typed_url});
// Check that the backend was not updated. // Check that the backend was not updated.
...@@ -780,9 +760,8 @@ TEST_F(TypedURLSyncBridgeTest, MergeUrlOldSync) { ...@@ -780,9 +760,8 @@ TEST_F(TypedURLSyncBridgeTest, MergeUrlOldSync) {
// Check that the server was updated correctly. // Check that the server was updated correctly.
// The local history visit should not be added to sync because it is older // The local history visit should not be added to sync because it is older
// than sync's oldest visit. // than sync's oldest visit.
ASSERT_EQ(1U, processor().put_multimap().size()); const sync_pb::TypedUrlSpecifics& url_specifics =
entity_data.specifics.typed_url();
sync_pb::TypedUrlSpecifics url_specifics = GetLastUpdateForURL(kURL);
ASSERT_EQ(1, url_specifics.visits_size()); ASSERT_EQ(1, url_specifics.visits_size());
EXPECT_EQ(3, url_specifics.visits(0)); EXPECT_EQ(3, url_specifics.visits(0));
EXPECT_EQ(kTitle2, url_specifics.title()); EXPECT_EQ(kTitle2, url_specifics.title());
...@@ -811,15 +790,15 @@ TEST_F(TypedURLSyncBridgeTest, MergeUrlsWithUsernameAndPassword) { ...@@ -811,15 +790,15 @@ TEST_F(TypedURLSyncBridgeTest, MergeUrlsWithUsernameAndPassword) {
sync_pb::TypedUrlSpecifics* typed_url = entity_specifics.mutable_typed_url(); sync_pb::TypedUrlSpecifics* typed_url = entity_specifics.mutable_typed_url();
WriteToTypedUrlSpecifics(server_row, server_visits, typed_url); WriteToTypedUrlSpecifics(server_row, server_visits, typed_url);
// Check username/password url is not synced.
EXPECT_CALL(mock_processor_, Put(_, _, _));
// Make sure there is no crash when merge two urls. // Make sure there is no crash when merge two urls.
StartSyncing({*typed_url}); StartSyncing({*typed_url});
// Notify typed url sync service of the update. // Notify typed url sync service of the update.
bridge()->OnURLVisited(fake_history_backend_.get(), ui::PAGE_TRANSITION_TYPED, bridge()->OnURLVisited(fake_history_backend_.get(), ui::PAGE_TRANSITION_TYPED,
server_row, RedirectList(), SinceEpoch(7)); server_row, RedirectList(), SinceEpoch(7));
// Check username/password url is not synced.
ASSERT_EQ(1U, processor().put_multimap().size());
} }
// Starting sync with both local and sync have same typed URL, but different // Starting sync with both local and sync have same typed URL, but different
...@@ -837,8 +816,8 @@ TEST_F(TypedURLSyncBridgeTest, SimpleMerge) { ...@@ -837,8 +816,8 @@ TEST_F(TypedURLSyncBridgeTest, SimpleMerge) {
sync_pb::TypedUrlSpecifics* typed_url = entity_specifics.mutable_typed_url(); sync_pb::TypedUrlSpecifics* typed_url = entity_specifics.mutable_typed_url();
WriteToTypedUrlSpecifics(row2, visits2, typed_url); WriteToTypedUrlSpecifics(row2, visits2, typed_url);
EXPECT_CALL(mock_processor_, Put(_, _, _));
StartSyncing({*typed_url}); StartSyncing({*typed_url});
EXPECT_EQ(1u, processor().put_multimap().size());
// Check that the backend was updated correctly. // Check that the backend was updated correctly.
VisitVector all_visits; VisitVector all_visits;
...@@ -864,18 +843,18 @@ TEST_F(TypedURLSyncBridgeTest, AddLocalTypedUrl) { ...@@ -864,18 +843,18 @@ TEST_F(TypedURLSyncBridgeTest, AddLocalTypedUrl) {
std::vector<std::string> urls; std::vector<std::string> urls;
urls.push_back(kURL); urls.push_back(kURL);
EntityData entity_data;
EXPECT_CALL(mock_processor_, Put(_, _, _))
.WillOnce(SaveArgPointeeMove<1>(&entity_data));
StartSyncing(std::vector<TypedUrlSpecifics>()); StartSyncing(std::vector<TypedUrlSpecifics>());
ASSERT_TRUE(BuildAndPushLocalChanges(1, 0, urls, &url_rows, &visit_vectors)); BuildAndPushLocalChanges(1, 0, urls, &url_rows, &visit_vectors);
URLRow url_row = url_rows.front(); URLRow url_row = url_rows.front();
VisitVector visits = visit_vectors.front(); VisitVector visits = visit_vectors.front();
// Check change processor.
ASSERT_EQ(1U, processor().put_multimap().size());
// Get typed url specifics. // Get typed url specifics.
auto it = processor().put_multimap().begin(); const sync_pb::TypedUrlSpecifics& url_specifics =
sync_pb::TypedUrlSpecifics url_specifics = it->second->specifics.typed_url(); entity_data.specifics.typed_url();
EXPECT_TRUE(URLsEqual(url_row, url_specifics)); EXPECT_TRUE(URLsEqual(url_row, url_specifics));
ASSERT_EQ(1, url_specifics.visits_size()); ASSERT_EQ(1, url_specifics.visits_size());
...@@ -906,13 +885,14 @@ TEST_F(TypedURLSyncBridgeTest, UpdateLocalTypedUrl) { ...@@ -906,13 +885,14 @@ TEST_F(TypedURLSyncBridgeTest, UpdateLocalTypedUrl) {
changed_urls.push_back(url_row); changed_urls.push_back(url_row);
// Notify typed url sync service of the update. // Notify typed url sync service of the update.
const auto& changes_multimap = processor().put_multimap(); EntityData entity_data;
ASSERT_EQ(0U, changes_multimap.size()); EXPECT_CALL(mock_processor_, Put(GetStorageKey(kURL), _, _))
.WillOnce(SaveArgPointeeMove<1>(&entity_data));
bridge()->OnURLsModified(fake_history_backend_.get(), changed_urls, bridge()->OnURLsModified(fake_history_backend_.get(), changed_urls,
/*is_from_expiration=*/false); /*is_from_expiration=*/false);
ASSERT_EQ(1U, changes_multimap.size());
sync_pb::TypedUrlSpecifics url_specifics = GetLastUpdateForURL(kURL); const sync_pb::TypedUrlSpecifics& url_specifics =
entity_data.specifics.typed_url();
EXPECT_TRUE(URLsEqual(url_row, url_specifics)); EXPECT_TRUE(URLsEqual(url_row, url_specifics));
ASSERT_EQ(3, url_specifics.visits_size()); ASSERT_EQ(3, url_specifics.visits_size());
...@@ -935,13 +915,14 @@ TEST_F(TypedURLSyncBridgeTest, UpdateLocalTypedUrl) { ...@@ -935,13 +915,14 @@ TEST_F(TypedURLSyncBridgeTest, UpdateLocalTypedUrl) {
TEST_F(TypedURLSyncBridgeTest, ReloadVisitLocalTypedUrl) { TEST_F(TypedURLSyncBridgeTest, ReloadVisitLocalTypedUrl) {
URLRows url_rows; URLRows url_rows;
std::vector<VisitVector> visit_vectors; std::vector<VisitVector> visit_vectors;
std::vector<std::string> urls;
urls.push_back(kURL);
StartSyncing(std::vector<TypedUrlSpecifics>()); StartSyncing(std::vector<TypedUrlSpecifics>());
ASSERT_TRUE(BuildAndPushLocalChanges(1, 0, urls, &url_rows, &visit_vectors));
const auto& changes_multimap = processor().put_multimap(); EXPECT_CALL(mock_processor_, Put(_, _, _));
ASSERT_EQ(1U, changes_multimap.size()); BuildAndPushLocalChanges(1, 0, {kURL}, &url_rows, &visit_vectors);
// Check that Put method has been already called.
Mock::VerifyAndClearExpectations(&mock_processor_);
// Update the URL row, adding another typed visit to the visit vector. // Update the URL row, adding another typed visit to the visit vector.
URLRow url_row = url_rows.front(); URLRow url_row = url_rows.front();
...@@ -956,7 +937,6 @@ TEST_F(TypedURLSyncBridgeTest, ReloadVisitLocalTypedUrl) { ...@@ -956,7 +937,6 @@ TEST_F(TypedURLSyncBridgeTest, ReloadVisitLocalTypedUrl) {
ui::PAGE_TRANSITION_RELOAD, url_row, RedirectList(), ui::PAGE_TRANSITION_RELOAD, url_row, RedirectList(),
SinceEpoch(7)); SinceEpoch(7));
// No change pass to processor // No change pass to processor
ASSERT_EQ(1U, changes_multimap.size());
} }
// Appends a LINK visit to an existing typed url. Check that sync does not // Appends a LINK visit to an existing typed url. Check that sync does not
...@@ -968,9 +948,11 @@ TEST_F(TypedURLSyncBridgeTest, LinkVisitLocalTypedUrl) { ...@@ -968,9 +948,11 @@ TEST_F(TypedURLSyncBridgeTest, LinkVisitLocalTypedUrl) {
urls.push_back(kURL); urls.push_back(kURL);
StartSyncing(std::vector<TypedUrlSpecifics>()); StartSyncing(std::vector<TypedUrlSpecifics>());
ASSERT_TRUE(BuildAndPushLocalChanges(1, 0, urls, &url_rows, &visit_vectors)); EXPECT_CALL(mock_processor_, Put(_, _, _));
const auto& changes_multimap = processor().put_multimap(); BuildAndPushLocalChanges(1, 0, urls, &url_rows, &visit_vectors);
ASSERT_EQ(1U, changes_multimap.size());
// Check that Put method has been already called.
Mock::VerifyAndClearExpectations(&mock_processor_);
// Update the URL row, adding a non-typed visit to the visit vector. // Update the URL row, adding a non-typed visit to the visit vector.
URLRow url_row = url_rows.front(); URLRow url_row = url_rows.front();
...@@ -983,7 +965,6 @@ TEST_F(TypedURLSyncBridgeTest, LinkVisitLocalTypedUrl) { ...@@ -983,7 +965,6 @@ TEST_F(TypedURLSyncBridgeTest, LinkVisitLocalTypedUrl) {
bridge()->OnURLVisited(fake_history_backend_.get(), transition, url_row, bridge()->OnURLVisited(fake_history_backend_.get(), transition, url_row,
RedirectList(), SinceEpoch(6)); RedirectList(), SinceEpoch(6));
// No change pass to processor // No change pass to processor
ASSERT_EQ(1U, changes_multimap.size());
} }
// Appends a series of LINK visits followed by a TYPED one to an existing typed // Appends a series of LINK visits followed by a TYPED one to an existing typed
...@@ -1005,14 +986,15 @@ TEST_F(TypedURLSyncBridgeTest, TypedVisitLocalTypedUrl) { ...@@ -1005,14 +986,15 @@ TEST_F(TypedURLSyncBridgeTest, TypedVisitLocalTypedUrl) {
fake_history_backend_->SetVisitsForUrl(&url_row, visits); fake_history_backend_->SetVisitsForUrl(&url_row, visits);
// Notify typed url sync service of typed visit. // Notify typed url sync service of typed visit.
const auto& changes_multimap = processor().put_multimap(); EntityData entity_data;
ASSERT_EQ(0U, changes_multimap.size()); EXPECT_CALL(mock_processor_, Put(GetStorageKey(kURL), _, _))
.WillOnce(SaveArgPointeeMove<1>(&entity_data));
ui::PageTransition transition = ui::PAGE_TRANSITION_TYPED; ui::PageTransition transition = ui::PAGE_TRANSITION_TYPED;
bridge()->OnURLVisited(fake_history_backend_.get(), transition, url_row, bridge()->OnURLVisited(fake_history_backend_.get(), transition, url_row,
RedirectList(), Time()); RedirectList(), Time());
ASSERT_EQ(1U, changes_multimap.size()); const sync_pb::TypedUrlSpecifics& url_specifics =
sync_pb::TypedUrlSpecifics url_specifics = GetLastUpdateForURL(kURL); entity_data.specifics.typed_url();
EXPECT_TRUE(URLsEqual(url_row, url_specifics)); EXPECT_TRUE(URLsEqual(url_row, url_specifics));
EXPECT_EQ(4, url_specifics.visits_size()); EXPECT_EQ(4, url_specifics.visits_size());
...@@ -1040,32 +1022,25 @@ TEST_F(TypedURLSyncBridgeTest, DeleteLocalTypedUrl) { ...@@ -1040,32 +1022,25 @@ TEST_F(TypedURLSyncBridgeTest, DeleteLocalTypedUrl) {
urls.push_back("http://foo.com/"); urls.push_back("http://foo.com/");
StartSyncing(std::vector<TypedUrlSpecifics>()); StartSyncing(std::vector<TypedUrlSpecifics>());
ASSERT_TRUE(BuildAndPushLocalChanges(4, 0, urls, &url_rows, &visit_vectors)); EXPECT_CALL(mock_processor_, Put(_, _, _)).Times(4);
const auto& changes_multimap = processor().put_multimap(); BuildAndPushLocalChanges(4, 0, urls, &url_rows, &visit_vectors);
ASSERT_EQ(4U, changes_multimap.size());
// Delete some urls from backend and create deleted row vector. // Delete some urls from backend and create deleted row vector.
URLRows rows; URLRows rows;
std::set<std::string> deleted_storage_keys; std::set<std::string> deleted_storage_keys;
for (size_t i = 0; i < 3u; ++i) { for (size_t i = 0; i < 3u; ++i) {
std::string storage_key = GetStorageKey(url_rows[i].url().spec()); const std::string storage_key = GetStorageKey(url_rows[i].url().spec());
deleted_storage_keys.insert(storage_key); deleted_storage_keys.insert(storage_key);
fake_history_backend_->DeleteURL(url_rows[i].url()); fake_history_backend_->DeleteURL(url_rows[i].url());
rows.push_back(url_rows[i]); rows.push_back(url_rows[i]);
} }
// Notify typed url sync service. // Notify typed url sync service.
for (const std::string& storage_key : deleted_storage_keys) {
EXPECT_CALL(mock_processor_, Delete(storage_key, _));
}
bridge()->OnURLsDeleted(fake_history_backend_.get(), false, false, rows, bridge()->OnURLsDeleted(fake_history_backend_.get(), false, false, rows,
std::set<GURL>()); std::set<GURL>());
const auto& delete_set = processor().delete_set();
ASSERT_EQ(3U, delete_set.size());
for (const std::string& storage_key : delete_set) {
EXPECT_TRUE(deleted_storage_keys.find(storage_key) !=
deleted_storage_keys.end());
deleted_storage_keys.erase(storage_key);
}
ASSERT_TRUE(deleted_storage_keys.empty());
} }
// Delete the last typed visit for one (but not all) local typed urls. Check // Delete the last typed visit for one (but not all) local typed urls. Check
...@@ -1093,12 +1068,9 @@ TEST_F(TypedURLSyncBridgeTest, DeleteLocalTypedUrlVisit) { ...@@ -1093,12 +1068,9 @@ TEST_F(TypedURLSyncBridgeTest, DeleteLocalTypedUrlVisit) {
URLRow row1_updated; URLRow row1_updated;
ASSERT_TRUE(fake_history_backend_->GetURL(GURL(kURL), &row1_updated)); ASSERT_TRUE(fake_history_backend_->GetURL(GURL(kURL), &row1_updated));
URLRows changed_urls{row1_updated}; URLRows changed_urls{row1_updated};
EXPECT_CALL(mock_processor_, Delete(GetStorageKey(kURL), _));
bridge()->OnURLsModified(fake_history_backend_.get(), changed_urls, bridge()->OnURLsModified(fake_history_backend_.get(), changed_urls,
/*is_from_expiration=*/false); /*is_from_expiration=*/false);
const auto& delete_set = processor().delete_set();
EXPECT_EQ(1U, delete_set.size());
EXPECT_EQ(1U, delete_set.count(GetStorageKey(kURL)));
} }
// Expire several (but not all) local typed urls. This has only impact on local // Expire several (but not all) local typed urls. This has only impact on local
...@@ -1116,9 +1088,9 @@ TEST_F(TypedURLSyncBridgeTest, ExpireLocalTypedUrl) { ...@@ -1116,9 +1088,9 @@ TEST_F(TypedURLSyncBridgeTest, ExpireLocalTypedUrl) {
urls.push_back("http://bar.com/"); urls.push_back("http://bar.com/");
// Add the URLs into the history db and notify the bridge. // Add the URLs into the history db and notify the bridge.
ASSERT_TRUE(BuildAndPushLocalChanges(5, 0, urls, &url_rows, &visit_vectors)); EXPECT_CALL(mock_processor_, Put(_, _, _)).Times(urls.size());
ASSERT_EQ(5U, processor().put_multimap().size()); EXPECT_CALL(mock_processor_, UntrackEntityForStorageKey(_)).Times(0);
int previous_put_size = processor().put_multimap().size(); BuildAndPushLocalChanges(urls.size(), 0, urls, &url_rows, &visit_vectors);
// Store the typed_urls incl. metadata into the bridge's database. // Store the typed_urls incl. metadata into the bridge's database.
for (const std::string& url : urls) { for (const std::string& url : urls) {
ApplyUrlAndVisitsChange(url, kTitle, /*typed_count=*/1, /*last_visit=*/3, ApplyUrlAndVisitsChange(url, kTitle, /*typed_count=*/1, /*last_visit=*/3,
...@@ -1129,30 +1101,27 @@ TEST_F(TypedURLSyncBridgeTest, ExpireLocalTypedUrl) { ...@@ -1129,30 +1101,27 @@ TEST_F(TypedURLSyncBridgeTest, ExpireLocalTypedUrl) {
// Check all the metadata is here, no need to untrack anything so far. // Check all the metadata is here, no need to untrack anything so far.
MetadataBatch metadata_batch; MetadataBatch metadata_batch;
metadata_store()->GetAllSyncMetadata(&metadata_batch); metadata_store()->GetAllSyncMetadata(&metadata_batch);
ASSERT_EQ(5u, metadata_batch.TakeAllMetadata().size()); ASSERT_EQ(urls.size(), metadata_batch.TakeAllMetadata().size());
ASSERT_EQ(0U, processor().untrack_for_storage_key_set().size());
// Simulate expiration - delete some urls from the backend and create deleted // Simulate expiration - delete some urls from the backend and create deleted
// row vector. // row vector.
URLRows rows; URLRows rows;
std::set<std::string> deleted_storage_keys; std::set<std::string> deleted_storage_keys;
for (size_t i = 0; i < 3u; ++i) { for (size_t i = 0; i < 3u; ++i) {
std::string storage_key = GetStorageKey(url_rows[i].url().spec()); const std::string storage_key = GetStorageKey(url_rows[i].url().spec());
deleted_storage_keys.insert(storage_key); deleted_storage_keys.insert(storage_key);
fake_history_backend_->DeleteURL(url_rows[i].url()); fake_history_backend_->DeleteURL(url_rows[i].url());
rows.push_back(url_rows[i]); rows.push_back(url_rows[i]);
} }
// Notify typed url sync service of these URLs getting expired. // Notify typed url sync service of these URLs getting expired.
EXPECT_CALL(mock_processor_, Delete(_, _)).Times(0);
for (const std::string& storage_key : deleted_storage_keys) {
EXPECT_CALL(mock_processor_, UntrackEntityForStorageKey(storage_key));
}
bridge()->OnURLsDeleted(fake_history_backend_.get(), /*all_history=*/false, bridge()->OnURLsDeleted(fake_history_backend_.get(), /*all_history=*/false,
/*expired=*/true, rows, std::set<GURL>()); /*expired=*/true, rows, std::set<GURL>());
// This does not propagate to the processor.
EXPECT_EQ(0U, processor().put_multimap().size() - previous_put_size);
EXPECT_EQ(0U, processor().delete_set().size());
// The processor is still informed to clear its in-memory maps.
EXPECT_EQ(3U, processor().untrack_for_storage_key_set().size());
// The urls are removed from the metadata store. // The urls are removed from the metadata store.
MetadataBatch smaller_metadata_batch; MetadataBatch smaller_metadata_batch;
metadata_store()->GetAllSyncMetadata(&smaller_metadata_batch); metadata_store()->GetAllSyncMetadata(&smaller_metadata_batch);
...@@ -1172,10 +1141,9 @@ TEST_F(TypedURLSyncBridgeTest, MaxVisitLocalTypedUrl) { ...@@ -1172,10 +1141,9 @@ TEST_F(TypedURLSyncBridgeTest, MaxVisitLocalTypedUrl) {
std::vector<std::string> urls; std::vector<std::string> urls;
urls.push_back(kURL); urls.push_back(kURL);
EXPECT_CALL(mock_processor_, Put(_, _, _)).Times(0);
StartSyncing(std::vector<TypedUrlSpecifics>()); StartSyncing(std::vector<TypedUrlSpecifics>());
ASSERT_TRUE(BuildAndPushLocalChanges(0, 1, urls, &url_rows, &visit_vectors)); BuildAndPushLocalChanges(0, 1, urls, &url_rows, &visit_vectors);
const auto& changes_multimap = processor().put_multimap();
ASSERT_EQ(0U, changes_multimap.size());
URLRow url_row = url_rows.front(); URLRow url_row = url_rows.front();
VisitVector visits; VisitVector visits;
...@@ -1193,12 +1161,15 @@ TEST_F(TypedURLSyncBridgeTest, MaxVisitLocalTypedUrl) { ...@@ -1193,12 +1161,15 @@ TEST_F(TypedURLSyncBridgeTest, MaxVisitLocalTypedUrl) {
fake_history_backend_->SetVisitsForUrl(&url_row, visits); fake_history_backend_->SetVisitsForUrl(&url_row, visits);
// Notify typed url sync service of typed visit. // Notify typed url sync service of typed visit.
ui::PageTransition transition = ui::PAGE_TRANSITION_TYPED; const ui::PageTransition transition = ui::PAGE_TRANSITION_TYPED;
EntityData entity_data;
EXPECT_CALL(mock_processor_, Put(GetStorageKey(kURL), _, _))
.WillOnce(SaveArgPointeeMove<1>(&entity_data));
bridge()->OnURLVisited(fake_history_backend_.get(), transition, url_row, bridge()->OnURLVisited(fake_history_backend_.get(), transition, url_row,
RedirectList(), Time()); RedirectList(), Time());
ASSERT_EQ(1U, changes_multimap.size()); const sync_pb::TypedUrlSpecifics& url_specifics =
sync_pb::TypedUrlSpecifics url_specifics = GetLastUpdateForURL(kURL); entity_data.specifics.typed_url();
ASSERT_EQ(kMaxTypedUrlVisits, url_specifics.visits_size()); ASSERT_EQ(kMaxTypedUrlVisits, url_specifics.visits_size());
// Check that each visit has been translated/communicated correctly. // Check that each visit has been translated/communicated correctly.
...@@ -1228,10 +1199,9 @@ TEST_F(TypedURLSyncBridgeTest, ThrottleVisitLocalTypedUrl) { ...@@ -1228,10 +1199,9 @@ TEST_F(TypedURLSyncBridgeTest, ThrottleVisitLocalTypedUrl) {
std::vector<std::string> urls; std::vector<std::string> urls;
urls.push_back(kURL); urls.push_back(kURL);
EXPECT_CALL(mock_processor_, Put(_, _, _)).Times(0);
StartSyncing(std::vector<TypedUrlSpecifics>()); StartSyncing(std::vector<TypedUrlSpecifics>());
ASSERT_TRUE(BuildAndPushLocalChanges(0, 1, urls, &url_rows, &visit_vectors)); BuildAndPushLocalChanges(0, 1, urls, &url_rows, &visit_vectors);
const auto& changes_multimap = processor().put_multimap();
ASSERT_EQ(0U, changes_multimap.size());
URLRow url_row = url_rows.front(); URLRow url_row = url_rows.front();
VisitVector visits; VisitVector visits;
...@@ -1248,9 +1218,6 @@ TEST_F(TypedURLSyncBridgeTest, ThrottleVisitLocalTypedUrl) { ...@@ -1248,9 +1218,6 @@ TEST_F(TypedURLSyncBridgeTest, ThrottleVisitLocalTypedUrl) {
bridge()->OnURLVisited(fake_history_backend_.get(), transition, url_row, bridge()->OnURLVisited(fake_history_backend_.get(), transition, url_row,
RedirectList(), Time()); RedirectList(), Time());
// Should throttle, so sync and local cache should not update.
ASSERT_EQ(0U, changes_multimap.size());
visits.clear(); visits.clear();
for (; i % kVisitThrottleMultiple != 1; ++i) for (; i % kVisitThrottleMultiple != 1; ++i)
AddNewestVisit(ui::PAGE_TRANSITION_TYPED, i, &url_row, &visits); AddNewestVisit(ui::PAGE_TRANSITION_TYPED, i, &url_row, &visits);
...@@ -1258,34 +1225,31 @@ TEST_F(TypedURLSyncBridgeTest, ThrottleVisitLocalTypedUrl) { ...@@ -1258,34 +1225,31 @@ TEST_F(TypedURLSyncBridgeTest, ThrottleVisitLocalTypedUrl) {
fake_history_backend_->SetVisitsForUrl(&url_row, visits); fake_history_backend_->SetVisitsForUrl(&url_row, visits);
// Notify typed url sync service of typed visit. // Notify typed url sync service of typed visit.
EntityData entity_data;
EXPECT_CALL(mock_processor_, Put(GetStorageKey(kURL), _, _))
.WillOnce(SaveArgPointeeMove<1>(&entity_data));
bridge()->OnURLVisited(fake_history_backend_.get(), transition, url_row, bridge()->OnURLVisited(fake_history_backend_.get(), transition, url_row,
RedirectList(), Time()); RedirectList(), Time());
ASSERT_EQ(1U, changes_multimap.size()); ASSERT_EQ(i, entity_data.specifics.typed_url().visits_size());
sync_pb::TypedUrlSpecifics url_specifics = GetLastUpdateForURL(kURL);
ASSERT_EQ(i, url_specifics.visits_size());
} }
// Create a remote typed URL and visit, then send to sync bridge after sync // Create a remote typed URL and visit, then send to sync bridge after sync
// has started. Check that local DB is received the new URL and visit. // has started. Check that local DB is received the new URL and visit.
TEST_F(TypedURLSyncBridgeTest, AddUrlAndVisits) { TEST_F(TypedURLSyncBridgeTest, AddUrlAndVisits) {
StartSyncing(std::vector<TypedUrlSpecifics>()); StartSyncing(std::vector<TypedUrlSpecifics>());
EXPECT_CALL(mock_processor_, Put(_, _, _)).Times(0);
EXPECT_CALL(mock_processor_, UntrackEntityForStorageKey(_)).Times(0);
EXPECT_CALL(mock_processor_,
UpdateStorageKey(
AllOf(HasURLInSpecifics(kURL), HasTitleInSpecifics(kTitle)),
IntToStorageKey(1), _));
VisitVector visits = ApplyUrlAndVisitsChange( VisitVector visits = ApplyUrlAndVisitsChange(
kURL, kTitle, /*typed_count=*/1, /*last_visit=*/3, kURL, kTitle, /*typed_count=*/1, /*last_visit=*/3,
/*hidden=*/false, /*hidden=*/false,
/*update_metadata=*/false, EntityChange::ACTION_ADD); /*update_metadata=*/false, EntityChange::ACTION_ADD);
ASSERT_EQ(0U, processor().put_multimap().size());
ASSERT_EQ(1U, processor().update_multimap().size());
ASSERT_EQ(0U, processor().untrack_for_client_tag_hash_set().size());
// Verify processor receive correct upate storage key.
const auto& it = processor().update_multimap().begin();
EXPECT_EQ(it->first, IntToStroageKey(1));
EXPECT_TRUE(it->second->specifics.has_typed_url());
EXPECT_EQ(it->second->specifics.typed_url().url(), kURL);
EXPECT_EQ(it->second->specifics.typed_url().title(), kTitle);
Time visit_time = SinceEpoch(3); Time visit_time = SinceEpoch(3);
VisitVector all_visits; VisitVector all_visits;
URLID url_id = fake_history_backend_->GetIdByUrl(GURL(kURL)); URLID url_id = fake_history_backend_->GetIdByUrl(GURL(kURL));
...@@ -1304,17 +1268,16 @@ TEST_F(TypedURLSyncBridgeTest, AddUrlAndVisits) { ...@@ -1304,17 +1268,16 @@ TEST_F(TypedURLSyncBridgeTest, AddUrlAndVisits) {
// sync has started. Check that local DB did not receive the expired URL and // sync has started. Check that local DB did not receive the expired URL and
// visit. // visit.
TEST_F(TypedURLSyncBridgeTest, AddExpiredUrlAndVisits) { TEST_F(TypedURLSyncBridgeTest, AddExpiredUrlAndVisits) {
EXPECT_CALL(mock_processor_, Put(_, _, _)).Times(0);
EXPECT_CALL(mock_processor_, UpdateStorageKey(_, _, _)).Times(0);
EXPECT_CALL(mock_processor_, UntrackEntityForClientTagHash(_));
StartSyncing(std::vector<TypedUrlSpecifics>()); StartSyncing(std::vector<TypedUrlSpecifics>());
VisitVector visits = ApplyUrlAndVisitsChange( ApplyUrlAndVisitsChange(
kURL, kTitle, /*typed_count=*/1, /*last_visit=*/kExpiredVisit, kURL, kTitle, /*typed_count=*/1, /*last_visit=*/kExpiredVisit,
/*hidden=*/false, /*update_metadata=*/false, EntityChange::ACTION_ADD); /*hidden=*/false, /*update_metadata=*/false, EntityChange::ACTION_ADD);
ASSERT_EQ(0U, processor().put_multimap().size()); ASSERT_EQ(0, fake_history_backend_->GetIdByUrl(GURL(kURL)));
ASSERT_EQ(0U, processor().update_multimap().size());
ASSERT_EQ(1U, processor().untrack_for_client_tag_hash_set().size());
URLID url_id = fake_history_backend_->GetIdByUrl(GURL(kURL));
ASSERT_EQ(0, url_id);
} }
// Update a remote typed URL and create a new visit that is already synced, then // Update a remote typed URL and create a new visit that is already synced, then
...@@ -1370,9 +1333,8 @@ TEST_F(TypedURLSyncBridgeTest, DeleteUrlAndVisits) { ...@@ -1370,9 +1333,8 @@ TEST_F(TypedURLSyncBridgeTest, DeleteUrlAndVisits) {
urls.push_back(kURL); urls.push_back(kURL);
StartSyncing(std::vector<TypedUrlSpecifics>()); StartSyncing(std::vector<TypedUrlSpecifics>());
ASSERT_TRUE(BuildAndPushLocalChanges(1, 0, urls, &url_rows, &visit_vectors)); EXPECT_CALL(mock_processor_, Put(_, _, _));
const auto& changes_multimap = processor().put_multimap(); BuildAndPushLocalChanges(1, 0, urls, &url_rows, &visit_vectors);
ASSERT_EQ(1U, changes_multimap.size());
Time visit_time = SinceEpoch(3); Time visit_time = SinceEpoch(3);
VisitVector all_visits; VisitVector all_visits;
...@@ -1398,10 +1360,6 @@ TEST_F(TypedURLSyncBridgeTest, DeleteUrlAndVisits) { ...@@ -1398,10 +1360,6 @@ TEST_F(TypedURLSyncBridgeTest, DeleteUrlAndVisits) {
EXPECT_FALSE(fake_history_backend_->GetURL(GURL(kURL), &url_row)); EXPECT_FALSE(fake_history_backend_->GetURL(GURL(kURL), &url_row));
url_id = fake_history_backend_->GetIdByUrl(GURL(kURL)); url_id = fake_history_backend_->GetIdByUrl(GURL(kURL));
ASSERT_EQ(0, url_id); ASSERT_EQ(0, url_id);
// Check TypedUrlSyncBridge did not receive update since the update is
// trigered by it.
ASSERT_EQ(1U, changes_multimap.size());
} }
// Create two set of visits for history DB and sync DB, two same set of visits // Create two set of visits for history DB and sync DB, two same set of visits
...@@ -1744,8 +1702,8 @@ TEST_F(TypedURLSyncBridgeTest, LocalExpiredTypedUrlDoNotSync) { ...@@ -1744,8 +1702,8 @@ TEST_F(TypedURLSyncBridgeTest, LocalExpiredTypedUrlDoNotSync) {
// Tests that database error gets reported to processor as model type error. // Tests that database error gets reported to processor as model type error.
TEST_F(TypedURLSyncBridgeTest, DatabaseError) { TEST_F(TypedURLSyncBridgeTest, DatabaseError) {
EXPECT_CALL(mock_processor_, ReportError(_));
bridge()->OnDatabaseError(); bridge()->OnDatabaseError();
EXPECT_TRUE(processor().GetError().has_value());
} }
} // namespace history } // namespace history
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment