From aa38b86621a438cc66b4c0a4fe06098a7312f718 Mon Sep 17 00:00:00 2001 From: Ryan Hamilton Date: Wed, 3 Nov 2021 22:01:11 +0000 Subject: [PATCH 1/2] upstream: Inline multiplexed_upstream_integration_test.h into multiplexed_upstream_integration_test.cc Also rename Http2UpstreamIntegrationTest to MultiplexedUpstreamIntegrationTest since the tests run on HTTP/3 as well as HTTP/2. Signed-off-by: Ryan Hamilton --- test/integration/BUILD | 1 - .../multiplexed_upstream_integration_test.cc | 96 +++++++++++-------- .../multiplexed_upstream_integration_test.h | 27 ------ 3 files changed, 58 insertions(+), 66 deletions(-) delete mode 100644 test/integration/multiplexed_upstream_integration_test.h diff --git a/test/integration/BUILD b/test/integration/BUILD index 7861e4f63a6c5..e969701fa6f35 100644 --- a/test/integration/BUILD +++ b/test/integration/BUILD @@ -538,7 +538,6 @@ envoy_cc_test( name = "multiplexed_upstream_integration_test", srcs = [ "multiplexed_upstream_integration_test.cc", - "multiplexed_upstream_integration_test.h", ], shard_count = 2, deps = [ diff --git a/test/integration/multiplexed_upstream_integration_test.cc b/test/integration/multiplexed_upstream_integration_test.cc index 4acf747d777ce..f2e96c85d8b34 100644 --- a/test/integration/multiplexed_upstream_integration_test.cc +++ b/test/integration/multiplexed_upstream_integration_test.cc @@ -1,4 +1,4 @@ -#include "test/integration/multiplexed_upstream_integration_test.h" +#include "test/integration/http_protocol_integration.h" #include @@ -15,33 +15,53 @@ namespace Envoy { -INSTANTIATE_TEST_SUITE_P(Protocols, Http2UpstreamIntegrationTest, +class MultiplexedUpstreamIntegrationTest : public HttpProtocolIntegrationTest { +public: + void initialize() override { + upstream_tls_ = true; + config_helper_.configureUpstreamTls(use_alpn_, upstreamProtocol() == Http::CodecType::HTTP3); + HttpProtocolIntegrationTest::initialize(); + } + + void bidirectionalStreaming(uint32_t bytes); + void manySimultaneousRequests(uint32_t request_bytes, uint32_t max_response_bytes, + uint32_t num_streams = 50); + + bool use_alpn_{false}; + + uint64_t upstreamRxResetCounterValue(); + uint64_t upstreamTxResetCounterValue(); + uint64_t downstreamRxResetCounterValue(); + uint64_t downstreamTxResetCounterValue(); +}; + +INSTANTIATE_TEST_SUITE_P(Protocols, MultiplexedUpstreamIntegrationTest, testing::ValuesIn(HttpProtocolIntegrationTest::getProtocolTestParams( {Http::CodecType::HTTP2}, {Http::CodecType::HTTP2, Http::CodecType::HTTP3})), HttpProtocolIntegrationTest::protocolTestParamsToString); -TEST_P(Http2UpstreamIntegrationTest, RouterRequestAndResponseWithBodyNoBuffer) { +TEST_P(MultiplexedUpstreamIntegrationTest, RouterRequestAndResponseWithBodyNoBuffer) { testRouterRequestAndResponseWithBody(1024, 512, false); } -TEST_P(Http2UpstreamIntegrationTest, RouterRequestAndResponseWithZeroByteBodyNoBuffer) { +TEST_P(MultiplexedUpstreamIntegrationTest, RouterRequestAndResponseWithZeroByteBodyNoBuffer) { testRouterRequestAndResponseWithBody(0, 0, false); } -TEST_P(Http2UpstreamIntegrationTest, RouterHeaderOnlyRequestAndResponseNoBuffer) { +TEST_P(MultiplexedUpstreamIntegrationTest, RouterHeaderOnlyRequestAndResponseNoBuffer) { testRouterHeaderOnlyRequestAndResponse(); } -TEST_P(Http2UpstreamIntegrationTest, RouterUpstreamDisconnectBeforeRequestcomplete) { +TEST_P(MultiplexedUpstreamIntegrationTest, RouterUpstreamDisconnectBeforeRequestcomplete) { testRouterUpstreamDisconnectBeforeRequestComplete(); } -TEST_P(Http2UpstreamIntegrationTest, RouterUpstreamDisconnectBeforeResponseComplete) { +TEST_P(MultiplexedUpstreamIntegrationTest, RouterUpstreamDisconnectBeforeResponseComplete) { testRouterUpstreamDisconnectBeforeResponseComplete(); } -TEST_P(Http2UpstreamIntegrationTest, RouterDownstreamDisconnectBeforeRequestComplete) { +TEST_P(MultiplexedUpstreamIntegrationTest, RouterDownstreamDisconnectBeforeRequestComplete) { testRouterDownstreamDisconnectBeforeRequestComplete(); // Given the downstream disconnect, Envoy will reset the upstream stream. @@ -49,21 +69,21 @@ TEST_P(Http2UpstreamIntegrationTest, RouterDownstreamDisconnectBeforeRequestComp EXPECT_EQ(0, upstreamRxResetCounterValue()); } -TEST_P(Http2UpstreamIntegrationTest, RouterDownstreamDisconnectBeforeResponseComplete) { +TEST_P(MultiplexedUpstreamIntegrationTest, RouterDownstreamDisconnectBeforeResponseComplete) { testRouterDownstreamDisconnectBeforeResponseComplete(); } -TEST_P(Http2UpstreamIntegrationTest, RouterUpstreamResponseBeforeRequestComplete) { +TEST_P(MultiplexedUpstreamIntegrationTest, RouterUpstreamResponseBeforeRequestComplete) { testRouterUpstreamResponseBeforeRequestComplete(); } -TEST_P(Http2UpstreamIntegrationTest, Retry) { testRetry(); } +TEST_P(MultiplexedUpstreamIntegrationTest, Retry) { testRetry(); } -TEST_P(Http2UpstreamIntegrationTest, GrpcRetry) { testGrpcRetry(); } +TEST_P(MultiplexedUpstreamIntegrationTest, GrpcRetry) { testGrpcRetry(); } -TEST_P(Http2UpstreamIntegrationTest, Trailers) { testTrailers(1024, 2048, true, true); } +TEST_P(MultiplexedUpstreamIntegrationTest, Trailers) { testTrailers(1024, 2048, true, true); } -TEST_P(Http2UpstreamIntegrationTest, TestSchemeAndXFP) { +TEST_P(MultiplexedUpstreamIntegrationTest, TestSchemeAndXFP) { autonomous_upstream_ = true; initialize(); @@ -91,7 +111,7 @@ TEST_P(Http2UpstreamIntegrationTest, TestSchemeAndXFP) { } // Ensure Envoy handles streaming requests and responses simultaneously. -void Http2UpstreamIntegrationTest::bidirectionalStreaming(uint32_t bytes) { +void MultiplexedUpstreamIntegrationTest::bidirectionalStreaming(uint32_t bytes) { initialize(); codec_client_ = makeHttpConnection(lookupPort("http")); @@ -126,32 +146,32 @@ void Http2UpstreamIntegrationTest::bidirectionalStreaming(uint32_t bytes) { EXPECT_TRUE(response->complete()); } -TEST_P(Http2UpstreamIntegrationTest, BidirectionalStreaming) { bidirectionalStreaming(1024); } +TEST_P(MultiplexedUpstreamIntegrationTest, BidirectionalStreaming) { bidirectionalStreaming(1024); } -TEST_P(Http2UpstreamIntegrationTest, LargeBidirectionalStreamingWithBufferLimits) { +TEST_P(MultiplexedUpstreamIntegrationTest, LargeBidirectionalStreamingWithBufferLimits) { config_helper_.setBufferLimits(1024, 1024); // Set buffer limits upstream and downstream. bidirectionalStreaming(1024 * 32); } -uint64_t Http2UpstreamIntegrationTest::upstreamRxResetCounterValue() { +uint64_t MultiplexedUpstreamIntegrationTest::upstreamRxResetCounterValue() { return test_server_ ->counter(absl::StrCat("cluster.cluster_0.", upstreamProtocolStatsRoot(), ".rx_reset")) ->value(); } -uint64_t Http2UpstreamIntegrationTest::upstreamTxResetCounterValue() { +uint64_t MultiplexedUpstreamIntegrationTest::upstreamTxResetCounterValue() { return test_server_ ->counter(absl::StrCat("cluster.cluster_0.", upstreamProtocolStatsRoot(), ".tx_reset")) ->value(); } -uint64_t Http2UpstreamIntegrationTest::downstreamRxResetCounterValue() { +uint64_t MultiplexedUpstreamIntegrationTest::downstreamRxResetCounterValue() { return test_server_->counter(absl::StrCat(downstreamProtocolStatsRoot(), ".rx_reset"))->value(); } -uint64_t Http2UpstreamIntegrationTest::downstreamTxResetCounterValue() { +uint64_t MultiplexedUpstreamIntegrationTest::downstreamTxResetCounterValue() { return test_server_->counter(absl::StrCat(downstreamProtocolStatsRoot(), ".tx_reset"))->value(); } -TEST_P(Http2UpstreamIntegrationTest, BidirectionalStreamingReset) { +TEST_P(MultiplexedUpstreamIntegrationTest, BidirectionalStreamingReset) { initialize(); codec_client_ = makeHttpConnection(lookupPort("http")); @@ -193,16 +213,16 @@ TEST_P(Http2UpstreamIntegrationTest, BidirectionalStreamingReset) { EXPECT_EQ(1, downstreamTxResetCounterValue()); } -TEST_P(Http2UpstreamIntegrationTest, SimultaneousRequest) { +TEST_P(MultiplexedUpstreamIntegrationTest, SimultaneousRequest) { simultaneousRequest(1024, 512, 1023, 513); } -TEST_P(Http2UpstreamIntegrationTest, LargeSimultaneousRequestWithBufferLimits) { +TEST_P(MultiplexedUpstreamIntegrationTest, LargeSimultaneousRequestWithBufferLimits) { config_helper_.setBufferLimits(1024, 1024); // Set buffer limits upstream and downstream. simultaneousRequest(1024 * 20, 1024 * 14 + 2, 1024 * 10 + 5, 1024 * 16); } -void Http2UpstreamIntegrationTest::manySimultaneousRequests(uint32_t request_bytes, +void MultiplexedUpstreamIntegrationTest::manySimultaneousRequests(uint32_t request_bytes, uint32_t max_response_bytes, uint32_t num_requests) { TestRandomGenerator rand; @@ -247,15 +267,15 @@ void Http2UpstreamIntegrationTest::manySimultaneousRequests(uint32_t request_byt EXPECT_EQ(0, test_server_->gauge("http2.pending_send_bytes")->value()); } -TEST_P(Http2UpstreamIntegrationTest, ManySimultaneousRequest) { +TEST_P(MultiplexedUpstreamIntegrationTest, ManySimultaneousRequest) { manySimultaneousRequests(1024, 1024, 100); } -TEST_P(Http2UpstreamIntegrationTest, TooManySimultaneousRequests) { +TEST_P(MultiplexedUpstreamIntegrationTest, TooManySimultaneousRequests) { manySimultaneousRequests(1024, 1024, 200); } -TEST_P(Http2UpstreamIntegrationTest, ManySimultaneousRequestsTightUpstreamLimits) { +TEST_P(MultiplexedUpstreamIntegrationTest, ManySimultaneousRequestsTightUpstreamLimits) { if (upstreamProtocol() == Http::CodecType::HTTP2) { return; } @@ -269,12 +289,12 @@ TEST_P(Http2UpstreamIntegrationTest, ManySimultaneousRequestsTightUpstreamLimits manySimultaneousRequests(1024, 1024, 10); } -TEST_P(Http2UpstreamIntegrationTest, ManyLargeSimultaneousRequestWithBufferLimits) { +TEST_P(MultiplexedUpstreamIntegrationTest, ManyLargeSimultaneousRequestWithBufferLimits) { config_helper_.setBufferLimits(1024, 1024); // Set buffer limits upstream and downstream. manySimultaneousRequests(1024 * 20, 1024 * 20); } -TEST_P(Http2UpstreamIntegrationTest, ManyLargeSimultaneousRequestWithRandomBackup) { +TEST_P(MultiplexedUpstreamIntegrationTest, ManyLargeSimultaneousRequestWithRandomBackup) { if (upstreamProtocol() == Http::CodecType::HTTP3 && downstreamProtocol() == Http::CodecType::HTTP2) { // This test depends on fragile preconditions. @@ -293,7 +313,7 @@ TEST_P(Http2UpstreamIntegrationTest, ManyLargeSimultaneousRequestWithRandomBacku manySimultaneousRequests(1024 * 20, 1024 * 20); } -TEST_P(Http2UpstreamIntegrationTest, UpstreamConnectionCloseWithManyStreams) { +TEST_P(MultiplexedUpstreamIntegrationTest, UpstreamConnectionCloseWithManyStreams) { config_helper_.setBufferLimits(1024, 1024); // Set buffer limits upstream and downstream. const uint32_t num_requests = 20; std::vector encoders; @@ -355,7 +375,7 @@ TEST_P(Http2UpstreamIntegrationTest, UpstreamConnectionCloseWithManyStreams) { } // Regression test for https://github.com/envoyproxy/envoy/issues/6744 -TEST_P(Http2UpstreamIntegrationTest, HittingEncoderFilterLimitForGrpc) { +TEST_P(MultiplexedUpstreamIntegrationTest, HittingEncoderFilterLimitForGrpc) { config_helper_.addConfigModifier( [&](envoy::extensions::filters::network::http_connection_manager::v3::HttpConnectionManager& hcm) -> void { @@ -423,7 +443,7 @@ name: router // Tests the default limit for the number of response headers is 100. Results in a stream reset if // exceeds. -TEST_P(Http2UpstreamIntegrationTest, TestManyResponseHeadersRejected) { +TEST_P(MultiplexedUpstreamIntegrationTest, TestManyResponseHeadersRejected) { // Default limit for response headers is 100. initialize(); codec_client_ = makeHttpConnection(lookupPort("http")); @@ -442,7 +462,7 @@ TEST_P(Http2UpstreamIntegrationTest, TestManyResponseHeadersRejected) { } // Tests bootstrap configuration of max response headers. -TEST_P(Http2UpstreamIntegrationTest, ManyResponseHeadersAccepted) { +TEST_P(MultiplexedUpstreamIntegrationTest, ManyResponseHeadersAccepted) { // Set max response header count to 200. config_helper_.addConfigModifier([](envoy::config::bootstrap::v3::Bootstrap& bootstrap) { ConfigHelper::HttpProtocolOptions protocol_options; @@ -470,7 +490,7 @@ TEST_P(Http2UpstreamIntegrationTest, ManyResponseHeadersAccepted) { } // Tests that HTTP/2 response headers over 60 kB are rejected and result in a stream reset. -TEST_P(Http2UpstreamIntegrationTest, LargeResponseHeadersRejected) { +TEST_P(MultiplexedUpstreamIntegrationTest, LargeResponseHeadersRejected) { initialize(); codec_client_ = makeHttpConnection(lookupPort("http")); @@ -488,7 +508,7 @@ TEST_P(Http2UpstreamIntegrationTest, LargeResponseHeadersRejected) { // Regression test to make sure that configuring upstream logs over gRPC will not crash Envoy. // TODO(asraa): Test output of the upstream logs. // See https://github.com/envoyproxy/envoy/issues/8828. -TEST_P(Http2UpstreamIntegrationTest, ConfigureHttpOverGrpcLogs) { +TEST_P(MultiplexedUpstreamIntegrationTest, ConfigureHttpOverGrpcLogs) { config_helper_.addConfigModifier( [&](envoy::extensions::filters::network::http_connection_manager::v3::HttpConnectionManager& hcm) -> void { @@ -529,7 +549,7 @@ name: router } // Regression test for https://github.com/envoyproxy/envoy/issues/13933 -TEST_P(Http2UpstreamIntegrationTest, MultipleRequestsLowStreamLimit) { +TEST_P(MultiplexedUpstreamIntegrationTest, MultipleRequestsLowStreamLimit) { autonomous_upstream_ = true; envoy::config::core::v3::Http2ProtocolOptions config; config.mutable_max_concurrent_streams()->set_value(1); @@ -560,7 +580,7 @@ TEST_P(Http2UpstreamIntegrationTest, MultipleRequestsLowStreamLimit) { } // Regression test for https://github.com/envoyproxy/envoy/issues/13933 -TEST_P(Http2UpstreamIntegrationTest, UpstreamGoaway) { +TEST_P(MultiplexedUpstreamIntegrationTest, UpstreamGoaway) { initialize(); codec_client_ = makeHttpConnection(lookupPort("http")); diff --git a/test/integration/multiplexed_upstream_integration_test.h b/test/integration/multiplexed_upstream_integration_test.h deleted file mode 100644 index 14aeb56a49c0b..0000000000000 --- a/test/integration/multiplexed_upstream_integration_test.h +++ /dev/null @@ -1,27 +0,0 @@ -#pragma once - -#include "test/integration/http_protocol_integration.h" - -#include "gtest/gtest.h" - -namespace Envoy { -class Http2UpstreamIntegrationTest : public HttpProtocolIntegrationTest { -public: - void initialize() override { - upstream_tls_ = true; - config_helper_.configureUpstreamTls(use_alpn_, upstreamProtocol() == Http::CodecType::HTTP3); - HttpProtocolIntegrationTest::initialize(); - } - - void bidirectionalStreaming(uint32_t bytes); - void manySimultaneousRequests(uint32_t request_bytes, uint32_t max_response_bytes, - uint32_t num_streams = 50); - - bool use_alpn_{false}; - - uint64_t upstreamRxResetCounterValue(); - uint64_t upstreamTxResetCounterValue(); - uint64_t downstreamRxResetCounterValue(); - uint64_t downstreamTxResetCounterValue(); -}; -} // namespace Envoy From b8f3cae6a4b91c39a5ba71bda87d9ae95200506b Mon Sep 17 00:00:00 2001 From: Ryan Hamilton Date: Thu, 4 Nov 2021 03:40:43 +0000 Subject: [PATCH 2/2] format Signed-off-by: Ryan Hamilton --- test/integration/multiplexed_upstream_integration_test.cc | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/test/integration/multiplexed_upstream_integration_test.cc b/test/integration/multiplexed_upstream_integration_test.cc index f2e96c85d8b34..1a30fda97d9db 100644 --- a/test/integration/multiplexed_upstream_integration_test.cc +++ b/test/integration/multiplexed_upstream_integration_test.cc @@ -1,5 +1,3 @@ -#include "test/integration/http_protocol_integration.h" - #include #include "envoy/config/bootstrap/v3/bootstrap.pb.h" @@ -8,6 +6,7 @@ #include "source/common/http/header_map_impl.h" #include "test/integration/autonomous_upstream.h" +#include "test/integration/http_protocol_integration.h" #include "test/test_common/printers.h" #include "test/test_common/utility.h" @@ -223,8 +222,8 @@ TEST_P(MultiplexedUpstreamIntegrationTest, LargeSimultaneousRequestWithBufferLim } void MultiplexedUpstreamIntegrationTest::manySimultaneousRequests(uint32_t request_bytes, - uint32_t max_response_bytes, - uint32_t num_requests) { + uint32_t max_response_bytes, + uint32_t num_requests) { TestRandomGenerator rand; std::vector encoders; std::vector responses;