From 3efd9fd272b65936a969ae67b2d8756e1afc1269 Mon Sep 17 00:00:00 2001 From: Henna Huang Date: Mon, 5 Jun 2017 16:19:34 -0400 Subject: [PATCH 1/2] server test and integration test ipv6 --- test/config/integration/server_http2.json | 17 +++-- .../integration/server_http2_upstream.json | 11 +-- .../integration/server_proxy_proto.json | 9 +-- test/config/integration/server_ssl.json | 9 +-- test/config/integration/server_uds.json | 6 +- test/integration/fake_upstream.cc | 12 ++-- test/integration/fake_upstream.h | 6 +- test/integration/http2_integration_test.cc | 72 ++++++++++--------- test/integration/http2_integration_test.h | 8 ++- .../http2_upstream_integration_test.cc | 50 +++++++------ .../http2_upstream_integration_test.h | 8 ++- test/integration/integration.cc | 2 - test/integration/integration.h | 3 +- .../proxy_proto_integration_test.cc | 17 ++++- .../proxy_proto_integration_test.h | 6 +- test/integration/ssl_integration_test.cc | 61 +++++++++------- test/integration/ssl_integration_test.h | 4 +- test/integration/uds_integration_test.cc | 14 ++-- test/integration/uds_integration_test.h | 4 +- test/integration/utility.h | 5 +- test/server/server_test.cc | 16 +++-- test/test_common/environment.cc | 2 +- test/test_common/environment.h | 7 +- 23 files changed, 205 insertions(+), 144 deletions(-) diff --git a/test/config/integration/server_http2.json b/test/config/integration/server_http2.json index bed9222b17b7e..aec52f4eea605 100644 --- a/test/config/integration/server_http2.json +++ b/test/config/integration/server_http2.json @@ -1,13 +1,13 @@ { "listeners": [ { - "address": "tcp://127.0.0.1:0", + "address": "tcp://{{ ip_loopback_address }}:0", "filters": [ { "type": "read", "name": "echo", "config": {} } ] }, { - "address": "tcp://127.0.0.1:0", + "address": "tcp://{{ ip_loopback_address }}:0", "filters": [ { "type": "read", @@ -88,7 +88,7 @@ }] }, { - "address": "tcp://127.0.0.1:0", + "address": "tcp://{{ ip_loopback_address }}:0", "filters": [ { "type": "read", @@ -175,7 +175,7 @@ }] }, { - "address": "tcp://127.0.0.1:0", + "address": "tcp://{{ ip_loopback_address }}:0", "filters": [ { "type": "read", "name": "tcp_proxy", @@ -193,8 +193,8 @@ ] }], - "admin": { "access_log_path": "/dev/null", "address": "tcp://127.0.0.1:0" }, - "statsd_local_udp_port": 8125, + "admin": { "access_log_path": "/dev/null", "address": "tcp://{{ ip_loopback_address }}:0" }, + "statsd_udp_ip_address": "{{ ip_loopback_address }}:8125", "statsd_tcp_cluster_name": "statsd", "tracing": { "http": { @@ -221,13 +221,14 @@ "connect_timeout_ms": 5000, "type": "static", "lb_type": "round_robin", - "hosts": [{"url": "tcp://127.0.0.1:{{ upstream_0 }}"}] + "hosts": [{"url": "tcp://{{ ip_loopback_address }}:{{ upstream_0 }}"}] }, { "name": "cluster_2", "connect_timeout_ms": 5000, "type": "logical_dns", "lb_type": "round_robin", + "dns_lookup_family": "{{ dns_lookup_family }}", "hosts": [{"url": "tcp://localhost:{{ upstream_1 }}"}] }, { @@ -235,6 +236,7 @@ "connect_timeout_ms": 5000, "type": "strict_dns", "lb_type": "round_robin", + "dns_lookup_family": "{{ dns_lookup_family }}", "hosts": [{"url": "tcp://localhost:10009"}] }, { @@ -243,6 +245,7 @@ "connect_timeout_ms": 5000, "type": "strict_dns", "lb_type": "round_robin", + "dns_lookup_family": "{{ dns_lookup_family }}", "hosts": [{"url": "tcp://localhost:10010"}] }] } diff --git a/test/config/integration/server_http2_upstream.json b/test/config/integration/server_http2_upstream.json index 6dfb19faedab4..2778ef91f9b2d 100644 --- a/test/config/integration/server_http2_upstream.json +++ b/test/config/integration/server_http2_upstream.json @@ -1,7 +1,7 @@ { "listeners": [ { - "address": "tcp://127.0.0.1:0", + "address": "tcp://{{ ip_loopback_address }}:0", "filters": [ { "type": "read", @@ -82,7 +82,7 @@ }] }, { - "address": "tcp://127.0.0.1:0", + "address": "tcp://{{ ip_loopback_address }}:0", "filters": [ { "type": "read", @@ -169,7 +169,7 @@ }] }, { - "address": "tcp://127.0.0.1:0", + "address": "tcp://{{ ip_loopback_address }}:0", "filters": [ { "type": "read", @@ -255,7 +255,7 @@ }] }], - "admin": { "access_log_path": "/dev/null", "address": "tcp://127.0.0.1:0" }, + "admin": { "access_log_path": "/dev/null", "address": "tcp://{{ ip_loopback_address }}:0" }, "cluster_manager": { "clusters": [ @@ -265,7 +265,7 @@ "type": "static", "lb_type": "round_robin", "features": "http2", - "hosts": [{"url": "tcp://127.0.0.1:{{ upstream_0 }}"}] + "hosts": [{"url": "tcp://{{ ip_loopback_address }}:{{ upstream_0 }}"}] }, { "name": "cluster_2", @@ -273,6 +273,7 @@ "type": "strict_dns", "lb_type": "round_robin", "features": "http2", + "dns_lookup_family": "{{ dns_lookup_family }}", "hosts": [{"url": "tcp://localhost:{{ upstream_1 }}"}] }] } diff --git a/test/config/integration/server_proxy_proto.json b/test/config/integration/server_proxy_proto.json index 315ae6e422e17..cc7e41d607aed 100644 --- a/test/config/integration/server_proxy_proto.json +++ b/test/config/integration/server_proxy_proto.json @@ -1,7 +1,7 @@ { "listeners": [ { - "address": "tcp://127.0.0.1:0", + "address": "tcp://{{ ip_loopback_address }}:0", "use_proxy_proto": true, "filters": [ { @@ -82,8 +82,8 @@ }] }], - "admin": { "access_log_path": "/dev/null", "address": "tcp://127.0.0.1:0" }, - "statsd_local_udp_port": 8125, + "admin": { "access_log_path": "/dev/null", "address": "tcp://{{ ip_loopback_address }}:0" }, + "statsd_udp_ip_address": "{{ ip_loopback_address }}:8125", "cluster_manager": { "clusters": [ @@ -92,13 +92,14 @@ "connect_timeout_ms": 5000, "type": "static", "lb_type": "round_robin", - "hosts": [{"url": "tcp://127.0.0.1:{{ upstream_0 }}"}] + "hosts": [{"url": "tcp://{{ ip_loopback_address }}:{{ upstream_0 }}"}] }, { "name": "cluster_2", "connect_timeout_ms": 5000, "type": "strict_dns", "lb_type": "round_robin", + "dns_lookup_family": "{{ dns_lookup_family }}", "hosts": [{"url": "tcp://localhost:11001"}] }] } diff --git a/test/config/integration/server_ssl.json b/test/config/integration/server_ssl.json index e6eeb91ec02a0..d32a4707451aa 100644 --- a/test/config/integration/server_ssl.json +++ b/test/config/integration/server_ssl.json @@ -1,7 +1,7 @@ { "listeners": [ { - "address": "tcp://127.0.0.1:0", + "address": "tcp://{{ ip_loopback_address }}:0", "ssl_context": { "ca_cert_file": "{{ test_rundir }}/test/config/integration/certs/cacert.pem", "cert_chain_file": "{{ test_rundir }}/test/config/integration/certs/servercert.pem", @@ -89,8 +89,8 @@ }] }], - "admin": { "access_log_path": "/dev/null", "address": "tcp://127.0.0.1:0" }, - "statsd_local_udp_port": 8125, + "admin": { "access_log_path": "/dev/null", "address": "tcp://{{ ip_loopback_address }}:0" }, + "statsd_udp_ip_address": "{{ ip_loopback_address }}:8125", "cluster_manager": { "clusters": [ @@ -103,7 +103,7 @@ }, "type": "static", "lb_type": "round_robin", - "hosts": [{"url": "tcp://127.0.0.1:{{ upstream_0 }}"}] + "hosts": [{"url": "tcp://{{ ip_loopback_address }}:{{ upstream_0 }}"}] }, { "name": "cluster_2", @@ -114,6 +114,7 @@ }, "type": "strict_dns", "lb_type": "round_robin", + "dns_lookup_family": "{{ dns_lookup_family }}", "hosts": [{"url": "tcp://localhost:{{ upstream_1 }}"}] }] } diff --git a/test/config/integration/server_uds.json b/test/config/integration/server_uds.json index 4bc03c3beb991..1a35f43fa00ac 100644 --- a/test/config/integration/server_uds.json +++ b/test/config/integration/server_uds.json @@ -1,7 +1,7 @@ { "listeners": [ { - "address": "tcp://127.0.0.1:0", + "address": "tcp://{{ ip_loopback_address }}:0", "filters": [ { "type": "read", @@ -81,8 +81,8 @@ }] }], - "admin": { "access_log_path": "/dev/null", "address": "tcp://127.0.0.1:0" }, - "statsd_local_udp_port": 8125, + "admin": { "access_log_path": "/dev/null", "address": "tcp://{{ ip_loopback_address }}:0" }, + "statsd_udp_ip_address": "{{ ip_loopback_address }}:8125", "cluster_manager": { "clusters": [ diff --git a/test/integration/fake_upstream.cc b/test/integration/fake_upstream.cc index c42bf6e856735..d06c8e2759b7a 100644 --- a/test/integration/fake_upstream.cc +++ b/test/integration/fake_upstream.cc @@ -200,9 +200,8 @@ FakeUpstream::FakeUpstream(const std::string& uds_path, FakeHttpConnection::Type log().info("starting fake server on unix domain socket {}", uds_path); } -static Network::ListenSocketPtr -makeTcpListenSocket(uint32_t port, - Network::Address::IpVersion version = Network::Address::IpVersion::v4) { +static Network::ListenSocketPtr makeTcpListenSocket(uint32_t port, + Network::Address::IpVersion version) { return Network::ListenSocketPtr{new Network::TcpListenSocket( Network::Utility::parseInternetAddressAndPort( fmt::format("{}:{}", Network::Test::getAnyAddressUrlString(version), port)), @@ -217,9 +216,10 @@ FakeUpstream::FakeUpstream(uint32_t port, FakeHttpConnection::Type type, } FakeUpstream::FakeUpstream(Ssl::ServerContext* ssl_ctx, uint32_t port, - FakeHttpConnection::Type type) - : FakeUpstream(ssl_ctx, makeTcpListenSocket(port), type) { - log().info("starting fake SSL server on port {}", this->localAddress()->ip()->port()); + FakeHttpConnection::Type type, Network::Address::IpVersion version) + : FakeUpstream(ssl_ctx, makeTcpListenSocket(port, version), type) { + log().info("starting fake SSL server on port {}. Address version is {}", + this->localAddress()->ip()->port(), Network::Test::addressVersionAsString(version)); } FakeUpstream::FakeUpstream(Ssl::ServerContext* ssl_ctx, Network::ListenSocketPtr&& listen_socket, diff --git a/test/integration/fake_upstream.h b/test/integration/fake_upstream.h index 9bb601561ab30..81d8f97e45edf 100644 --- a/test/integration/fake_upstream.h +++ b/test/integration/fake_upstream.h @@ -200,9 +200,9 @@ typedef std::unique_ptr FakeRawConnectionPtr; class FakeUpstream : Logger::Loggable, public Network::FilterChainFactory { public: FakeUpstream(const std::string& uds_path, FakeHttpConnection::Type type); - FakeUpstream(uint32_t port, FakeHttpConnection::Type type, - Network::Address::IpVersion version = Network::Address::IpVersion::v4); - FakeUpstream(Ssl::ServerContext* ssl_ctx, uint32_t port, FakeHttpConnection::Type type); + FakeUpstream(uint32_t port, FakeHttpConnection::Type type, Network::Address::IpVersion version); + FakeUpstream(Ssl::ServerContext* ssl_ctx, uint32_t port, FakeHttpConnection::Type type, + Network::Address::IpVersion version); ~FakeUpstream(); FakeHttpConnection::Type httpType() { return http_type_; } diff --git a/test/integration/http2_integration_test.cc b/test/integration/http2_integration_test.cc index c64d37653b5ef..6b4bc2f8fc7ed 100644 --- a/test/integration/http2_integration_test.cc +++ b/test/integration/http2_integration_test.cc @@ -13,81 +13,85 @@ #include "gtest/gtest.h" namespace Envoy { -TEST_F(Http2IntegrationTest, RouterNotFound) { testRouterNotFound(Http::CodecClient::Type::HTTP2); } -TEST_F(Http2IntegrationTest, RouterNotFoundBodyNoBuffer) { +INSTANTIATE_TEST_CASE_P(IpVersions, Http2IntegrationTest, + testing::ValuesIn(TestEnvironment::getIpVersionsForTest())); + +TEST_P(Http2IntegrationTest, RouterNotFound) { testRouterNotFound(Http::CodecClient::Type::HTTP2); } + +TEST_P(Http2IntegrationTest, RouterNotFoundBodyNoBuffer) { testRouterNotFoundWithBody(lookupPort("http"), Http::CodecClient::Type::HTTP2); } -TEST_F(Http2IntegrationTest, RouterNotFoundBodyBuffer) { +TEST_P(Http2IntegrationTest, RouterNotFoundBodyBuffer) { testRouterNotFoundWithBody(lookupPort("http_buffer"), Http::CodecClient::Type::HTTP2); } -TEST_F(Http2IntegrationTest, RouterRedirect) { testRouterRedirect(Http::CodecClient::Type::HTTP2); } +TEST_P(Http2IntegrationTest, RouterRedirect) { testRouterRedirect(Http::CodecClient::Type::HTTP2); } -TEST_F(Http2IntegrationTest, DrainClose) { testDrainClose(Http::CodecClient::Type::HTTP2); } +TEST_P(Http2IntegrationTest, DrainClose) { testDrainClose(Http::CodecClient::Type::HTTP2); } -TEST_F(Http2IntegrationTest, RouterRequestAndResponseWithBodyNoBuffer) { +TEST_P(Http2IntegrationTest, RouterRequestAndResponseWithBodyNoBuffer) { testRouterRequestAndResponseWithBody(makeClientConnection(lookupPort("http")), Http::CodecClient::Type::HTTP2, 1024, 512, false); } -TEST_F(Http2IntegrationTest, RouterRequestAndResponseWithBodyBuffer) { +TEST_P(Http2IntegrationTest, RouterRequestAndResponseWithBodyBuffer) { testRouterRequestAndResponseWithBody(makeClientConnection(lookupPort("http_buffer")), Http::CodecClient::Type::HTTP2, 1024, 512, false); } -TEST_F(Http2IntegrationTest, RouterRequestAndResponseWithGiantBodyBuffer) { +TEST_P(Http2IntegrationTest, RouterRequestAndResponseWithGiantBodyBuffer) { testRouterRequestAndResponseWithBody(makeClientConnection(lookupPort("http_buffer")), Http::CodecClient::Type::HTTP2, 1024 * 1024, 1024 * 1024, false); } -TEST_F(Http2IntegrationTest, RouterHeaderOnlyRequestAndResponseNoBuffer) { +TEST_P(Http2IntegrationTest, RouterHeaderOnlyRequestAndResponseNoBuffer) { testRouterHeaderOnlyRequestAndResponse(makeClientConnection(lookupPort("http")), Http::CodecClient::Type::HTTP2); } -TEST_F(Http2IntegrationTest, RouterHeaderOnlyRequestAndResponseBuffer) { +TEST_P(Http2IntegrationTest, RouterHeaderOnlyRequestAndResponseBuffer) { testRouterHeaderOnlyRequestAndResponse(makeClientConnection(lookupPort("http_buffer")), Http::CodecClient::Type::HTTP2); } -TEST_F(Http2IntegrationTest, RouterRequestAndResponseLargeHeaderNoBuffer) { +TEST_P(Http2IntegrationTest, RouterRequestAndResponseLargeHeaderNoBuffer) { testRouterRequestAndResponseWithBody(makeClientConnection(lookupPort("http")), Http::CodecClient::Type::HTTP2, 1024, 512, true); } -TEST_F(Http2IntegrationTest, RouterUpstreamDisconnectBeforeRequestcomplete) { +TEST_P(Http2IntegrationTest, RouterUpstreamDisconnectBeforeRequestcomplete) { testRouterUpstreamDisconnectBeforeRequestComplete(makeClientConnection(lookupPort("http")), Http::CodecClient::Type::HTTP2); } -TEST_F(Http2IntegrationTest, RouterUpstreamDisconnectBeforeResponseComplete) { +TEST_P(Http2IntegrationTest, RouterUpstreamDisconnectBeforeResponseComplete) { testRouterUpstreamDisconnectBeforeResponseComplete(makeClientConnection(lookupPort("http")), Http::CodecClient::Type::HTTP2); } -TEST_F(Http2IntegrationTest, RouterDownstreamDisconnectBeforeRequestComplete) { +TEST_P(Http2IntegrationTest, RouterDownstreamDisconnectBeforeRequestComplete) { testRouterDownstreamDisconnectBeforeRequestComplete(makeClientConnection(lookupPort("http")), Http::CodecClient::Type::HTTP2); } -TEST_F(Http2IntegrationTest, RouterDownstreamDisconnectBeforeResponseComplete) { +TEST_P(Http2IntegrationTest, RouterDownstreamDisconnectBeforeResponseComplete) { testRouterDownstreamDisconnectBeforeResponseComplete(makeClientConnection(lookupPort("http")), Http::CodecClient::Type::HTTP2); } -TEST_F(Http2IntegrationTest, RouterUpstreamResponseBeforeRequestComplete) { +TEST_P(Http2IntegrationTest, RouterUpstreamResponseBeforeRequestComplete) { testRouterUpstreamResponseBeforeRequestComplete(makeClientConnection(lookupPort("http")), Http::CodecClient::Type::HTTP2); } -TEST_F(Http2IntegrationTest, TwoRequests) { testTwoRequests(Http::CodecClient::Type::HTTP2); } +TEST_P(Http2IntegrationTest, TwoRequests) { testTwoRequests(Http::CodecClient::Type::HTTP2); } -TEST_F(Http2IntegrationTest, Retry) { testRetry(Http::CodecClient::Type::HTTP2); } +TEST_P(Http2IntegrationTest, Retry) { testRetry(Http::CodecClient::Type::HTTP2); } -TEST_F(Http2IntegrationTest, MaxHeadersInCodec) { +TEST_P(Http2IntegrationTest, MaxHeadersInCodec) { Http::TestHeaderMapImpl big_headers{ {":method", "GET"}, {":path", "/test/long/url"}, {":scheme", "http"}, {":authority", "host"}}; @@ -104,7 +108,7 @@ TEST_F(Http2IntegrationTest, MaxHeadersInCodec) { [&]() -> void { response->waitForReset(); }, [&]() -> void { codec_client->close(); }}); } -TEST_F(Http2IntegrationTest, MaxHeadersInConnectionManager) { +TEST_P(Http2IntegrationTest, MaxHeadersInConnectionManager) { Http::TestHeaderMapImpl big_headers{ {":method", "GET"}, {":path", "/test/long/url"}, {":scheme", "http"}, {":authority", "host"}}; @@ -123,35 +127,37 @@ TEST_F(Http2IntegrationTest, MaxHeadersInConnectionManager) { EXPECT_STREQ("400", response->headers().Status()->value().c_str()); } -TEST_F(Http2IntegrationTest, DownstreamResetBeforeResponseComplete) { +TEST_P(Http2IntegrationTest, DownstreamResetBeforeResponseComplete) { testDownstreamResetBeforeResponseComplete(); } -TEST_F(Http2IntegrationTest, BadMagic) { +TEST_P(Http2IntegrationTest, BadMagic) { Buffer::OwnedImpl buffer("hello"); std::string response; RawConnectionDriver connection( - lookupPort("http"), buffer, - [&](Network::ClientConnection&, const Buffer::Instance& data) - -> void { response.append(TestUtility::bufferToString(data)); }); + lookupPort("http"), + buffer, [&](Network::ClientConnection&, const Buffer::Instance& data) -> void { + response.append(TestUtility::bufferToString(data)); + }, GetParam()); connection.run(); EXPECT_EQ("", response); } -TEST_F(Http2IntegrationTest, BadFrame) { +TEST_P(Http2IntegrationTest, BadFrame) { Buffer::OwnedImpl buffer("PRI * HTTP/2.0\r\n\r\nSM\r\n\r\nhelloworldcauseanerror"); std::string response; RawConnectionDriver connection( - lookupPort("http"), buffer, - [&](Network::ClientConnection&, const Buffer::Instance& data) - -> void { response.append(TestUtility::bufferToString(data)); }); + lookupPort("http"), + buffer, [&](Network::ClientConnection&, const Buffer::Instance& data) -> void { + response.append(TestUtility::bufferToString(data)); + }, GetParam()); connection.run(); EXPECT_TRUE(response.find("SETTINGS expected") != std::string::npos); } -TEST_F(Http2IntegrationTest, GoAway) { +TEST_P(Http2IntegrationTest, GoAway) { IntegrationCodecClientPtr codec_client; Http::StreamEncoder* encoder; IntegrationStreamDecoderPtr response(new IntegrationStreamDecoder(*dispatcher_)); @@ -174,11 +180,11 @@ TEST_F(Http2IntegrationTest, GoAway) { EXPECT_STREQ("200", response->headers().Status()->value().c_str()); } -TEST_F(Http2IntegrationTest, Trailers) { testTrailers(1024, 2048); } +TEST_P(Http2IntegrationTest, Trailers) { testTrailers(1024, 2048); } -TEST_F(Http2IntegrationTest, TrailersGiantBody) { testTrailers(1024 * 1024, 1024 * 1024); } +TEST_P(Http2IntegrationTest, TrailersGiantBody) { testTrailers(1024 * 1024, 1024 * 1024); } -TEST_F(Http2IntegrationTest, SimultaneousRequest) { +TEST_P(Http2IntegrationTest, SimultaneousRequest) { IntegrationCodecClientPtr codec_client; FakeHttpConnectionPtr fake_upstream_connection1; FakeHttpConnectionPtr fake_upstream_connection2; diff --git a/test/integration/http2_integration_test.h b/test/integration/http2_integration_test.h index 72c1e67a2431c..2fc45bdb26c6a 100644 --- a/test/integration/http2_integration_test.h +++ b/test/integration/http2_integration_test.h @@ -5,15 +5,17 @@ #include "gtest/gtest.h" namespace Envoy { -class Http2IntegrationTest : public BaseIntegrationTest, public testing::Test { +class Http2IntegrationTest : public BaseIntegrationTest, + public testing::TestWithParam { public: + Http2IntegrationTest() : BaseIntegrationTest(GetParam()) {} /** * Initializer for an individual test. */ void SetUp() override { - fake_upstreams_.emplace_back(new FakeUpstream(0, FakeHttpConnection::Type::HTTP1)); + fake_upstreams_.emplace_back(new FakeUpstream(0, FakeHttpConnection::Type::HTTP1, GetParam())); registerPort("upstream_0", fake_upstreams_.back()->localAddress()->ip()->port()); - fake_upstreams_.emplace_back(new FakeUpstream(0, FakeHttpConnection::Type::HTTP1)); + fake_upstreams_.emplace_back(new FakeUpstream(0, FakeHttpConnection::Type::HTTP1, GetParam())); registerPort("upstream_1", fake_upstreams_.back()->localAddress()->ip()->port()); createTestServer("test/config/integration/server_http2.json", {"echo", "http", "http_buffer"}); } diff --git a/test/integration/http2_upstream_integration_test.cc b/test/integration/http2_upstream_integration_test.cc index 604d91c02eddd..5a5cbcc26e5ae 100644 --- a/test/integration/http2_upstream_integration_test.cc +++ b/test/integration/http2_upstream_integration_test.cc @@ -8,94 +8,98 @@ #include "gtest/gtest.h" namespace Envoy { -TEST_F(Http2UpstreamIntegrationTest, RouterNotFound) { + +INSTANTIATE_TEST_CASE_P(IpVersions, Http2UpstreamIntegrationTest, + testing::ValuesIn(TestEnvironment::getIpVersionsForTest())); + +TEST_P(Http2UpstreamIntegrationTest, RouterNotFound) { testRouterNotFound(Http::CodecClient::Type::HTTP2); } -TEST_F(Http2UpstreamIntegrationTest, RouterRedirect) { +TEST_P(Http2UpstreamIntegrationTest, RouterRedirect) { testRouterRedirect(Http::CodecClient::Type::HTTP2); } -TEST_F(Http2UpstreamIntegrationTest, DrainClose) { testDrainClose(Http::CodecClient::Type::HTTP2); } +TEST_P(Http2UpstreamIntegrationTest, DrainClose) { testDrainClose(Http::CodecClient::Type::HTTP2); } -TEST_F(Http2UpstreamIntegrationTest, RouterRequestAndResponseWithBodyNoBuffer) { +TEST_P(Http2UpstreamIntegrationTest, RouterRequestAndResponseWithBodyNoBuffer) { testRouterRequestAndResponseWithBody(makeClientConnection(lookupPort("http")), Http::CodecClient::Type::HTTP2, 1024, 512, false); } -TEST_F(Http2UpstreamIntegrationTest, RouterRequestAndResponseWithBodyBuffer) { +TEST_P(Http2UpstreamIntegrationTest, RouterRequestAndResponseWithBodyBuffer) { testRouterRequestAndResponseWithBody(makeClientConnection(lookupPort("http_buffer")), Http::CodecClient::Type::HTTP2, 1024, 512, false); } -TEST_F(Http2UpstreamIntegrationTest, RouterRequestAndResponseWithZeroByteBodyNoBuffer) { +TEST_P(Http2UpstreamIntegrationTest, RouterRequestAndResponseWithZeroByteBodyNoBuffer) { testRouterRequestAndResponseWithBody(makeClientConnection(lookupPort("http")), Http::CodecClient::Type::HTTP2, 0, 0, false); } -TEST_F(Http2UpstreamIntegrationTest, RouterRequestAndResponseWithZeroByteBodyBuffer) { +TEST_P(Http2UpstreamIntegrationTest, RouterRequestAndResponseWithZeroByteBodyBuffer) { testRouterRequestAndResponseWithBody(makeClientConnection(lookupPort("http_buffer")), Http::CodecClient::Type::HTTP2, 0, 0, false); } -TEST_F(Http2UpstreamIntegrationTest, RouterRequestAndResponseWithBodyHttp1) { +TEST_P(Http2UpstreamIntegrationTest, RouterRequestAndResponseWithBodyHttp1) { testRouterRequestAndResponseWithBody(makeClientConnection(lookupPort("http1_buffer")), Http::CodecClient::Type::HTTP1, 1024, 512, false); } -TEST_F(Http2UpstreamIntegrationTest, RouterHeaderOnlyRequestAndResponseNoBuffer) { +TEST_P(Http2UpstreamIntegrationTest, RouterHeaderOnlyRequestAndResponseNoBuffer) { testRouterHeaderOnlyRequestAndResponse(makeClientConnection(lookupPort("http")), Http::CodecClient::Type::HTTP2); } -TEST_F(Http2UpstreamIntegrationTest, RouterHeaderOnlyRequestAndResponseBuffer) { +TEST_P(Http2UpstreamIntegrationTest, RouterHeaderOnlyRequestAndResponseBuffer) { testRouterHeaderOnlyRequestAndResponse(makeClientConnection(lookupPort("http_buffer")), Http::CodecClient::Type::HTTP2); } -TEST_F(Http2UpstreamIntegrationTest, RouterHeaderOnlyRequestAndResponseHttp1) { +TEST_P(Http2UpstreamIntegrationTest, RouterHeaderOnlyRequestAndResponseHttp1) { testRouterHeaderOnlyRequestAndResponse(makeClientConnection(lookupPort("http1_buffer")), Http::CodecClient::Type::HTTP1); } -TEST_F(Http2UpstreamIntegrationTest, RouterUpstreamDisconnectBeforeRequestcomplete) { +TEST_P(Http2UpstreamIntegrationTest, RouterUpstreamDisconnectBeforeRequestcomplete) { testRouterUpstreamDisconnectBeforeRequestComplete(makeClientConnection(lookupPort("http")), Http::CodecClient::Type::HTTP2); } -TEST_F(Http2UpstreamIntegrationTest, RouterUpstreamDisconnectBeforeResponseComplete) { +TEST_P(Http2UpstreamIntegrationTest, RouterUpstreamDisconnectBeforeResponseComplete) { testRouterUpstreamDisconnectBeforeResponseComplete(makeClientConnection(lookupPort("http")), Http::CodecClient::Type::HTTP2); } -TEST_F(Http2UpstreamIntegrationTest, RouterDownstreamDisconnectBeforeRequestComplete) { +TEST_P(Http2UpstreamIntegrationTest, RouterDownstreamDisconnectBeforeRequestComplete) { testRouterDownstreamDisconnectBeforeRequestComplete(makeClientConnection(lookupPort("http")), Http::CodecClient::Type::HTTP2); } -TEST_F(Http2UpstreamIntegrationTest, RouterDownstreamDisconnectBeforeResponseComplete) { +TEST_P(Http2UpstreamIntegrationTest, RouterDownstreamDisconnectBeforeResponseComplete) { testRouterDownstreamDisconnectBeforeResponseComplete(makeClientConnection(lookupPort("http")), Http::CodecClient::Type::HTTP2); } -TEST_F(Http2UpstreamIntegrationTest, RouterUpstreamResponseBeforeRequestComplete) { +TEST_P(Http2UpstreamIntegrationTest, RouterUpstreamResponseBeforeRequestComplete) { testRouterUpstreamResponseBeforeRequestComplete(makeClientConnection(lookupPort("http")), Http::CodecClient::Type::HTTP2); } -TEST_F(Http2UpstreamIntegrationTest, TwoRequests) { +TEST_P(Http2UpstreamIntegrationTest, TwoRequests) { testTwoRequests(Http::CodecClient::Type::HTTP2); } -TEST_F(Http2UpstreamIntegrationTest, Retry) { testRetry(Http::CodecClient::Type::HTTP2); } +TEST_P(Http2UpstreamIntegrationTest, Retry) { testRetry(Http::CodecClient::Type::HTTP2); } -TEST_F(Http2UpstreamIntegrationTest, DownstreamResetBeforeResponseComplete) { +TEST_P(Http2UpstreamIntegrationTest, DownstreamResetBeforeResponseComplete) { testDownstreamResetBeforeResponseComplete(); } -TEST_F(Http2UpstreamIntegrationTest, Trailers) { testTrailers(1024, 2048); } +TEST_P(Http2UpstreamIntegrationTest, Trailers) { testTrailers(1024, 2048); } -TEST_F(Http2UpstreamIntegrationTest, BidirectionalStreaming) { +TEST_P(Http2UpstreamIntegrationTest, BidirectionalStreaming) { IntegrationCodecClientPtr codec_client; FakeHttpConnectionPtr fake_upstream_connection; Http::StreamEncoder* encoder; @@ -153,7 +157,7 @@ TEST_F(Http2UpstreamIntegrationTest, BidirectionalStreaming) { EXPECT_TRUE(response->complete()); } -TEST_F(Http2UpstreamIntegrationTest, BidirectionalStreamingReset) { +TEST_P(Http2UpstreamIntegrationTest, BidirectionalStreamingReset) { IntegrationCodecClientPtr codec_client; FakeHttpConnectionPtr fake_upstream_connection; Http::StreamEncoder* encoder; @@ -209,7 +213,7 @@ TEST_F(Http2UpstreamIntegrationTest, BidirectionalStreamingReset) { EXPECT_FALSE(response->complete()); } -TEST_F(Http2UpstreamIntegrationTest, SimultaneousRequest) { +TEST_P(Http2UpstreamIntegrationTest, SimultaneousRequest) { IntegrationCodecClientPtr codec_client; FakeHttpConnectionPtr fake_upstream_connection; Http::StreamEncoder* encoder1; diff --git a/test/integration/http2_upstream_integration_test.h b/test/integration/http2_upstream_integration_test.h index b58ee30a5880f..09c747e9f93e3 100644 --- a/test/integration/http2_upstream_integration_test.h +++ b/test/integration/http2_upstream_integration_test.h @@ -5,15 +5,17 @@ #include "gtest/gtest.h" namespace Envoy { -class Http2UpstreamIntegrationTest : public BaseIntegrationTest, public testing::Test { +class Http2UpstreamIntegrationTest : public BaseIntegrationTest, + public testing::TestWithParam { public: + Http2UpstreamIntegrationTest() : BaseIntegrationTest(GetParam()) {} /** * Initializer for an individual test. */ void SetUp() override { - fake_upstreams_.emplace_back(new FakeUpstream(0, FakeHttpConnection::Type::HTTP2)); + fake_upstreams_.emplace_back(new FakeUpstream(0, FakeHttpConnection::Type::HTTP2, GetParam())); registerPort("upstream_0", fake_upstreams_.back()->localAddress()->ip()->port()); - fake_upstreams_.emplace_back(new FakeUpstream(0, FakeHttpConnection::Type::HTTP2)); + fake_upstreams_.emplace_back(new FakeUpstream(0, FakeHttpConnection::Type::HTTP2, GetParam())); registerPort("upstream_1", fake_upstreams_.back()->localAddress()->ip()->port()); createTestServer("test/config/integration/server_http2_upstream.json", {"http", "http_buffer", "http1_buffer"}); diff --git a/test/integration/integration.cc b/test/integration/integration.cc index 0e6ea8de98796..f591c28bc0e4c 100644 --- a/test/integration/integration.cc +++ b/test/integration/integration.cc @@ -239,8 +239,6 @@ BaseIntegrationTest::BaseIntegrationTest(Network::Address::IpVersion version) std::this_thread::sleep_for(std::chrono::milliseconds(10)); } -BaseIntegrationTest::BaseIntegrationTest() : BaseIntegrationTest(Network::Address::IpVersion::v4) {} - BaseIntegrationTest::~BaseIntegrationTest() {} Network::ClientConnectionPtr BaseIntegrationTest::makeClientConnection(uint32_t port) { diff --git a/test/integration/integration.h b/test/integration/integration.h index f5266459a34b7..6c9bddc4f7125 100644 --- a/test/integration/integration.h +++ b/test/integration/integration.h @@ -113,7 +113,7 @@ typedef std::unique_ptr IntegrationCodecClientPtr; class IntegrationTcpClient { public: IntegrationTcpClient(Event::Dispatcher& dispatcher, uint32_t port, - Network::Address::IpVersion version = Network::Address::IpVersion::v4); + Network::Address::IpVersion version); void close(); const std::string& data() { return data_; } @@ -149,7 +149,6 @@ typedef std::unique_ptr IntegrationTcpClientPtr; */ class BaseIntegrationTest : Logger::Loggable { public: - BaseIntegrationTest(); ~BaseIntegrationTest(); BaseIntegrationTest(Network::Address::IpVersion version); /** diff --git a/test/integration/proxy_proto_integration_test.cc b/test/integration/proxy_proto_integration_test.cc index a012acbf844c2..fb713ec565cfe 100644 --- a/test/integration/proxy_proto_integration_test.cc +++ b/test/integration/proxy_proto_integration_test.cc @@ -7,7 +7,11 @@ #include "gtest/gtest.h" namespace Envoy { -TEST_F(ProxyProtoIntegrationTest, RouterRequestAndResponseWithBodyNoBuffer) { + +INSTANTIATE_TEST_CASE_P(IpVersions, ProxyProtoIntegrationTest, + testing::ValuesIn(TestEnvironment::getIpVersionsForTest())); + +TEST_P(ProxyProtoIntegrationTest, RouterRequestAndResponseWithBodyNoBuffer) { Network::ClientConnectionPtr conn = makeClientConnection(lookupPort("http")); Buffer::OwnedImpl buf("PROXY TCP4 1.2.3.4 255.255.255.255 65535 1234\r\n"); @@ -16,4 +20,15 @@ TEST_F(ProxyProtoIntegrationTest, RouterRequestAndResponseWithBodyNoBuffer) { testRouterRequestAndResponseWithBody(std::move(conn), Http::CodecClient::Type::HTTP1, 1024, 512, false); } + +TEST_P(ProxyProtoIntegrationTest, RouterRequestAndResponseWithBodyNoBufferV6) { + Network::ClientConnectionPtr conn = makeClientConnection(lookupPort("http")); + + Buffer::OwnedImpl buf("PROXY TCP6 1:2:3::4 FF00:: 65535 1234\r\n"); + conn->write(buf); + + testRouterRequestAndResponseWithBody(std::move(conn), Http::CodecClient::Type::HTTP1, 1024, 512, + false); +} + } // Envoy diff --git a/test/integration/proxy_proto_integration_test.h b/test/integration/proxy_proto_integration_test.h index 5b7ec49a97f5c..06949fa19cad0 100644 --- a/test/integration/proxy_proto_integration_test.h +++ b/test/integration/proxy_proto_integration_test.h @@ -10,13 +10,15 @@ #include "gtest/gtest.h" namespace Envoy { -class ProxyProtoIntegrationTest : public BaseIntegrationTest, public testing::Test { +class ProxyProtoIntegrationTest : public BaseIntegrationTest, + public testing::TestWithParam { public: + ProxyProtoIntegrationTest() : BaseIntegrationTest(GetParam()) {} /** * Initializer for an individual test. */ void SetUp() override { - fake_upstreams_.emplace_back(new FakeUpstream(0, FakeHttpConnection::Type::HTTP1)); + fake_upstreams_.emplace_back(new FakeUpstream(0, FakeHttpConnection::Type::HTTP1, GetParam())); registerPort("upstream_0", fake_upstreams_.back()->localAddress()->ip()->port()); createTestServer("test/config/integration/server_proxy_proto.json", {"http"}); } diff --git a/test/integration/ssl_integration_test.cc b/test/integration/ssl_integration_test.cc index aa589379f9fc7..e02a35bfdcbe2 100644 --- a/test/integration/ssl_integration_test.cc +++ b/test/integration/ssl_integration_test.cc @@ -8,6 +8,8 @@ #include "common/ssl/context_config_impl.h" #include "common/ssl/context_manager_impl.h" +#include "test/test_common/network_utility.h" + #include "gmock/gmock.h" #include "gtest/gtest.h" #include "integration.h" @@ -23,16 +25,16 @@ void SslIntegrationTest::SetUp() { context_manager_.reset(new ContextManagerImpl(*runtime_)); upstream_ssl_ctx_ = createUpstreamSslContext(); fake_upstreams_.emplace_back( - new FakeUpstream(upstream_ssl_ctx_.get(), 0, FakeHttpConnection::Type::HTTP1)); + new FakeUpstream(upstream_ssl_ctx_.get(), 0, FakeHttpConnection::Type::HTTP1, GetParam())); registerPort("upstream_0", fake_upstreams_.back()->localAddress()->ip()->port()); fake_upstreams_.emplace_back( - new FakeUpstream(upstream_ssl_ctx_.get(), 0, FakeHttpConnection::Type::HTTP1)); + new FakeUpstream(upstream_ssl_ctx_.get(), 0, FakeHttpConnection::Type::HTTP1, GetParam())); registerPort("upstream_1", fake_upstreams_.back()->localAddress()->ip()->port()); // TODO(hennna): Add IPv6 support. test_server_ = MockRuntimeIntegrationTestServer::create( - TestEnvironment::temporaryFileSubstitute("test/config/integration/server_ssl.json", - port_map_), - Network::Address::IpVersion::v4); + TestEnvironment::temporaryFileSubstitute("test/config/integration/server_ssl.json", port_map_, + GetParam()), + GetParam()); registerTestServerPorts({"http"}); client_ssl_ctx_plain_ = createClientSslContext(false, false); client_ssl_ctx_alpn_ = createClientSslContext(true, false); @@ -116,87 +118,98 @@ ClientContextPtr SslIntegrationTest::createClientSslContext(bool alpn, bool san) } Network::ClientConnectionPtr SslIntegrationTest::makeSslClientConnection(bool alpn, bool san) { + Network::Address::InstanceConstSharedPtr address = + Network::Utility::resolveUrl("tcp://" + Network::Test::getLoopbackAddressUrlString(version_) + + ":" + std::to_string(lookupPort("http"))); if (alpn) { return dispatcher_->createSslClientConnection( - san ? *client_ssl_ctx_alpn_san_ : *client_ssl_ctx_alpn_, - Network::Utility::resolveUrl("tcp://127.0.0.1:" + std::to_string(lookupPort("http")))); + san ? *client_ssl_ctx_alpn_san_ : *client_ssl_ctx_alpn_, address); } else { return dispatcher_->createSslClientConnection( - san ? *client_ssl_ctx_san_ : *client_ssl_ctx_plain_, - Network::Utility::resolveUrl("tcp://127.0.0.1:" + std::to_string(lookupPort("http")))); + san ? *client_ssl_ctx_san_ : *client_ssl_ctx_plain_, address); } } void SslIntegrationTest::checkStats() { - Stats::Counter& counter = test_server_->store().counter("listener.127.0.0.1_0.ssl.handshake"); - EXPECT_EQ(1U, counter.value()); - counter.reset(); + if (version_ == Network::Address::IpVersion::v4) { + Stats::Counter& counter = test_server_->store().counter("listener.127.0.0.1_0.ssl.handshake"); + EXPECT_EQ(1U, counter.value()); + counter.reset(); + } else { + // ':' is a reserved char in statsd. + Stats::Counter& counter = test_server_->store().counter("listener.[__1]_0.ssl.handshake"); + EXPECT_EQ(1U, counter.value()); + counter.reset(); + } } -TEST_F(SslIntegrationTest, RouterRequestAndResponseWithGiantBodyBuffer) { +INSTANTIATE_TEST_CASE_P(IpVersions, SslIntegrationTest, + testing::ValuesIn(TestEnvironment::getIpVersionsForTest())); + +TEST_P(SslIntegrationTest, RouterRequestAndResponseWithGiantBodyBuffer) { testRouterRequestAndResponseWithBody(makeSslClientConnection(false, false), Http::CodecClient::Type::HTTP1, 16 * 1024 * 1024, 16 * 1024 * 1024, false); checkStats(); } -TEST_F(SslIntegrationTest, RouterRequestAndResponseWithBodyNoBuffer) { +TEST_P(SslIntegrationTest, RouterRequestAndResponseWithBodyNoBuffer) { testRouterRequestAndResponseWithBody(makeSslClientConnection(false, false), Http::CodecClient::Type::HTTP1, 1024, 512, false); checkStats(); } -TEST_F(SslIntegrationTest, RouterRequestAndResponseWithBodyNoBufferHttp2) { +TEST_P(SslIntegrationTest, RouterRequestAndResponseWithBodyNoBufferHttp2) { testRouterRequestAndResponseWithBody(makeSslClientConnection(true, false), Http::CodecClient::Type::HTTP2, 1024, 512, false); checkStats(); } -TEST_F(SslIntegrationTest, RouterRequestAndResponseWithBodyNoBufferVierfySAN) { +TEST_P(SslIntegrationTest, RouterRequestAndResponseWithBodyNoBufferVierfySAN) { testRouterRequestAndResponseWithBody(makeSslClientConnection(false, true), Http::CodecClient::Type::HTTP1, 1024, 512, false); checkStats(); } -TEST_F(SslIntegrationTest, RouterRequestAndResponseWithBodyNoBufferHttp2VerifySAN) { +TEST_P(SslIntegrationTest, RouterRequestAndResponseWithBodyNoBufferHttp2VerifySAN) { testRouterRequestAndResponseWithBody(makeSslClientConnection(true, true), Http::CodecClient::Type::HTTP2, 1024, 512, false); checkStats(); } -TEST_F(SslIntegrationTest, RouterHeaderOnlyRequestAndResponse) { +TEST_P(SslIntegrationTest, RouterHeaderOnlyRequestAndResponse) { testRouterHeaderOnlyRequestAndResponse(makeSslClientConnection(false, false), Http::CodecClient::Type::HTTP1); checkStats(); } -TEST_F(SslIntegrationTest, RouterUpstreamDisconnectBeforeResponseComplete) { +TEST_P(SslIntegrationTest, RouterUpstreamDisconnectBeforeResponseComplete) { testRouterUpstreamDisconnectBeforeResponseComplete(makeSslClientConnection(false, false), Http::CodecClient::Type::HTTP1); checkStats(); } -TEST_F(SslIntegrationTest, RouterDownstreamDisconnectBeforeRequestComplete) { +TEST_P(SslIntegrationTest, RouterDownstreamDisconnectBeforeRequestComplete) { testRouterDownstreamDisconnectBeforeRequestComplete(makeSslClientConnection(false, false), Http::CodecClient::Type::HTTP1); checkStats(); } -TEST_F(SslIntegrationTest, RouterDownstreamDisconnectBeforeResponseComplete) { +TEST_P(SslIntegrationTest, RouterDownstreamDisconnectBeforeResponseComplete) { testRouterDownstreamDisconnectBeforeResponseComplete(makeSslClientConnection(false, false), Http::CodecClient::Type::HTTP1); checkStats(); } // This test must be here vs integration_admin_test so that it tests a server with loaded certs. -TEST_F(SslIntegrationTest, AdminCertEndpoint) { +TEST_P(SslIntegrationTest, AdminCertEndpoint) { BufferingStreamDecoderPtr response = IntegrationUtil::makeSingleRequest( - lookupPort("admin"), "GET", "/certs", "", Http::CodecClient::Type::HTTP1); + lookupPort("admin"), "GET", "/certs", "", Http::CodecClient::Type::HTTP1, version_); EXPECT_TRUE(response->complete()); EXPECT_STREQ("200", response->headers().Status()->value().c_str()); } -TEST_F(SslIntegrationTest, AltAlpn) { +TEST_P(SslIntegrationTest, AltAlpn) { // Connect with ALPN, but we should end up using HTTP/1. MockRuntimeIntegrationTestServer* server = dynamic_cast(test_server_.get()); diff --git a/test/integration/ssl_integration_test.h b/test/integration/ssl_integration_test.h index 2fcec5f988d62..df725ad9303c6 100644 --- a/test/integration/ssl_integration_test.h +++ b/test/integration/ssl_integration_test.h @@ -37,8 +37,10 @@ class MockRuntimeIntegrationTestServer : public IntegrationTestServer { : IntegrationTestServer(config_path) {} }; -class SslIntegrationTest : public BaseIntegrationTest, public testing::Test { +class SslIntegrationTest : public BaseIntegrationTest, + public testing::TestWithParam { public: + SslIntegrationTest() : BaseIntegrationTest(GetParam()) {} /** * Initializer for an individual test. */ diff --git a/test/integration/uds_integration_test.cc b/test/integration/uds_integration_test.cc index 9f3cbc505e474..f82d571aa4e0c 100644 --- a/test/integration/uds_integration_test.cc +++ b/test/integration/uds_integration_test.cc @@ -5,27 +5,31 @@ #include "gtest/gtest.h" namespace Envoy { -TEST_F(UdsIntegrationTest, RouterRequestAndResponseWithBodyNoBuffer) { + +INSTANTIATE_TEST_CASE_P(IpVersions, UdsIntegrationTest, + testing::ValuesIn(TestEnvironment::getIpVersionsForTest())); + +TEST_P(UdsIntegrationTest, RouterRequestAndResponseWithBodyNoBuffer) { testRouterRequestAndResponseWithBody(makeClientConnection(lookupPort("http")), Http::CodecClient::Type::HTTP1, 1024, 512, false); } -TEST_F(UdsIntegrationTest, RouterHeaderOnlyRequestAndResponse) { +TEST_P(UdsIntegrationTest, RouterHeaderOnlyRequestAndResponse) { testRouterHeaderOnlyRequestAndResponse(makeClientConnection(lookupPort("http")), Http::CodecClient::Type::HTTP1); } -TEST_F(UdsIntegrationTest, RouterUpstreamDisconnectBeforeResponseComplete) { +TEST_P(UdsIntegrationTest, RouterUpstreamDisconnectBeforeResponseComplete) { testRouterUpstreamDisconnectBeforeResponseComplete(makeClientConnection(lookupPort("http")), Http::CodecClient::Type::HTTP1); } -TEST_F(UdsIntegrationTest, RouterDownstreamDisconnectBeforeRequestComplete) { +TEST_P(UdsIntegrationTest, RouterDownstreamDisconnectBeforeRequestComplete) { testRouterDownstreamDisconnectBeforeRequestComplete(makeClientConnection(lookupPort("http")), Http::CodecClient::Type::HTTP1); } -TEST_F(UdsIntegrationTest, RouterDownstreamDisconnectBeforeResponseComplete) { +TEST_P(UdsIntegrationTest, RouterDownstreamDisconnectBeforeResponseComplete) { testRouterDownstreamDisconnectBeforeResponseComplete(makeClientConnection(lookupPort("http")), Http::CodecClient::Type::HTTP1); } diff --git a/test/integration/uds_integration_test.h b/test/integration/uds_integration_test.h index beede19469915..03d3ca47a586d 100644 --- a/test/integration/uds_integration_test.h +++ b/test/integration/uds_integration_test.h @@ -11,8 +11,10 @@ #include "gtest/gtest.h" namespace Envoy { -class UdsIntegrationTest : public BaseIntegrationTest, public testing::Test { +class UdsIntegrationTest : public BaseIntegrationTest, + public testing::TestWithParam { public: + UdsIntegrationTest() : BaseIntegrationTest(GetParam()) {} /** * Initializer for an individual test. */ diff --git a/test/integration/utility.h b/test/integration/utility.h index 4ca0d8b5919e5..8b2349208f0ff 100644 --- a/test/integration/utility.h +++ b/test/integration/utility.h @@ -54,7 +54,7 @@ class RawConnectionDriver { typedef std::function ReadCallback; RawConnectionDriver(uint32_t port, Buffer::Instance& initial_data, ReadCallback data_callback, - Network::Address::IpVersion version = Network::Address::IpVersion::v4); + Network::Address::IpVersion version); ~RawConnectionDriver(); void run(); void close(); @@ -100,7 +100,6 @@ class IntegrationUtil { static BufferingStreamDecoderPtr makeSingleRequest(uint32_t port, const std::string& method, const std::string& url, const std::string& body, Http::CodecClient::Type type, - Network::Address::IpVersion version = Network::Address::IpVersion::v4, - const std::string& host = "host"); + Network::Address::IpVersion version, const std::string& host = "host"); }; } // Envoy diff --git a/test/server/server_test.cc b/test/server/server_test.cc index 70db4b7a41405..36f3722378dc9 100644 --- a/test/server/server_test.cc +++ b/test/server/server_test.cc @@ -38,11 +38,12 @@ TEST(InitManagerImplTest, Targets) { } // Class creates minimally viable server instance for testing. -class ServerInstanceImplTest : public testing::Test { +class ServerInstanceImplTest : public testing::TestWithParam { protected: ServerInstanceImplTest() : options_(TestEnvironment::temporaryFileSubstitute("test/config/integration/server.json", - {{"upstream_0", 0}, {"upstream_1", 0}})), + {{"upstream_0", 0}, {"upstream_1", 0}}, + GetParam())), server_(options_, hooks_, restart_, stats_store_, fakelock_, component_factory_, local_info_) {} void TearDown() override { @@ -60,8 +61,15 @@ class ServerInstanceImplTest : public testing::Test { InstanceImpl server_; }; -TEST_F(ServerInstanceImplTest, NoListenSocketFds) { - EXPECT_EQ(server_.getListenSocketFd("tcp://255.255.255.255:80"), -1); +INSTANTIATE_TEST_CASE_P(IpVersions, ServerInstanceImplTest, + testing::ValuesIn(TestEnvironment::getIpVersionsForTest())); + +TEST_P(ServerInstanceImplTest, NoListenSocketFds) { + if (GetParam() == Network::Address::IpVersion::v4) { + EXPECT_EQ(server_.getListenSocketFd("tcp://255.255.255.255:80"), -1); + } else { + EXPECT_EQ(server_.getListenSocketFd("tcp://[ff00::]:80"), -1); + } } } // Server diff --git a/test/test_common/environment.cc b/test/test_common/environment.cc index 2666aed50d93f..277185ea2626c 100644 --- a/test/test_common/environment.cc +++ b/test/test_common/environment.cc @@ -54,7 +54,7 @@ void TestEnvironment::initializeOptions(int argc, char** argv) { argv_ = argv; } -bool TestEnvironment::shouldRunTestForIpVersion(const Network::Address::IpVersion& type) { +bool TestEnvironment::shouldRunTestForIpVersion(Network::Address::IpVersion type) { const char* value = ::getenv("ENVOY_IP_TEST_VERSIONS"); std::string option(value ? value : ""); if (option.empty()) { diff --git a/test/test_common/environment.h b/test/test_common/environment.h index aa2c394066e71..b6b70a96fe82e 100644 --- a/test/test_common/environment.h +++ b/test/test_common/environment.h @@ -28,7 +28,7 @@ class TestEnvironment { * @param Network::Address::IpVersion IP address version to check. * @return bool if testing only with IP type addresses only. */ - static bool shouldRunTestForIpVersion(const Network::Address::IpVersion& type); + static bool shouldRunTestForIpVersion(Network::Address::IpVersion type); /** * Return a vector of IP address parameters to test. Tests can be run with @@ -112,9 +112,8 @@ class TestEnvironment { * @param version IP address version to substitute. * @return std::string path for the generated file. */ - static std::string - temporaryFileSubstitute(const std::string& path, const PortMap& port_map, - Network::Address::IpVersion version = Network::Address::IpVersion::v4); + static std::string temporaryFileSubstitute(const std::string& path, const PortMap& port_map, + Network::Address::IpVersion version); /** * Build JSON object from a string subject to environment path substitution. From 9839d599b66bfb556598dd795b5e8430f0957fa5 Mon Sep 17 00:00:00 2001 From: Henna Huang Date: Tue, 6 Jun 2017 16:38:07 -0400 Subject: [PATCH 2/2] Response to comments --- test/integration/echo_integration_test.cc | 6 +++--- test/integration/http2_integration_test.cc | 4 ++-- test/integration/http2_integration_test.h | 4 ++-- test/integration/http2_upstream_integration_test.h | 4 ++-- test/integration/integration_admin_test.h | 4 ++-- test/integration/integration_test.h | 4 ++-- test/integration/proxy_proto_integration_test.h | 2 +- test/integration/ssl_integration_test.cc | 8 ++++---- test/server/server_test.cc | 8 +++++--- 9 files changed, 23 insertions(+), 21 deletions(-) diff --git a/test/integration/echo_integration_test.cc b/test/integration/echo_integration_test.cc index bf62717f3c959..01ce5b9c004dc 100644 --- a/test/integration/echo_integration_test.cc +++ b/test/integration/echo_integration_test.cc @@ -10,9 +10,9 @@ class EchoIntegrationTest : public BaseIntegrationTest, * Initializer for an individual test. */ void SetUp() override { - fake_upstreams_.emplace_back(new FakeUpstream(0, FakeHttpConnection::Type::HTTP1, GetParam())); + fake_upstreams_.emplace_back(new FakeUpstream(0, FakeHttpConnection::Type::HTTP1, version_)); registerPort("upstream_0", fake_upstreams_.back()->localAddress()->ip()->port()); - fake_upstreams_.emplace_back(new FakeUpstream(0, FakeHttpConnection::Type::HTTP1, GetParam())); + fake_upstreams_.emplace_back(new FakeUpstream(0, FakeHttpConnection::Type::HTTP1, version_)); registerPort("upstream_1", fake_upstreams_.back()->localAddress()->ip()->port()); createTestServer("test/config/integration/echo_server.json", {"echo"}); } @@ -37,7 +37,7 @@ TEST_P(EchoIntegrationTest, Hello) { buffer, [&](Network::ClientConnection&, const Buffer::Instance& data) -> void { response.append(TestUtility::bufferToString(data)); connection.close(); - }, GetParam()); + }, version_); connection.run(); EXPECT_EQ("hello", response); diff --git a/test/integration/http2_integration_test.cc b/test/integration/http2_integration_test.cc index 6b4bc2f8fc7ed..9c4978ac3f31c 100644 --- a/test/integration/http2_integration_test.cc +++ b/test/integration/http2_integration_test.cc @@ -138,7 +138,7 @@ TEST_P(Http2IntegrationTest, BadMagic) { lookupPort("http"), buffer, [&](Network::ClientConnection&, const Buffer::Instance& data) -> void { response.append(TestUtility::bufferToString(data)); - }, GetParam()); + }, version_); connection.run(); EXPECT_EQ("", response); @@ -151,7 +151,7 @@ TEST_P(Http2IntegrationTest, BadFrame) { lookupPort("http"), buffer, [&](Network::ClientConnection&, const Buffer::Instance& data) -> void { response.append(TestUtility::bufferToString(data)); - }, GetParam()); + }, version_); connection.run(); EXPECT_TRUE(response.find("SETTINGS expected") != std::string::npos); diff --git a/test/integration/http2_integration_test.h b/test/integration/http2_integration_test.h index 2fc45bdb26c6a..1c6f895d3d053 100644 --- a/test/integration/http2_integration_test.h +++ b/test/integration/http2_integration_test.h @@ -13,9 +13,9 @@ class Http2IntegrationTest : public BaseIntegrationTest, * Initializer for an individual test. */ void SetUp() override { - fake_upstreams_.emplace_back(new FakeUpstream(0, FakeHttpConnection::Type::HTTP1, GetParam())); + fake_upstreams_.emplace_back(new FakeUpstream(0, FakeHttpConnection::Type::HTTP1, version_)); registerPort("upstream_0", fake_upstreams_.back()->localAddress()->ip()->port()); - fake_upstreams_.emplace_back(new FakeUpstream(0, FakeHttpConnection::Type::HTTP1, GetParam())); + fake_upstreams_.emplace_back(new FakeUpstream(0, FakeHttpConnection::Type::HTTP1, version_)); registerPort("upstream_1", fake_upstreams_.back()->localAddress()->ip()->port()); createTestServer("test/config/integration/server_http2.json", {"echo", "http", "http_buffer"}); } diff --git a/test/integration/http2_upstream_integration_test.h b/test/integration/http2_upstream_integration_test.h index 09c747e9f93e3..609edab35c1e1 100644 --- a/test/integration/http2_upstream_integration_test.h +++ b/test/integration/http2_upstream_integration_test.h @@ -13,9 +13,9 @@ class Http2UpstreamIntegrationTest : public BaseIntegrationTest, * Initializer for an individual test. */ void SetUp() override { - fake_upstreams_.emplace_back(new FakeUpstream(0, FakeHttpConnection::Type::HTTP2, GetParam())); + fake_upstreams_.emplace_back(new FakeUpstream(0, FakeHttpConnection::Type::HTTP2, version_)); registerPort("upstream_0", fake_upstreams_.back()->localAddress()->ip()->port()); - fake_upstreams_.emplace_back(new FakeUpstream(0, FakeHttpConnection::Type::HTTP2, GetParam())); + fake_upstreams_.emplace_back(new FakeUpstream(0, FakeHttpConnection::Type::HTTP2, version_)); registerPort("upstream_1", fake_upstreams_.back()->localAddress()->ip()->port()); createTestServer("test/config/integration/server_http2_upstream.json", {"http", "http_buffer", "http1_buffer"}); diff --git a/test/integration/integration_admin_test.h b/test/integration/integration_admin_test.h index f3b3f11954ee1..9c9c2addf2296 100644 --- a/test/integration/integration_admin_test.h +++ b/test/integration/integration_admin_test.h @@ -14,9 +14,9 @@ class IntegrationAdminTest : public BaseIntegrationTest, * Initializer for an individual test. */ void SetUp() override { - fake_upstreams_.emplace_back(new FakeUpstream(0, FakeHttpConnection::Type::HTTP1, GetParam())); + fake_upstreams_.emplace_back(new FakeUpstream(0, FakeHttpConnection::Type::HTTP1, version_)); registerPort("upstream_0", fake_upstreams_.back()->localAddress()->ip()->port()); - fake_upstreams_.emplace_back(new FakeUpstream(0, FakeHttpConnection::Type::HTTP1, GetParam())); + fake_upstreams_.emplace_back(new FakeUpstream(0, FakeHttpConnection::Type::HTTP1, version_)); registerPort("upstream_1", fake_upstreams_.back()->localAddress()->ip()->port()); createTestServer("test/config/integration/server.json", {"http", "http_buffer", "tcp_proxy", "rds"}); diff --git a/test/integration/integration_test.h b/test/integration/integration_test.h index b89db49397756..b91f1dc733faa 100644 --- a/test/integration/integration_test.h +++ b/test/integration/integration_test.h @@ -13,9 +13,9 @@ class IntegrationTest : public BaseIntegrationTest, * Initializer for an individual test. */ void SetUp() override { - fake_upstreams_.emplace_back(new FakeUpstream(0, FakeHttpConnection::Type::HTTP1, GetParam())); + fake_upstreams_.emplace_back(new FakeUpstream(0, FakeHttpConnection::Type::HTTP1, version_)); registerPort("upstream_0", fake_upstreams_.back()->localAddress()->ip()->port()); - fake_upstreams_.emplace_back(new FakeUpstream(0, FakeHttpConnection::Type::HTTP1, GetParam())); + fake_upstreams_.emplace_back(new FakeUpstream(0, FakeHttpConnection::Type::HTTP1, version_)); registerPort("upstream_1", fake_upstreams_.back()->localAddress()->ip()->port()); createTestServer("test/config/integration/server.json", {"http", "http_buffer", "tcp_proxy", "rds"}); diff --git a/test/integration/proxy_proto_integration_test.h b/test/integration/proxy_proto_integration_test.h index 06949fa19cad0..8ce4a8b0b5fa9 100644 --- a/test/integration/proxy_proto_integration_test.h +++ b/test/integration/proxy_proto_integration_test.h @@ -18,7 +18,7 @@ class ProxyProtoIntegrationTest : public BaseIntegrationTest, * Initializer for an individual test. */ void SetUp() override { - fake_upstreams_.emplace_back(new FakeUpstream(0, FakeHttpConnection::Type::HTTP1, GetParam())); + fake_upstreams_.emplace_back(new FakeUpstream(0, FakeHttpConnection::Type::HTTP1, version_)); registerPort("upstream_0", fake_upstreams_.back()->localAddress()->ip()->port()); createTestServer("test/config/integration/server_proxy_proto.json", {"http"}); } diff --git a/test/integration/ssl_integration_test.cc b/test/integration/ssl_integration_test.cc index e02a35bfdcbe2..2326ac5c395a5 100644 --- a/test/integration/ssl_integration_test.cc +++ b/test/integration/ssl_integration_test.cc @@ -25,16 +25,16 @@ void SslIntegrationTest::SetUp() { context_manager_.reset(new ContextManagerImpl(*runtime_)); upstream_ssl_ctx_ = createUpstreamSslContext(); fake_upstreams_.emplace_back( - new FakeUpstream(upstream_ssl_ctx_.get(), 0, FakeHttpConnection::Type::HTTP1, GetParam())); + new FakeUpstream(upstream_ssl_ctx_.get(), 0, FakeHttpConnection::Type::HTTP1, version_)); registerPort("upstream_0", fake_upstreams_.back()->localAddress()->ip()->port()); fake_upstreams_.emplace_back( - new FakeUpstream(upstream_ssl_ctx_.get(), 0, FakeHttpConnection::Type::HTTP1, GetParam())); + new FakeUpstream(upstream_ssl_ctx_.get(), 0, FakeHttpConnection::Type::HTTP1, version_)); registerPort("upstream_1", fake_upstreams_.back()->localAddress()->ip()->port()); // TODO(hennna): Add IPv6 support. test_server_ = MockRuntimeIntegrationTestServer::create( TestEnvironment::temporaryFileSubstitute("test/config/integration/server_ssl.json", port_map_, - GetParam()), - GetParam()); + version_), + version_); registerTestServerPorts({"http"}); client_ssl_ctx_plain_ = createClientSslContext(false, false); client_ssl_ctx_alpn_ = createClientSslContext(true, false); diff --git a/test/server/server_test.cc b/test/server/server_test.cc index 36f3722378dc9..4010fdba71f7b 100644 --- a/test/server/server_test.cc +++ b/test/server/server_test.cc @@ -41,9 +41,10 @@ TEST(InitManagerImplTest, Targets) { class ServerInstanceImplTest : public testing::TestWithParam { protected: ServerInstanceImplTest() - : options_(TestEnvironment::temporaryFileSubstitute("test/config/integration/server.json", + : version_(GetParam()), + options_(TestEnvironment::temporaryFileSubstitute("test/config/integration/server.json", {{"upstream_0", 0}, {"upstream_1", 0}}, - GetParam())), + version_)), server_(options_, hooks_, restart_, stats_store_, fakelock_, component_factory_, local_info_) {} void TearDown() override { @@ -51,6 +52,7 @@ class ServerInstanceImplTest : public testing::TestWithParam options_; DefaultTestHooks hooks_; testing::NiceMock restart_; @@ -65,7 +67,7 @@ INSTANTIATE_TEST_CASE_P(IpVersions, ServerInstanceImplTest, testing::ValuesIn(TestEnvironment::getIpVersionsForTest())); TEST_P(ServerInstanceImplTest, NoListenSocketFds) { - if (GetParam() == Network::Address::IpVersion::v4) { + if (version_ == Network::Address::IpVersion::v4) { EXPECT_EQ(server_.getListenSocketFd("tcp://255.255.255.255:80"), -1); } else { EXPECT_EQ(server_.getListenSocketFd("tcp://[ff00::]:80"), -1);