mirror of https://github.com/grpc/grpc.git
[fuzzing] Extract and modernize ChannelArgs fuzzer configuration (#33161)
ChannelArgs fuzz configuration is expected to be used in other fuzzing targets as well. This PR extracts the common code from the API fuzzer and converts to use the C++ types.pull/33187/head
parent
ec31abdacf
commit
4fde5dabf6
7 changed files with 180 additions and 71 deletions
@ -0,0 +1,54 @@ |
||||
// Copyright 2023 The gRPC Authors
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
#include <grpc/support/port_platform.h> |
||||
|
||||
#include "test/core/util/fuzzing_channel_args.h" |
||||
|
||||
#include "src/core/lib/channel/channel_args.h" |
||||
#include "src/core/lib/resource_quota/resource_quota.h" |
||||
#include "test/core/util/fuzzing_channel_args.pb.h" |
||||
|
||||
namespace grpc_core { |
||||
namespace testing { |
||||
|
||||
namespace { |
||||
using grpc::testing::FuzzingChannelArg; |
||||
} // namespace
|
||||
|
||||
ChannelArgs CreateChannelArgsFromFuzzingConfiguration( |
||||
const grpc::testing::FuzzingChannelArgs& fuzzing_channel_args, |
||||
const FuzzingEnvironment& fuzzing_environment) { |
||||
ChannelArgs channel_args; |
||||
for (const auto& fuzz_arg : fuzzing_channel_args.args()) { |
||||
switch (fuzz_arg.value_case()) { |
||||
case FuzzingChannelArg::kStr: |
||||
channel_args = channel_args.Set(fuzz_arg.key(), fuzz_arg.str()); |
||||
break; |
||||
case FuzzingChannelArg::kI: |
||||
channel_args = channel_args.Set(fuzz_arg.key(), fuzz_arg.i()); |
||||
break; |
||||
case FuzzingChannelArg::kResourceQuota: |
||||
channel_args = |
||||
channel_args.SetObject(fuzzing_environment.resource_quota); |
||||
break; |
||||
default: |
||||
// ignore
|
||||
break; |
||||
} |
||||
} |
||||
return channel_args; |
||||
} |
||||
|
||||
} // namespace testing
|
||||
} // namespace grpc_core
|
@ -0,0 +1,43 @@ |
||||
// Copyright 2023 gRPC authors.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#ifndef GRPC_TEST_CORE_UTIL_FUZZING_CHANNEL_ARGS_H |
||||
#define GRPC_TEST_CORE_UTIL_FUZZING_CHANNEL_ARGS_H |
||||
|
||||
#include <grpc/support/port_platform.h> |
||||
|
||||
#include "src/core/lib/channel/channel_args.h" |
||||
#include "src/core/lib/gprpp/ref_counted_ptr.h" |
||||
#include "src/core/lib/resource_quota/resource_quota.h" |
||||
#include "test/core/util/fuzzing_channel_args.pb.h" |
||||
|
||||
namespace grpc_core { |
||||
namespace testing { |
||||
|
||||
struct FuzzingEnvironment { |
||||
// This resource quota is only added to ChannelArgs if the fuzzing
|
||||
// configuration requests it.
|
||||
RefCountedPtr<ResourceQuota> resource_quota = |
||||
MakeResourceQuota("fuzzing_quota"); |
||||
}; |
||||
|
||||
// Create ChannelArgs from a fuzzer configuration.
|
||||
ChannelArgs CreateChannelArgsFromFuzzingConfiguration( |
||||
const grpc::testing::FuzzingChannelArgs& fuzzing_channel_args, |
||||
const FuzzingEnvironment& fuzzing_environment); |
||||
|
||||
} // namespace testing
|
||||
} // namespace grpc_core
|
||||
|
||||
#endif // GRPC_TEST_CORE_UTIL_FUZZING_CHANNEL_ARGS_H
|
@ -0,0 +1,32 @@ |
||||
// Copyright 2023 gRPC authors. |
||||
// |
||||
// Licensed under the Apache License, Version 2.0 (the "License"); |
||||
// you may not use this file except in compliance with the License. |
||||
// You may obtain a copy of the License at |
||||
// |
||||
// http://www.apache.org/licenses/LICENSE-2.0 |
||||
// |
||||
// Unless required by applicable law or agreed to in writing, software |
||||
// distributed under the License is distributed on an "AS IS" BASIS, |
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
// See the License for the specific language governing permissions and |
||||
// limitations under the License. |
||||
|
||||
syntax = "proto3"; |
||||
|
||||
package grpc.testing; |
||||
|
||||
message ResourceQuota {} |
||||
|
||||
message FuzzingChannelArg { |
||||
string key = 1; |
||||
oneof value { |
||||
string str = 2; |
||||
int64 i = 3; |
||||
ResourceQuota resource_quota = 4; |
||||
} |
||||
} |
||||
|
||||
message FuzzingChannelArgs { |
||||
repeated FuzzingChannelArg args = 1; |
||||
} |
Loading…
Reference in new issue