diff --git a/test/extensions/filters/listener/common/fuzz/BUILD b/test/extensions/filters/listener/common/fuzz/BUILD index e306f3a43382d..85ed3cbf7304a 100644 --- a/test/extensions/filters/listener/common/fuzz/BUILD +++ b/test/extensions/filters/listener/common/fuzz/BUILD @@ -19,9 +19,20 @@ envoy_cc_test_library( srcs = ["listener_filter_fuzzer.cc"], hdrs = ["listener_filter_fuzzer.h"], deps = [ + ":listener_filter_fakes", ":listener_filter_fuzzer_proto_cc_proto", "//include/envoy/network:filter_interface", - "//test/mocks/network:network_fakes", + "//test/mocks/network:network_mocks", + "//test/test_common:threadsafe_singleton_injector_lib", + ], +) + +envoy_cc_test_library( + name = "listener_filter_fakes", + srcs = ["listener_filter_fakes.cc"], + hdrs = ["listener_filter_fakes.h"], + deps = [ + "//source/common/api:os_sys_calls_lib", "//test/mocks/network:network_mocks", ], ) diff --git a/test/extensions/filters/listener/common/fuzz/listener_filter_fakes.cc b/test/extensions/filters/listener/common/fuzz/listener_filter_fakes.cc new file mode 100644 index 0000000000000..f0546c7950fe8 --- /dev/null +++ b/test/extensions/filters/listener/common/fuzz/listener_filter_fakes.cc @@ -0,0 +1,86 @@ +#include "test/extensions/filters/listener/common/fuzz/listener_filter_fakes.h" + +namespace Envoy { +namespace Extensions { +namespace ListenerFilters { + +Network::IoHandle& FakeConnectionSocket::ioHandle() { return *io_handle_; } + +const Network::IoHandle& FakeConnectionSocket::ioHandle() const { return *io_handle_; } + +void FakeConnectionSocket::setLocalAddress( + const Network::Address::InstanceConstSharedPtr& local_address) { + local_address_ = local_address; + if (local_address_ != nullptr) { + addr_type_ = local_address_->type(); + } +} + +void FakeConnectionSocket::setRemoteAddress( + const Network::Address::InstanceConstSharedPtr& remote_address) { + remote_address_ = remote_address; +} + +const Network::Address::InstanceConstSharedPtr& FakeConnectionSocket::localAddress() const { + return local_address_; +} + +const Network::Address::InstanceConstSharedPtr& FakeConnectionSocket::remoteAddress() const { + return remote_address_; +} + +Network::Address::Type FakeConnectionSocket::addressType() const { return addr_type_; } + +absl::optional FakeConnectionSocket::ipVersion() const { + if (local_address_ == nullptr || addr_type_ != Network::Address::Type::Ip) { + return absl::nullopt; + } + + return local_address_->ip()->version(); +} + +void FakeConnectionSocket::setDetectedTransportProtocol(absl::string_view protocol) { + transport_protocol_ = std::string(protocol); +} + +absl::string_view FakeConnectionSocket::detectedTransportProtocol() const { + return transport_protocol_; +} + +void FakeConnectionSocket::setRequestedApplicationProtocols( + const std::vector& protocols) { + application_protocols_.clear(); + for (const auto& protocol : protocols) { + application_protocols_.emplace_back(protocol); + } +} + +const std::vector& FakeConnectionSocket::requestedApplicationProtocols() const { + return application_protocols_; +} + +void FakeConnectionSocket::setRequestedServerName(absl::string_view server_name) { + server_name_ = std::string(server_name); +} + +absl::string_view FakeConnectionSocket::requestedServerName() const { return server_name_; } + +Api::SysCallIntResult FakeConnectionSocket::getSocketOption(int level, int, void* optval, + socklen_t*) const { + switch (level) { + case SOL_IPV6: + static_cast(optval)->ss_family = AF_INET6; + break; + case SOL_IP: + static_cast(optval)->ss_family = AF_INET; + break; + default: + NOT_REACHED_GCOVR_EXCL_LINE; + } + + return Api::SysCallIntResult{0, 0}; +} + +} // namespace ListenerFilters +} // namespace Extensions +} // namespace Envoy diff --git a/test/extensions/filters/listener/common/fuzz/listener_filter_fakes.h b/test/extensions/filters/listener/common/fuzz/listener_filter_fakes.h new file mode 100644 index 0000000000000..4e13b4e6f4189 --- /dev/null +++ b/test/extensions/filters/listener/common/fuzz/listener_filter_fakes.h @@ -0,0 +1,70 @@ +#include "common/api/os_sys_calls_impl.h" +#include "common/network/io_socket_handle_impl.h" + +#include "test/mocks/network/mocks.h" + +#include "gmock/gmock.h" + +namespace Envoy { +namespace Extensions { +namespace ListenerFilters { + +static constexpr int kFakeSocketFd = 42; + +class FakeConnectionSocket : public Network::MockConnectionSocket { +public: + FakeConnectionSocket() + : io_handle_(std::make_unique(kFakeSocketFd)), + local_address_(nullptr), remote_address_(nullptr) {} + + ~FakeConnectionSocket() override { io_handle_->close(); } + + Network::IoHandle& ioHandle() override; + + const Network::IoHandle& ioHandle() const override; + + void setLocalAddress(const Network::Address::InstanceConstSharedPtr& local_address) override; + + void setRemoteAddress(const Network::Address::InstanceConstSharedPtr& remote_address) override; + + const Network::Address::InstanceConstSharedPtr& localAddress() const override; + + const Network::Address::InstanceConstSharedPtr& remoteAddress() const override; + + Network::Address::Type addressType() const override; + + absl::optional ipVersion() const override; + + void setRequestedApplicationProtocols(const std::vector& protocols) override; + + const std::vector& requestedApplicationProtocols() const override; + + void setDetectedTransportProtocol(absl::string_view protocol) override; + + absl::string_view detectedTransportProtocol() const override; + + void setRequestedServerName(absl::string_view server_name) override; + + absl::string_view requestedServerName() const override; + + Api::SysCallIntResult getSocketOption(int level, int, void* optval, socklen_t*) const override; + +private: + const Network::IoHandlePtr io_handle_; + Network::Address::InstanceConstSharedPtr local_address_; + Network::Address::InstanceConstSharedPtr remote_address_; + Network::Address::Type addr_type_; + std::vector application_protocols_; + std::string transport_protocol_; + std::string server_name_; +}; + +// TODO: Move over to Fake (name is confusing) +class FakeOsSysCalls : public Api::OsSysCallsImpl { +public: + MOCK_METHOD(Api::SysCallSizeResult, recv, (os_fd_t, void*, size_t, int)); +}; + +} // namespace ListenerFilters +} // namespace Extensions +} // namespace Envoy diff --git a/test/extensions/filters/listener/common/fuzz/listener_filter_fuzzer.cc b/test/extensions/filters/listener/common/fuzz/listener_filter_fuzzer.cc index f38aba8918f22..0f5aa60b8d44d 100644 --- a/test/extensions/filters/listener/common/fuzz/listener_filter_fuzzer.cc +++ b/test/extensions/filters/listener/common/fuzz/listener_filter_fuzzer.cc @@ -1,7 +1,5 @@ #include "test/extensions/filters/listener/common/fuzz/listener_filter_fuzzer.h" -#include "common/network/utility.h" - namespace Envoy { namespace Extensions { namespace ListenerFilters { @@ -10,21 +8,92 @@ void ListenerFilterFuzzer::fuzz( Network::ListenerFilter& filter, const test::extensions::filters::listener::FilterFuzzTestCase& input) { try { - fuzzerSetup(input); + socket_.setLocalAddress(Network::Utility::resolveUrl(input.sock().local_address())); } catch (const EnvoyException& e) { - ENVOY_LOG_MISC(debug, "EnvoyException: {}", e.what()); - return; + // Socket's local address will be nullptr by default if fuzzed local address is malformed + // or missing - local address field in proto is optional + } + try { + socket_.setRemoteAddress(Network::Utility::resolveUrl(input.sock().remote_address())); + } catch (const EnvoyException& e) { + // Socket's remote address will be nullptr by default if fuzzed remote address is malformed + // or missing - remote address field in proto is optional + } + + FuzzedHeader header(input); + + if (!header.empty()) { + ON_CALL(os_sys_calls_, recv(kFakeSocketFd, _, _, MSG_PEEK)) + .WillByDefault(testing::Return(Api::SysCallSizeResult{static_cast(0), 0})); + + ON_CALL(dispatcher_, + createFileEvent_(_, _, Event::FileTriggerType::Edge, + Event::FileReadyType::Read | Event::FileReadyType::Closed)) + .WillByDefault(testing::DoAll(testing::SaveArg<1>(&file_event_callback_), + testing::ReturnNew>())); } filter.onAccept(cb_); + + if (file_event_callback_ == nullptr) { + // If filter does not call createFileEvent (i.e. original_dst and original_src) + return; + } + + if (!header.empty()) { + { + testing::InSequence s; + + EXPECT_CALL(os_sys_calls_, recv(kFakeSocketFd, _, _, MSG_PEEK)) + .Times(testing::AnyNumber()) + .WillRepeatedly(Invoke( + [&header](os_fd_t, void* buffer, size_t length, int) -> Api::SysCallSizeResult { + return header.next(buffer, length); + })); + } + + bool got_continue = false; + + ON_CALL(cb_, continueFilterChain(true)) + .WillByDefault(testing::InvokeWithoutArgs([&got_continue]() { got_continue = true; })); + + while (!got_continue) { + if (header.done()) { // End of stream reached but not done + file_event_callback_(Event::FileReadyType::Closed); + } else { + file_event_callback_(Event::FileReadyType::Read); + } + } + } } -void ListenerFilterFuzzer::socketSetup( - const test::extensions::filters::listener::FilterFuzzTestCase& input) { - socket_.setLocalAddress(Network::Utility::resolveUrl(input.sock().local_address())); - socket_.setRemoteAddress(Network::Utility::resolveUrl(input.sock().remote_address())); +FuzzedHeader::FuzzedHeader(const test::extensions::filters::listener::FilterFuzzTestCase& input) + : nreads_(input.data_size()), nread_(0) { + size_t len = 0; + for (int i = 0; i < nreads_; i++) { + len += input.data(i).size(); + } + + header_.reserve(len); + + for (int i = 0; i < nreads_; i++) { + header_ += input.data(i); + indices_.push_back(header_.size()); + } } +Api::SysCallSizeResult FuzzedHeader::next(void* buffer, size_t length) { + if (done()) { // End of stream reached + nread_ = nreads_ - 1; // Decrement to avoid out-of-range for last recv() call + } + memcpy(buffer, header_.data(), std::min(indices_[nread_], length)); + return Api::SysCallSizeResult{static_cast(indices_[nread_++]), 0}; +} + +bool FuzzedHeader::done() { return nread_ >= nreads_; } + +bool FuzzedHeader::empty() { return nreads_ == 0; } + } // namespace ListenerFilters } // namespace Extensions } // namespace Envoy diff --git a/test/extensions/filters/listener/common/fuzz/listener_filter_fuzzer.h b/test/extensions/filters/listener/common/fuzz/listener_filter_fuzzer.h index fe81a9e12cc46..66b6f8707bfd2 100644 --- a/test/extensions/filters/listener/common/fuzz/listener_filter_fuzzer.h +++ b/test/extensions/filters/listener/common/fuzz/listener_filter_fuzzer.h @@ -1,8 +1,10 @@ #include "envoy/network/filter.h" +#include "test/extensions/filters/listener/common/fuzz/listener_filter_fakes.h" #include "test/extensions/filters/listener/common/fuzz/listener_filter_fuzzer.pb.validate.h" -#include "test/mocks/network/fakes.h" +#include "test/mocks/event/mocks.h" #include "test/mocks/network/mocks.h" +#include "test/test_common/threadsafe_singleton_injector.h" #include "gmock/gmock.h" @@ -12,19 +14,40 @@ namespace ListenerFilters { class ListenerFilterFuzzer { public: + ListenerFilterFuzzer() { + ON_CALL(cb_, socket()).WillByDefault(testing::ReturnRef(socket_)); + ON_CALL(cb_, dispatcher()).WillByDefault(testing::ReturnRef(dispatcher_)); + } + void fuzz(Network::ListenerFilter& filter, const test::extensions::filters::listener::FilterFuzzTestCase& input); private: - void fuzzerSetup(const test::extensions::filters::listener::FilterFuzzTestCase& input) { - ON_CALL(cb_, socket()).WillByDefault(testing::ReturnRef(socket_)); - socketSetup(input); - } + FakeOsSysCalls os_sys_calls_; + TestThreadsafeSingletonInjector os_calls_{&os_sys_calls_}; + NiceMock cb_; + FakeConnectionSocket socket_; + NiceMock dispatcher_; + Event::FileReadyCb file_event_callback_; +}; - void socketSetup(const test::extensions::filters::listener::FilterFuzzTestCase& input); +class FuzzedHeader { +public: + FuzzedHeader(const test::extensions::filters::listener::FilterFuzzTestCase& input); - NiceMock cb_; - Network::FakeConnectionSocket socket_; + // Copies next read into buffer and returns the number of bytes written + Api::SysCallSizeResult next(void* buffer, size_t length); + + bool done(); + + // Returns true if data field in proto is empty + bool empty(); + +private: + const int nreads_; // Number of reads + int nread_; // Counter of current read + std::string header_; // Construct header from single or multiple reads + std::vector indices_; // Ending indices for each read }; } // namespace ListenerFilters diff --git a/test/extensions/filters/listener/common/fuzz/listener_filter_fuzzer.proto b/test/extensions/filters/listener/common/fuzz/listener_filter_fuzzer.proto index 916c645d41bac..5741ed9edfa3e 100644 --- a/test/extensions/filters/listener/common/fuzz/listener_filter_fuzzer.proto +++ b/test/extensions/filters/listener/common/fuzz/listener_filter_fuzzer.proto @@ -9,4 +9,5 @@ message Socket { message FilterFuzzTestCase { Socket sock = 1; + repeated string data = 2; } \ No newline at end of file diff --git a/test/extensions/filters/listener/http_inspector/BUILD b/test/extensions/filters/listener/http_inspector/BUILD index 8530e24434d91..05f898a7bf90f 100644 --- a/test/extensions/filters/listener/http_inspector/BUILD +++ b/test/extensions/filters/listener/http_inspector/BUILD @@ -1,5 +1,6 @@ load( "//bazel:envoy_build_system.bzl", + "envoy_cc_fuzz_test", "envoy_package", ) load( @@ -42,3 +43,13 @@ envoy_extension_cc_test( "//test/test_common:threadsafe_singleton_injector_lib", ], ) + +envoy_cc_fuzz_test( + name = "http_inspector_fuzz_test", + srcs = ["http_inspector_fuzz_test.cc"], + corpus = "http_inspector_corpus", + deps = [ + "//source/extensions/filters/listener/http_inspector:http_inspector_lib", + "//test/extensions/filters/listener/common/fuzz:listener_filter_fuzzer_lib", + ], +) diff --git a/test/extensions/filters/listener/http_inspector/http_inspector_corpus/bad_header b/test/extensions/filters/listener/http_inspector/http_inspector_corpus/bad_header new file mode 100644 index 0000000000000..a84991228ff57 --- /dev/null +++ b/test/extensions/filters/listener/http_inspector/http_inspector_corpus/bad_header @@ -0,0 +1 @@ +data: "X" \ No newline at end of file diff --git a/test/extensions/filters/listener/http_inspector/http_inspector_corpus/incomplete_header b/test/extensions/filters/listener/http_inspector/http_inspector_corpus/incomplete_header new file mode 100644 index 0000000000000..db337b0c762ae --- /dev/null +++ b/test/extensions/filters/listener/http_inspector/http_inspector_corpus/incomplete_header @@ -0,0 +1 @@ +data: "GE" \ No newline at end of file diff --git a/test/extensions/filters/listener/http_inspector/http_inspector_corpus/invalid_method b/test/extensions/filters/listener/http_inspector/http_inspector_corpus/invalid_method new file mode 100644 index 0000000000000..b14ffd72e1168 --- /dev/null +++ b/test/extensions/filters/listener/http_inspector/http_inspector_corpus/invalid_method @@ -0,0 +1 @@ +data: "BAD /anything HTTP/1.1" \ No newline at end of file diff --git a/test/extensions/filters/listener/http_inspector/http_inspector_corpus/invalid_request b/test/extensions/filters/listener/http_inspector/http_inspector_corpus/invalid_request new file mode 100644 index 0000000000000..a7943ddb30b19 --- /dev/null +++ b/test/extensions/filters/listener/http_inspector/http_inspector_corpus/invalid_request @@ -0,0 +1 @@ +data: "BAD /anything HTTP/1.1\r\n" \ No newline at end of file diff --git a/test/extensions/filters/listener/http_inspector/http_inspector_corpus/multiple_http10 b/test/extensions/filters/listener/http_inspector/http_inspector_corpus/multiple_http10 new file mode 100644 index 0000000000000..42fa7434ebbb0 --- /dev/null +++ b/test/extensions/filters/listener/http_inspector/http_inspector_corpus/multiple_http10 @@ -0,0 +1,3 @@ +data: "GET /anyt" +data: "hing HT" +data: "TP/1.0\r" \ No newline at end of file diff --git a/test/extensions/filters/listener/http_inspector/http_inspector_corpus/multiple_incomplete b/test/extensions/filters/listener/http_inspector/http_inspector_corpus/multiple_incomplete new file mode 100644 index 0000000000000..58c5d8ad86130 --- /dev/null +++ b/test/extensions/filters/listener/http_inspector/http_inspector_corpus/multiple_incomplete @@ -0,0 +1,2 @@ +data: "G" +data: "E" \ No newline at end of file diff --git a/test/extensions/filters/listener/http_inspector/http_inspector_corpus/valid_http10 b/test/extensions/filters/listener/http_inspector/http_inspector_corpus/valid_http10 new file mode 100644 index 0000000000000..5512c5504dd90 --- /dev/null +++ b/test/extensions/filters/listener/http_inspector/http_inspector_corpus/valid_http10 @@ -0,0 +1 @@ +data: "GET /anything HTTP/1.0\r\nhost: google.com\r\nuser-agent: curl/7.64.0\r\naccept: */*\r\nx-forwarded-proto: http\r\nx-request-id: a52df4a0-ed00-4a19-86a7-80e5049c6c84\r\nx-envoy-expected-rq-timeout-ms: 15000\r\ncontent-length: 0\r\n\r\n" \ No newline at end of file diff --git a/test/extensions/filters/listener/http_inspector/http_inspector_corpus/valid_http11 b/test/extensions/filters/listener/http_inspector/http_inspector_corpus/valid_http11 new file mode 100644 index 0000000000000..56906d74b1c14 --- /dev/null +++ b/test/extensions/filters/listener/http_inspector/http_inspector_corpus/valid_http11 @@ -0,0 +1 @@ +data: "GET /anything HTTP/1.1\r\nhost: google.com\r\nuser-agent: curl/7.64.0\r\naccept: */*\r\nx-forwarded-proto: http\r\nx-request-id: a52df4a0-ed00-4a19-86a7-80e5049c6c84\r\nx-envoy-expected-rq-timeout-ms: 15000\r\ncontent-length: 3\r\n\r\nfoo" \ No newline at end of file diff --git a/test/extensions/filters/listener/http_inspector/http_inspector_corpus/valid_http2 b/test/extensions/filters/listener/http_inspector/http_inspector_corpus/valid_http2 new file mode 100644 index 0000000000000..0e1faf044c0fa --- /dev/null +++ b/test/extensions/filters/listener/http_inspector/http_inspector_corpus/valid_http2 @@ -0,0 +1 @@ +data: "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n\x00\x00\x0c\x04\x00\x00\x00\x00\x00\x00\x04\x10\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x04\x08\x00\x00\x00\x00\x00\x0f\xff\x00\x01\x00\x00}\x01\x05\x00\x00\x00\x01A\x8a\xa0\xe4\x1d\x13\x9d\t\xb8\xf0\x00\x0f\x04\x88`uzL\xe6\xaaf\x05\x82\x86z\x88%\xb6P\xc3\xab\xb8\xd2\xe0S\x03*/*@\x8d\xf2\xb4\xa7\xb3\xc0\xec\x90\xb2-]\x87I\xff\x83\x9d)\xaf@\x89\xf2\xb5\x85\xediP\x95\x8d\'\x9a\x18\x9e\x03\xf1\xcaU\x82&_Y\xa7[\n\xc3\x11\x19Y\xc7\xe4\x90\x04\x90\x8d\xb6\xe8?@\x96\xf2\xb1j\xee\x7fK\x17\xcde\"K\"\xd6vY&\xa4\xa7\xb5+R\x8f\x84\x0b`\x00?" \ No newline at end of file diff --git a/test/extensions/filters/listener/http_inspector/http_inspector_fuzz_test.cc b/test/extensions/filters/listener/http_inspector/http_inspector_fuzz_test.cc new file mode 100644 index 0000000000000..5f867c22b179f --- /dev/null +++ b/test/extensions/filters/listener/http_inspector/http_inspector_fuzz_test.cc @@ -0,0 +1,32 @@ +#include "extensions/filters/listener/http_inspector/http_inspector.h" + +#include "test/extensions/filters/listener/common/fuzz/listener_filter_fuzzer.h" +#include "test/extensions/filters/listener/common/fuzz/listener_filter_fuzzer.pb.validate.h" +#include "test/fuzz/fuzz_runner.h" + +namespace Envoy { +namespace Extensions { +namespace ListenerFilters { +namespace HttpInspector { + +DEFINE_PROTO_FUZZER(const test::extensions::filters::listener::FilterFuzzTestCase& input) { + + try { + TestUtility::validate(input); + } catch (const ProtoValidationException& e) { + ENVOY_LOG_MISC(debug, "ProtoValidationException: {}", e.what()); + return; + } + + Stats::IsolatedStoreImpl store; + ConfigSharedPtr cfg = std::make_shared(store); + auto filter = std::make_unique(cfg); + + ListenerFilterFuzzer fuzzer; + fuzzer.fuzz(*filter, input); +} + +} // namespace HttpInspector +} // namespace ListenerFilters +} // namespace Extensions +} // namespace Envoy diff --git a/test/extensions/filters/listener/original_dst/original_dst_corpus/invalid_scheme b/test/extensions/filters/listener/original_dst/original_dst_corpus/invalid_scheme new file mode 100644 index 0000000000000..67994b567f870 --- /dev/null +++ b/test/extensions/filters/listener/original_dst/original_dst_corpus/invalid_scheme @@ -0,0 +1,3 @@ +sock { + local_address: "hello world" +} \ No newline at end of file diff --git a/test/extensions/filters/listener/original_dst/original_dst_corpus/invalid_test b/test/extensions/filters/listener/original_dst/original_dst_corpus/invalid_test deleted file mode 100644 index 7c650514ebbb9..0000000000000 --- a/test/extensions/filters/listener/original_dst/original_dst_corpus/invalid_test +++ /dev/null @@ -1,4 +0,0 @@ -sock { - local_address: "hello world" - remote_address: "tcp://0.0.0.0:0" -} \ No newline at end of file diff --git a/test/extensions/filters/listener/original_dst/original_dst_corpus/unix_test b/test/extensions/filters/listener/original_dst/original_dst_corpus/invalid_unix similarity index 55% rename from test/extensions/filters/listener/original_dst/original_dst_corpus/unix_test rename to test/extensions/filters/listener/original_dst/original_dst_corpus/invalid_unix index 3936a8a1c0b1d..ee8917b15305f 100644 --- a/test/extensions/filters/listener/original_dst/original_dst_corpus/unix_test +++ b/test/extensions/filters/listener/original_dst/original_dst_corpus/invalid_unix @@ -1,4 +1,3 @@ sock { local_address: "unix://tmp/server" - remote_address: "tcp://0.0.0.0:0" } \ No newline at end of file diff --git a/test/extensions/filters/listener/original_dst/original_dst_corpus/ipv4_test b/test/extensions/filters/listener/original_dst/original_dst_corpus/valid_ipv4 similarity index 54% rename from test/extensions/filters/listener/original_dst/original_dst_corpus/ipv4_test rename to test/extensions/filters/listener/original_dst/original_dst_corpus/valid_ipv4 index 20cdd6796db9f..a0510b8c253c3 100644 --- a/test/extensions/filters/listener/original_dst/original_dst_corpus/ipv4_test +++ b/test/extensions/filters/listener/original_dst/original_dst_corpus/valid_ipv4 @@ -1,4 +1,3 @@ sock { local_address: "tcp://0.0.0.0:0" - remote_address: "tcp://0.0.0.0:0" } \ No newline at end of file diff --git a/test/extensions/filters/listener/original_dst/original_dst_corpus/ipv6_test b/test/extensions/filters/listener/original_dst/original_dst_corpus/valid_ipv6 similarity index 56% rename from test/extensions/filters/listener/original_dst/original_dst_corpus/ipv6_test rename to test/extensions/filters/listener/original_dst/original_dst_corpus/valid_ipv6 index bda8f29892030..32bdadc805ce7 100644 --- a/test/extensions/filters/listener/original_dst/original_dst_corpus/ipv6_test +++ b/test/extensions/filters/listener/original_dst/original_dst_corpus/valid_ipv6 @@ -1,4 +1,3 @@ sock { local_address: "tcp://[a:b:c:d::]:0" - remote_address: "tcp://0.0.0.0:0" } \ No newline at end of file diff --git a/test/extensions/filters/listener/original_dst/original_dst_fuzz_test.cc b/test/extensions/filters/listener/original_dst/original_dst_fuzz_test.cc index 5476b6326e3a9..4eb1899f3b351 100644 --- a/test/extensions/filters/listener/original_dst/original_dst_fuzz_test.cc +++ b/test/extensions/filters/listener/original_dst/original_dst_fuzz_test.cc @@ -19,13 +19,8 @@ DEFINE_PROTO_FUZZER(const test::extensions::filters::listener::FilterFuzzTestCas } auto filter = std::make_unique(); - - try { - ListenerFilterFuzzer fuzzer; - fuzzer.fuzz(*filter, input); - } catch (const EnvoyException& e) { - ENVOY_LOG_MISC(debug, "EnvoyException: {}", e.what()); - } + ListenerFilterFuzzer fuzzer; + fuzzer.fuzz(*filter, input); } } // namespace OriginalDst diff --git a/test/extensions/filters/listener/original_src/original_src_corpus/ipv4_test b/test/extensions/filters/listener/original_src/original_src_corpus/valid_ipv4 similarity index 53% rename from test/extensions/filters/listener/original_src/original_src_corpus/ipv4_test rename to test/extensions/filters/listener/original_src/original_src_corpus/valid_ipv4 index 7d439bab6cad7..e9acd000b4634 100644 --- a/test/extensions/filters/listener/original_src/original_src_corpus/ipv4_test +++ b/test/extensions/filters/listener/original_src/original_src_corpus/valid_ipv4 @@ -1,11 +1,10 @@ config { - bind_port: true + bind_port: false mark: 0 } -data { +fuzzed { sock { - local_address: "tcp://0.0.0.0:0" remote_address: "tcp://1.2.3.4:0" } -} +} \ No newline at end of file diff --git a/test/extensions/filters/listener/original_src/original_src_corpus/unix_test b/test/extensions/filters/listener/original_src/original_src_corpus/valid_unix similarity index 61% rename from test/extensions/filters/listener/original_src/original_src_corpus/unix_test rename to test/extensions/filters/listener/original_src/original_src_corpus/valid_unix index ecb14359bd52b..9726394370c6a 100644 --- a/test/extensions/filters/listener/original_src/original_src_corpus/unix_test +++ b/test/extensions/filters/listener/original_src/original_src_corpus/valid_unix @@ -1,11 +1,10 @@ config { bind_port: true - mark: 0 + mark: 15 } -data { +fuzzed { sock { - local_address: "tcp://0.0.0.0:0" remote_address: "unix://domain.socket" } } \ No newline at end of file diff --git a/test/extensions/filters/listener/original_src/original_src_fuzz_test.cc b/test/extensions/filters/listener/original_src/original_src_fuzz_test.cc index c677a55b8d557..0116a7a98b362 100644 --- a/test/extensions/filters/listener/original_src/original_src_fuzz_test.cc +++ b/test/extensions/filters/listener/original_src/original_src_fuzz_test.cc @@ -21,14 +21,8 @@ DEFINE_PROTO_FUZZER( Config config(input.config()); auto filter = std::make_unique(config); - - try { - ListenerFilterFuzzer fuzzer; - fuzzer.fuzz(*filter, input.data()); - } catch (const EnvoyException& e) { - ENVOY_LOG_MISC(debug, "EnvoyException: {}", e.what()); - return; - } + ListenerFilterFuzzer fuzzer; + fuzzer.fuzz(*filter, input.fuzzed()); } } // namespace OriginalSrc diff --git a/test/extensions/filters/listener/original_src/original_src_fuzz_test.proto b/test/extensions/filters/listener/original_src/original_src_fuzz_test.proto index 303b3c86daaa1..093378b090454 100644 --- a/test/extensions/filters/listener/original_src/original_src_fuzz_test.proto +++ b/test/extensions/filters/listener/original_src/original_src_fuzz_test.proto @@ -9,6 +9,6 @@ import "validate/validate.proto"; message OriginalSrcTestCase { envoy.extensions.filters.listener.original_src.v3.OriginalSrc config = 1 [(validate.rules).message.required = true]; - test.extensions.filters.listener.FilterFuzzTestCase data = 2 + test.extensions.filters.listener.FilterFuzzTestCase fuzzed = 2 [(validate.rules).message.required = true]; } \ No newline at end of file diff --git a/test/mocks/network/BUILD b/test/mocks/network/BUILD index 5f16adc6206f0..020e4b6db4041 100644 --- a/test/mocks/network/BUILD +++ b/test/mocks/network/BUILD @@ -63,11 +63,3 @@ envoy_cc_mock( "//source/common/network:utility_lib", ], ) - -envoy_cc_mock( - name = "network_fakes", - hdrs = ["fakes.h"], - deps = [ - ":network_mocks", - ], -) diff --git a/test/mocks/network/fakes.h b/test/mocks/network/fakes.h deleted file mode 100644 index ec69dce0ec0d3..0000000000000 --- a/test/mocks/network/fakes.h +++ /dev/null @@ -1,62 +0,0 @@ -#include "common/network/utility.h" - -#include "test/mocks/network/mocks.h" - -#include "gmock/gmock.h" - -namespace Envoy { -namespace Network { - -class FakeConnectionSocket : public MockConnectionSocket { -public: - ~FakeConnectionSocket() override = default; - - FakeConnectionSocket() : local_address_(nullptr), remote_address_(nullptr) {} - - FakeConnectionSocket(const Address::InstanceConstSharedPtr& local_address, - const Address::InstanceConstSharedPtr& remote_address) - : local_address_(local_address), remote_address_(remote_address) {} - - void setLocalAddress(const Address::InstanceConstSharedPtr& local_address) override { - local_address_ = local_address; - } - - void setRemoteAddress(const Address::InstanceConstSharedPtr& remote_address) override { - remote_address_ = remote_address; - } - - const Address::InstanceConstSharedPtr& localAddress() const override { return local_address_; } - - const Address::InstanceConstSharedPtr& remoteAddress() const override { return remote_address_; } - - Address::Type addressType() const override { return local_address_->type(); } - - absl::optional ipVersion() const override { - if (local_address_->type() != Address::Type::Ip) { - return absl::nullopt; - } - - return local_address_->ip()->version(); - } - - Api::SysCallIntResult getSocketOption(int level, int, void* optval, socklen_t*) const override { - switch (level) { - case SOL_IPV6: - static_cast(optval)->ss_family = AF_INET6; - break; - case SOL_IP: - static_cast(optval)->ss_family = AF_INET; - break; - default: - NOT_REACHED_GCOVR_EXCL_LINE; - } - - return Api::SysCallIntResult{0, 0}; - } - - Address::InstanceConstSharedPtr local_address_; - Address::InstanceConstSharedPtr remote_address_; -}; - -} // namespace Network -} // namespace Envoy