123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289 |
- // Copyright 2019 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 "net/reporting/mock_persistent_reporting_store.h"
- #include <algorithm>
- #include <memory>
- namespace net {
- MockPersistentReportingStore::Command::Command(
- Type type,
- ReportingClientsLoadedCallback loaded_callback)
- : type(type), loaded_callback(std::move(loaded_callback)) {
- DCHECK(type == Type::LOAD_REPORTING_CLIENTS);
- }
- MockPersistentReportingStore::Command::Command(
- Type type,
- const ReportingEndpoint& endpoint)
- : Command(type, endpoint.group_key, endpoint.info.url) {}
- MockPersistentReportingStore::Command::Command(
- Type type,
- const ReportingEndpointGroupKey& group_key,
- const GURL& endpoint_url)
- : type(type), group_key(group_key), url(endpoint_url) {
- DCHECK(type == Type::ADD_REPORTING_ENDPOINT ||
- type == Type::UPDATE_REPORTING_ENDPOINT_DETAILS ||
- type == Type::DELETE_REPORTING_ENDPOINT);
- }
- MockPersistentReportingStore::Command::Command(
- Type type,
- const CachedReportingEndpointGroup& group)
- : Command(type, group.group_key) {}
- MockPersistentReportingStore::Command::Command(
- Type type,
- const ReportingEndpointGroupKey& group_key)
- : type(type), group_key(group_key) {
- DCHECK(type == Type::ADD_REPORTING_ENDPOINT_GROUP ||
- type == Type::UPDATE_REPORTING_ENDPOINT_GROUP_DETAILS ||
- type == Type::UPDATE_REPORTING_ENDPOINT_GROUP_ACCESS_TIME ||
- type == Type::DELETE_REPORTING_ENDPOINT_GROUP);
- }
- MockPersistentReportingStore::Command::Command(Type type) : type(type) {
- DCHECK(type == Type::FLUSH || type == Type::LOAD_REPORTING_CLIENTS);
- }
- MockPersistentReportingStore::Command::Command(const Command& other)
- : type(other.type), group_key(other.group_key), url(other.url) {}
- MockPersistentReportingStore::Command::Command(Command&& other) = default;
- MockPersistentReportingStore::Command::~Command() = default;
- bool operator==(const MockPersistentReportingStore::Command& lhs,
- const MockPersistentReportingStore::Command& rhs) {
- if (lhs.type != rhs.type)
- return false;
- bool equal = true;
- switch (lhs.type) {
- // For load and flush, just check the type.
- case MockPersistentReportingStore::Command::Type::LOAD_REPORTING_CLIENTS:
- case MockPersistentReportingStore::Command::Type::FLUSH:
- return true;
- // For endpoint operations, check the url and group key.
- case MockPersistentReportingStore::Command::Type::ADD_REPORTING_ENDPOINT:
- case MockPersistentReportingStore::Command::Type::
- UPDATE_REPORTING_ENDPOINT_DETAILS:
- case MockPersistentReportingStore::Command::Type::DELETE_REPORTING_ENDPOINT:
- equal &= (lhs.url == rhs.url);
- [[fallthrough]];
- // For endpoint group operations, check the group key only.
- case MockPersistentReportingStore::Command::Type::
- ADD_REPORTING_ENDPOINT_GROUP:
- case MockPersistentReportingStore::Command::Type::
- UPDATE_REPORTING_ENDPOINT_GROUP_ACCESS_TIME:
- case MockPersistentReportingStore::Command::Type::
- UPDATE_REPORTING_ENDPOINT_GROUP_DETAILS:
- case MockPersistentReportingStore::Command::Type::
- DELETE_REPORTING_ENDPOINT_GROUP:
- equal &= (lhs.group_key == rhs.group_key);
- }
- return equal;
- }
- bool operator!=(const MockPersistentReportingStore::Command& lhs,
- const MockPersistentReportingStore::Command& rhs) {
- return !(lhs == rhs);
- }
- std::ostream& operator<<(std::ostream& out,
- const MockPersistentReportingStore::Command& cmd) {
- switch (cmd.type) {
- case MockPersistentReportingStore::Command::Type::LOAD_REPORTING_CLIENTS:
- return out << "LOAD_REPORTING_CLIENTS()";
- case MockPersistentReportingStore::Command::Type::FLUSH:
- return out << "FLUSH()";
- case MockPersistentReportingStore::Command::Type::ADD_REPORTING_ENDPOINT:
- return out << "ADD_REPORTING_ENDPOINT("
- << "NIK="
- << cmd.group_key.network_isolation_key.ToDebugString() << ", "
- << "origin=" << cmd.group_key.origin << ", "
- << "group=" << cmd.group_key.group_name << ", "
- << "endpoint=" << cmd.url << ")";
- case MockPersistentReportingStore::Command::Type::
- UPDATE_REPORTING_ENDPOINT_DETAILS:
- return out << "UPDATE_REPORTING_ENDPOINT_DETAILS("
- << "NIK="
- << cmd.group_key.network_isolation_key.ToDebugString() << ", "
- << "origin=" << cmd.group_key.origin << ", "
- << "group=" << cmd.group_key.group_name << ", "
- << "endpoint=" << cmd.url << ")";
- case MockPersistentReportingStore::Command::Type::DELETE_REPORTING_ENDPOINT:
- return out << "DELETE_REPORTING_ENDPOINT("
- << "NIK="
- << cmd.group_key.network_isolation_key.ToDebugString() << ", "
- << "origin=" << cmd.group_key.origin << ", "
- << "group=" << cmd.group_key.group_name << ", "
- << "endpoint=" << cmd.url << ")";
- case MockPersistentReportingStore::Command::Type::
- ADD_REPORTING_ENDPOINT_GROUP:
- return out << "ADD_REPORTING_ENDPOINT_GROUP("
- << "NIK="
- << cmd.group_key.network_isolation_key.ToDebugString() << ", "
- << "origin=" << cmd.group_key.origin << ", "
- << "group=" << cmd.group_key.group_name << ")";
- case MockPersistentReportingStore::Command::Type::
- UPDATE_REPORTING_ENDPOINT_GROUP_ACCESS_TIME:
- return out << "UPDATE_REPORTING_ENDPOINT_GROUP_ACCESS_TIME("
- << "NIK="
- << cmd.group_key.network_isolation_key.ToDebugString() << ", "
- << "origin=" << cmd.group_key.origin << ", "
- << "group=" << cmd.group_key.group_name << ")";
- case MockPersistentReportingStore::Command::Type::
- UPDATE_REPORTING_ENDPOINT_GROUP_DETAILS:
- return out << "UPDATE_REPORTING_ENDPOINT_GROUP_DETAILS("
- << "NIK="
- << cmd.group_key.network_isolation_key.ToDebugString() << ", "
- << "origin=" << cmd.group_key.origin << ", "
- << "group=" << cmd.group_key.group_name << ")";
- case MockPersistentReportingStore::Command::Type::
- DELETE_REPORTING_ENDPOINT_GROUP:
- return out << "DELETE_REPORTING_ENDPOINT_GROUP("
- << "NIK="
- << cmd.group_key.network_isolation_key.ToDebugString() << ", "
- << "origin=" << cmd.group_key.origin << ", "
- << "group=" << cmd.group_key.group_name << ")";
- }
- }
- MockPersistentReportingStore::MockPersistentReportingStore() = default;
- MockPersistentReportingStore::~MockPersistentReportingStore() = default;
- void MockPersistentReportingStore::LoadReportingClients(
- ReportingClientsLoadedCallback loaded_callback) {
- DCHECK(!load_started_);
- command_list_.emplace_back(Command::Type::LOAD_REPORTING_CLIENTS,
- std::move(loaded_callback));
- load_started_ = true;
- }
- void MockPersistentReportingStore::AddReportingEndpoint(
- const ReportingEndpoint& endpoint) {
- DCHECK(load_started_);
- command_list_.emplace_back(Command::Type::ADD_REPORTING_ENDPOINT, endpoint);
- ++queued_endpoint_count_delta_;
- }
- void MockPersistentReportingStore::AddReportingEndpointGroup(
- const CachedReportingEndpointGroup& group) {
- DCHECK(load_started_);
- command_list_.emplace_back(Command::Type::ADD_REPORTING_ENDPOINT_GROUP,
- group);
- ++queued_endpoint_group_count_delta_;
- }
- void MockPersistentReportingStore::UpdateReportingEndpointGroupAccessTime(
- const CachedReportingEndpointGroup& group) {
- DCHECK(load_started_);
- command_list_.emplace_back(
- Command::Type::UPDATE_REPORTING_ENDPOINT_GROUP_ACCESS_TIME, group);
- }
- void MockPersistentReportingStore::UpdateReportingEndpointDetails(
- const ReportingEndpoint& endpoint) {
- DCHECK(load_started_);
- command_list_.emplace_back(Command::Type::UPDATE_REPORTING_ENDPOINT_DETAILS,
- endpoint);
- }
- void MockPersistentReportingStore::UpdateReportingEndpointGroupDetails(
- const CachedReportingEndpointGroup& group) {
- DCHECK(load_started_);
- command_list_.emplace_back(
- Command::Type::UPDATE_REPORTING_ENDPOINT_GROUP_DETAILS, group);
- }
- void MockPersistentReportingStore::DeleteReportingEndpoint(
- const ReportingEndpoint& endpoint) {
- DCHECK(load_started_);
- command_list_.emplace_back(Command::Type::DELETE_REPORTING_ENDPOINT,
- endpoint);
- --queued_endpoint_count_delta_;
- }
- void MockPersistentReportingStore::DeleteReportingEndpointGroup(
- const CachedReportingEndpointGroup& group) {
- DCHECK(load_started_);
- command_list_.emplace_back(Command::Type::DELETE_REPORTING_ENDPOINT_GROUP,
- group);
- --queued_endpoint_group_count_delta_;
- }
- void MockPersistentReportingStore::Flush() {
- // Can be called before |load_started_| is true, if the ReportingCache is
- // destroyed before getting a chance to load.
- command_list_.emplace_back(Command::Type::FLUSH);
- endpoint_count_ += queued_endpoint_count_delta_;
- queued_endpoint_count_delta_ = 0;
- endpoint_group_count_ += queued_endpoint_group_count_delta_;
- queued_endpoint_group_count_delta_ = 0;
- }
- void MockPersistentReportingStore::SetPrestoredClients(
- std::vector<ReportingEndpoint> endpoints,
- std::vector<CachedReportingEndpointGroup> groups) {
- DCHECK(!load_started_);
- DCHECK_EQ(0, endpoint_count_);
- DCHECK_EQ(0, endpoint_group_count_);
- endpoint_count_ += endpoints.size();
- prestored_endpoints_.swap(endpoints);
- endpoint_group_count_ += groups.size();
- prestored_endpoint_groups_.swap(groups);
- }
- void MockPersistentReportingStore::FinishLoading(bool load_success) {
- DCHECK(load_started_);
- for (size_t i = 0; i < command_list_.size(); ++i) {
- Command& command = command_list_[i];
- if (command.type == Command::Type::LOAD_REPORTING_CLIENTS) {
- // If load has been initiated, it should be the first operation.
- DCHECK_EQ(0u, i);
- DCHECK(!command.loaded_callback.is_null());
- if (load_success) {
- std::move(command.loaded_callback)
- .Run(std::move(prestored_endpoints_),
- std::move(prestored_endpoint_groups_));
- } else {
- std::move(command.loaded_callback)
- .Run(std::vector<ReportingEndpoint>(),
- std::vector<CachedReportingEndpointGroup>());
- }
- }
- if (i > 0) {
- // Load should not have been called twice.
- DCHECK(command.type != Command::Type::LOAD_REPORTING_CLIENTS);
- }
- }
- }
- bool MockPersistentReportingStore::VerifyCommands(
- const CommandList& expected_commands) const {
- return command_list_ == expected_commands;
- }
- int MockPersistentReportingStore::CountCommands(Command::Type t) {
- int c = 0;
- for (const auto& cmd : command_list_) {
- if (cmd.type == t)
- ++c;
- }
- return c;
- }
- void MockPersistentReportingStore::ClearCommands() {
- command_list_.clear();
- }
- MockPersistentReportingStore::CommandList
- MockPersistentReportingStore::GetAllCommands() const {
- return command_list_;
- }
- } // namespace net
|