#ifndef CONTENT_BROWSER_AGGREGATION_SERVICE_AGGREGATION_SERVICE_TEST_UTILS_H_
#define CONTENT_BROWSER_AGGREGATION_SERVICE_AGGREGATION_SERVICE_TEST_UTILS_H_
#include <stdint.h>
#include <optional>
#include <ostream>
#include <set>
#include <string>
#include <string_view>
#include <vector>
#include "base/containers/span.h"
#include "base/functional/callback.h"
#include "base/observer_list.h"
#include "base/threading/sequence_bound.h"
#include "base/types/expected.h"
#include "content/browser/aggregation_service/aggregatable_report.h"
#include "content/browser/aggregation_service/aggregation_service.h"
#include "content/browser/aggregation_service/aggregation_service_observer.h"
#include "content/browser/aggregation_service/aggregation_service_storage.h"
#include "content/browser/aggregation_service/aggregation_service_storage_context.h"
#include "content/browser/aggregation_service/public_key.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/blink/public/mojom/aggregation_service/aggregatable_report.mojom.h"
#include "third_party/boringssl/src/include/openssl/base.h"
#include "third_party/boringssl/src/include/openssl/hpke.h"
namespace base {
class Clock;
class FilePath;
class Time;
}
namespace url {
class Origin;
}
namespace content {
class AggregationServiceStorage;
namespace aggregation_service {
class TestHpkeKey { … };
testing::AssertionResult PublicKeysEqual(const std::vector<PublicKey>& expected,
const std::vector<PublicKey>& actual);
testing::AssertionResult AggregatableReportsEqual(
const AggregatableReport& expected,
const AggregatableReport& actual);
testing::AssertionResult ReportRequestsEqual(
const AggregatableReportRequest& expected,
const AggregatableReportRequest& actual);
testing::AssertionResult PayloadContentsEqual(
const AggregationServicePayloadContents& expected,
const AggregationServicePayloadContents& actual);
testing::AssertionResult SharedInfoEqual(
const AggregatableReportSharedInfo& expected,
const AggregatableReportSharedInfo& actual);
AggregatableReportRequest CreateExampleRequest(
blink::mojom::AggregationServiceMode aggregation_mode =
blink::mojom::AggregationServiceMode::kDefault,
int failed_send_attempts = 0,
std::optional<url::Origin> aggregation_coordinator_origin = std::nullopt,
std::optional<AggregatableReportRequest::DelayType> = std::nullopt);
AggregatableReportRequest CreateExampleRequestWithReportTime(
base::Time report_time,
blink::mojom::AggregationServiceMode aggregation_mode =
blink::mojom::AggregationServiceMode::kDefault,
int failed_send_attempts = 0,
std::optional<url::Origin> aggregation_coordinator_origin = std::nullopt,
std::optional<AggregatableReportRequest::DelayType> = std::nullopt);
AggregatableReportRequest CloneReportRequest(
const AggregatableReportRequest& request);
AggregatableReport CloneAggregatableReport(const AggregatableReport& report);
base::expected<PublicKeyset, std::string> ReadAndParsePublicKeys(
const base::FilePath& file,
base::Time now);
std::vector<uint8_t> DecryptPayloadWithHpke(
base::span<const uint8_t> payload,
const EVP_HPKE_KEY& key,
std::string_view expected_serialized_shared_info);
MATCHER_P(RequestIdIs, matcher, "") { … }
}
const std::vector<uint8_t> kABCD1234AsBytes = …;
const std::vector<uint8_t> kEFGH5678AsBytes = …;
class TestAggregationServiceStorageContext
: public AggregationServiceStorageContext { … };
class MockAggregationService : public AggregationService { … };
class AggregatableReportRequestsAndIdsBuilder { … };
std::ostream& operator<<(
std::ostream& out,
AggregationServicePayloadContents::Operation operation);
std::ostream& operator<<(std::ostream& out,
blink::mojom::AggregationServiceMode aggregation_mode);
std::ostream& operator<<(std::ostream& out,
AggregatableReportSharedInfo::DebugMode debug_mode);
bool operator==(const PublicKey& a, const PublicKey& b);
bool operator==(const AggregatableReport& a, const AggregatableReport& b);
}
#endif