From 603a655193ba75b1f095d372f63032e6cc253c58 Mon Sep 17 00:00:00 2001 From: Jose Ulises Nino Rivera Date: Tue, 25 Jan 2022 17:15:53 -0800 Subject: [PATCH] socket options: re-add support for directly setting options (#19689) Signed-off-by: Jose Nino Signed-off-by: Josh Perry --- .../addr_family_aware_socket_option_impl.h | 3 +++ .../addr_family_aware_socket_option_impl_test.cc | 16 ++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/source/common/network/addr_family_aware_socket_option_impl.h b/source/common/network/addr_family_aware_socket_option_impl.h index e82c45d2e7c8..5c7c5975467e 100644 --- a/source/common/network/addr_family_aware_socket_option_impl.h +++ b/source/common/network/addr_family_aware_socket_option_impl.h @@ -29,6 +29,9 @@ class AddrFamilyAwareSocketOptionImpl : public Socket::Option, SocketOptionName ipv6_optname, absl::string_view ipv6_value) : ipv4_option_(std::make_unique(in_state, ipv4_optname, ipv4_value)), ipv6_option_(std::make_unique(in_state, ipv6_optname, ipv6_value)) {} + AddrFamilyAwareSocketOptionImpl(Socket::OptionConstPtr&& ipv4_option, + Socket::OptionConstPtr&& ipv6_option) + : ipv4_option_(std::move(ipv4_option)), ipv6_option_(std::move(ipv6_option)) {} // Socket::Option bool setOption(Socket& socket, diff --git a/test/common/network/addr_family_aware_socket_option_impl_test.cc b/test/common/network/addr_family_aware_socket_option_impl_test.cc index 0c60b32653cf..9aeeb71c7636 100644 --- a/test/common/network/addr_family_aware_socket_option_impl_test.cc +++ b/test/common/network/addr_family_aware_socket_option_impl_test.cc @@ -23,6 +23,22 @@ class AddrFamilyAwareSocketOptionImplTest : public SocketOptionTest { } }; +// Set options directly +TEST_F(AddrFamilyAwareSocketOptionImplTest, SetSocketOptionsDirectly) { + AddrFamilyAwareSocketOptionImpl socket_option( + std::make_unique(envoy::config::core::v3::SocketOption::STATE_PREBIND, + ENVOY_MAKE_SOCKET_OPTION_NAME(5, 10), 1), + std::make_unique(envoy::config::core::v3::SocketOption::STATE_PREBIND, + ENVOY_MAKE_SOCKET_OPTION_NAME(5, 10), 2)); + + EXPECT_CALL(socket_, ipVersion()).WillRepeatedly(testing::Return(Address::IpVersion::v4)); + testSetSocketOptionSuccess(socket_option, ENVOY_MAKE_SOCKET_OPTION_NAME(5, 10), 1, + {envoy::config::core::v3::SocketOption::STATE_PREBIND}); + EXPECT_CALL(socket_, ipVersion()).WillRepeatedly(testing::Return(Address::IpVersion::v6)); + testSetSocketOptionSuccess(socket_option, ENVOY_MAKE_SOCKET_OPTION_NAME(5, 10), 2, + {envoy::config::core::v3::SocketOption::STATE_PREBIND}); +} + // Different values for v4 and v6 TEST_F(AddrFamilyAwareSocketOptionImplTest, DifferentV4AndV6OptionValue) { AddrFamilyAwareSocketOptionImpl socket_option{