Server fuzzer progress

pull/6071/head
Craig Tiller 9 years ago
parent da1d7d9d1e
commit 2d8d13a572
  1. 2
      Makefile
  2. 2
      build.yaml
  3. 28
      test/core/end2end/fuzzers/server_fuzzer.c
  4. 124
      test/core/util/mock_endpoint.c
  5. 9
      test/core/util/mock_endpoint.h
  6. 6
      tools/run_tests/sources_and_headers.json
  7. 3036
      tools/run_tests/tests.json
  8. 3
      vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj
  9. 6
      vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters
  10. 3
      vsprojects/vcxproj/grpc_test_util_unsecure/grpc_test_util_unsecure.vcxproj
  11. 6
      vsprojects/vcxproj/grpc_test_util_unsecure/grpc_test_util_unsecure.vcxproj.filters

@ -2724,6 +2724,7 @@ LIBGRPC_TEST_UTIL_SRC = \
test/core/iomgr/endpoint_tests.c \
test/core/security/oauth2_utils.c \
test/core/util/grpc_profiler.c \
test/core/util/mock_endpoint.c \
test/core/util/parse_hexstring.c \
test/core/util/port_posix.c \
test/core/util/port_server_client.c \
@ -2771,6 +2772,7 @@ LIBGRPC_TEST_UTIL_UNSECURE_SRC = \
test/core/end2end/fixtures/proxy.c \
test/core/iomgr/endpoint_tests.c \
test/core/util/grpc_profiler.c \
test/core/util/mock_endpoint.c \
test/core/util/parse_hexstring.c \
test/core/util/port_posix.c \
test/core/util/port_server_client.c \

@ -525,6 +525,7 @@ filegroups:
- test/core/end2end/fixtures/proxy.h
- test/core/iomgr/endpoint_tests.h
- test/core/util/grpc_profiler.h
- test/core/util/mock_endpoint.h
- test/core/util/parse_hexstring.h
- test/core/util/port.h
- test/core/util/port_server_client.h
@ -534,6 +535,7 @@ filegroups:
- test/core/end2end/fixtures/proxy.c
- test/core/iomgr/endpoint_tests.c
- test/core/util/grpc_profiler.c
- test/core/util/mock_endpoint.c
- test/core/util/parse_hexstring.c
- test/core/util/port_posix.c
- test/core/util/port_server_client.c

@ -33,33 +33,35 @@
#include <grpc/grpc.h>
#if 0
static void discard_write(gpr_slice slice) { gpr_slice_unref(slice); }
#include "src/core/ext/transport/chttp2/transport/chttp2_transport.h"
#include "src/core/lib/surface/server.h"
#include "test/core/util/mock_endpoint.h"
static void discard_write(gpr_slice slice) {}
static void *tag(int n) { return (void *)(uintptr_t)n; }
#endif
static int detag(void *p) { return (int)(uintptr_t)p; }
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
#if 0
grpc_init();
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
grpc_endpoint *mock_endpoint = grpc_mock_endpoint_create(discard_write);
grpc_mock_endpoint_put_read(mock_endpoint,
gpr_slice_from_copied_buffer(data, size));
grpc_mock_endpoint_put_read(
&exec_ctx, mock_endpoint,
gpr_slice_from_copied_buffer((const char *)data, size));
grpc_server *server = grpc_server_create(NULL, NULL);
grpc_completion_queue *cq = grpc_completion_queue_create();
grpc_server_register_completion_queue(server, cq);
grpc_completion_queue *cq = grpc_completion_queue_create(NULL);
grpc_server_register_completion_queue(server, cq, NULL);
// TODO(ctiller): add registered methods (one for POST, one for PUT)
// void *registered_method =
// grpc_server_register_method(server, "/reg", NULL, 0);
grpc_server_start(server, NULL);
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
grpc_server_start(server);
grpc_transport *transport =
grpc_create_chttp2_transport(&exec_ctx, NULL, mock_endpoint, 0);
grpc_server_setup_transport(&exec_ctx, server, transport, NULL);
grpc_chttp2_transport_start_reading(&exec_ctx, transport, NULL, 0);
grpc_exec_ctx_flush(&exec_ctx);
grpc_call *call1;
grpc_call_details call_details1;
@ -68,8 +70,9 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
cq, cq, tag(1));
while (1) {
grpc_exec_ctx_flush(&exec_ctx);
grpc_event ev =
grpc_completion_queue_next(cq, gpr_inf_past(GPR_CLOCK_REALTIME));
grpc_completion_queue_next(cq, gpr_inf_past(GPR_CLOCK_REALTIME), NULL);
switch (ev.type) {
case GRPC_QUEUE_TIMEOUT:
goto done;
@ -84,6 +87,5 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
}
done:
grpc_shutdown();
#endif
return 0;
}

