From ae3d0c196611f70e92ccfe38d34b83ebee3f1a9c Mon Sep 17 00:00:00 2001 From: Alyssa Wilk Date: Thu, 10 Dec 2020 12:17:38 -0500 Subject: [PATCH 1/6] config: making protocol config explicit Signed-off-by: Alyssa Wilk --- .../upstreams/http/v3/http_protocol_options.proto | 8 +++++--- .../upstreams/http/v4alpha/http_protocol_options.proto | 8 +++++--- .../upstreams/http/v3/http_protocol_options.proto | 8 +++++--- .../upstreams/http/v4alpha/http_protocol_options.proto | 8 +++++--- test/common/upstream/upstream_impl_test.cc | 4 ++++ 5 files changed, 24 insertions(+), 12 deletions(-) diff --git a/api/envoy/extensions/upstreams/http/v3/http_protocol_options.proto b/api/envoy/extensions/upstreams/http/v3/http_protocol_options.proto index d3cd59bbc26fd..c2ef025420ffa 100644 --- a/api/envoy/extensions/upstreams/http/v3/http_protocol_options.proto +++ b/api/envoy/extensions/upstreams/http/v3/http_protocol_options.proto @@ -5,6 +5,7 @@ package envoy.extensions.upstreams.http.v3; import "envoy/config/core/v3/protocol.proto"; import "udpa/annotations/status.proto"; +import "validate/validate.proto"; option java_package = "io.envoyproxy.envoy.extensions.upstreams.http.v3"; option java_outer_classname = "HttpProtocolOptionsProto"; @@ -57,10 +58,10 @@ option (udpa.annotations.file_status).package_version_status = ACTIVE; // .... [further cluster config] message HttpProtocolOptions { // If this is used, the cluster will only operate on one of the possible upstream protocols (HTTP/1.1, HTTP/2). - // If :ref:`http2_protocol_options ` are - // present, HTTP2 will be used, otherwise HTTP1.1 will be used. message ExplicitHttpConfig { oneof protocol_config { + option (validate.required) = true; + config.core.v3.Http1ProtocolOptions http_protocol_options = 1; config.core.v3.Http2ProtocolOptions http2_protocol_options = 2; @@ -82,8 +83,9 @@ message HttpProtocolOptions { config.core.v3.UpstreamHttpProtocolOptions upstream_http_protocol_options = 2; // This controls the actual protocol to be used upstream. - // If none of the *upstream_protocol_options* are chosen, the default is *explicit_http_config*. oneof upstream_protocol_options { + option (validate.required) = true; + // To explicitly configure either HTTP/1 or HTTP/2 (but not both!) use *explicit_http_config*. // If the *explicit_http_config* is empty, HTTP/1.1 is used. ExplicitHttpConfig explicit_http_config = 3; diff --git a/api/envoy/extensions/upstreams/http/v4alpha/http_protocol_options.proto b/api/envoy/extensions/upstreams/http/v4alpha/http_protocol_options.proto index 3b18b128c4129..80516ba494638 100644 --- a/api/envoy/extensions/upstreams/http/v4alpha/http_protocol_options.proto +++ b/api/envoy/extensions/upstreams/http/v4alpha/http_protocol_options.proto @@ -6,6 +6,7 @@ import "envoy/config/core/v4alpha/protocol.proto"; import "udpa/annotations/status.proto"; import "udpa/annotations/versioning.proto"; +import "validate/validate.proto"; option java_package = "io.envoyproxy.envoy.extensions.upstreams.http.v4alpha"; option java_outer_classname = "HttpProtocolOptionsProto"; @@ -61,13 +62,13 @@ message HttpProtocolOptions { "envoy.extensions.upstreams.http.v3.HttpProtocolOptions"; // If this is used, the cluster will only operate on one of the possible upstream protocols (HTTP/1.1, HTTP/2). - // If :ref:`http2_protocol_options ` are - // present, HTTP2 will be used, otherwise HTTP1.1 will be used. message ExplicitHttpConfig { option (udpa.annotations.versioning).previous_message_type = "envoy.extensions.upstreams.http.v3.HttpProtocolOptions.ExplicitHttpConfig"; oneof protocol_config { + option (validate.required) = true; + config.core.v4alpha.Http1ProtocolOptions http_protocol_options = 1; config.core.v4alpha.Http2ProtocolOptions http2_protocol_options = 2; @@ -92,8 +93,9 @@ message HttpProtocolOptions { config.core.v4alpha.UpstreamHttpProtocolOptions upstream_http_protocol_options = 2; // This controls the actual protocol to be used upstream. - // If none of the *upstream_protocol_options* are chosen, the default is *explicit_http_config*. oneof upstream_protocol_options { + option (validate.required) = true; + // To explicitly configure either HTTP/1 or HTTP/2 (but not both!) use *explicit_http_config*. // If the *explicit_http_config* is empty, HTTP/1.1 is used. ExplicitHttpConfig explicit_http_config = 3; diff --git a/generated_api_shadow/envoy/extensions/upstreams/http/v3/http_protocol_options.proto b/generated_api_shadow/envoy/extensions/upstreams/http/v3/http_protocol_options.proto index d3cd59bbc26fd..c2ef025420ffa 100644 --- a/generated_api_shadow/envoy/extensions/upstreams/http/v3/http_protocol_options.proto +++ b/generated_api_shadow/envoy/extensions/upstreams/http/v3/http_protocol_options.proto @@ -5,6 +5,7 @@ package envoy.extensions.upstreams.http.v3; import "envoy/config/core/v3/protocol.proto"; import "udpa/annotations/status.proto"; +import "validate/validate.proto"; option java_package = "io.envoyproxy.envoy.extensions.upstreams.http.v3"; option java_outer_classname = "HttpProtocolOptionsProto"; @@ -57,10 +58,10 @@ option (udpa.annotations.file_status).package_version_status = ACTIVE; // .... [further cluster config] message HttpProtocolOptions { // If this is used, the cluster will only operate on one of the possible upstream protocols (HTTP/1.1, HTTP/2). - // If :ref:`http2_protocol_options ` are - // present, HTTP2 will be used, otherwise HTTP1.1 will be used. message ExplicitHttpConfig { oneof protocol_config { + option (validate.required) = true; + config.core.v3.Http1ProtocolOptions http_protocol_options = 1; config.core.v3.Http2ProtocolOptions http2_protocol_options = 2; @@ -82,8 +83,9 @@ message HttpProtocolOptions { config.core.v3.UpstreamHttpProtocolOptions upstream_http_protocol_options = 2; // This controls the actual protocol to be used upstream. - // If none of the *upstream_protocol_options* are chosen, the default is *explicit_http_config*. oneof upstream_protocol_options { + option (validate.required) = true; + // To explicitly configure either HTTP/1 or HTTP/2 (but not both!) use *explicit_http_config*. // If the *explicit_http_config* is empty, HTTP/1.1 is used. ExplicitHttpConfig explicit_http_config = 3; diff --git a/generated_api_shadow/envoy/extensions/upstreams/http/v4alpha/http_protocol_options.proto b/generated_api_shadow/envoy/extensions/upstreams/http/v4alpha/http_protocol_options.proto index 3b18b128c4129..80516ba494638 100644 --- a/generated_api_shadow/envoy/extensions/upstreams/http/v4alpha/http_protocol_options.proto +++ b/generated_api_shadow/envoy/extensions/upstreams/http/v4alpha/http_protocol_options.proto @@ -6,6 +6,7 @@ import "envoy/config/core/v4alpha/protocol.proto"; import "udpa/annotations/status.proto"; import "udpa/annotations/versioning.proto"; +import "validate/validate.proto"; option java_package = "io.envoyproxy.envoy.extensions.upstreams.http.v4alpha"; option java_outer_classname = "HttpProtocolOptionsProto"; @@ -61,13 +62,13 @@ message HttpProtocolOptions { "envoy.extensions.upstreams.http.v3.HttpProtocolOptions"; // If this is used, the cluster will only operate on one of the possible upstream protocols (HTTP/1.1, HTTP/2). - // If :ref:`http2_protocol_options ` are - // present, HTTP2 will be used, otherwise HTTP1.1 will be used. message ExplicitHttpConfig { option (udpa.annotations.versioning).previous_message_type = "envoy.extensions.upstreams.http.v3.HttpProtocolOptions.ExplicitHttpConfig"; oneof protocol_config { + option (validate.required) = true; + config.core.v4alpha.Http1ProtocolOptions http_protocol_options = 1; config.core.v4alpha.Http2ProtocolOptions http2_protocol_options = 2; @@ -92,8 +93,9 @@ message HttpProtocolOptions { config.core.v4alpha.UpstreamHttpProtocolOptions upstream_http_protocol_options = 2; // This controls the actual protocol to be used upstream. - // If none of the *upstream_protocol_options* are chosen, the default is *explicit_http_config*. oneof upstream_protocol_options { + option (validate.required) = true; + // To explicitly configure either HTTP/1 or HTTP/2 (but not both!) use *explicit_http_config*. // If the *explicit_http_config* is empty, HTTP/1.1 is used. ExplicitHttpConfig explicit_http_config = 3; diff --git a/test/common/upstream/upstream_impl_test.cc b/test/common/upstream/upstream_impl_test.cc index e565609d214c0..66f9ff77ec396 100644 --- a/test/common/upstream/upstream_impl_test.cc +++ b/test/common/upstream/upstream_impl_test.cc @@ -2564,6 +2564,8 @@ TEST_F(ClusterInfoImplTest, Timeouts) { typed_extension_protocol_options: envoy.extensions.upstreams.http.v3.HttpProtocolOptions: "@type": type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions + explicit_http_config: + http_protocol_options: {} common_http_protocol_options: idle_timeout: 1s )EOF"; @@ -2587,6 +2589,8 @@ TEST_F(ClusterInfoImplTest, Timeouts) { typed_extension_protocol_options: envoy.extensions.upstreams.http.v3.HttpProtocolOptions: "@type": type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions + explicit_http_config: + http_protocol_options: {} common_http_protocol_options: idle_timeout: 0s )EOF"; From fdcf27440e21c60ab07bdf322f3f3471aa0d4015 Mon Sep 17 00:00:00 2001 From: Alyssa Wilk Date: Thu, 10 Dec 2020 12:38:37 -0500 Subject: [PATCH 2/6] example of a test which should fail Signed-off-by: Alyssa Wilk --- configs/encapsulate_in_http1_connect.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/configs/encapsulate_in_http1_connect.yaml b/configs/encapsulate_in_http1_connect.yaml index ba233f645806a..97bd05763699b 100644 --- a/configs/encapsulate_in_http1_connect.yaml +++ b/configs/encapsulate_in_http1_connect.yaml @@ -34,8 +34,6 @@ static_resources: typed_extension_protocol_options: envoy.extensions.upstreams.http.v3.HttpProtocolOptions: "@type": type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions - explicit_http_config: - http_protocol_options: {} load_assignment: cluster_name: cluster_0 endpoints: From 54047b28ad5ed82b3f50bd0886ef97c0bc6ee6fc Mon Sep 17 00:00:00 2001 From: Alyssa Wilk Date: Thu, 10 Dec 2020 14:17:54 -0500 Subject: [PATCH 3/6] actually validating Signed-off-by: Alyssa Wilk --- configs/encapsulate_in_http1_connect.yaml | 2 ++ source/extensions/upstreams/http/config.h | 2 ++ test/common/upstream/upstream_impl_test.cc | 13 +++++++++++++ test/integration/base_integration_test.cc | 8 ++++++++ test/integration/http2_integration_test.cc | 1 + test/integration/tcp_tunneling_integration_test.cc | 2 ++ 6 files changed, 28 insertions(+) diff --git a/configs/encapsulate_in_http1_connect.yaml b/configs/encapsulate_in_http1_connect.yaml index 97bd05763699b..ba233f645806a 100644 --- a/configs/encapsulate_in_http1_connect.yaml +++ b/configs/encapsulate_in_http1_connect.yaml @@ -34,6 +34,8 @@ static_resources: typed_extension_protocol_options: envoy.extensions.upstreams.http.v3.HttpProtocolOptions: "@type": type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions + explicit_http_config: + http_protocol_options: {} load_assignment: cluster_name: cluster_0 endpoints: diff --git a/source/extensions/upstreams/http/config.h b/source/extensions/upstreams/http/config.h index f68ffe73f8340..d98c49fcf630a 100644 --- a/source/extensions/upstreams/http/config.h +++ b/source/extensions/upstreams/http/config.h @@ -14,6 +14,7 @@ #include "envoy/server/filter_config.h" #include "common/common/logger.h" +#include "common/protobuf/message_validator_impl.h" namespace Envoy { namespace Extensions { @@ -49,6 +50,7 @@ class ProtocolOptionsConfigFactory : public Server::Configuration::ProtocolOptio Server::Configuration::ProtocolOptionsFactoryContext&) override { const envoy::extensions::upstreams::http::v3::HttpProtocolOptions& typed_config = *dynamic_cast(&config); + MessageUtil::validate(typed_config, ProtobufMessage::getStrictValidationVisitor()); return std::make_shared(typed_config); } std::string category() const override { return "envoy.upstream_options"; } diff --git a/test/common/upstream/upstream_impl_test.cc b/test/common/upstream/upstream_impl_test.cc index 66f9ff77ec396..f52a5cdb52502 100644 --- a/test/common/upstream/upstream_impl_test.cc +++ b/test/common/upstream/upstream_impl_test.cc @@ -2570,6 +2570,14 @@ TEST_F(ClusterInfoImplTest, Timeouts) { idle_timeout: 1s )EOF"; + const std::string explicit_timeout_bad = R"EOF( + typed_extension_protocol_options: + envoy.extensions.upstreams.http.v3.HttpProtocolOptions: + "@type": type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions + common_http_protocol_options: + idle_timeout: 1s + )EOF"; + { auto cluster2 = makeCluster(yaml + explicit_timeout); ASSERT_TRUE(cluster2->info()->idleTimeout().has_value()); @@ -2580,6 +2588,11 @@ TEST_F(ClusterInfoImplTest, Timeouts) { ASSERT_TRUE(cluster2->info()->idleTimeout().has_value()); EXPECT_EQ(std::chrono::seconds(1), cluster2->info()->idleTimeout().value()); } + { + auto cluster2 = makeCluster(yaml + explicit_timeout_new); + EXPECT_THROW_WITH_REGEX(makeCluster(yaml + explicit_timeout_bad, false), EnvoyException, + ".*Proto constraint validation failed.*"); + } const std::string no_timeout = R"EOF( common_http_protocol_options: idle_timeout: 0s diff --git a/test/integration/base_integration_test.cc b/test/integration/base_integration_test.cc index 806a8a3d4d061..634c758a6f866 100644 --- a/test/integration/base_integration_test.cc +++ b/test/integration/base_integration_test.cc @@ -215,6 +215,14 @@ void BaseIntegrationTest::setUpstreamProtocol(FakeHttpConnection::Type protocol) }); } else { RELEASE_ASSERT(protocol == FakeHttpConnection::Type::HTTP1, ""); + 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_http_protocol_options(); + ConfigHelper::setProtocolOptions( + *bootstrap.mutable_static_resources()->mutable_clusters(0), protocol_options); + }); } } diff --git a/test/integration/http2_integration_test.cc b/test/integration/http2_integration_test.cc index ef311a7b6d14e..a0e73bdbde68c 100644 --- a/test/integration/http2_integration_test.cc +++ b/test/integration/http2_integration_test.cc @@ -957,6 +957,7 @@ TEST_P(Http2IntegrationTest, IdleTimeoutWithSimultaneousRequests) { config_helper_.addConfigModifier([](envoy::config::bootstrap::v3::Bootstrap& bootstrap) { ConfigHelper::HttpProtocolOptions protocol_options; auto* http_protocol_options = protocol_options.mutable_common_http_protocol_options(); + protocol_options.mutable_explicit_http_config()->mutable_http_protocol_options(); auto* idle_time_out = http_protocol_options->mutable_idle_timeout(); std::chrono::milliseconds timeout(1000); auto seconds = std::chrono::duration_cast(timeout); diff --git a/test/integration/tcp_tunneling_integration_test.cc b/test/integration/tcp_tunneling_integration_test.cc index 2a558bc59ebc4..37c3da5f7a676 100644 --- a/test/integration/tcp_tunneling_integration_test.cc +++ b/test/integration/tcp_tunneling_integration_test.cc @@ -186,11 +186,13 @@ TEST_P(ConnectTerminationIntegrationTest, BuggyHeaders) { } TEST_P(ConnectTerminationIntegrationTest, BasicMaxStreamDuration) { + setUpstreamProtocol(upstreamProtocol()); config_helper_.addConfigModifier([](envoy::config::bootstrap::v3::Bootstrap& bootstrap) { ConfigHelper::HttpProtocolOptions protocol_options; protocol_options.mutable_common_http_protocol_options() ->mutable_max_stream_duration() ->MergeFrom(ProtobufUtil::TimeUtil::MillisecondsToDuration(1000)); + ConfigHelper::setProtocolOptions(*bootstrap.mutable_static_resources()->mutable_clusters(0), protocol_options); }); From 79f08083ce1f2e53edc80581a97f020157e63a13 Mon Sep 17 00:00:00 2001 From: Alyssa Wilk Date: Thu, 10 Dec 2020 14:19:30 -0500 Subject: [PATCH 4/6] whitespace Signed-off-by: Alyssa Wilk --- test/integration/tcp_tunneling_integration_test.cc | 1 - 1 file changed, 1 deletion(-) diff --git a/test/integration/tcp_tunneling_integration_test.cc b/test/integration/tcp_tunneling_integration_test.cc index 37c3da5f7a676..590c74de8b8b0 100644 --- a/test/integration/tcp_tunneling_integration_test.cc +++ b/test/integration/tcp_tunneling_integration_test.cc @@ -192,7 +192,6 @@ TEST_P(ConnectTerminationIntegrationTest, BasicMaxStreamDuration) { protocol_options.mutable_common_http_protocol_options() ->mutable_max_stream_duration() ->MergeFrom(ProtobufUtil::TimeUtil::MillisecondsToDuration(1000)); - ConfigHelper::setProtocolOptions(*bootstrap.mutable_static_resources()->mutable_clusters(0), protocol_options); }); From 73c874e519b13e446234081854dbbae78aecf2f6 Mon Sep 17 00:00:00 2001 From: Alyssa Wilk Date: Mon, 14 Dec 2020 10:28:54 -0500 Subject: [PATCH 5/6] comments Signed-off-by: Alyssa Wilk --- .../upstreams/http/v3/http_protocol_options.proto | 1 + .../http/v4alpha/http_protocol_options.proto | 1 + .../upstreams/http/v3/http_protocol_options.proto | 1 + .../http/v4alpha/http_protocol_options.proto | 1 + source/extensions/upstreams/http/config.h | 13 +++++++------ 5 files changed, 11 insertions(+), 6 deletions(-) diff --git a/api/envoy/extensions/upstreams/http/v3/http_protocol_options.proto b/api/envoy/extensions/upstreams/http/v3/http_protocol_options.proto index c2ef025420ffa..7c5dce7854ee1 100644 --- a/api/envoy/extensions/upstreams/http/v3/http_protocol_options.proto +++ b/api/envoy/extensions/upstreams/http/v3/http_protocol_options.proto @@ -58,6 +58,7 @@ option (udpa.annotations.file_status).package_version_status = ACTIVE; // .... [further cluster config] message HttpProtocolOptions { // If this is used, the cluster will only operate on one of the possible upstream protocols (HTTP/1.1, HTTP/2). + // Note that HTTP/2 should generally be used for upstream clusters doing gRPC. message ExplicitHttpConfig { oneof protocol_config { option (validate.required) = true; diff --git a/api/envoy/extensions/upstreams/http/v4alpha/http_protocol_options.proto b/api/envoy/extensions/upstreams/http/v4alpha/http_protocol_options.proto index 80516ba494638..4c97b8a69f8f1 100644 --- a/api/envoy/extensions/upstreams/http/v4alpha/http_protocol_options.proto +++ b/api/envoy/extensions/upstreams/http/v4alpha/http_protocol_options.proto @@ -62,6 +62,7 @@ message HttpProtocolOptions { "envoy.extensions.upstreams.http.v3.HttpProtocolOptions"; // If this is used, the cluster will only operate on one of the possible upstream protocols (HTTP/1.1, HTTP/2). + // Note that HTTP/2 should generally be used for upstream clusters doing gRPC. message ExplicitHttpConfig { option (udpa.annotations.versioning).previous_message_type = "envoy.extensions.upstreams.http.v3.HttpProtocolOptions.ExplicitHttpConfig"; diff --git a/generated_api_shadow/envoy/extensions/upstreams/http/v3/http_protocol_options.proto b/generated_api_shadow/envoy/extensions/upstreams/http/v3/http_protocol_options.proto index c2ef025420ffa..7c5dce7854ee1 100644 --- a/generated_api_shadow/envoy/extensions/upstreams/http/v3/http_protocol_options.proto +++ b/generated_api_shadow/envoy/extensions/upstreams/http/v3/http_protocol_options.proto @@ -58,6 +58,7 @@ option (udpa.annotations.file_status).package_version_status = ACTIVE; // .... [further cluster config] message HttpProtocolOptions { // If this is used, the cluster will only operate on one of the possible upstream protocols (HTTP/1.1, HTTP/2). + // Note that HTTP/2 should generally be used for upstream clusters doing gRPC. message ExplicitHttpConfig { oneof protocol_config { option (validate.required) = true; diff --git a/generated_api_shadow/envoy/extensions/upstreams/http/v4alpha/http_protocol_options.proto b/generated_api_shadow/envoy/extensions/upstreams/http/v4alpha/http_protocol_options.proto index 80516ba494638..4c97b8a69f8f1 100644 --- a/generated_api_shadow/envoy/extensions/upstreams/http/v4alpha/http_protocol_options.proto +++ b/generated_api_shadow/envoy/extensions/upstreams/http/v4alpha/http_protocol_options.proto @@ -62,6 +62,7 @@ message HttpProtocolOptions { "envoy.extensions.upstreams.http.v3.HttpProtocolOptions"; // If this is used, the cluster will only operate on one of the possible upstream protocols (HTTP/1.1, HTTP/2). + // Note that HTTP/2 should generally be used for upstream clusters doing gRPC. message ExplicitHttpConfig { option (udpa.annotations.versioning).previous_message_type = "envoy.extensions.upstreams.http.v3.HttpProtocolOptions.ExplicitHttpConfig"; diff --git a/source/extensions/upstreams/http/config.h b/source/extensions/upstreams/http/config.h index d98c49fcf630a..e55cb18117f03 100644 --- a/source/extensions/upstreams/http/config.h +++ b/source/extensions/upstreams/http/config.h @@ -12,6 +12,7 @@ #include "envoy/extensions/upstreams/http/v3/http_protocol_options.pb.validate.h" #include "envoy/http/filter.h" #include "envoy/server/filter_config.h" +#include "envoy/server/transport_socket_config.h" #include "common/common/logger.h" #include "common/protobuf/message_validator_impl.h" @@ -45,12 +46,12 @@ class ProtocolOptionsConfigImpl : public Upstream::ProtocolOptionsConfig { class ProtocolOptionsConfigFactory : public Server::Configuration::ProtocolOptionsFactory { public: - Upstream::ProtocolOptionsConfigConstSharedPtr - createProtocolOptionsConfig(const Protobuf::Message& config, - Server::Configuration::ProtocolOptionsFactoryContext&) override { - const envoy::extensions::upstreams::http::v3::HttpProtocolOptions& typed_config = - *dynamic_cast(&config); - MessageUtil::validate(typed_config, ProtobufMessage::getStrictValidationVisitor()); + Upstream::ProtocolOptionsConfigConstSharedPtr createProtocolOptionsConfig( + const Protobuf::Message& config, + Server::Configuration::ProtocolOptionsFactoryContext& context) override { + const auto& typed_config = MessageUtil::downcastAndValidate< + const envoy::extensions::upstreams::http::v3::HttpProtocolOptions&>( + config, context.messageValidationVisitor()); return std::make_shared(typed_config); } std::string category() const override { return "envoy.upstream_options"; } From 8f399e28f930d52fbb39c3e45d3a9a1865ea2d4f Mon Sep 17 00:00:00 2001 From: Alyssa Wilk Date: Mon, 14 Dec 2020 14:32:45 -0500 Subject: [PATCH 6/6] test fix Signed-off-by: Alyssa Wilk --- test/integration/tcp_proxy_integration_test.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/test/integration/tcp_proxy_integration_test.cc b/test/integration/tcp_proxy_integration_test.cc index d8e98c10dabad..7f2cc5b33e8b9 100644 --- a/test/integration/tcp_proxy_integration_test.cc +++ b/test/integration/tcp_proxy_integration_test.cc @@ -96,6 +96,7 @@ TEST_P(TcpProxyIntegrationTest, TcpProxyUpstreamWritesFirst) { // Test TLS upstream. TEST_P(TcpProxyIntegrationTest, TcpProxyUpstreamTls) { upstream_tls_ = true; + setUpstreamProtocol(FakeHttpConnection::Type::HTTP1); config_helper_.configureUpstreamTls(); initialize(); IntegrationTcpClientPtr tcp_client = makeTcpConnection(lookupPort("tcp_proxy"));