blob: 550af781bcac36d3d29eace3af800de06c231d1c [file] [log] [blame]
// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "net/base/connection_endpoint_metadata_test_util.h"
#include <ostream>
#include <string>
#include <utility>
#include <vector>
#include "net/base/connection_endpoint_metadata.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace net {
using EchConfigList = ConnectionEndpointMetadata::EchConfigList;
namespace {
class EndpointMetadataMatcher
: public testing::MatcherInterface<const ConnectionEndpointMetadata&> {
public:
EndpointMetadataMatcher(
testing::Matcher<std::vector<std::string>>
supported_protocol_alpns_matcher,
testing::Matcher<EchConfigList> ech_config_list_matcher,
testing::Matcher<std::string> target_name_matcher,
testing::Matcher<std::vector<std::vector<uint8_t>>>
trust_anchor_ids_matcher)
: supported_protocol_alpns_matcher_(
std::move(supported_protocol_alpns_matcher)),
ech_config_list_matcher_(std::move(ech_config_list_matcher)),
target_name_matcher_(std::move(target_name_matcher)),
trust_anchor_ids_matcher_(std::move(trust_anchor_ids_matcher)) {}
~EndpointMetadataMatcher() override = default;
EndpointMetadataMatcher(const EndpointMetadataMatcher&) = default;
EndpointMetadataMatcher& operator=(const EndpointMetadataMatcher&) = default;
EndpointMetadataMatcher(EndpointMetadataMatcher&&) = default;
EndpointMetadataMatcher& operator=(EndpointMetadataMatcher&&) = default;
bool MatchAndExplain(
const ConnectionEndpointMetadata& metadata,
testing::MatchResultListener* result_listener) const override {
return ExplainMatchResult(
testing::Field(
"supported_protocol_alpns",
&ConnectionEndpointMetadata::supported_protocol_alpns,
supported_protocol_alpns_matcher_),
metadata, result_listener) &&
ExplainMatchResult(
testing::Field("ech_config_list",
&ConnectionEndpointMetadata::ech_config_list,
ech_config_list_matcher_),
metadata, result_listener) &&
ExplainMatchResult(
testing::Field("target_name",
&ConnectionEndpointMetadata::target_name,
target_name_matcher_),
metadata, result_listener) &&
ExplainMatchResult(
testing::Field("trust_anchor_ids",
&ConnectionEndpointMetadata::trust_anchor_ids,
trust_anchor_ids_matcher_),
metadata, result_listener);
}
void DescribeTo(std::ostream* os) const override {
*os << "matches ";
Describe(*os);
}
void DescribeNegationTo(std::ostream* os) const override {
*os << "does not match ";
Describe(*os);
}
private:
void Describe(std::ostream& os) const {
os << "ConnectionEndpoint {\nsupported_protocol_alpns: "
<< testing::PrintToString(supported_protocol_alpns_matcher_)
<< "\nech_config_list: "
<< testing::PrintToString(ech_config_list_matcher_)
<< "\ntarget_name: " << testing::PrintToString(target_name_matcher_)
<< "\ntrust_anchor_ids: "
<< testing::PrintToString(trust_anchor_ids_matcher_) << "\n}";
}
testing::Matcher<std::vector<std::string>> supported_protocol_alpns_matcher_;
testing::Matcher<EchConfigList> ech_config_list_matcher_;
testing::Matcher<std::string> target_name_matcher_;
testing::Matcher<std::vector<std::vector<uint8_t>>> trust_anchor_ids_matcher_;
};
} // namespace
testing::Matcher<const ConnectionEndpointMetadata&>
ExpectConnectionEndpointMetadata(
testing::Matcher<std::vector<std::string>> supported_protocol_alpns_matcher,
testing::Matcher<EchConfigList> ech_config_list_matcher,
testing::Matcher<std::string> target_name_matcher,
testing::Matcher<std::vector<std::vector<uint8_t>>>
trust_anchor_ids_matcher) {
return testing::MakeMatcher(new EndpointMetadataMatcher(
std::move(supported_protocol_alpns_matcher),
std::move(ech_config_list_matcher), std::move(target_name_matcher),
std::move(trust_anchor_ids_matcher)));
}
std::ostream& operator<<(
std::ostream& os,
const ConnectionEndpointMetadata& connection_endpoint_metadata) {
return os << "ConnectionEndpointMetadata {\nsupported_protocol_alpns: "
<< testing::PrintToString(
connection_endpoint_metadata.supported_protocol_alpns)
<< "\nech_config_list: "
<< testing::PrintToString(
connection_endpoint_metadata.ech_config_list)
<< "\ntarget_name: "
<< testing::PrintToString(connection_endpoint_metadata.target_name)
<< "\ntrust_anchor_ids: "
<< testing::PrintToString(
connection_endpoint_metadata.trust_anchor_ids)
<< "\n}";
}
} // namespace net