diff --git a/test/integration/http2_integration_test.cc b/test/integration/http2_integration_test.cc index 22929816f97f3..cc25f1698c39d 100644 --- a/test/integration/http2_integration_test.cc +++ b/test/integration/http2_integration_test.cc @@ -472,6 +472,32 @@ TEST_P(Http2MetadataIntegrationTest, ProxyLargeMetadataInRequest) { ASSERT_TRUE(response->complete()); } +TEST_P(Http2MetadataIntegrationTest, RequestMetadataReachSizeLimit) { + initialize(); + codec_client_ = makeHttpConnection(lookupPort("http")); + fake_upstreams_[0]->set_allow_unexpected_disconnects(true); + + auto encoder_decoder = codec_client_->startRequest(default_request_headers_); + request_encoder_ = &encoder_decoder.first; + auto response = std::move(encoder_decoder.second); + std::string value = std::string(10 * 1024, '1'); + Http::MetadataMap metadata_map = {{"key", value}}; + codec_client_->sendMetadata(*request_encoder_, metadata_map); + codec_client_->sendData(*request_encoder_, 1, false); + codec_client_->sendMetadata(*request_encoder_, metadata_map); + codec_client_->sendData(*request_encoder_, 1, false); + for (int i = 0; i < 200; i++) { + codec_client_->sendMetadata(*request_encoder_, metadata_map); + if (codec_client_->disconnected()) { + break; + } + } + + // Verifies client connection will be closed. + codec_client_->waitForDisconnect(); + ASSERT_FALSE(response->complete()); +} + static std::string request_metadata_filter = R"EOF( name: request-metadata-filter config: {}