diff --git a/test/extensions/filters/network/direct_response/BUILD b/test/extensions/filters/network/direct_response/BUILD index 06fa488357ec3..8ebb790617e37 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 0000000000000..7218bd194426c --- /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 76126145cda75..ef5987d99c375 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"