From ad57f1678e51eae42b2ae2679063b8ba0982038f Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Thu, 20 Oct 2016 11:32:28 -0700 Subject: [PATCH] Begin fuzzing framework --- test/core/support/BUILD | 9 ++++++++ test/core/util/BUILD | 13 ++++++++--- test/core/util/grpc_fuzzer.bzl | 42 ++++++++++++++++++++++++++++++++++ 3 files changed, 61 insertions(+), 3 deletions(-) create mode 100644 test/core/util/grpc_fuzzer.bzl diff --git a/test/core/support/BUILD b/test/core/support/BUILD index eee086d85e4..499bd0940fd 100644 --- a/test/core/support/BUILD +++ b/test/core/support/BUILD @@ -27,6 +27,8 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +load("//test/core/util:grpc_fuzzer.bzl", "grpc_fuzzer") + cc_test( name = "alloc_test", srcs = ["alloc_test.c"], @@ -152,3 +154,10 @@ cc_test( srcs = ["useful_test.c"], deps = ["//:gpr", "//test/core/util:gpr_test_util"], ) + +grpc_fuzzer( + name = "percent_encode_fuzzer", + srcs = ["percent_encode_fuzzer.c"], + deps = ["//:gpr"], + corpus = "percent_encode_corpus" +) diff --git a/test/core/util/BUILD b/test/core/util/BUILD index 79e6cfbeeba..82207913ef1 100644 --- a/test/core/util/BUILD +++ b/test/core/util/BUILD @@ -4,9 +4,11 @@ cc_library( name = "gpr_test_util", srcs = [ "test_config.c", + "memory_counters.c", ], hdrs = [ "test_config.h", + "memory_counters.h", ], deps = ["//:gpr"], visibility = ["//:__subpackages__"], @@ -16,7 +18,6 @@ cc_library( name = "grpc_test_util", srcs = [ "grpc_profiler.c", - "memory_counters.c", "mock_endpoint.c", "parse_hexstring.c", "passthru_endpoint.c", @@ -29,7 +30,6 @@ cc_library( ], hdrs = [ "grpc_profiler.h", - "memory_counters.h", "mock_endpoint.h", "parse_hexstring.h", "passthru_endpoint.h", @@ -40,5 +40,12 @@ cc_library( "test_tcp_server.h", ], deps = [":gpr_test_util", "//:grpc"], - visibility = ["//:__subpackages__"], + visibility = ["//test:__subpackages__"], +) + +cc_library( + name = "one_corpus_entry_fuzzer", + srcs = ["one_corpus_entry_fuzzer.c"], + deps = [":gpr_test_util", "//:grpc"], + visibility = ["//test:__subpackages__"], ) diff --git a/test/core/util/grpc_fuzzer.bzl b/test/core/util/grpc_fuzzer.bzl new file mode 100644 index 00000000000..1db3aa4234a --- /dev/null +++ b/test/core/util/grpc_fuzzer.bzl @@ -0,0 +1,42 @@ +# Copyright 2016, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +def grpc_fuzzer(name, corpus, srcs = [], deps = []): + native.cc_library( + name = "%s/one_entry" % name, + srcs = srcs, + deps = deps + ["//test/core/util:one_corpus_entry_fuzzer"], + ) + for entry in native.glob(['%s/*' % corpus]): + native.cc_test( + name = '%s/one_entry/%s' % (name, entry), + deps = [':%s/one_entry' % name], + args = [entry], + data = [entry] + )