From 8a5dca3bf3428ed37d581114cccf48e98c5f2631 Mon Sep 17 00:00:00 2001 From: Kuat Date: Mon, 19 Oct 2020 13:04:07 -0700 Subject: [PATCH] fix: record recovered local address (#13581) Signed-off-by: Kuat Yessenov --- source/server/connection_handler_impl.cc | 4 ++++ test/server/connection_handler_test.cc | 7 ++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/source/server/connection_handler_impl.cc b/source/server/connection_handler_impl.cc index 0ca74c60c428..ad2f50ee626c 100644 --- a/source/server/connection_handler_impl.cc +++ b/source/server/connection_handler_impl.cc @@ -425,6 +425,10 @@ void ConnectionHandlerImpl::ActiveTcpListener::onAcceptWorker( void ConnectionHandlerImpl::ActiveTcpListener::newConnection( Network::ConnectionSocketPtr&& socket, std::unique_ptr stream_info) { + // Refresh local address in case it was restored by a listener filter like the original_dst + // filter. + stream_info->setDownstreamLocalAddress(socket->localAddress()); + // Find matching filter chain. const auto filter_chain = config_->filterChainManager().findFilterChain(*socket); if (filter_chain == nullptr) { diff --git a/test/server/connection_handler_test.cc b/test/server/connection_handler_test.cc index 47d58f94e256..bcb46c1882cb 100644 --- a/test/server/connection_handler_test.cc +++ b/test/server/connection_handler_test.cc @@ -572,7 +572,12 @@ TEST_F(ConnectionHandlerTest, NormalRedirect) { EXPECT_EQ(1UL, TestUtility::findCounter(stats_store_, "test.downstream_cx_total")->value()); EXPECT_EQ(1UL, TestUtility::findGauge(stats_store_, "test.downstream_cx_active")->value()); - EXPECT_CALL(*access_log_, log(_, _, _, _)).Times(1); + EXPECT_CALL(*access_log_, log(_, _, _, _)) + .WillOnce( + Invoke([&](const Http::RequestHeaderMap*, const Http::ResponseHeaderMap*, + const Http::ResponseTrailerMap*, const StreamInfo::StreamInfo& stream_info) { + EXPECT_EQ(alt_address, stream_info.downstreamLocalAddress()); + })); connection->close(Network::ConnectionCloseType::NoFlush); dispatcher_.clearDeferredDeleteList(); EXPECT_EQ(0UL, TestUtility::findGauge(stats_store_, "downstream_cx_active")->value());