@ -0,0 +1,124 @@
/*
*
* 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.
*
*/
#include "test/core/util/mock_endpoint.h"
#include <grpc/support/alloc.h>
#include <grpc/support/string_util.h>
typedef struct grpc_mock_endpoint {
grpc_endpoint base;
gpr_mu mu;
void (*on_write)(gpr_slice slice);
gpr_slice_buffer read_buffer;
gpr_slice_buffer *on_read_out;
grpc_closure *on_read;
} grpc_mock_endpoint;
static void me_read(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep,
gpr_slice_buffer *slices, grpc_closure *cb) {
grpc_mock_endpoint *m = (grpc_mock_endpoint *)ep;
gpr_mu_lock(&m->mu);
if (m->read_buffer.count > 0) {
gpr_slice_buffer_swap(&m->read_buffer, slices);
grpc_exec_ctx_enqueue(exec_ctx, cb, true, NULL);
} else {
m->on_read = cb;
m->on_read_out = slices;
}
gpr_mu_unlock(&m->mu);
}
static void me_write(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep,
gpr_slice_buffer *slices, grpc_closure *cb) {
grpc_mock_endpoint *m = (grpc_mock_endpoint *)ep;
for (size_t i = 0; i < slices->count; i++) {
m->on_write(slices->slices[i]);
}
grpc_exec_ctx_enqueue(exec_ctx, cb, true, NULL);
}
static void me_add_to_pollset(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep,
grpc_pollset *pollset) {}
static void me_add_to_pollset_set(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep,
grpc_pollset_set *pollset) {}
static void me_shutdown(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep) {
grpc_mock_endpoint *m = (grpc_mock_endpoint *)ep;
gpr_mu_lock(&m->mu);
if (m->on_read) {
grpc_exec_ctx_enqueue(exec_ctx, m->on_read, false, NULL);
m->on_read = NULL;
}
gpr_mu_unlock(&m->mu);
}
static void me_destroy(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep) {
grpc_mock_endpoint *m = (grpc_mock_endpoint *)ep;
gpr_slice_buffer_destroy(&m->read_buffer);
gpr_free(m);
}
static char *me_get_peer(grpc_endpoint *ep) {
return gpr_strdup("fake:mock_endpoint");
}
static const grpc_endpoint_vtable vtable = {
me_read, me_write, me_add_to_pollset, me_add_to_pollset_set,
me_shutdown, me_destroy, me_get_peer,
};
grpc_endpoint *grpc_mock_endpoint_create(void (*on_write)(gpr_slice slice)) {
grpc_mock_endpoint *m = gpr_malloc(sizeof(*m));
m->base.vtable = &vtable;
gpr_slice_buffer_init(&m->read_buffer);
gpr_mu_init(&m->mu);
m->on_write = on_write;
m->on_read = NULL;
return &m->base;
}
void grpc_mock_endpoint_put_read(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep,
gpr_slice slice) {
grpc_mock_endpoint *m = (grpc_mock_endpoint *)ep;
gpr_mu_lock(&m->mu);
if (m->on_read != NULL) {
gpr_slice_buffer_add(m->on_read_out, slice);
grpc_exec_ctx_enqueue(exec_ctx, m->on_read, true, NULL);
m->on_read = NULL;
} else {
gpr_slice_buffer_add(&m->read_buffer, slice);
}
gpr_mu_unlock(&m->mu);
}

@ -34,9 +34,10 @@
#ifndef MOCK_ENDPOINT_H
#define MOCK_ENDPOINT_H
grpc_endpoint *grpc_mock_endpoint_create();
void grpc_mock_endpoint_put_read(grpc_endpoint *mock_endpoint, gpr_slice slice);
void grpc_mock_endpoint_on_write(grpc_endpoint *mock_endpoint,
void (*cb)(gpr_slice slice));
#include "src/core/lib/iomgr/endpoint.h"
grpc_endpoint *grpc_mock_endpoint_create(void (*on_write)(gpr_slice slice));
void grpc_mock_endpoint_put_read(grpc_exec_ctx *exec_ctx,
grpc_endpoint *mock_endpoint, gpr_slice slice);
#endif

