#ifndef SERVICES_NETWORK_TEST_TRUST_TOKEN_TEST_UTIL_H_
#define SERVICES_NETWORK_TEST_TRUST_TOKEN_TEST_UTIL_H_
#include <memory>
#include <string>
#include <string_view>
#include "base/component_export.h"
#include "base/containers/flat_map.h"
#include "base/json/json_string_value_serializer.h"
#include "base/test/task_environment.h"
#include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
#include "net/url_request/url_request_test_util.h"
#include "services/network/public/mojom/trust_tokens.mojom.h"
#include "services/network/public/mojom/url_response_head.mojom-forward.h"
#include "services/network/trust_tokens/trust_token_request_helper.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "url/origin.h"
namespace net {
class URLRequest;
class URLRequestContext;
}
namespace network {
class TestURLRequestMaker {
public:
TestURLRequestMaker();
virtual ~TestURLRequestMaker();
TestURLRequestMaker(const TestURLRequestMaker&) = delete;
TestURLRequestMaker& operator=(const TestURLRequestMaker&) = delete;
std::unique_ptr<net::URLRequest> MakeURLRequest(std::string_view spec);
protected:
net::TestDelegate delegate_;
std::unique_ptr<net::URLRequestContext> context_;
};
class TrustTokenRequestHelperTest : public ::testing::Test {
public:
explicit TrustTokenRequestHelperTest(
base::test::TaskEnvironment::TimeSource time_source =
base::test::TaskEnvironment::TimeSource::DEFAULT);
~TrustTokenRequestHelperTest() override;
TrustTokenRequestHelperTest(const TrustTokenRequestHelperTest&) = delete;
TrustTokenRequestHelperTest& operator=(const TrustTokenRequestHelperTest&) =
delete;
protected:
base::test::TaskEnvironment env_;
TestURLRequestMaker request_maker_;
std::unique_ptr<net::URLRequest> MakeURLRequest(std::string_view spec) {
return request_maker_.MakeURLRequest(spec);
}
mojom::TrustTokenOperationStatus ExecuteBeginOperationAndWaitForResult(
TrustTokenRequestHelper* helper,
net::URLRequest* request);
mojom::TrustTokenOperationStatus ExecuteFinalizeAndWaitForResult(
TrustTokenRequestHelper* helper,
mojom::URLResponseHead* response);
};
struct TrustTokenTestParameters final {
TrustTokenTestParameters(
int version,
mojom::TrustTokenOperationType operation,
std::optional<mojom::TrustTokenRefreshPolicy> refresh_policy,
std::optional<std::vector<std::string>> issuer_specs);
~TrustTokenTestParameters();
TrustTokenTestParameters(const TrustTokenTestParameters&);
TrustTokenTestParameters& operator=(const TrustTokenTestParameters&);
int version;
mojom::TrustTokenOperationType operation;
std::optional<mojom::TrustTokenRefreshPolicy> refresh_policy;
std::optional<std::vector<std::string>> issuer_specs;
};
std::string TrustTokenEnumToString(mojom::TrustTokenOperationType operation);
std::string TrustTokenEnumToString(mojom::TrustTokenRefreshPolicy policy);
std::string TrustTokenEnumToString(
mojom::TrustTokenSignRequestData sign_request_data);
struct TrustTokenParametersAndSerialization {
TrustTokenParametersAndSerialization(mojom::TrustTokenParamsPtr params,
std::string serialized_params);
~TrustTokenParametersAndSerialization();
TrustTokenParametersAndSerialization(
const TrustTokenParametersAndSerialization&) = delete;
TrustTokenParametersAndSerialization& operator=(
const TrustTokenParametersAndSerialization&) = delete;
TrustTokenParametersAndSerialization(TrustTokenParametersAndSerialization&&);
TrustTokenParametersAndSerialization& operator=(
TrustTokenParametersAndSerialization&&);
mojom::TrustTokenParamsPtr params;
std::string serialized_params;
};
TrustTokenParametersAndSerialization
SerializeTrustTokenParametersAndConstructExpectation(
const TrustTokenTestParameters& input);
const TrustTokenTestParameters kIssuanceTrustTokenTestParameters[]{
TrustTokenTestParameters(1,
mojom::TrustTokenOperationType::kIssuance,
std::nullopt,
std::nullopt)};
const TrustTokenTestParameters kRedemptionTrustTokenTestParameters[]{
TrustTokenTestParameters(1,
mojom::TrustTokenOperationType::kRedemption,
mojom::TrustTokenRefreshPolicy::kRefresh,
std::nullopt),
TrustTokenTestParameters(1,
mojom::TrustTokenOperationType::kRedemption,
mojom::TrustTokenRefreshPolicy::kUseCached,
std::nullopt),
TrustTokenTestParameters(1,
mojom::TrustTokenOperationType::kRedemption,
std::nullopt,
std::nullopt)};
const TrustTokenTestParameters kSigningTrustTokenTestParameters[]{
TrustTokenTestParameters(
1,
mojom::TrustTokenOperationType::kSigning,
std::nullopt,
std::vector<std::string>{"https://issuer.example"}),
TrustTokenTestParameters(
1,
mojom::TrustTokenOperationType::kSigning,
std::nullopt,
std::vector<std::string>{"https://issuer.example",
"https://another-issuer.example"}),
};
std::string WrapKeyCommitmentsForIssuers(
base::flat_map<url::Origin, std::string_view> issuers_and_commitments);
}
#endif