Skip to content

Commit

Permalink
multiple addresses: add integration tests (envoyproxy#22081)
Browse files Browse the repository at this point in the history
Commit Message: multiple addresses: add integration tests
Additional Description:
Risk Level: low
Testing: integration tests
Docs Changes: n/a
Release Notes: n/a
Platform Specific Features: n/a
Part of envoyproxy#11184



Signed-off-by: He Jie Xu <[email protected]>
Signed-off-by: Ryan Northey <[email protected]>
  • Loading branch information
soulxu authored and phlax committed Nov 18, 2022
1 parent f09be62 commit d170ade
Show file tree
Hide file tree
Showing 5 changed files with 508 additions and 61 deletions.
71 changes: 60 additions & 11 deletions test/config/utility.cc
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,22 @@ std::string ConfigHelper::baseConfigNoListeners() {
Platform::null_device_path, Platform::null_device_path);
}

std::string ConfigHelper::baseConfig() {
std::string ConfigHelper::baseConfig(bool multiple_addresses) {
if (multiple_addresses) {
return absl::StrCat(baseConfigNoListeners(), R"EOF(
listeners:
- name: listener_0
address:
socket_address:
address: 127.0.0.1
port_value: 0
additional_addresses:
- address:
socket_address:
address: 127.0.0.1
port_value: 0
)EOF");
}
return absl::StrCat(baseConfigNoListeners(), R"EOF(
listeners:
- name: listener_0
Expand All @@ -84,8 +99,9 @@ std::string ConfigHelper::baseConfig() {
)EOF");
}

std::string ConfigHelper::baseUdpListenerConfig(std::string listen_address) {
return fmt::format(R"EOF(
std::string ConfigHelper::baseUdpListenerConfig(std::string listen_address,
bool multiple_addresses) {
std::string config = fmt::format(R"EOF(
admin:
access_log:
- name: envoy.access_loggers.file
Expand All @@ -108,6 +124,28 @@ std::string ConfigHelper::baseUdpListenerConfig(std::string listen_address) {
socket_address:
address: 127.0.0.1
port_value: 0
)EOF",
Platform::null_device_path);

if (multiple_addresses) {
return absl::StrCat(config, fmt::format(R"EOF(
listeners:
name: listener_0
address:
socket_address:
address: {}
port_value: 0
protocol: udp
additional_addresses:
- address:
socket_address:
address: {}
port_value: 0
protocol: udp
)EOF",
listen_address, listen_address));
}
return absl::StrCat(config, fmt::format(R"EOF(
listeners:
name: listener_0
address:
Expand All @@ -116,7 +154,7 @@ std::string ConfigHelper::baseUdpListenerConfig(std::string listen_address) {
port_value: 0
protocol: udp
)EOF",
Platform::null_device_path, listen_address);
listen_address));
}

std::string ConfigHelper::tcpProxyConfig() {
Expand Down Expand Up @@ -177,11 +215,11 @@ name: "envoy.filters.listener.tls_inspector"
)EOF";
}

std::string ConfigHelper::httpProxyConfig(bool downstream_use_quic) {
std::string ConfigHelper::httpProxyConfig(bool downstream_use_quic, bool multiple_addresses) {
if (downstream_use_quic) {
return quicHttpProxyConfig();
return quicHttpProxyConfig(multiple_addresses);
}
return absl::StrCat(baseConfig(), fmt::format(R"EOF(
return absl::StrCat(baseConfig(multiple_addresses), fmt::format(R"EOF(
filter_chains:
filters:
name: http
Expand Down Expand Up @@ -213,14 +251,15 @@ std::string ConfigHelper::httpProxyConfig(bool downstream_use_quic) {
domains: "*"
name: route_config_0
)EOF",
Platform::null_device_path));
Platform::null_device_path));
}

// TODO(danzh): For better compatibility with HTTP integration test framework,
// it's better to combine with HTTP_PROXY_CONFIG, and use config modifiers to
// specify quic specific things.
std::string ConfigHelper::quicHttpProxyConfig() {
return absl::StrCat(baseUdpListenerConfig("127.0.0.1"), fmt::format(R"EOF(
std::string ConfigHelper::quicHttpProxyConfig(bool multiple_addresses) {
return absl::StrCat(baseUdpListenerConfig("127.0.0.1", multiple_addresses),
fmt::format(R"EOF(
filter_chains:
transport_socket:
name: envoy.transport_sockets.quic
Expand Down Expand Up @@ -256,7 +295,7 @@ std::string ConfigHelper::quicHttpProxyConfig() {
udp_listener_config:
quic_options: {{}}
)EOF",
Platform::null_device_path));
Platform::null_device_path));
}

std::string ConfigHelper::defaultBufferFilter() {
Expand Down Expand Up @@ -703,6 +742,16 @@ ConfigHelper::ConfigHelper(const Network::Address::IpVersion version, Api::Api&
} else {
listener_socket_addr->set_address(Network::Test::getLoopbackAddressString(version));
}

for (int i = 0; i < listener->additional_addresses_size(); i++) {
auto* listener_socket_addr =
listener->mutable_additional_addresses(i)->mutable_address()->mutable_socket_address();
if (listener_socket_addr->address() == "0.0.0.0" || listener_socket_addr->address() == "::") {
listener_socket_addr->set_address(Network::Test::getAnyAddressString(version));
} else {
listener_socket_addr->set_address(Network::Test::getLoopbackAddressString(version));
}
}
}

for (int i = 0; i < static_resources->clusters_size(); ++i) {
Expand Down
12 changes: 7 additions & 5 deletions test/config/utility.h
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ class ConfigHelper {
// By default, this runs with an L7 proxy config, but config can be set to TCP_PROXY_CONFIG
// to test L4 proxying.
ConfigHelper(const Network::Address::IpVersion version, Api::Api& api,
const std::string& config = httpProxyConfig(false));
const std::string& config = httpProxyConfig(false, false));

static void
initializeTls(const ServerSslOptions& options,
Expand All @@ -154,10 +154,11 @@ class ConfigHelper {
static std::string baseConfigNoListeners();

// A basic configuration (admin port, cluster_0, one listener) with no network filters.
static std::string baseConfig();
static std::string baseConfig(bool multiple_addresses = false);

// A basic configuration (admin port, cluster_0, one udp listener) with no network filters.
static std::string baseUdpListenerConfig(std::string listen_address = "0.0.0.0");
static std::string baseUdpListenerConfig(std::string listen_address = "0.0.0.0",
bool multiple_addresses = false);

// A string for a tls inspector listener filter which can be used with addListenerFilter()
static std::string tlsInspectorFilter(bool enable_ja3_fingerprinting = false);
Expand All @@ -168,9 +169,10 @@ class ConfigHelper {
// A basic configuration for L4 proxying.
static std::string tcpProxyConfig();
// A basic configuration for L7 proxying.
static std::string httpProxyConfig(bool downstream_use_quic = false);
static std::string httpProxyConfig(bool downstream_use_quic = false,
bool multiple_addresses = false);
// A basic configuration for L7 proxying with QUIC transport.
static std::string quicHttpProxyConfig();
static std::string quicHttpProxyConfig(bool multiple_addresses = false);
// A string for a basic buffer filter, which can be used with prependFilter()
static std::string defaultBufferFilter();
// A string for a small buffer filter, which can be used with prependFilter()
Expand Down
15 changes: 10 additions & 5 deletions test/integration/base_integration_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -348,11 +348,16 @@ void BaseIntegrationTest::registerTestServerPorts(const std::vector<std::string>

auto listener_it = listeners.cbegin();
auto port_it = port_names.cbegin();
for (; port_it != port_names.end() && listener_it != listeners.end(); ++port_it, ++listener_it) {
const auto listen_addr = listener_it->get().listenSocketFactory().localAddress();
if (listen_addr->type() == Network::Address::Type::Ip) {
ENVOY_LOG(debug, "registered '{}' as port {}.", *port_it, listen_addr->ip()->port());
registerPort(*port_it, listen_addr->ip()->port());
for (; port_it != port_names.end() && listener_it != listeners.end(); ++listener_it) {
auto socket_factory_it = listener_it->get().listenSocketFactories().begin();
for (; socket_factory_it != listener_it->get().listenSocketFactories().end() &&
port_it != port_names.end();
++socket_factory_it, ++port_it) {
const auto listen_addr = (*socket_factory_it)->localAddress();
if (listen_addr->type() == Network::Address::Type::Ip) {
ENVOY_LOG(debug, "registered '{}' as port {}.", *port_it, listen_addr->ip()->port());
registerPort(*port_it, listen_addr->ip()->port());
}
}
}
const auto admin_addr =
Expand Down
Loading

0 comments on commit d170ade

Please sign in to comment.