@ -4556,6 +4556,7 @@
"test/core/iomgr/endpoint_tests.h",
"test/core/security/oauth2_utils.h",
"test/core/util/grpc_profiler.h",
"test/core/util/mock_endpoint.h",
"test/core/util/parse_hexstring.h",
"test/core/util/port.h",
"test/core/util/port_server_client.h",
@ -4578,6 +4579,8 @@
"test/core/security/oauth2_utils.h",
"test/core/util/grpc_profiler.c",
"test/core/util/grpc_profiler.h",
"test/core/util/mock_endpoint.c",
"test/core/util/mock_endpoint.h",
"test/core/util/parse_hexstring.c",
"test/core/util/parse_hexstring.h",
"test/core/util/port.h",
@ -4602,6 +4605,7 @@
"test/core/end2end/fixtures/proxy.h",
"test/core/iomgr/endpoint_tests.h",
"test/core/util/grpc_profiler.h",
"test/core/util/mock_endpoint.h",
"test/core/util/parse_hexstring.h",
"test/core/util/port.h",
"test/core/util/port_server_client.h",
@ -4618,6 +4622,8 @@
"test/core/iomgr/endpoint_tests.h",
"test/core/util/grpc_profiler.c",
"test/core/util/grpc_profiler.h",
"test/core/util/mock_endpoint.c",
"test/core/util/mock_endpoint.h",
"test/core/util/parse_hexstring.c",
"test/core/util/parse_hexstring.h",
"test/core/util/port.h",

File diff suppressed because it is too large Load Diff

@ -153,6 +153,7 @@
<ClInclude Include="$(SolutionDir)\..\test\core\iomgr\endpoint_tests.h" />
<ClInclude Include="$(SolutionDir)\..\test\core\security\oauth2_utils.h" />
<ClInclude Include="$(SolutionDir)\..\test\core\util\grpc_profiler.h" />
<ClInclude Include="$(SolutionDir)\..\test\core\util\mock_endpoint.h" />
<ClInclude Include="$(SolutionDir)\..\test\core\util\parse_hexstring.h" />
<ClInclude Include="$(SolutionDir)\..\test\core\util\port.h" />
<ClInclude Include="$(SolutionDir)\..\test\core\util\port_server_client.h" />
@ -175,6 +176,8 @@
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\test\core\util\grpc_profiler.c">
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\test\core\util\mock_endpoint.c">
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\test\core\util\parse_hexstring.c">
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\test\core\util\port_posix.c">

@ -25,6 +25,9 @@
<ClCompile Include="$(SolutionDir)\..\test\core\util\grpc_profiler.c">
<Filter>test\core\util</Filter>
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\test\core\util\mock_endpoint.c">
<Filter>test\core\util</Filter>
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\test\core\util\parse_hexstring.c">
<Filter>test\core\util</Filter>
</ClCompile>
@ -60,6 +63,9 @@
<ClInclude Include="$(SolutionDir)\..\test\core\util\grpc_profiler.h">
<Filter>test\core\util</Filter>
</ClInclude>
<ClInclude Include="$(SolutionDir)\..\test\core\util\mock_endpoint.h">
<Filter>test\core\util</Filter>
</ClInclude>
<ClInclude Include="$(SolutionDir)\..\test\core\util\parse_hexstring.h">
<Filter>test\core\util</Filter>
</ClInclude>

@ -151,6 +151,7 @@
<ClInclude Include="$(SolutionDir)\..\test\core\end2end\fixtures\proxy.h" />
<ClInclude Include="$(SolutionDir)\..\test\core\iomgr\endpoint_tests.h" />
<ClInclude Include="$(SolutionDir)\..\test\core\util\grpc_profiler.h" />
<ClInclude Include="$(SolutionDir)\..\test\core\util\mock_endpoint.h" />
<ClInclude Include="$(SolutionDir)\..\test\core\util\parse_hexstring.h" />
<ClInclude Include="$(SolutionDir)\..\test\core\util\port.h" />
<ClInclude Include="$(SolutionDir)\..\test\core\util\port_server_client.h" />
@ -165,6 +166,8 @@
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\test\core\util\grpc_profiler.c">
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\test\core\util\mock_endpoint.c">
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\test\core\util\parse_hexstring.c">
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\test\core\util\port_posix.c">

@ -13,6 +13,9 @@
<ClCompile Include="$(SolutionDir)\..\test\core\util\grpc_profiler.c">
<Filter>test\core\util</Filter>
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\test\core\util\mock_endpoint.c">
<Filter>test\core\util</Filter>
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\test\core\util\parse_hexstring.c">
<Filter>test\core\util</Filter>
</ClCompile>
@ -42,6 +45,9 @@
<ClInclude Include="$(SolutionDir)\..\test\core\util\grpc_profiler.h">
<Filter>test\core\util</Filter>
</ClInclude>
<ClInclude Include="$(SolutionDir)\..\test\core\util\mock_endpoint.h">
<Filter>test\core\util</Filter>
</ClInclude>
<ClInclude Include="$(SolutionDir)\..\test\core\util\parse_hexstring.h">
<Filter>test\core\util</Filter>
</ClInclude>

Loading…
Cancel
Save