Skip to content

Commit

Permalink
More tests
Browse files Browse the repository at this point in the history
Signed-off-by: DongRyeol Cha <dr83.cha@samsung.com>
  • Loading branch information
DongRyeol Cha committed Aug 14, 2020
1 parent 978fbfb commit 3e72fa8
Showing 1 changed file with 29 additions and 5 deletions.
34 changes: 29 additions & 5 deletions test/extensions/filters/udp/udp_proxy/udp_proxy_filter_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,9 @@ namespace {

class MockSocket : public Network::Socket {
public:
MockSocket() : io_handle_(std::make_unique<Network::MockIoHandle>()){};
MockSocket()
: io_handle_(std::make_unique<Network::MockIoHandle>()),
options_(std::make_shared<std::vector<OptionConstSharedPtr>>()){};
~MockSocket() override = default;

Network::IoHandle& ioHandle() override { return *io_handle_; };
Expand All @@ -42,6 +44,10 @@ class MockSocket : public Network::Socket {
return io_handle_->setOption(level, optname, optval, len);
}

void addOptions(const Network::Socket::OptionsSharedPtr& options) override {
Network::Socket::appendOptions(options_, options);
}

MOCK_METHOD(const Network::Address::InstanceConstSharedPtr&, localAddress, (), (const, override));
MOCK_METHOD(void, setLocalAddress, (const Network::Address::InstanceConstSharedPtr&), (override));
MOCK_METHOD(Network::Socket::Type, socketType, (), (const, override));
Expand All @@ -59,9 +65,9 @@ class MockSocket : public Network::Socket {
(const, override));
MOCK_METHOD(Api::SysCallIntResult, setBlockingForTest, (bool), (override));
MOCK_METHOD(void, addOption, (const Network::Socket::OptionConstSharedPtr&), (override));
MOCK_METHOD(void, addOptions, (const Network::Socket::OptionsSharedPtr&), (override));

const std::unique_ptr<Network::MockIoHandle> io_handle_;
Network::Socket::OptionsSharedPtr options_;
};

class TestUdpProxyFilter : public UdpProxyFilter {
Expand Down Expand Up @@ -103,9 +109,6 @@ class UdpProxyFilterTest : public testing::Test {
return Api::SysCallIntResult{0, 0};
}
}));
if (!no_support) {
EXPECT_CALL(*socket_, addOptions(_)).Times(1);
}
}

void expectUpstreamWrite(const std::string& data, int sys_errno = 0,
Expand Down Expand Up @@ -183,6 +186,19 @@ class UdpProxyFilterTest : public testing::Test {
file_event_cb_(Event::FileReadyType::Read);
}

absl::optional<Network::Socket::Option::Details>
findOptionDetails(const Network::SocketOptionName& name,
envoy::config::core::v3::SocketOption::SocketState state) {
for (const auto& option : *socket_->options_) {
const auto details = option->getOptionDetails(*socket_, state);
if (details.has_value() && details->name_ == name) {
return details;
}
}

return absl::nullopt;
}

UdpProxyFilterTest& parent_;
const Network::Address::InstanceConstSharedPtr upstream_address_;
Event::MockTimer* idle_timer_{};
Expand Down Expand Up @@ -268,6 +284,14 @@ class UdpProxyFilterTest : public testing::Test {
int ipv6_expect) {
EXPECT_EQ(ipv4_expect, session.sock_opts_[ipv4_option.level()][ipv4_option.option()]);
EXPECT_EQ(ipv6_expect, session.sock_opts_[ipv6_option.level()][ipv6_option.option()]);

const auto ipv4_option_details = session.findOptionDetails(
ENVOY_SOCKET_IP_TRANSPARENT, envoy::config::core::v3::SocketOption::STATE_PREBIND);
const auto ipv6_option_details = session.findOptionDetails(
ENVOY_SOCKET_IPV6_TRANSPARENT, envoy::config::core::v3::SocketOption::STATE_PREBIND);

EXPECT_EQ(ipv4_expect == 1, ipv4_option_details.has_value());
EXPECT_EQ(ipv6_expect == 1, ipv6_option_details.has_value());
}

void checkSocketOptionsSupport(const std::vector<Network::SocketOptionName>& option_names) {
Expand Down

0 comments on commit 3e72fa8

Please sign in to comment.