[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",
language = "C++",
proto = "resolver_fuzzer.proto",
proto_deps = ["//test/core/util:fuzzing_channel_args_proto"],
tags = [
"no_mac",
"no_windows",
@ -38,6 +39,7 @@ grpc_proto_fuzzer(
"//src/core:channel_args",
"//test/core/event_engine:aborting_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_base",
],

@ -32,7 +32,6 @@
#include "absl/strings/string_view.h"
#include <grpc/event_engine/event_engine.h>
#include <grpc/grpc.h>
#include <grpc/support/log.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/util/aborting_event_engine.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;
static void dont_log(gpr_log_func_args* /*args*/) {}
@ -246,18 +246,6 @@ class FuzzingResolverEventEngine
"\"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 {
public:
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>();
EventEngineClientChannelDNSResolverFactory resolver_factory;
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));
work_serializer->Run(
[resolver_ptr = resolver.get()]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(

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

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

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

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

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

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

Loading…
Cancel
Save