From ffd8a6ea3d7d5bd33ccc97d136132e1fc756bcb2 Mon Sep 17 00:00:00 2001 From: jianwen612 <55008549+jianwen612@users.noreply.github.com> Date: Tue, 21 Jul 2020 11:03:36 -0500 Subject: [PATCH] direct response filter: added unit test cases (#12064) Added unit test cases for "direct_response". Removed "direct_response" from test/per_file_coverage.sh Risk Level:low Testing: covered onData() and onNewConnection() method of the filter. Fixes: #11998 Signed-off-by: jianwen --- .../filters/network/direct_response/BUILD | 12 ++++ .../direct_response/direct_response_test.cc | 61 +++++++++++++++++++ test/per_file_coverage.sh | 1 - 3 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 test/extensions/filters/network/direct_response/direct_response_test.cc diff --git a/test/extensions/filters/network/direct_response/BUILD b/test/extensions/filters/network/direct_response/BUILD index 06fa488357ec..8ebb790617e3 100644 --- a/test/extensions/filters/network/direct_response/BUILD +++ b/test/extensions/filters/network/direct_response/BUILD @@ -29,3 +29,15 @@ envoy_extension_cc_test( "//test/test_common:utility_lib", ], ) + +envoy_extension_cc_test( + name = "direct_response_test", + srcs = ["direct_response_test.cc"], + extension_name = "envoy.filters.network.direct_response", + deps = [ + "//source/extensions/filters/network/direct_response:filter", + "//test/mocks/api:api_mocks", + "//test/mocks/network:network_mocks", + "@envoy_api//envoy/extensions/filters/network/direct_response/v3:pkg_cc_proto", + ], +) diff --git a/test/extensions/filters/network/direct_response/direct_response_test.cc b/test/extensions/filters/network/direct_response/direct_response_test.cc new file mode 100644 index 000000000000..7218bd194426 --- /dev/null +++ b/test/extensions/filters/network/direct_response/direct_response_test.cc @@ -0,0 +1,61 @@ +#include "envoy/extensions/filters/network/direct_response/v3/config.pb.validate.h" + +#include "extensions/filters/network/direct_response/filter.h" + +#include "test/mocks/api/mocks.h" +#include "test/mocks/network/mocks.h" + +#include "gmock/gmock.h" +#include "gtest/gtest.h" + +using testing::_; +using testing::NiceMock; + +namespace Envoy { +namespace Extensions { +namespace NetworkFilters { +namespace DirectResponse { + +class DirectResponseFilterTest : public testing::Test { +public: + void initialize(const std::string& response) { + filter_ = std::make_shared(response); + filter_->initializeReadFilterCallbacks(read_filter_callbacks_); + } + std::shared_ptr filter_; + NiceMock read_filter_callbacks_; +}; + +// Test the filter's onNewConnection() with a non-empty response +TEST_F(DirectResponseFilterTest, OnNewConnection) { + initialize("hello"); + Buffer::OwnedImpl response("hello"); + EXPECT_CALL(read_filter_callbacks_.connection_, write(BufferEqual(&response), false)); + EXPECT_CALL(read_filter_callbacks_.connection_, close(Network::ConnectionCloseType::FlushWrite)); + EXPECT_CALL(read_filter_callbacks_.connection_.stream_info_, + setResponseCodeDetails(StreamInfo::ResponseCodeDetails::get().DirectResponse)); + EXPECT_EQ(Network::FilterStatus::StopIteration, filter_->onNewConnection()); +} + +// Test the filter's onNewConnection() with an empty response +TEST_F(DirectResponseFilterTest, OnNewConnectionEmptyResponse) { + initialize(""); + EXPECT_CALL(read_filter_callbacks_.connection_, write(_, _)).Times(0); + EXPECT_CALL(read_filter_callbacks_.connection_, close(Network::ConnectionCloseType::FlushWrite)); + EXPECT_CALL(read_filter_callbacks_.connection_.stream_info_, + setResponseCodeDetails(StreamInfo::ResponseCodeDetails::get().DirectResponse)); + EXPECT_EQ(Network::FilterStatus::StopIteration, filter_->onNewConnection()); +} + +// Test the filter's onData() +TEST_F(DirectResponseFilterTest, OnData) { + initialize("hello"); + Buffer::OwnedImpl data("data"); + EXPECT_CALL(read_filter_callbacks_.connection_, write(_, _)).Times(0); + EXPECT_EQ(Network::FilterStatus::Continue, filter_->onData(data, false)); +} + +} // namespace DirectResponse +} // namespace NetworkFilters +} // namespace Extensions +} // namespace Envoy diff --git a/test/per_file_coverage.sh b/test/per_file_coverage.sh index 76126145cda7..ef5987d99c37 100755 --- a/test/per_file_coverage.sh +++ b/test/per_file_coverage.sh @@ -13,7 +13,6 @@ declare -a KNOWN_LOW_COVERAGE=( "source/extensions/filters/network/sni_dynamic_forward_proxy:90.9" "source/extensions/filters/network/dubbo_proxy:96.1" "source/extensions/filters/network/dubbo_proxy/router:95.1" -"source/extensions/filters/network/direct_response:89.3" "source/extensions/filters/network/mongo_proxy:94.0" "source/extensions/filters/network/common:96.1" "source/extensions/filters/network/common/redis:96.2"