#pragma once #include #include "envoy/config/bootstrap/v3/bootstrap.pb.h" #include "envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.pb.h" #include "test/integration/http_integration.h" #include "absl/synchronization/mutex.h" #include "gtest/gtest.h" namespace Envoy { class Http2IntegrationTest : public testing::TestWithParam, public HttpIntegrationTest { public: Http2IntegrationTest() : HttpIntegrationTest(Http::CodecClient::Type::HTTP2, GetParam()) {} void SetUp() override { setDownstreamProtocol(Http::CodecClient::Type::HTTP2); } void simultaneousRequest(int32_t request1_bytes, int32_t request2_bytes); protected: // Utility function to add filters. void addFilters(std::vector filters) { for (const auto& filter : filters) { config_helper_.addFilter(filter); } } }; class Http2RingHashIntegrationTest : public Http2IntegrationTest { public: Http2RingHashIntegrationTest(); ~Http2RingHashIntegrationTest() override; void createUpstreams() override; void sendMultipleRequests(int request_bytes, Http::TestRequestHeaderMapImpl headers, std::function cb); std::vector fake_upstream_connections_; int num_upstreams_ = 5; }; class Http2MetadataIntegrationTest : public Http2IntegrationTest { public: void SetUp() override { setDownstreamProtocol(Http::CodecClient::Type::HTTP2); setUpstreamProtocol(FakeHttpConnection::Type::HTTP2); config_helper_.addConfigModifier( [&](envoy::config::bootstrap::v3::Bootstrap& bootstrap) -> void { RELEASE_ASSERT(bootstrap.mutable_static_resources()->clusters_size() >= 1, ""); ConfigHelper::HttpProtocolOptions protocol_options; protocol_options.mutable_explicit_http_config() ->mutable_http2_protocol_options() ->set_allow_metadata(true); ConfigHelper::setProtocolOptions( *bootstrap.mutable_static_resources()->mutable_clusters(0), protocol_options); }); config_helper_.addConfigModifier( [&](envoy::extensions::filters::network::http_connection_manager::v3::HttpConnectionManager& hcm) -> void { hcm.mutable_http2_protocol_options()->set_allow_metadata(true); }); } void testRequestMetadataWithStopAllFilter(); void verifyHeadersOnlyTest(); void runHeaderOnlyTest(bool send_request_body, size_t body_size); }; } // namespace Envoy