[fuzz] Add ChannelArgs fuzzing to the client channel resolver fuzzer (#33200)

pull/33270/head
AJ Heller 2 years ago committed by GitHub
parent d14f5f78d7
commit 3244ba6fb7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      test/core/ext/filters/event_engine_client_channel_resolver/BUILD
  2. 19
      test/core/ext/filters/event_engine_client_channel_resolver/resolver_fuzzer.cc
  3. 7
      test/core/ext/filters/event_engine_client_channel_resolver/resolver_fuzzer.proto
  4. 18
      test/core/ext/filters/event_engine_client_channel_resolver/resolver_fuzzer_corpus/crash-0dca225f566df998becb705fc3a6b33a2441b928
  5. 7
      test/core/ext/filters/event_engine_client_channel_resolver/resolver_fuzzer_corpus/crash-1f078e66afdaf4f9db6ac5704c15d6ee7150bd80
  6. 7
      test/core/ext/filters/event_engine_client_channel_resolver/resolver_fuzzer_corpus/crash-8a4668f3c812f8d7d0eb5e96493ba84fe77edfc2
  7. 7
      test/core/ext/filters/event_engine_client_channel_resolver/resolver_fuzzer_corpus/timeout-1860f73b73574e91ce7b3cd8519cc0ec9753c5d8
  8. 7
      test/core/ext/filters/event_engine_client_channel_resolver/resolver_fuzzer_corpus/timeout-7a3822831087e0f79e2743c8f87650cc34a18898

@ -26,6 +26,7 @@ grpc_proto_fuzzer(
corpus = "resolver_fuzzer_corpus", corpus = "resolver_fuzzer_corpus",
language = "C++", language = "C++",
proto = "resolver_fuzzer.proto", proto = "resolver_fuzzer.proto",
proto_deps = ["//test/core/util:fuzzing_channel_args_proto"],
tags = [ tags = [
"no_mac", "no_mac",
"no_windows", "no_windows",
@ -38,6 +39,7 @@ grpc_proto_fuzzer(
"//src/core:channel_args", "//src/core:channel_args",
"//test/core/event_engine:aborting_event_engine", "//test/core/event_engine:aborting_event_engine",
"//test/core/event_engine/fuzzing_event_engine", "//test/core/event_engine/fuzzing_event_engine",
"//test/core/util:fuzzing_channel_args",
"//test/core/util:grpc_test_util", "//test/core/util:grpc_test_util",
"//test/core/util:grpc_test_util_base", "//test/core/util:grpc_test_util_base",
], ],

@ -32,7 +32,6 @@
#include "absl/strings/string_view.h" #include "absl/strings/string_view.h"
#include <grpc/event_engine/event_engine.h> #include <grpc/event_engine/event_engine.h>
#include <grpc/grpc.h>
#include <grpc/support/log.h> #include <grpc/support/log.h>
#include "src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.h" #include "src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.h"
@ -50,6 +49,7 @@
#include "test/core/event_engine/fuzzing_event_engine/fuzzing_event_engine.pb.h" #include "test/core/event_engine/fuzzing_event_engine/fuzzing_event_engine.pb.h"
#include "test/core/event_engine/util/aborting_event_engine.h" #include "test/core/event_engine/util/aborting_event_engine.h"
#include "test/core/ext/filters/event_engine_client_channel_resolver/resolver_fuzzer.pb.h" #include "test/core/ext/filters/event_engine_client_channel_resolver/resolver_fuzzer.pb.h"
#include "test/core/util/fuzzing_channel_args.h"
bool squelch = true; bool squelch = true;
static void dont_log(gpr_log_func_args* /*args*/) {} static void dont_log(gpr_log_func_args* /*args*/) {}
@ -246,18 +246,6 @@ class FuzzingResolverEventEngine
"\"SimpleService\"}],\"waitForReady\":true}]}}]"; "\"SimpleService\"}],\"waitForReady\":true}]}}]";
}; };
grpc_core::ChannelArgs ConstructChannelArgs(
const event_engine_client_channel_resolver::Msg& msg,
std::shared_ptr<FuzzingResolverEventEngine> engine) {
// put the engine in channel args
return grpc_core::ChannelArgs()
.SetObject<EventEngine>(std::move(engine))
.Set(GRPC_ARG_SERVICE_CONFIG_DISABLE_RESOLUTION,
!msg.resolver_args().request_service_config())
.Set(GRPC_ARG_DNS_ENABLE_SRV_QUERIES,
msg.resolver_args().enable_srv_queries());
}
class FuzzingResultHandler : public grpc_core::Resolver::ResultHandler { class FuzzingResultHandler : public grpc_core::Resolver::ResultHandler {
public: public:
explicit FuzzingResultHandler(bool* done_resolving) explicit FuzzingResultHandler(bool* done_resolving)
@ -301,7 +289,10 @@ DEFINE_PROTO_FUZZER(const event_engine_client_channel_resolver::Msg& msg) {
auto work_serializer = std::make_shared<grpc_core::WorkSerializer>(); auto work_serializer = std::make_shared<grpc_core::WorkSerializer>();
EventEngineClientChannelDNSResolverFactory resolver_factory; EventEngineClientChannelDNSResolverFactory resolver_factory;
auto resolver_args = ConstructResolverArgs( auto resolver_args = ConstructResolverArgs(
ConstructChannelArgs(msg, engine), &done_resolving, work_serializer); grpc_core::testing::CreateChannelArgsFromFuzzingConfiguration(
msg.channel_args(), {})
.Set(GRPC_INTERNAL_ARG_EVENT_ENGINE, engine),
&done_resolving, work_serializer);
auto resolver = resolver_factory.CreateResolver(std::move(resolver_args)); auto resolver = resolver_factory.CreateResolver(std::move(resolver_args));
work_serializer->Run( work_serializer->Run(
[resolver_ptr = resolver.get()]() ABSL_EXCLUSIVE_LOCKS_REQUIRED( [resolver_ptr = resolver.get()]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(

@ -16,10 +16,7 @@ syntax = "proto3";
package event_engine_client_channel_resolver; package event_engine_client_channel_resolver;
message ResolverArgs { import "test/core/util/fuzzing_channel_args.proto";
bool request_service_config = 2;
bool enable_srv_queries = 3;
}
message Error { message Error {
uint32 code = 1; uint32 code = 1;
@ -74,7 +71,7 @@ enum ExecutionStep {
} }
message Msg { message Msg {
ResolverArgs resolver_args = 1; grpc.testing.FuzzingChannelArgs channel_args = 1;
oneof hostname { oneof hostname {
ResolvedAddresses hostname_response = 2; ResolvedAddresses hostname_response = 2;
Error hostname_error = 3; Error hostname_error = 3;

@ -1,9 +1,14 @@
resolver_args { channel_args {
request_service_config: true args {
enable_srv_queries: true key: "grpc.dns_enable_srv_queries"
} i: 1
hostname_response { }
args {
key: "grpc.service_config_disable_resolution"
i: 0
}
} }
hostname_response {}
txt_response { txt_response {
txt_records { txt_records {
fuzzed_service_config { fuzzed_service_config {
@ -16,8 +21,7 @@ txt_response {
value: 10 value: 10
} }
} }
retry_throttling { retry_throttling {}
}
} }
} }
} }

@ -1,5 +1,8 @@
resolver_args { channel_args {
request_service_config: true args {
key: "grpc.service_config_disable_resolution"
i: 0
}
} }
hostname_response { hostname_response {
} }

@ -1,5 +1,8 @@
resolver_args { channel_args {
request_service_config: true args {
key: "grpc.service_config_disable_resolution"
i: 0
}
} }
txt_response { txt_response {
txt_records { txt_records {

@ -1,5 +1,8 @@
resolver_args { channel_args {
enable_srv_queries: true args {
key: "grpc.dns_enable_srv_queries"
i: 1
}
} }
hostname_response { hostname_response {
addresses { addresses {

@ -1,5 +1,8 @@
resolver_args { channel_args {
enable_srv_queries: true args {
key: "grpc.dns_enable_srv_queries"
i: 1
}
} }
txt_response { txt_response {
} }

Loading…
Cancel
Save