From 362ac1be0c8e01cbec3063bf8149bb8d7a0bb530 Mon Sep 17 00:00:00 2001 From: Yuchen Zeng Date: Tue, 13 Sep 2016 16:01:31 -0700 Subject: [PATCH 01/55] Fix gprc --- include/grpc++/impl/codegen/completion_queue.h | 2 +- include/grpc/impl/codegen/log.h | 2 +- include/grpc/impl/codegen/port_platform.h | 8 ++++---- include/grpc/support/string_util.h | 2 +- src/core/ext/census/census_log.h | 2 +- src/core/ext/census/mlog.h | 2 +- src/core/lib/iomgr/ev_epoll_linux.c | 2 +- src/ruby/ext/grpc/rb_grpc_imports.generated.h | 4 ++-- test/core/profiling/mark_timings.stp | 2 +- 9 files changed, 13 insertions(+), 13 deletions(-) diff --git a/include/grpc++/impl/codegen/completion_queue.h b/include/grpc++/impl/codegen/completion_queue.h index 78bc5ca481c..d5a409a0827 100644 --- a/include/grpc++/impl/codegen/completion_queue.h +++ b/include/grpc++/impl/codegen/completion_queue.h @@ -241,7 +241,7 @@ class ServerCompletionQueue : public CompletionQueue { private: bool is_frequently_polled_; friend class ServerBuilder; - /// \param is_frequently_polled Informs the GPRC library about whether the + /// \param is_frequently_polled Informs the GRPC library about whether the /// server completion queue would be actively polled (by calling Next() or /// AsyncNext()). By default all server completion queues are assumed to be /// frequently polled. diff --git a/include/grpc/impl/codegen/log.h b/include/grpc/impl/codegen/log.h index e5010c29da8..6687b1a0ef0 100644 --- a/include/grpc/impl/codegen/log.h +++ b/include/grpc/impl/codegen/log.h @@ -75,7 +75,7 @@ const char *gpr_log_severity_string(gpr_log_severity severity); /* Log a message. It's advised to use GPR_xxx above to generate the context * for each message */ GPRAPI void gpr_log(const char *file, int line, gpr_log_severity severity, - const char *format, ...) GPRC_PRINT_FORMAT_CHECK(4, 5); + const char *format, ...) GPR_PRINT_FORMAT_CHECK(4, 5); GPRAPI void gpr_log_message(const char *file, int line, gpr_log_severity severity, const char *message); diff --git a/include/grpc/impl/codegen/port_platform.h b/include/grpc/impl/codegen/port_platform.h index f97e386289b..d96bf0cf8e6 100644 --- a/include/grpc/impl/codegen/port_platform.h +++ b/include/grpc/impl/codegen/port_platform.h @@ -450,14 +450,14 @@ typedef unsigned __int64 uint64_t; #endif #endif -#ifndef GPRC_PRINT_FORMAT_CHECK +#ifndef GPR_PRINT_FORMAT_CHECK #ifdef __GNUC__ -#define GPRC_PRINT_FORMAT_CHECK(FORMAT_STR, ARGS) \ +#define GPR_PRINT_FORMAT_CHECK(FORMAT_STR, ARGS) \ __attribute__((format(printf, FORMAT_STR, ARGS))) #else -#define GPRC_PRINT_FORMAT_CHECK(FORMAT_STR, ARGS) +#define GPR_PRINT_FORMAT_CHECK(FORMAT_STR, ARGS) #endif -#endif /* GPRC_PRINT_FORMAT_CHECK */ +#endif /* GPR_PRINT_FORMAT_CHECK */ #if GPR_FORBID_UNREACHABLE_CODE #define GPR_UNREACHABLE_CODE(STATEMENT) diff --git a/include/grpc/support/string_util.h b/include/grpc/support/string_util.h index 952cbfc26b9..5ab983d15df 100644 --- a/include/grpc/support/string_util.h +++ b/include/grpc/support/string_util.h @@ -55,7 +55,7 @@ GPRAPI char *gpr_strdup(const char *src); On error, returns -1 and sets *strp to NULL. If the format string is bad, the result is undefined. */ GPRAPI int gpr_asprintf(char **strp, const char *format, ...) - GPRC_PRINT_FORMAT_CHECK(2, 3); + GPR_PRINT_FORMAT_CHECK(2, 3); #ifdef __cplusplus } diff --git a/src/core/ext/census/census_log.h b/src/core/ext/census/census_log.h index 534ecc5705a..1b185a53b93 100644 --- a/src/core/ext/census/census_log.h +++ b/src/core/ext/census/census_log.h @@ -84,7 +84,7 @@ const void *census_log_read_next(size_t *bytes_available); */ size_t census_log_remaining_space(void); -/* Returns the number of times gprc_stats_log_start_write() failed due to +/* Returns the number of times grpc_stats_log_start_write() failed due to out-of-space. */ int census_log_out_of_space_count(void); diff --git a/src/core/ext/census/mlog.h b/src/core/ext/census/mlog.h index a256426f91b..18805ad9940 100644 --- a/src/core/ext/census/mlog.h +++ b/src/core/ext/census/mlog.h @@ -88,7 +88,7 @@ const void* census_log_read_next(size_t* bytes_available); */ size_t census_log_remaining_space(void); -/* Returns the number of times gprc_stats_log_start_write() failed due to +/* Returns the number of times grpc_stats_log_start_write() failed due to out-of-space. */ int64_t census_log_out_of_space_count(void); diff --git a/src/core/lib/iomgr/ev_epoll_linux.c b/src/core/lib/iomgr/ev_epoll_linux.c index eba347125e3..3f72cc8c953 100644 --- a/src/core/lib/iomgr/ev_epoll_linux.c +++ b/src/core/lib/iomgr/ev_epoll_linux.c @@ -164,7 +164,7 @@ static void fd_global_shutdown(void); #define PI_ADD_REF(p, r) pi_add_ref((p)) #define PI_UNREF(exec_ctx, p, r) pi_unref((exec_ctx), (p)) -#endif /* !defined(GPRC_PI_REF_COUNT_DEBUG) */ +#endif /* !defined(GRPC_PI_REF_COUNT_DEBUG) */ typedef struct polling_island { gpr_mu mu; diff --git a/src/ruby/ext/grpc/rb_grpc_imports.generated.h b/src/ruby/ext/grpc/rb_grpc_imports.generated.h index a2f5b86497b..169ecb6a626 100644 --- a/src/ruby/ext/grpc/rb_grpc_imports.generated.h +++ b/src/ruby/ext/grpc/rb_grpc_imports.generated.h @@ -473,7 +473,7 @@ extern grpc_byte_buffer_reader_readall_type grpc_byte_buffer_reader_readall_impo typedef grpc_byte_buffer *(*grpc_raw_byte_buffer_from_reader_type)(grpc_byte_buffer_reader *reader); extern grpc_raw_byte_buffer_from_reader_type grpc_raw_byte_buffer_from_reader_import; #define grpc_raw_byte_buffer_from_reader grpc_raw_byte_buffer_from_reader_import -typedef void(*gpr_log_type)(const char *file, int line, gpr_log_severity severity, const char *format, ...) GPRC_PRINT_FORMAT_CHECK(4, 5); +typedef void(*gpr_log_type)(const char *file, int line, gpr_log_severity severity, const char *format, ...) GPR_PRINT_FORMAT_CHECK(4, 5); extern gpr_log_type gpr_log_import; #define gpr_log gpr_log_import typedef void(*gpr_log_message_type)(const char *file, int line, gpr_log_severity severity, const char *message); @@ -821,7 +821,7 @@ extern gpr_format_message_type gpr_format_message_import; typedef char *(*gpr_strdup_type)(const char *src); extern gpr_strdup_type gpr_strdup_import; #define gpr_strdup gpr_strdup_import -typedef int(*gpr_asprintf_type)(char **strp, const char *format, ...) GPRC_PRINT_FORMAT_CHECK(2, 3); +typedef int(*gpr_asprintf_type)(char **strp, const char *format, ...) GPR_PRINT_FORMAT_CHECK(2, 3); extern gpr_asprintf_type gpr_asprintf_import; #define gpr_asprintf gpr_asprintf_import typedef const char *(*gpr_subprocess_binary_extension_type)(); diff --git a/test/core/profiling/mark_timings.stp b/test/core/profiling/mark_timings.stp index 0c0a417faf7..d740582d278 100644 --- a/test/core/profiling/mark_timings.stp +++ b/test/core/profiling/mark_timings.stp @@ -2,7 +2,7 @@ * probe definition. * * For a statically build binary, that'd be the name of the binary itself. - * For dinamically built ones, point to the location of the libgprc.so being + * For dinamically built ones, point to the location of the libgrpc.so being * used. */ global starts, times, times_per_tag From aed2b683cc711778178287b117968aeee39b8998 Mon Sep 17 00:00:00 2001 From: Yuchen Zeng Date: Wed, 14 Sep 2016 19:05:40 -0700 Subject: [PATCH 02/55] Fix another typo --- test/core/profiling/mark_timings.stp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/core/profiling/mark_timings.stp b/test/core/profiling/mark_timings.stp index d740582d278..e96edbc149d 100644 --- a/test/core/profiling/mark_timings.stp +++ b/test/core/profiling/mark_timings.stp @@ -2,7 +2,7 @@ * probe definition. * * For a statically build binary, that'd be the name of the binary itself. - * For dinamically built ones, point to the location of the libgrpc.so being + * For dynamically built ones, point to the location of the libgrpc.so being * used. */ global starts, times, times_per_tag From 827c8efd265ac63285a1a322b4aa95bc5d68782e Mon Sep 17 00:00:00 2001 From: Yuchen Zeng Date: Thu, 15 Sep 2016 11:35:19 -0700 Subject: [PATCH 03/55] Fix include/grpc/support/log.h --- include/grpc/support/log.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/grpc/support/log.h b/include/grpc/support/log.h index 5acf17fc2c9..88346cc9f43 100644 --- a/include/grpc/support/log.h +++ b/include/grpc/support/log.h @@ -75,7 +75,7 @@ const char *gpr_log_severity_string(gpr_log_severity severity); /* Log a message. It's advised to use GPR_xxx above to generate the context * for each message */ GPRAPI void gpr_log(const char *file, int line, gpr_log_severity severity, - const char *format, ...) GPRC_PRINT_FORMAT_CHECK(4, 5); + const char *format, ...) GPR_PRINT_FORMAT_CHECK(4, 5); GPRAPI void gpr_log_message(const char *file, int line, gpr_log_severity severity, const char *message); From 929f4c652f5b57de016cb2cafbf81139cae30e3f Mon Sep 17 00:00:00 2001 From: Yuchen Zeng Date: Mon, 10 Oct 2016 16:02:43 -0700 Subject: [PATCH 04/55] Add tos configuration in channel args --- BUILD | 4 ++ CMakeLists.txt | 3 + Makefile | 40 +++++++++++ binding.gyp | 1 + build.yaml | 15 ++++ config.m4 | 1 + gRPC-Core.podspec | 1 + grpc.gemspec | 1 + include/grpc/impl/codegen/grpc_types.h | 2 + package.xml | 1 + .../chttp2/client/insecure/channel_create.c | 9 ++- .../client/secure/secure_channel_create.c | 12 +++- src/core/lib/http/httpcli.c | 11 ++- src/core/lib/iomgr/socket_utils_posix.h | 4 ++ src/core/lib/iomgr/socket_utils_tos_posix.c | 68 +++++++++++++++++++ src/core/lib/iomgr/tcp_client.h | 18 ++++- src/core/lib/iomgr/tcp_client_posix.c | 39 ++++++----- src/core/lib/iomgr/tcp_client_windows.c | 8 +-- src/python/grpcio/grpc_core_dependencies.py | 1 + test/core/end2end/fixtures/http_proxy.c | 11 ++- test/core/end2end/fuzzers/api_fuzzer.c | 14 ++-- test/core/iomgr/socket_utils_tos_test.c | 67 ++++++++++++++++++ test/core/iomgr/tcp_client_posix_test.c | 22 ++++-- tools/doxygen/Doxyfile.core.internal | 1 + tools/run_tests/sources_and_headers.json | 18 +++++ tools/run_tests/tests.json | 19 ++++++ vsprojects/vcxproj/grpc/grpc.vcxproj | 2 + vsprojects/vcxproj/grpc/grpc.vcxproj.filters | 3 + .../grpc_test_util/grpc_test_util.vcxproj | 2 + .../grpc_test_util.vcxproj.filters | 3 + .../grpc_unsecure/grpc_unsecure.vcxproj | 2 + .../grpc_unsecure.vcxproj.filters | 3 + 32 files changed, 358 insertions(+), 48 deletions(-) create mode 100644 src/core/lib/iomgr/socket_utils_tos_posix.c create mode 100644 test/core/iomgr/socket_utils_tos_test.c diff --git a/BUILD b/BUILD index bad6f3f0755..d2a4e70f614 100644 --- a/BUILD +++ b/BUILD @@ -366,6 +366,7 @@ cc_library( "src/core/lib/iomgr/socket_utils_common_posix.c", "src/core/lib/iomgr/socket_utils_linux.c", "src/core/lib/iomgr/socket_utils_posix.c", + "src/core/lib/iomgr/socket_utils_tos_posix.c", "src/core/lib/iomgr/socket_windows.c", "src/core/lib/iomgr/tcp_client_posix.c", "src/core/lib/iomgr/tcp_client_windows.c", @@ -752,6 +753,7 @@ cc_library( "src/core/lib/iomgr/socket_utils_common_posix.c", "src/core/lib/iomgr/socket_utils_linux.c", "src/core/lib/iomgr/socket_utils_posix.c", + "src/core/lib/iomgr/socket_utils_tos_posix.c", "src/core/lib/iomgr/socket_windows.c", "src/core/lib/iomgr/tcp_client_posix.c", "src/core/lib/iomgr/tcp_client_windows.c", @@ -1100,6 +1102,7 @@ cc_library( "src/core/lib/iomgr/socket_utils_common_posix.c", "src/core/lib/iomgr/socket_utils_linux.c", "src/core/lib/iomgr/socket_utils_posix.c", + "src/core/lib/iomgr/socket_utils_tos_posix.c", "src/core/lib/iomgr/socket_windows.c", "src/core/lib/iomgr/tcp_client_posix.c", "src/core/lib/iomgr/tcp_client_windows.c", @@ -1863,6 +1866,7 @@ objc_library( "src/core/lib/iomgr/socket_utils_common_posix.c", "src/core/lib/iomgr/socket_utils_linux.c", "src/core/lib/iomgr/socket_utils_posix.c", + "src/core/lib/iomgr/socket_utils_tos_posix.c", "src/core/lib/iomgr/socket_windows.c", "src/core/lib/iomgr/tcp_client_posix.c", "src/core/lib/iomgr/tcp_client_windows.c", diff --git a/CMakeLists.txt b/CMakeLists.txt index c4191521bd1..d88d9177524 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -333,6 +333,7 @@ add_library(grpc src/core/lib/iomgr/socket_utils_common_posix.c src/core/lib/iomgr/socket_utils_linux.c src/core/lib/iomgr/socket_utils_posix.c + src/core/lib/iomgr/socket_utils_tos_posix.c src/core/lib/iomgr/socket_windows.c src/core/lib/iomgr/tcp_client_posix.c src/core/lib/iomgr/tcp_client_windows.c @@ -592,6 +593,7 @@ add_library(grpc_cronet src/core/lib/iomgr/socket_utils_common_posix.c src/core/lib/iomgr/socket_utils_linux.c src/core/lib/iomgr/socket_utils_posix.c + src/core/lib/iomgr/socket_utils_tos_posix.c src/core/lib/iomgr/socket_windows.c src/core/lib/iomgr/tcp_client_posix.c src/core/lib/iomgr/tcp_client_windows.c @@ -823,6 +825,7 @@ add_library(grpc_unsecure src/core/lib/iomgr/socket_utils_common_posix.c src/core/lib/iomgr/socket_utils_linux.c src/core/lib/iomgr/socket_utils_posix.c + src/core/lib/iomgr/socket_utils_tos_posix.c src/core/lib/iomgr/socket_windows.c src/core/lib/iomgr/tcp_client_posix.c src/core/lib/iomgr/tcp_client_windows.c diff --git a/Makefile b/Makefile index 62c65822b0f..cd988b85557 100644 --- a/Makefile +++ b/Makefile @@ -1012,6 +1012,7 @@ set_initial_connect_string_test: $(BINDIR)/$(CONFIG)/set_initial_connect_string_ sockaddr_resolver_test: $(BINDIR)/$(CONFIG)/sockaddr_resolver_test sockaddr_utils_test: $(BINDIR)/$(CONFIG)/sockaddr_utils_test socket_utils_test: $(BINDIR)/$(CONFIG)/socket_utils_test +socket_utils_tos_test: $(BINDIR)/$(CONFIG)/socket_utils_tos_test tcp_client_posix_test: $(BINDIR)/$(CONFIG)/tcp_client_posix_test tcp_posix_test: $(BINDIR)/$(CONFIG)/tcp_posix_test tcp_server_posix_test: $(BINDIR)/$(CONFIG)/tcp_server_posix_test @@ -1328,6 +1329,7 @@ buildtests_c: privatelibs_c \ $(BINDIR)/$(CONFIG)/sockaddr_resolver_test \ $(BINDIR)/$(CONFIG)/sockaddr_utils_test \ $(BINDIR)/$(CONFIG)/socket_utils_test \ + $(BINDIR)/$(CONFIG)/socket_utils_tos_test \ $(BINDIR)/$(CONFIG)/tcp_client_posix_test \ $(BINDIR)/$(CONFIG)/tcp_posix_test \ $(BINDIR)/$(CONFIG)/tcp_server_posix_test \ @@ -1714,6 +1716,8 @@ test_c: buildtests_c $(Q) $(BINDIR)/$(CONFIG)/sockaddr_utils_test || ( echo test sockaddr_utils_test failed ; exit 1 ) $(E) "[RUN] Testing socket_utils_test" $(Q) $(BINDIR)/$(CONFIG)/socket_utils_test || ( echo test socket_utils_test failed ; exit 1 ) + $(E) "[RUN] Testing socket_utils_tos_test" + $(Q) $(BINDIR)/$(CONFIG)/socket_utils_tos_test || ( echo test socket_utils_tos_test failed ; exit 1 ) $(E) "[RUN] Testing tcp_client_posix_test" $(Q) $(BINDIR)/$(CONFIG)/tcp_client_posix_test || ( echo test tcp_client_posix_test failed ; exit 1 ) $(E) "[RUN] Testing tcp_posix_test" @@ -2577,6 +2581,7 @@ LIBGRPC_SRC = \ src/core/lib/iomgr/socket_utils_common_posix.c \ src/core/lib/iomgr/socket_utils_linux.c \ src/core/lib/iomgr/socket_utils_posix.c \ + src/core/lib/iomgr/socket_utils_tos_posix.c \ src/core/lib/iomgr/socket_windows.c \ src/core/lib/iomgr/tcp_client_posix.c \ src/core/lib/iomgr/tcp_client_windows.c \ @@ -2854,6 +2859,7 @@ LIBGRPC_CRONET_SRC = \ src/core/lib/iomgr/socket_utils_common_posix.c \ src/core/lib/iomgr/socket_utils_linux.c \ src/core/lib/iomgr/socket_utils_posix.c \ + src/core/lib/iomgr/socket_utils_tos_posix.c \ src/core/lib/iomgr/socket_windows.c \ src/core/lib/iomgr/tcp_client_posix.c \ src/core/lib/iomgr/tcp_client_windows.c \ @@ -3121,6 +3127,7 @@ LIBGRPC_TEST_UTIL_SRC = \ src/core/lib/iomgr/socket_utils_common_posix.c \ src/core/lib/iomgr/socket_utils_linux.c \ src/core/lib/iomgr/socket_utils_posix.c \ + src/core/lib/iomgr/socket_utils_tos_posix.c \ src/core/lib/iomgr/socket_windows.c \ src/core/lib/iomgr/tcp_client_posix.c \ src/core/lib/iomgr/tcp_client_windows.c \ @@ -3315,6 +3322,7 @@ LIBGRPC_UNSECURE_SRC = \ src/core/lib/iomgr/socket_utils_common_posix.c \ src/core/lib/iomgr/socket_utils_linux.c \ src/core/lib/iomgr/socket_utils_posix.c \ + src/core/lib/iomgr/socket_utils_tos_posix.c \ src/core/lib/iomgr/socket_windows.c \ src/core/lib/iomgr/tcp_client_posix.c \ src/core/lib/iomgr/tcp_client_windows.c \ @@ -10341,6 +10349,38 @@ endif endif +SOCKET_UTILS_TOS_TEST_SRC = \ + test/core/iomgr/socket_utils_tos_test.c \ + +SOCKET_UTILS_TOS_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(SOCKET_UTILS_TOS_TEST_SRC)))) +ifeq ($(NO_SECURE),true) + +# You can't build secure targets if you don't have OpenSSL. + +$(BINDIR)/$(CONFIG)/socket_utils_tos_test: openssl_dep_error + +else + + + +$(BINDIR)/$(CONFIG)/socket_utils_tos_test: $(SOCKET_UTILS_TOS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a + $(E) "[LD] Linking $@" + $(Q) mkdir -p `dirname $@` + $(Q) $(LD) $(LDFLAGS) $(SOCKET_UTILS_TOS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/socket_utils_tos_test + +endif + +$(OBJDIR)/$(CONFIG)/test/core/iomgr/socket_utils_tos_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a + +deps_socket_utils_tos_test: $(SOCKET_UTILS_TOS_TEST_OBJS:.o=.dep) + +ifneq ($(NO_SECURE),true) +ifneq ($(NO_DEPS),true) +-include $(SOCKET_UTILS_TOS_TEST_OBJS:.o=.dep) +endif +endif + + TCP_CLIENT_POSIX_TEST_SRC = \ test/core/iomgr/tcp_client_posix_test.c \ diff --git a/binding.gyp b/binding.gyp index 58edda2e63e..fd2bed86b04 100644 --- a/binding.gyp +++ b/binding.gyp @@ -608,6 +608,7 @@ 'src/core/lib/iomgr/socket_utils_common_posix.c', 'src/core/lib/iomgr/socket_utils_linux.c', 'src/core/lib/iomgr/socket_utils_posix.c', + 'src/core/lib/iomgr/socket_utils_tos_posix.c', 'src/core/lib/iomgr/socket_windows.c', 'src/core/lib/iomgr/tcp_client_posix.c', 'src/core/lib/iomgr/tcp_client_windows.c', diff --git a/build.yaml b/build.yaml index 584084ff865..857ef6c8ee6 100644 --- a/build.yaml +++ b/build.yaml @@ -293,6 +293,7 @@ filegroups: - src/core/lib/iomgr/socket_utils_common_posix.c - src/core/lib/iomgr/socket_utils_linux.c - src/core/lib/iomgr/socket_utils_posix.c + - src/core/lib/iomgr/socket_utils_tos_posix.c - src/core/lib/iomgr/socket_windows.c - src/core/lib/iomgr/tcp_client_posix.c - src/core/lib/iomgr/tcp_client_windows.c @@ -2437,6 +2438,20 @@ targets: - mac - linux - posix +- name: socket_utils_tos_test + build: test + language: c + src: + - test/core/iomgr/socket_utils_tos_test.c + deps: + - grpc_test_util + - grpc + - gpr_test_util + - gpr + platforms: + - mac + - linux + - posix - name: tcp_client_posix_test cpu_cost: 0.5 build: test diff --git a/config.m4 b/config.m4 index 0f103655a84..7012fb0c54d 100644 --- a/config.m4 +++ b/config.m4 @@ -127,6 +127,7 @@ if test "$PHP_GRPC" != "no"; then src/core/lib/iomgr/socket_utils_common_posix.c \ src/core/lib/iomgr/socket_utils_linux.c \ src/core/lib/iomgr/socket_utils_posix.c \ + src/core/lib/iomgr/socket_utils_tos_posix.c \ src/core/lib/iomgr/socket_windows.c \ src/core/lib/iomgr/tcp_client_posix.c \ src/core/lib/iomgr/tcp_client_windows.c \ diff --git a/gRPC-Core.podspec b/gRPC-Core.podspec index 6886bdfb5aa..7b74143f415 100644 --- a/gRPC-Core.podspec +++ b/gRPC-Core.podspec @@ -457,6 +457,7 @@ Pod::Spec.new do |s| 'src/core/lib/iomgr/socket_utils_common_posix.c', 'src/core/lib/iomgr/socket_utils_linux.c', 'src/core/lib/iomgr/socket_utils_posix.c', + 'src/core/lib/iomgr/socket_utils_tos_posix.c', 'src/core/lib/iomgr/socket_windows.c', 'src/core/lib/iomgr/tcp_client_posix.c', 'src/core/lib/iomgr/tcp_client_windows.c', diff --git a/grpc.gemspec b/grpc.gemspec index 6079ea2aef5..23537983552 100755 --- a/grpc.gemspec +++ b/grpc.gemspec @@ -377,6 +377,7 @@ Gem::Specification.new do |s| s.files += %w( src/core/lib/iomgr/socket_utils_common_posix.c ) s.files += %w( src/core/lib/iomgr/socket_utils_linux.c ) s.files += %w( src/core/lib/iomgr/socket_utils_posix.c ) + s.files += %w( src/core/lib/iomgr/socket_utils_tos_posix.c ) s.files += %w( src/core/lib/iomgr/socket_windows.c ) s.files += %w( src/core/lib/iomgr/tcp_client_posix.c ) s.files += %w( src/core/lib/iomgr/tcp_client_windows.c ) diff --git a/include/grpc/impl/codegen/grpc_types.h b/include/grpc/impl/codegen/grpc_types.h index 07e7cff2016..1b93729b721 100644 --- a/include/grpc/impl/codegen/grpc_types.h +++ b/include/grpc/impl/codegen/grpc_types.h @@ -201,6 +201,8 @@ typedef struct { #define GRPC_ARG_MAX_METADATA_SIZE "grpc.max_metadata_size" /** If non-zero, allow the use of SO_REUSEPORT if it's available (default 1) */ #define GRPC_ARG_ALLOW_REUSEPORT "grpc.so_reuseport" +/** The Type-Of-Service (TOS), in bytes. */ +#define GRPC_ARG_TOS "grpc.tos" /** \} */ /** Result of a grpc call. If the caller satisfies the prerequisites of a diff --git a/package.xml b/package.xml index 7bac6957871..489504c43f6 100644 --- a/package.xml +++ b/package.xml @@ -384,6 +384,7 @@ + diff --git a/src/core/ext/transport/chttp2/client/insecure/channel_create.c b/src/core/ext/transport/chttp2/client/insecure/channel_create.c index c2b59569fd3..858b1dbee00 100644 --- a/src/core/ext/transport/chttp2/client/insecure/channel_create.c +++ b/src/core/ext/transport/chttp2/client/insecure/channel_create.c @@ -142,6 +142,7 @@ static void connector_connect(grpc_exec_ctx *exec_ctx, grpc_connector *con, grpc_connect_out_args *result, grpc_closure *notify) { connector *c = (connector *)con; + grpc_tcp_client_connect_args tcp_client_connect_args; GPR_ASSERT(c->notify == NULL); GPR_ASSERT(notify->cb); c->notify = notify; @@ -149,9 +150,13 @@ static void connector_connect(grpc_exec_ctx *exec_ctx, grpc_connector *con, c->result = result; c->tcp = NULL; grpc_closure_init(&c->connected, connected, c); + tcp_client_connect_args.interested_parties = args->interested_parties; + tcp_client_connect_args.addr = args->addr; + tcp_client_connect_args.addr_len = args->addr_len; + tcp_client_connect_args.deadline = args->deadline; + tcp_client_connect_args.channel_args = args->channel_args; grpc_tcp_client_connect(exec_ctx, &c->connected, &c->tcp, - args->interested_parties, args->addr, args->addr_len, - args->deadline); + &tcp_client_connect_args); } static const grpc_connector_vtable connector_vtable = { diff --git a/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c b/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c index 31c54ff74c6..d71d9f2d52b 100644 --- a/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c +++ b/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c @@ -200,6 +200,7 @@ static void connector_connect(grpc_exec_ctx *exec_ctx, grpc_connector *con, grpc_connect_out_args *result, grpc_closure *notify) { connector *c = (connector *)con; + grpc_tcp_client_connect_args tcp_client_connect_args; GPR_ASSERT(c->notify == NULL); c->notify = notify; c->args = *args; @@ -208,9 +209,14 @@ static void connector_connect(grpc_exec_ctx *exec_ctx, grpc_connector *con, GPR_ASSERT(c->connecting_endpoint == NULL); gpr_mu_unlock(&c->mu); grpc_closure_init(&c->connected_closure, connected, c); - grpc_tcp_client_connect( - exec_ctx, &c->connected_closure, &c->newly_connecting_endpoint, - args->interested_parties, args->addr, args->addr_len, args->deadline); + tcp_client_connect_args.interested_parties = args->interested_parties; + tcp_client_connect_args.addr = args->addr; + tcp_client_connect_args.addr_len = args->addr_len; + tcp_client_connect_args.deadline = args->deadline; + tcp_client_connect_args.channel_args = args->channel_args; + grpc_tcp_client_connect(exec_ctx, &c->connected_closure, + &c->newly_connecting_endpoint, + &tcp_client_connect_args); } static const grpc_connector_vtable connector_vtable = { diff --git a/src/core/lib/http/httpcli.c b/src/core/lib/http/httpcli.c index 7f3c2d120d1..c56fae6d0c1 100644 --- a/src/core/lib/http/httpcli.c +++ b/src/core/lib/http/httpcli.c @@ -213,6 +213,7 @@ static void on_connected(grpc_exec_ctx *exec_ctx, void *arg, static void next_address(grpc_exec_ctx *exec_ctx, internal_request *req, grpc_error *error) { grpc_resolved_address *addr; + grpc_tcp_client_connect_args tcp_client_connect_args; if (error != GRPC_ERROR_NONE) { append_error(req, error); } @@ -224,9 +225,13 @@ static void next_address(grpc_exec_ctx *exec_ctx, internal_request *req, } addr = &req->addresses->addrs[req->next_address++]; grpc_closure_init(&req->connected, on_connected, req); - grpc_tcp_client_connect( - exec_ctx, &req->connected, &req->ep, req->context->pollset_set, - (struct sockaddr *)&addr->addr, addr->len, req->deadline); + tcp_client_connect_args.interested_parties = req->context->pollset_set; + tcp_client_connect_args.addr = (struct sockaddr *)&addr->addr; + tcp_client_connect_args.addr_len = addr->len; + tcp_client_connect_args.deadline = req->deadline; + tcp_client_connect_args.channel_args = NULL; + grpc_tcp_client_connect(exec_ctx, &req->connected, &req->ep, + &tcp_client_connect_args); } static void on_resolved(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { diff --git a/src/core/lib/iomgr/socket_utils_posix.h b/src/core/lib/iomgr/socket_utils_posix.h index 7bcc2219aea..bf4cc96af2b 100644 --- a/src/core/lib/iomgr/socket_utils_posix.h +++ b/src/core/lib/iomgr/socket_utils_posix.h @@ -37,6 +37,7 @@ #include #include +#include #include "src/core/lib/iomgr/error.h" /* a wrapper for accept or accept4 */ @@ -86,6 +87,9 @@ grpc_error *grpc_set_socket_sndbuf(int fd, int buffer_size_bytes); /* Tries to set the socket's receive buffer to given size. */ grpc_error *grpc_set_socket_rcvbuf(int fd, int buffer_size_bytes); +/* Tries to set the socket's type to service */ +grpc_error *grpc_set_socket_tos(int fd, grpc_arg *arg); + /* An enum to keep track of IPv4/IPv6 socket modes. Currently, this information is only used when a socket is first created, but diff --git a/src/core/lib/iomgr/socket_utils_tos_posix.c b/src/core/lib/iomgr/socket_utils_tos_posix.c new file mode 100644 index 00000000000..603ad3c421d --- /dev/null +++ b/src/core/lib/iomgr/socket_utils_tos_posix.c @@ -0,0 +1,68 @@ +/* + * + * 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 + +#ifdef GPR_POSIX_SOCKET + +#include "src/core/lib/iomgr/socket_utils_posix.h" + +#include +#include +#include + +#include +#include + +grpc_error* grpc_set_socket_tos(int fd, grpc_arg* arg) { + int newval; + socklen_t intlen = sizeof(newval); + + GPR_ASSERT(0 == strcmp(arg->key, GRPC_ARG_TOS)); + GPR_ASSERT(arg->type == GRPC_ARG_INTEGER); + + if (0 != setsockopt(fd, IPPROTO_IP, IP_TOS, &arg->value.integer, + sizeof(arg->value.integer))) { + return GRPC_OS_ERROR(errno, "setsockopt(IP_TOS)"); + } + if (0 != getsockopt(fd, IPPROTO_IP, IP_TOS, &newval, &intlen)) { + return GRPC_OS_ERROR(errno, "getsockopt(IP_TOS)"); + } + if (newval != arg->value.integer) { + return GRPC_ERROR_CREATE("Failed to set IP_TOS"); + } + + return GRPC_ERROR_NONE; +} + +#endif diff --git a/src/core/lib/iomgr/tcp_client.h b/src/core/lib/iomgr/tcp_client.h index a07e0b9f0cb..215c2fbe5b5 100644 --- a/src/core/lib/iomgr/tcp_client.h +++ b/src/core/lib/iomgr/tcp_client.h @@ -34,11 +34,25 @@ #ifndef GRPC_CORE_LIB_IOMGR_TCP_CLIENT_H #define GRPC_CORE_LIB_IOMGR_TCP_CLIENT_H +#include #include #include "src/core/lib/iomgr/endpoint.h" #include "src/core/lib/iomgr/pollset_set.h" #include "src/core/lib/iomgr/sockaddr.h" +/** arguments for a tcp client connection */ +typedef struct { + /** set of pollsets interested in this connection */ + grpc_pollset_set *interested_parties; + /** address to connect to */ + const struct sockaddr *addr; + size_t addr_len; + /** deadline for connection */ + gpr_timespec deadline; + /** channel arguments */ + const grpc_channel_args *channel_args; +} grpc_tcp_client_connect_args; + /* Asynchronously connect to an address (specified as (addr, len)), and call cb with arg and the completed connection when done (or call cb with arg and NULL on failure). @@ -46,8 +60,6 @@ in this connection being established (in order to continue their work) */ void grpc_tcp_client_connect(grpc_exec_ctx *exec_ctx, grpc_closure *on_connect, grpc_endpoint **endpoint, - grpc_pollset_set *interested_parties, - const struct sockaddr *addr, size_t addr_len, - gpr_timespec deadline); + const grpc_tcp_client_connect_args *args); #endif /* GRPC_CORE_LIB_IOMGR_TCP_CLIENT_H */ diff --git a/src/core/lib/iomgr/tcp_client_posix.c b/src/core/lib/iomgr/tcp_client_posix.c index 3496b6094f2..1439efe706f 100644 --- a/src/core/lib/iomgr/tcp_client_posix.c +++ b/src/core/lib/iomgr/tcp_client_posix.c @@ -71,7 +71,8 @@ typedef struct { grpc_closure *closure; } async_connect; -static grpc_error *prepare_socket(const struct sockaddr *addr, int fd) { +static grpc_error *prepare_socket(const struct sockaddr *addr, int fd, + const grpc_channel_args *channel_args) { grpc_error *err = GRPC_ERROR_NONE; GPR_ASSERT(fd >= 0); @@ -86,6 +87,15 @@ static grpc_error *prepare_socket(const struct sockaddr *addr, int fd) { } err = grpc_set_socket_no_sigpipe_if_possible(fd); if (err != GRPC_ERROR_NONE) goto error; + if (channel_args) { + for (size_t i = 0; i < channel_args->num_args; i++) { + if (0 == strcmp(channel_args->args[i].key, GRPC_ARG_TOS)) { + err = grpc_set_socket_tos(fd, &channel_args->args[i]); + if (err != GRPC_ERROR_NONE) goto error; + break; + } + } + } goto done; error: @@ -222,9 +232,7 @@ finish: static void tcp_client_connect_impl(grpc_exec_ctx *exec_ctx, grpc_closure *closure, grpc_endpoint **ep, - grpc_pollset_set *interested_parties, - const struct sockaddr *addr, - size_t addr_len, gpr_timespec deadline) { + const grpc_tcp_client_connect_args *args) { int fd; grpc_dualstack_mode dsmode; int err; @@ -235,6 +243,8 @@ static void tcp_client_connect_impl(grpc_exec_ctx *exec_ctx, char *name; char *addr_str; grpc_error *error; + const struct sockaddr *addr = args->addr; + size_t addr_len = args->addr_len; *ep = NULL; @@ -255,7 +265,8 @@ static void tcp_client_connect_impl(grpc_exec_ctx *exec_ctx, addr = (struct sockaddr *)&addr4_copy; addr_len = sizeof(addr4_copy); } - if ((error = prepare_socket(addr, fd)) != GRPC_ERROR_NONE) { + if ((error = prepare_socket(addr, fd, args->channel_args)) != + GRPC_ERROR_NONE) { grpc_exec_ctx_sched(exec_ctx, closure, error, NULL); return; } @@ -283,13 +294,13 @@ static void tcp_client_connect_impl(grpc_exec_ctx *exec_ctx, goto done; } - grpc_pollset_set_add_fd(exec_ctx, interested_parties, fdobj); + grpc_pollset_set_add_fd(exec_ctx, args->interested_parties, fdobj); ac = gpr_malloc(sizeof(async_connect)); ac->closure = closure; ac->ep = ep; ac->fd = fdobj; - ac->interested_parties = interested_parties; + ac->interested_parties = args->interested_parties; ac->addr_str = addr_str; addr_str = NULL; gpr_mu_init(&ac->mu); @@ -304,7 +315,7 @@ static void tcp_client_connect_impl(grpc_exec_ctx *exec_ctx, gpr_mu_lock(&ac->mu); grpc_timer_init(exec_ctx, &ac->alarm, - gpr_convert_clock_type(deadline, GPR_CLOCK_MONOTONIC), + gpr_convert_clock_type(args->deadline, GPR_CLOCK_MONOTONIC), tc_on_alarm, ac, gpr_now(GPR_CLOCK_MONOTONIC)); grpc_fd_notify_on_write(exec_ctx, ac->fd, &ac->write_closure); gpr_mu_unlock(&ac->mu); @@ -316,17 +327,13 @@ done: // overridden by api_fuzzer.c void (*grpc_tcp_client_connect_impl)( - grpc_exec_ctx *exec_ctx, grpc_closure *closure, grpc_endpoint **ep, - grpc_pollset_set *interested_parties, const struct sockaddr *addr, - size_t addr_len, gpr_timespec deadline) = tcp_client_connect_impl; + grpc_exec_ctx *exec_ctx, grpc_closure *on_connect, grpc_endpoint **endpoint, + const grpc_tcp_client_connect_args *args) = tcp_client_connect_impl; void grpc_tcp_client_connect(grpc_exec_ctx *exec_ctx, grpc_closure *closure, grpc_endpoint **ep, - grpc_pollset_set *interested_parties, - const struct sockaddr *addr, size_t addr_len, - gpr_timespec deadline) { - grpc_tcp_client_connect_impl(exec_ctx, closure, ep, interested_parties, addr, - addr_len, deadline); + const grpc_tcp_client_connect_args *args) { + grpc_tcp_client_connect_impl(exec_ctx, closure, ep, args); } #endif diff --git a/src/core/lib/iomgr/tcp_client_windows.c b/src/core/lib/iomgr/tcp_client_windows.c index 562cb9c6bff..b4517b3bdb0 100644 --- a/src/core/lib/iomgr/tcp_client_windows.c +++ b/src/core/lib/iomgr/tcp_client_windows.c @@ -128,9 +128,7 @@ static void on_connect(grpc_exec_ctx *exec_ctx, void *acp, grpc_error *error) { notification request for the connection, and one timeout alert. */ void grpc_tcp_client_connect(grpc_exec_ctx *exec_ctx, grpc_closure *on_done, grpc_endpoint **endpoint, - grpc_pollset_set *interested_parties, - const struct sockaddr *addr, size_t addr_len, - gpr_timespec deadline) { + const grpc_tcp_client_connect_args *args) { SOCKET sock = INVALID_SOCKET; BOOL success; int status; @@ -143,6 +141,8 @@ void grpc_tcp_client_connect(grpc_exec_ctx *exec_ctx, grpc_closure *on_done, DWORD ioctl_num_bytes; grpc_winsocket_callback_info *info; grpc_error *error = GRPC_ERROR_NONE; + const struct sockaddr *addr = args->addr; + size_t addr_len = args->addr_len; *endpoint = NULL; @@ -208,7 +208,7 @@ void grpc_tcp_client_connect(grpc_exec_ctx *exec_ctx, grpc_closure *on_done, ac->endpoint = endpoint; grpc_closure_init(&ac->on_connect, on_connect, ac); - grpc_timer_init(exec_ctx, &ac->alarm, deadline, on_alarm, ac, + grpc_timer_init(exec_ctx, &ac->alarm, args->deadline, on_alarm, ac, gpr_now(GPR_CLOCK_MONOTONIC)); grpc_socket_notify_on_write(exec_ctx, socket, &ac->on_connect); return; diff --git a/src/python/grpcio/grpc_core_dependencies.py b/src/python/grpcio/grpc_core_dependencies.py index 2bebf48c70a..dec578edb5c 100644 --- a/src/python/grpcio/grpc_core_dependencies.py +++ b/src/python/grpcio/grpc_core_dependencies.py @@ -121,6 +121,7 @@ CORE_SOURCE_FILES = [ 'src/core/lib/iomgr/socket_utils_common_posix.c', 'src/core/lib/iomgr/socket_utils_linux.c', 'src/core/lib/iomgr/socket_utils_posix.c', + 'src/core/lib/iomgr/socket_utils_tos_posix.c', 'src/core/lib/iomgr/socket_windows.c', 'src/core/lib/iomgr/tcp_client_posix.c', 'src/core/lib/iomgr/tcp_client_windows.c', diff --git a/test/core/end2end/fixtures/http_proxy.c b/test/core/end2end/fixtures/http_proxy.c index 22533b9694c..d0bd452a04b 100644 --- a/test/core/end2end/fixtures/http_proxy.c +++ b/test/core/end2end/fixtures/http_proxy.c @@ -356,10 +356,15 @@ static void on_read_request_done(grpc_exec_ctx* exec_ctx, void* arg, // The connection callback inherits our reference to conn. const gpr_timespec deadline = gpr_time_add( gpr_now(GPR_CLOCK_MONOTONIC), gpr_time_from_seconds(10, GPR_TIMESPAN)); + grpc_tcp_client_connect_args tcp_client_connect_args; + tcp_client_connect_args.interested_parties = conn->pollset_set; + tcp_client_connect_args.addr = + (struct sockaddr*)&resolved_addresses->addrs[0].addr; + tcp_client_connect_args.addr_len = resolved_addresses->addrs[0].len; + tcp_client_connect_args.deadline = deadline; + tcp_client_connect_args.channel_args = NULL; grpc_tcp_client_connect(exec_ctx, &conn->on_server_connect_done, - &conn->server_endpoint, conn->pollset_set, - (struct sockaddr*)&resolved_addresses->addrs[0].addr, - resolved_addresses->addrs[0].len, deadline); + &conn->server_endpoint, &tcp_client_connect_args); grpc_resolved_addresses_destroy(resolved_addresses); } diff --git a/test/core/end2end/fuzzers/api_fuzzer.c b/test/core/end2end/fuzzers/api_fuzzer.c index 96ea82d95ea..5c0fb0f9385 100644 --- a/test/core/end2end/fuzzers/api_fuzzer.c +++ b/test/core/end2end/fuzzers/api_fuzzer.c @@ -229,10 +229,10 @@ void my_resolve_address(grpc_exec_ctx *exec_ctx, const char *addr, // client connection // defined in tcp_client_posix.c -extern void (*grpc_tcp_client_connect_impl)( - grpc_exec_ctx *exec_ctx, grpc_closure *closure, grpc_endpoint **ep, - grpc_pollset_set *interested_parties, const struct sockaddr *addr, - size_t addr_len, gpr_timespec deadline); +extern void (*grpc_tcp_client_connect_impl)(grpc_exec_ctx *exec_ctx, + grpc_closure *closure, + grpc_endpoint **ep, + grpc_tcp_client_connect_args *args); static void sched_connect(grpc_exec_ctx *exec_ctx, grpc_closure *closure, grpc_endpoint **ep, gpr_timespec deadline); @@ -288,10 +288,8 @@ static void sched_connect(grpc_exec_ctx *exec_ctx, grpc_closure *closure, static void my_tcp_client_connect(grpc_exec_ctx *exec_ctx, grpc_closure *closure, grpc_endpoint **ep, - grpc_pollset_set *interested_parties, - const struct sockaddr *addr, size_t addr_len, - gpr_timespec deadline) { - sched_connect(exec_ctx, closure, ep, deadline); + grpc_tcp_client_connect_args *args) { + sched_connect(exec_ctx, closure, ep, args->deadline); } //////////////////////////////////////////////////////////////////////////////// diff --git a/test/core/iomgr/socket_utils_tos_test.c b/test/core/iomgr/socket_utils_tos_test.c new file mode 100644 index 00000000000..ee3a43367b8 --- /dev/null +++ b/test/core/iomgr/socket_utils_tos_test.c @@ -0,0 +1,67 @@ +/* + * + * 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 +#include "src/core/lib/iomgr/socket_utils_posix.h" + +#include +#include +#include + +#include +#include "test/core/util/test_config.h" + +int main(int argc, char **argv) { + int sock; + grpc_arg tos_arg; + grpc_test_init(argc, argv); + + sock = socket(PF_INET, SOCK_STREAM, 0); + GPR_ASSERT(sock > 0); + + tos_arg.key = GRPC_ARG_TOS; + tos_arg.type = GRPC_ARG_INTEGER; + tos_arg.value.integer = IPTOS_LOWDELAY; + GPR_ASSERT( + GRPC_LOG_IF_ERROR("set_socket_tos", grpc_set_socket_tos(sock, &tos_arg))); + tos_arg.value.integer = IPTOS_THROUGHPUT; + GPR_ASSERT( + GRPC_LOG_IF_ERROR("set_socket_tos", grpc_set_socket_tos(sock, &tos_arg))); + tos_arg.value.integer = IPTOS_RELIABILITY; + GPR_ASSERT( + GRPC_LOG_IF_ERROR("set_socket_tos", grpc_set_socket_tos(sock, &tos_arg))); + + close(sock); + + return 0; +} diff --git a/test/core/iomgr/tcp_client_posix_test.c b/test/core/iomgr/tcp_client_posix_test.c index d0c10474239..aec4192ce50 100644 --- a/test/core/iomgr/tcp_client_posix_test.c +++ b/test/core/iomgr/tcp_client_posix_test.c @@ -92,6 +92,7 @@ void test_succeeds(void) { int connections_complete_before; grpc_closure done; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_tcp_client_connect_args tcp_client_connect_args; gpr_log(GPR_DEBUG, "test_succeeds"); @@ -111,9 +112,13 @@ void test_succeeds(void) { /* connect to it */ GPR_ASSERT(getsockname(svr_fd, (struct sockaddr *)&addr, &addr_len) == 0); grpc_closure_init(&done, must_succeed, NULL); - grpc_tcp_client_connect(&exec_ctx, &done, &g_connecting, g_pollset_set, - (struct sockaddr *)&addr, addr_len, - gpr_inf_future(GPR_CLOCK_REALTIME)); + tcp_client_connect_args.interested_parties = g_pollset_set; + tcp_client_connect_args.addr = (struct sockaddr *)&addr; + tcp_client_connect_args.addr_len = addr_len; + tcp_client_connect_args.deadline = gpr_inf_future(GPR_CLOCK_REALTIME); + tcp_client_connect_args.channel_args = NULL; + grpc_tcp_client_connect(&exec_ctx, &done, &g_connecting, + &tcp_client_connect_args); /* await the connection */ do { @@ -148,6 +153,7 @@ void test_fails(void) { int connections_complete_before; grpc_closure done; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_tcp_client_connect_args tcp_client_connect_args; gpr_log(GPR_DEBUG, "test_fails"); @@ -160,9 +166,13 @@ void test_fails(void) { /* connect to a broken address */ grpc_closure_init(&done, must_fail, NULL); - grpc_tcp_client_connect(&exec_ctx, &done, &g_connecting, g_pollset_set, - (struct sockaddr *)&addr, addr_len, - gpr_inf_future(GPR_CLOCK_REALTIME)); + tcp_client_connect_args.interested_parties = g_pollset_set; + tcp_client_connect_args.addr = (struct sockaddr *)&addr; + tcp_client_connect_args.addr_len = addr_len; + tcp_client_connect_args.deadline = gpr_inf_future(GPR_CLOCK_REALTIME); + tcp_client_connect_args.channel_args = NULL; + grpc_tcp_client_connect(&exec_ctx, &done, &g_connecting, + &tcp_client_connect_args); gpr_mu_lock(g_mu); diff --git a/tools/doxygen/Doxyfile.core.internal b/tools/doxygen/Doxyfile.core.internal index 44f147aeb18..59998f03fba 100644 --- a/tools/doxygen/Doxyfile.core.internal +++ b/tools/doxygen/Doxyfile.core.internal @@ -994,6 +994,7 @@ src/core/lib/iomgr/sockaddr_utils.c \ src/core/lib/iomgr/socket_utils_common_posix.c \ src/core/lib/iomgr/socket_utils_linux.c \ src/core/lib/iomgr/socket_utils_posix.c \ +src/core/lib/iomgr/socket_utils_tos_posix.c \ src/core/lib/iomgr/socket_windows.c \ src/core/lib/iomgr/tcp_client_posix.c \ src/core/lib/iomgr/tcp_client_windows.c \ diff --git a/tools/run_tests/sources_and_headers.json b/tools/run_tests/sources_and_headers.json index c05d194e19e..5ecb3ee0f87 100644 --- a/tools/run_tests/sources_and_headers.json +++ b/tools/run_tests/sources_and_headers.json @@ -1858,6 +1858,23 @@ "third_party": false, "type": "target" }, + { + "deps": [ + "gpr", + "gpr_test_util", + "grpc", + "grpc_test_util" + ], + "headers": [], + "is_filegroup": false, + "language": "c", + "name": "socket_utils_tos_test", + "src": [ + "test/core/iomgr/socket_utils_tos_test.c" + ], + "third_party": false, + "type": "target" + }, { "deps": [ "gpr", @@ -6533,6 +6550,7 @@ "src/core/lib/iomgr/socket_utils_linux.c", "src/core/lib/iomgr/socket_utils_posix.c", "src/core/lib/iomgr/socket_utils_posix.h", + "src/core/lib/iomgr/socket_utils_tos_posix.c", "src/core/lib/iomgr/socket_windows.c", "src/core/lib/iomgr/socket_windows.h", "src/core/lib/iomgr/tcp_client.h", diff --git a/tools/run_tests/tests.json b/tools/run_tests/tests.json index c3395067c94..07b51d3c2f3 100644 --- a/tools/run_tests/tests.json +++ b/tools/run_tests/tests.json @@ -1819,6 +1819,25 @@ "posix" ] }, + { + "args": [], + "ci_platforms": [ + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "gtest": false, + "language": "c", + "name": "socket_utils_tos_test", + "platforms": [ + "linux", + "mac", + "posix" + ] + }, { "args": [], "ci_platforms": [ diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj b/vsprojects/vcxproj/grpc/grpc.vcxproj index 965d06d1d5c..f115001507f 100644 --- a/vsprojects/vcxproj/grpc/grpc.vcxproj +++ b/vsprojects/vcxproj/grpc/grpc.vcxproj @@ -549,6 +549,8 @@ + + diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters index dddd4ecce51..81dae475a1d 100644 --- a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters +++ b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters @@ -133,6 +133,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr diff --git a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj index b724c217ed4..da631cd0dc1 100644 --- a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj +++ b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj @@ -397,6 +397,8 @@ + + diff --git a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters index 92806fa04a2..b42b5ec68a7 100644 --- a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters +++ b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters @@ -187,6 +187,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr diff --git a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj index b46773632cb..921eaf3780d 100644 --- a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj +++ b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj @@ -517,6 +517,8 @@ + + diff --git a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters index 6ffc1eab708..c7d0106dc57 100644 --- a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters +++ b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters @@ -136,6 +136,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr From a4f708a4c4af88e114209eb29f625c4d4d935bb4 Mon Sep 17 00:00:00 2001 From: Yuchen Zeng Date: Tue, 11 Oct 2016 18:36:24 -0700 Subject: [PATCH 05/55] Introduce grpc_socket_mutator --- BUILD | 4 -- CMakeLists.txt | 3 - Makefile | 40 ----------- binding.gyp | 1 - build.yaml | 15 ---- config.m4 | 1 - gRPC-Core.podspec | 1 - grpc.gemspec | 1 - include/grpc/impl/codegen/grpc_types.h | 14 +++- package.xml | 1 - .../lib/iomgr/socket_utils_common_posix.c | 9 +++ src/core/lib/iomgr/socket_utils_posix.h | 4 +- src/core/lib/iomgr/socket_utils_tos_posix.c | 68 ------------------- src/core/lib/iomgr/tcp_client_posix.c | 7 +- src/python/grpcio/grpc_core_dependencies.py | 1 - test/core/iomgr/socket_utils_test.c | 48 +++++++++++++ test/core/iomgr/socket_utils_tos_test.c | 67 ------------------ tools/doxygen/Doxyfile.core.internal | 1 - tools/run_tests/sources_and_headers.json | 18 ----- tools/run_tests/tests.json | 19 ------ vsprojects/vcxproj/grpc/grpc.vcxproj | 2 - vsprojects/vcxproj/grpc/grpc.vcxproj.filters | 3 - .../grpc_test_util/grpc_test_util.vcxproj | 2 - .../grpc_test_util.vcxproj.filters | 3 - .../grpc_unsecure/grpc_unsecure.vcxproj | 2 - .../grpc_unsecure.vcxproj.filters | 3 - 26 files changed, 75 insertions(+), 263 deletions(-) delete mode 100644 src/core/lib/iomgr/socket_utils_tos_posix.c delete mode 100644 test/core/iomgr/socket_utils_tos_test.c diff --git a/BUILD b/BUILD index d2a4e70f614..bad6f3f0755 100644 --- a/BUILD +++ b/BUILD @@ -366,7 +366,6 @@ cc_library( "src/core/lib/iomgr/socket_utils_common_posix.c", "src/core/lib/iomgr/socket_utils_linux.c", "src/core/lib/iomgr/socket_utils_posix.c", - "src/core/lib/iomgr/socket_utils_tos_posix.c", "src/core/lib/iomgr/socket_windows.c", "src/core/lib/iomgr/tcp_client_posix.c", "src/core/lib/iomgr/tcp_client_windows.c", @@ -753,7 +752,6 @@ cc_library( "src/core/lib/iomgr/socket_utils_common_posix.c", "src/core/lib/iomgr/socket_utils_linux.c", "src/core/lib/iomgr/socket_utils_posix.c", - "src/core/lib/iomgr/socket_utils_tos_posix.c", "src/core/lib/iomgr/socket_windows.c", "src/core/lib/iomgr/tcp_client_posix.c", "src/core/lib/iomgr/tcp_client_windows.c", @@ -1102,7 +1100,6 @@ cc_library( "src/core/lib/iomgr/socket_utils_common_posix.c", "src/core/lib/iomgr/socket_utils_linux.c", "src/core/lib/iomgr/socket_utils_posix.c", - "src/core/lib/iomgr/socket_utils_tos_posix.c", "src/core/lib/iomgr/socket_windows.c", "src/core/lib/iomgr/tcp_client_posix.c", "src/core/lib/iomgr/tcp_client_windows.c", @@ -1866,7 +1863,6 @@ objc_library( "src/core/lib/iomgr/socket_utils_common_posix.c", "src/core/lib/iomgr/socket_utils_linux.c", "src/core/lib/iomgr/socket_utils_posix.c", - "src/core/lib/iomgr/socket_utils_tos_posix.c", "src/core/lib/iomgr/socket_windows.c", "src/core/lib/iomgr/tcp_client_posix.c", "src/core/lib/iomgr/tcp_client_windows.c", diff --git a/CMakeLists.txt b/CMakeLists.txt index d88d9177524..c4191521bd1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -333,7 +333,6 @@ add_library(grpc src/core/lib/iomgr/socket_utils_common_posix.c src/core/lib/iomgr/socket_utils_linux.c src/core/lib/iomgr/socket_utils_posix.c - src/core/lib/iomgr/socket_utils_tos_posix.c src/core/lib/iomgr/socket_windows.c src/core/lib/iomgr/tcp_client_posix.c src/core/lib/iomgr/tcp_client_windows.c @@ -593,7 +592,6 @@ add_library(grpc_cronet src/core/lib/iomgr/socket_utils_common_posix.c src/core/lib/iomgr/socket_utils_linux.c src/core/lib/iomgr/socket_utils_posix.c - src/core/lib/iomgr/socket_utils_tos_posix.c src/core/lib/iomgr/socket_windows.c src/core/lib/iomgr/tcp_client_posix.c src/core/lib/iomgr/tcp_client_windows.c @@ -825,7 +823,6 @@ add_library(grpc_unsecure src/core/lib/iomgr/socket_utils_common_posix.c src/core/lib/iomgr/socket_utils_linux.c src/core/lib/iomgr/socket_utils_posix.c - src/core/lib/iomgr/socket_utils_tos_posix.c src/core/lib/iomgr/socket_windows.c src/core/lib/iomgr/tcp_client_posix.c src/core/lib/iomgr/tcp_client_windows.c diff --git a/Makefile b/Makefile index cd988b85557..62c65822b0f 100644 --- a/Makefile +++ b/Makefile @@ -1012,7 +1012,6 @@ set_initial_connect_string_test: $(BINDIR)/$(CONFIG)/set_initial_connect_string_ sockaddr_resolver_test: $(BINDIR)/$(CONFIG)/sockaddr_resolver_test sockaddr_utils_test: $(BINDIR)/$(CONFIG)/sockaddr_utils_test socket_utils_test: $(BINDIR)/$(CONFIG)/socket_utils_test -socket_utils_tos_test: $(BINDIR)/$(CONFIG)/socket_utils_tos_test tcp_client_posix_test: $(BINDIR)/$(CONFIG)/tcp_client_posix_test tcp_posix_test: $(BINDIR)/$(CONFIG)/tcp_posix_test tcp_server_posix_test: $(BINDIR)/$(CONFIG)/tcp_server_posix_test @@ -1329,7 +1328,6 @@ buildtests_c: privatelibs_c \ $(BINDIR)/$(CONFIG)/sockaddr_resolver_test \ $(BINDIR)/$(CONFIG)/sockaddr_utils_test \ $(BINDIR)/$(CONFIG)/socket_utils_test \ - $(BINDIR)/$(CONFIG)/socket_utils_tos_test \ $(BINDIR)/$(CONFIG)/tcp_client_posix_test \ $(BINDIR)/$(CONFIG)/tcp_posix_test \ $(BINDIR)/$(CONFIG)/tcp_server_posix_test \ @@ -1716,8 +1714,6 @@ test_c: buildtests_c $(Q) $(BINDIR)/$(CONFIG)/sockaddr_utils_test || ( echo test sockaddr_utils_test failed ; exit 1 ) $(E) "[RUN] Testing socket_utils_test" $(Q) $(BINDIR)/$(CONFIG)/socket_utils_test || ( echo test socket_utils_test failed ; exit 1 ) - $(E) "[RUN] Testing socket_utils_tos_test" - $(Q) $(BINDIR)/$(CONFIG)/socket_utils_tos_test || ( echo test socket_utils_tos_test failed ; exit 1 ) $(E) "[RUN] Testing tcp_client_posix_test" $(Q) $(BINDIR)/$(CONFIG)/tcp_client_posix_test || ( echo test tcp_client_posix_test failed ; exit 1 ) $(E) "[RUN] Testing tcp_posix_test" @@ -2581,7 +2577,6 @@ LIBGRPC_SRC = \ src/core/lib/iomgr/socket_utils_common_posix.c \ src/core/lib/iomgr/socket_utils_linux.c \ src/core/lib/iomgr/socket_utils_posix.c \ - src/core/lib/iomgr/socket_utils_tos_posix.c \ src/core/lib/iomgr/socket_windows.c \ src/core/lib/iomgr/tcp_client_posix.c \ src/core/lib/iomgr/tcp_client_windows.c \ @@ -2859,7 +2854,6 @@ LIBGRPC_CRONET_SRC = \ src/core/lib/iomgr/socket_utils_common_posix.c \ src/core/lib/iomgr/socket_utils_linux.c \ src/core/lib/iomgr/socket_utils_posix.c \ - src/core/lib/iomgr/socket_utils_tos_posix.c \ src/core/lib/iomgr/socket_windows.c \ src/core/lib/iomgr/tcp_client_posix.c \ src/core/lib/iomgr/tcp_client_windows.c \ @@ -3127,7 +3121,6 @@ LIBGRPC_TEST_UTIL_SRC = \ src/core/lib/iomgr/socket_utils_common_posix.c \ src/core/lib/iomgr/socket_utils_linux.c \ src/core/lib/iomgr/socket_utils_posix.c \ - src/core/lib/iomgr/socket_utils_tos_posix.c \ src/core/lib/iomgr/socket_windows.c \ src/core/lib/iomgr/tcp_client_posix.c \ src/core/lib/iomgr/tcp_client_windows.c \ @@ -3322,7 +3315,6 @@ LIBGRPC_UNSECURE_SRC = \ src/core/lib/iomgr/socket_utils_common_posix.c \ src/core/lib/iomgr/socket_utils_linux.c \ src/core/lib/iomgr/socket_utils_posix.c \ - src/core/lib/iomgr/socket_utils_tos_posix.c \ src/core/lib/iomgr/socket_windows.c \ src/core/lib/iomgr/tcp_client_posix.c \ src/core/lib/iomgr/tcp_client_windows.c \ @@ -10349,38 +10341,6 @@ endif endif -SOCKET_UTILS_TOS_TEST_SRC = \ - test/core/iomgr/socket_utils_tos_test.c \ - -SOCKET_UTILS_TOS_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(SOCKET_UTILS_TOS_TEST_SRC)))) -ifeq ($(NO_SECURE),true) - -# You can't build secure targets if you don't have OpenSSL. - -$(BINDIR)/$(CONFIG)/socket_utils_tos_test: openssl_dep_error - -else - - - -$(BINDIR)/$(CONFIG)/socket_utils_tos_test: $(SOCKET_UTILS_TOS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a - $(E) "[LD] Linking $@" - $(Q) mkdir -p `dirname $@` - $(Q) $(LD) $(LDFLAGS) $(SOCKET_UTILS_TOS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/socket_utils_tos_test - -endif - -$(OBJDIR)/$(CONFIG)/test/core/iomgr/socket_utils_tos_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a - -deps_socket_utils_tos_test: $(SOCKET_UTILS_TOS_TEST_OBJS:.o=.dep) - -ifneq ($(NO_SECURE),true) -ifneq ($(NO_DEPS),true) --include $(SOCKET_UTILS_TOS_TEST_OBJS:.o=.dep) -endif -endif - - TCP_CLIENT_POSIX_TEST_SRC = \ test/core/iomgr/tcp_client_posix_test.c \ diff --git a/binding.gyp b/binding.gyp index fd2bed86b04..58edda2e63e 100644 --- a/binding.gyp +++ b/binding.gyp @@ -608,7 +608,6 @@ 'src/core/lib/iomgr/socket_utils_common_posix.c', 'src/core/lib/iomgr/socket_utils_linux.c', 'src/core/lib/iomgr/socket_utils_posix.c', - 'src/core/lib/iomgr/socket_utils_tos_posix.c', 'src/core/lib/iomgr/socket_windows.c', 'src/core/lib/iomgr/tcp_client_posix.c', 'src/core/lib/iomgr/tcp_client_windows.c', diff --git a/build.yaml b/build.yaml index 857ef6c8ee6..584084ff865 100644 --- a/build.yaml +++ b/build.yaml @@ -293,7 +293,6 @@ filegroups: - src/core/lib/iomgr/socket_utils_common_posix.c - src/core/lib/iomgr/socket_utils_linux.c - src/core/lib/iomgr/socket_utils_posix.c - - src/core/lib/iomgr/socket_utils_tos_posix.c - src/core/lib/iomgr/socket_windows.c - src/core/lib/iomgr/tcp_client_posix.c - src/core/lib/iomgr/tcp_client_windows.c @@ -2438,20 +2437,6 @@ targets: - mac - linux - posix -- name: socket_utils_tos_test - build: test - language: c - src: - - test/core/iomgr/socket_utils_tos_test.c - deps: - - grpc_test_util - - grpc - - gpr_test_util - - gpr - platforms: - - mac - - linux - - posix - name: tcp_client_posix_test cpu_cost: 0.5 build: test diff --git a/config.m4 b/config.m4 index 7012fb0c54d..0f103655a84 100644 --- a/config.m4 +++ b/config.m4 @@ -127,7 +127,6 @@ if test "$PHP_GRPC" != "no"; then src/core/lib/iomgr/socket_utils_common_posix.c \ src/core/lib/iomgr/socket_utils_linux.c \ src/core/lib/iomgr/socket_utils_posix.c \ - src/core/lib/iomgr/socket_utils_tos_posix.c \ src/core/lib/iomgr/socket_windows.c \ src/core/lib/iomgr/tcp_client_posix.c \ src/core/lib/iomgr/tcp_client_windows.c \ diff --git a/gRPC-Core.podspec b/gRPC-Core.podspec index 7b74143f415..6886bdfb5aa 100644 --- a/gRPC-Core.podspec +++ b/gRPC-Core.podspec @@ -457,7 +457,6 @@ Pod::Spec.new do |s| 'src/core/lib/iomgr/socket_utils_common_posix.c', 'src/core/lib/iomgr/socket_utils_linux.c', 'src/core/lib/iomgr/socket_utils_posix.c', - 'src/core/lib/iomgr/socket_utils_tos_posix.c', 'src/core/lib/iomgr/socket_windows.c', 'src/core/lib/iomgr/tcp_client_posix.c', 'src/core/lib/iomgr/tcp_client_windows.c', diff --git a/grpc.gemspec b/grpc.gemspec index 23537983552..6079ea2aef5 100755 --- a/grpc.gemspec +++ b/grpc.gemspec @@ -377,7 +377,6 @@ Gem::Specification.new do |s| s.files += %w( src/core/lib/iomgr/socket_utils_common_posix.c ) s.files += %w( src/core/lib/iomgr/socket_utils_linux.c ) s.files += %w( src/core/lib/iomgr/socket_utils_posix.c ) - s.files += %w( src/core/lib/iomgr/socket_utils_tos_posix.c ) s.files += %w( src/core/lib/iomgr/socket_windows.c ) s.files += %w( src/core/lib/iomgr/tcp_client_posix.c ) s.files += %w( src/core/lib/iomgr/tcp_client_windows.c ) diff --git a/include/grpc/impl/codegen/grpc_types.h b/include/grpc/impl/codegen/grpc_types.h index aad604a3b47..6621119d255 100644 --- a/include/grpc/impl/codegen/grpc_types.h +++ b/include/grpc/impl/codegen/grpc_types.h @@ -201,10 +201,20 @@ typedef struct { #define GRPC_ARG_MAX_METADATA_SIZE "grpc.max_metadata_size" /** If non-zero, allow the use of SO_REUSEPORT if it's available (default 1) */ #define GRPC_ARG_ALLOW_REUSEPORT "grpc.so_reuseport" -/** The Type-Of-Service (TOS), in bytes. */ -#define GRPC_ARG_TOS "grpc.tos" +/** The grpc_socket_mutator instance that set the socket options. A pointer. */ +#define GRPC_ARG_SOCKET_MUTATOR "grpc.socket_mutator" /** \} */ +typedef struct grpc_socket_mutator grpc_socket_mutator; + +typedef struct grpc_socket_mutator_vtable { + bool (*mutate_fd)(int fd, grpc_socket_mutator *mutator); +} grpc_socket_mutator_vtable; + +struct grpc_socket_mutator { + const grpc_socket_mutator_vtable *vtable; +}; + /** Result of a grpc call. If the caller satisfies the prerequisites of a particular operation, the grpc_call_error returned will be GRPC_CALL_OK. Receiving any other value listed here is an indication of a bug in the diff --git a/package.xml b/package.xml index 489504c43f6..7bac6957871 100644 --- a/package.xml +++ b/package.xml @@ -384,7 +384,6 @@ - diff --git a/src/core/lib/iomgr/socket_utils_common_posix.c b/src/core/lib/iomgr/socket_utils_common_posix.c index d2f6261e2ab..8c33ba37546 100644 --- a/src/core/lib/iomgr/socket_utils_common_posix.c +++ b/src/core/lib/iomgr/socket_utils_common_posix.c @@ -208,6 +208,15 @@ grpc_error *grpc_set_socket_low_latency(int fd, int low_latency) { return GRPC_ERROR_NONE; } +/* set a socker using a grpc_socket_mutator */ +grpc_error *grpc_set_socket_with_mutator(int fd, grpc_socket_mutator *mutator) { + GPR_ASSERT(mutator); + if (!mutator->vtable->mutate_fd(fd, mutator)) { + return GRPC_ERROR_CREATE("grpc_socket_mutator failed."); + } + return GRPC_ERROR_NONE; +} + static gpr_once g_probe_ipv6_once = GPR_ONCE_INIT; static int g_ipv6_loopback_available; diff --git a/src/core/lib/iomgr/socket_utils_posix.h b/src/core/lib/iomgr/socket_utils_posix.h index bf4cc96af2b..d84a95d3d39 100644 --- a/src/core/lib/iomgr/socket_utils_posix.h +++ b/src/core/lib/iomgr/socket_utils_posix.h @@ -87,8 +87,8 @@ grpc_error *grpc_set_socket_sndbuf(int fd, int buffer_size_bytes); /* Tries to set the socket's receive buffer to given size. */ grpc_error *grpc_set_socket_rcvbuf(int fd, int buffer_size_bytes); -/* Tries to set the socket's type to service */ -grpc_error *grpc_set_socket_tos(int fd, grpc_arg *arg); +/* Tries to set the socket using a grpc_socket_mutator */ +grpc_error *grpc_set_socket_with_mutator(int fd, grpc_socket_mutator *mutator); /* An enum to keep track of IPv4/IPv6 socket modes. diff --git a/src/core/lib/iomgr/socket_utils_tos_posix.c b/src/core/lib/iomgr/socket_utils_tos_posix.c deleted file mode 100644 index 603ad3c421d..00000000000 --- a/src/core/lib/iomgr/socket_utils_tos_posix.c +++ /dev/null @@ -1,68 +0,0 @@ -/* - * - * 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 - -#ifdef GPR_POSIX_SOCKET - -#include "src/core/lib/iomgr/socket_utils_posix.h" - -#include -#include -#include - -#include -#include - -grpc_error* grpc_set_socket_tos(int fd, grpc_arg* arg) { - int newval; - socklen_t intlen = sizeof(newval); - - GPR_ASSERT(0 == strcmp(arg->key, GRPC_ARG_TOS)); - GPR_ASSERT(arg->type == GRPC_ARG_INTEGER); - - if (0 != setsockopt(fd, IPPROTO_IP, IP_TOS, &arg->value.integer, - sizeof(arg->value.integer))) { - return GRPC_OS_ERROR(errno, "setsockopt(IP_TOS)"); - } - if (0 != getsockopt(fd, IPPROTO_IP, IP_TOS, &newval, &intlen)) { - return GRPC_OS_ERROR(errno, "getsockopt(IP_TOS)"); - } - if (newval != arg->value.integer) { - return GRPC_ERROR_CREATE("Failed to set IP_TOS"); - } - - return GRPC_ERROR_NONE; -} - -#endif diff --git a/src/core/lib/iomgr/tcp_client_posix.c b/src/core/lib/iomgr/tcp_client_posix.c index 1439efe706f..84eb41ecd28 100644 --- a/src/core/lib/iomgr/tcp_client_posix.c +++ b/src/core/lib/iomgr/tcp_client_posix.c @@ -89,10 +89,11 @@ static grpc_error *prepare_socket(const struct sockaddr *addr, int fd, if (err != GRPC_ERROR_NONE) goto error; if (channel_args) { for (size_t i = 0; i < channel_args->num_args; i++) { - if (0 == strcmp(channel_args->args[i].key, GRPC_ARG_TOS)) { - err = grpc_set_socket_tos(fd, &channel_args->args[i]); + if (0 == strcmp(channel_args->args[i].key, GRPC_ARG_SOCKET_MUTATOR)) { + GPR_ASSERT(channel_args->args[i].type == GRPC_ARG_POINTER); + grpc_socket_mutator *mutator = channel_args->args[i].value.pointer.p; + err = grpc_set_socket_with_mutator(fd, mutator); if (err != GRPC_ERROR_NONE) goto error; - break; } } } diff --git a/src/python/grpcio/grpc_core_dependencies.py b/src/python/grpcio/grpc_core_dependencies.py index dec578edb5c..2bebf48c70a 100644 --- a/src/python/grpcio/grpc_core_dependencies.py +++ b/src/python/grpcio/grpc_core_dependencies.py @@ -121,7 +121,6 @@ CORE_SOURCE_FILES = [ 'src/core/lib/iomgr/socket_utils_common_posix.c', 'src/core/lib/iomgr/socket_utils_linux.c', 'src/core/lib/iomgr/socket_utils_posix.c', - 'src/core/lib/iomgr/socket_utils_tos_posix.c', 'src/core/lib/iomgr/socket_windows.c', 'src/core/lib/iomgr/tcp_client_posix.c', 'src/core/lib/iomgr/tcp_client_windows.c', diff --git a/test/core/iomgr/socket_utils_test.c b/test/core/iomgr/socket_utils_test.c index 297531c44d2..113668b4e94 100644 --- a/test/core/iomgr/socket_utils_test.c +++ b/test/core/iomgr/socket_utils_test.c @@ -35,11 +35,37 @@ #include "src/core/lib/iomgr/socket_utils_posix.h" #include +#include #include #include #include "test/core/util/test_config.h" +struct test_socket_mutator { + grpc_socket_mutator base; + int option_value; +}; + +static bool mutate_fd(int fd, grpc_socket_mutator* mutator) { + int newval; + socklen_t intlen = sizeof(newval); + struct test_socket_mutator* m = (struct test_socket_mutator*)mutator; + + if (0 != setsockopt(fd, IPPROTO_IP, IP_TOS, &m->option_value, + sizeof(m->option_value))) { + return false; + } + if (0 != getsockopt(fd, IPPROTO_IP, IP_TOS, &newval, &intlen)) { + return false; + } + if (newval != m->option_value) { + return false; + } + return true; +} + +static const grpc_socket_mutator_vtable mutator_vtable = {mutate_fd}; + int main(int argc, char **argv) { int sock; grpc_test_init(argc, argv); @@ -64,6 +90,28 @@ int main(int argc, char **argv) { GPR_ASSERT(GRPC_LOG_IF_ERROR("set_socket_low_latency", grpc_set_socket_low_latency(sock, 0))); + struct test_socket_mutator mutator; + mutator.base.vtable = &mutator_vtable; + + mutator.option_value = IPTOS_LOWDELAY; + GPR_ASSERT(GRPC_LOG_IF_ERROR( + "set_socket_with_mutator", + grpc_set_socket_with_mutator(sock, (grpc_socket_mutator*)&mutator))); + + mutator.option_value = IPTOS_THROUGHPUT; + GPR_ASSERT(GRPC_LOG_IF_ERROR( + "set_socket_with_mutator", + grpc_set_socket_with_mutator(sock, (grpc_socket_mutator*)&mutator))); + + mutator.option_value = IPTOS_RELIABILITY; + GPR_ASSERT(GRPC_LOG_IF_ERROR( + "set_socket_with_mutator", + grpc_set_socket_with_mutator(sock, (grpc_socket_mutator*)&mutator))); + + mutator.option_value = -1; + GPR_ASSERT(GRPC_ERROR_NONE != grpc_set_socket_with_mutator( + sock, (grpc_socket_mutator*)&mutator)); + close(sock); return 0; diff --git a/test/core/iomgr/socket_utils_tos_test.c b/test/core/iomgr/socket_utils_tos_test.c deleted file mode 100644 index ee3a43367b8..00000000000 --- a/test/core/iomgr/socket_utils_tos_test.c +++ /dev/null @@ -1,67 +0,0 @@ -/* - * - * 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 -#include "src/core/lib/iomgr/socket_utils_posix.h" - -#include -#include -#include - -#include -#include "test/core/util/test_config.h" - -int main(int argc, char **argv) { - int sock; - grpc_arg tos_arg; - grpc_test_init(argc, argv); - - sock = socket(PF_INET, SOCK_STREAM, 0); - GPR_ASSERT(sock > 0); - - tos_arg.key = GRPC_ARG_TOS; - tos_arg.type = GRPC_ARG_INTEGER; - tos_arg.value.integer = IPTOS_LOWDELAY; - GPR_ASSERT( - GRPC_LOG_IF_ERROR("set_socket_tos", grpc_set_socket_tos(sock, &tos_arg))); - tos_arg.value.integer = IPTOS_THROUGHPUT; - GPR_ASSERT( - GRPC_LOG_IF_ERROR("set_socket_tos", grpc_set_socket_tos(sock, &tos_arg))); - tos_arg.value.integer = IPTOS_RELIABILITY; - GPR_ASSERT( - GRPC_LOG_IF_ERROR("set_socket_tos", grpc_set_socket_tos(sock, &tos_arg))); - - close(sock); - - return 0; -} diff --git a/tools/doxygen/Doxyfile.core.internal b/tools/doxygen/Doxyfile.core.internal index 59998f03fba..44f147aeb18 100644 --- a/tools/doxygen/Doxyfile.core.internal +++ b/tools/doxygen/Doxyfile.core.internal @@ -994,7 +994,6 @@ src/core/lib/iomgr/sockaddr_utils.c \ src/core/lib/iomgr/socket_utils_common_posix.c \ src/core/lib/iomgr/socket_utils_linux.c \ src/core/lib/iomgr/socket_utils_posix.c \ -src/core/lib/iomgr/socket_utils_tos_posix.c \ src/core/lib/iomgr/socket_windows.c \ src/core/lib/iomgr/tcp_client_posix.c \ src/core/lib/iomgr/tcp_client_windows.c \ diff --git a/tools/run_tests/sources_and_headers.json b/tools/run_tests/sources_and_headers.json index 5ecb3ee0f87..c05d194e19e 100644 --- a/tools/run_tests/sources_and_headers.json +++ b/tools/run_tests/sources_and_headers.json @@ -1858,23 +1858,6 @@ "third_party": false, "type": "target" }, - { - "deps": [ - "gpr", - "gpr_test_util", - "grpc", - "grpc_test_util" - ], - "headers": [], - "is_filegroup": false, - "language": "c", - "name": "socket_utils_tos_test", - "src": [ - "test/core/iomgr/socket_utils_tos_test.c" - ], - "third_party": false, - "type": "target" - }, { "deps": [ "gpr", @@ -6550,7 +6533,6 @@ "src/core/lib/iomgr/socket_utils_linux.c", "src/core/lib/iomgr/socket_utils_posix.c", "src/core/lib/iomgr/socket_utils_posix.h", - "src/core/lib/iomgr/socket_utils_tos_posix.c", "src/core/lib/iomgr/socket_windows.c", "src/core/lib/iomgr/socket_windows.h", "src/core/lib/iomgr/tcp_client.h", diff --git a/tools/run_tests/tests.json b/tools/run_tests/tests.json index 07b51d3c2f3..c3395067c94 100644 --- a/tools/run_tests/tests.json +++ b/tools/run_tests/tests.json @@ -1819,25 +1819,6 @@ "posix" ] }, - { - "args": [], - "ci_platforms": [ - "linux", - "mac", - "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "gtest": false, - "language": "c", - "name": "socket_utils_tos_test", - "platforms": [ - "linux", - "mac", - "posix" - ] - }, { "args": [], "ci_platforms": [ diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj b/vsprojects/vcxproj/grpc/grpc.vcxproj index f115001507f..965d06d1d5c 100644 --- a/vsprojects/vcxproj/grpc/grpc.vcxproj +++ b/vsprojects/vcxproj/grpc/grpc.vcxproj @@ -549,8 +549,6 @@ - - diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters index 81dae475a1d..dddd4ecce51 100644 --- a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters +++ b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters @@ -133,9 +133,6 @@ src\core\lib\iomgr - - src\core\lib\iomgr - src\core\lib\iomgr diff --git a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj index da631cd0dc1..b724c217ed4 100644 --- a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj +++ b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj @@ -397,8 +397,6 @@ - - diff --git a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters index b42b5ec68a7..92806fa04a2 100644 --- a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters +++ b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters @@ -187,9 +187,6 @@ src\core\lib\iomgr - - src\core\lib\iomgr - src\core\lib\iomgr diff --git a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj index 921eaf3780d..b46773632cb 100644 --- a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj +++ b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj @@ -517,8 +517,6 @@ - - diff --git a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters index c7d0106dc57..6ffc1eab708 100644 --- a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters +++ b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters @@ -136,9 +136,6 @@ src\core\lib\iomgr - - src\core\lib\iomgr - src\core\lib\iomgr From de3daf5d630fdd4396ed37b59d9550d5665b1e58 Mon Sep 17 00:00:00 2001 From: Yuchen Zeng Date: Thu, 13 Oct 2016 17:26:26 -0700 Subject: [PATCH 06/55] More interfaces for grpc_socket_mutator --- BUILD | 8 ++ CMakeLists.txt | 3 + Makefile | 4 + binding.gyp | 1 + build.yaml | 2 + config.m4 | 1 + gRPC-Core.podspec | 3 + grpc.gemspec | 2 + include/grpc++/support/channel_arguments.h | 3 + include/grpc/impl/codegen/grpc_types.h | 13 +-- package.xml | 2 + src/core/lib/channel/channel_args.c | 6 ++ src/core/lib/channel/channel_args.h | 10 ++- src/core/lib/iomgr/socket_mutator.c | 81 +++++++++++++++++++ src/core/lib/iomgr/socket_mutator.h | 75 +++++++++++++++++ .../lib/iomgr/socket_utils_common_posix.c | 2 +- src/core/lib/iomgr/socket_utils_posix.h | 1 + src/core/lib/iomgr/tcp_client_posix.c | 1 + src/cpp/common/channel_arguments.cc | 20 ++++- src/python/grpcio/grpc_core_dependencies.py | 1 + test/core/channel/channel_args_test.c | 14 ++++ test/core/iomgr/socket_utils_test.c | 15 +++- test/cpp/common/channel_arguments_test.cc | 62 ++++++++++++++ tools/doxygen/Doxyfile.core.internal | 2 + tools/run_tests/sources_and_headers.json | 3 + vsprojects/vcxproj/grpc/grpc.vcxproj | 3 + vsprojects/vcxproj/grpc/grpc.vcxproj.filters | 6 ++ .../grpc_test_util/grpc_test_util.vcxproj | 3 + .../grpc_test_util.vcxproj.filters | 6 ++ .../grpc_unsecure/grpc_unsecure.vcxproj | 3 + .../grpc_unsecure.vcxproj.filters | 6 ++ 31 files changed, 346 insertions(+), 16 deletions(-) create mode 100644 src/core/lib/iomgr/socket_mutator.c create mode 100644 src/core/lib/iomgr/socket_mutator.h diff --git a/BUILD b/BUILD index bad6f3f0755..9d9cd49c170 100644 --- a/BUILD +++ b/BUILD @@ -206,6 +206,7 @@ cc_library( "src/core/lib/iomgr/sockaddr_posix.h", "src/core/lib/iomgr/sockaddr_utils.h", "src/core/lib/iomgr/sockaddr_windows.h", + "src/core/lib/iomgr/socket_mutator.h", "src/core/lib/iomgr/socket_utils_posix.h", "src/core/lib/iomgr/socket_windows.h", "src/core/lib/iomgr/tcp_client.h", @@ -363,6 +364,7 @@ cc_library( "src/core/lib/iomgr/resolve_address_posix.c", "src/core/lib/iomgr/resolve_address_windows.c", "src/core/lib/iomgr/sockaddr_utils.c", + "src/core/lib/iomgr/socket_mutator.c", "src/core/lib/iomgr/socket_utils_common_posix.c", "src/core/lib/iomgr/socket_utils_linux.c", "src/core/lib/iomgr/socket_utils_posix.c", @@ -607,6 +609,7 @@ cc_library( "src/core/lib/iomgr/sockaddr_posix.h", "src/core/lib/iomgr/sockaddr_utils.h", "src/core/lib/iomgr/sockaddr_windows.h", + "src/core/lib/iomgr/socket_mutator.h", "src/core/lib/iomgr/socket_utils_posix.h", "src/core/lib/iomgr/socket_windows.h", "src/core/lib/iomgr/tcp_client.h", @@ -749,6 +752,7 @@ cc_library( "src/core/lib/iomgr/resolve_address_posix.c", "src/core/lib/iomgr/resolve_address_windows.c", "src/core/lib/iomgr/sockaddr_utils.c", + "src/core/lib/iomgr/socket_mutator.c", "src/core/lib/iomgr/socket_utils_common_posix.c", "src/core/lib/iomgr/socket_utils_linux.c", "src/core/lib/iomgr/socket_utils_posix.c", @@ -963,6 +967,7 @@ cc_library( "src/core/lib/iomgr/sockaddr_posix.h", "src/core/lib/iomgr/sockaddr_utils.h", "src/core/lib/iomgr/sockaddr_windows.h", + "src/core/lib/iomgr/socket_mutator.h", "src/core/lib/iomgr/socket_utils_posix.h", "src/core/lib/iomgr/socket_windows.h", "src/core/lib/iomgr/tcp_client.h", @@ -1097,6 +1102,7 @@ cc_library( "src/core/lib/iomgr/resolve_address_posix.c", "src/core/lib/iomgr/resolve_address_windows.c", "src/core/lib/iomgr/sockaddr_utils.c", + "src/core/lib/iomgr/socket_mutator.c", "src/core/lib/iomgr/socket_utils_common_posix.c", "src/core/lib/iomgr/socket_utils_linux.c", "src/core/lib/iomgr/socket_utils_posix.c", @@ -1860,6 +1866,7 @@ objc_library( "src/core/lib/iomgr/resolve_address_posix.c", "src/core/lib/iomgr/resolve_address_windows.c", "src/core/lib/iomgr/sockaddr_utils.c", + "src/core/lib/iomgr/socket_mutator.c", "src/core/lib/iomgr/socket_utils_common_posix.c", "src/core/lib/iomgr/socket_utils_linux.c", "src/core/lib/iomgr/socket_utils_posix.c", @@ -2083,6 +2090,7 @@ objc_library( "src/core/lib/iomgr/sockaddr_posix.h", "src/core/lib/iomgr/sockaddr_utils.h", "src/core/lib/iomgr/sockaddr_windows.h", + "src/core/lib/iomgr/socket_mutator.h", "src/core/lib/iomgr/socket_utils_posix.h", "src/core/lib/iomgr/socket_windows.h", "src/core/lib/iomgr/tcp_client.h", diff --git a/CMakeLists.txt b/CMakeLists.txt index c4191521bd1..4ff0180d0bf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -330,6 +330,7 @@ add_library(grpc src/core/lib/iomgr/resolve_address_posix.c src/core/lib/iomgr/resolve_address_windows.c src/core/lib/iomgr/sockaddr_utils.c + src/core/lib/iomgr/socket_mutator.c src/core/lib/iomgr/socket_utils_common_posix.c src/core/lib/iomgr/socket_utils_linux.c src/core/lib/iomgr/socket_utils_posix.c @@ -589,6 +590,7 @@ add_library(grpc_cronet src/core/lib/iomgr/resolve_address_posix.c src/core/lib/iomgr/resolve_address_windows.c src/core/lib/iomgr/sockaddr_utils.c + src/core/lib/iomgr/socket_mutator.c src/core/lib/iomgr/socket_utils_common_posix.c src/core/lib/iomgr/socket_utils_linux.c src/core/lib/iomgr/socket_utils_posix.c @@ -820,6 +822,7 @@ add_library(grpc_unsecure src/core/lib/iomgr/resolve_address_posix.c src/core/lib/iomgr/resolve_address_windows.c src/core/lib/iomgr/sockaddr_utils.c + src/core/lib/iomgr/socket_mutator.c src/core/lib/iomgr/socket_utils_common_posix.c src/core/lib/iomgr/socket_utils_linux.c src/core/lib/iomgr/socket_utils_posix.c diff --git a/Makefile b/Makefile index 62c65822b0f..abdbbc343cf 100644 --- a/Makefile +++ b/Makefile @@ -2574,6 +2574,7 @@ LIBGRPC_SRC = \ src/core/lib/iomgr/resolve_address_posix.c \ src/core/lib/iomgr/resolve_address_windows.c \ src/core/lib/iomgr/sockaddr_utils.c \ + src/core/lib/iomgr/socket_mutator.c \ src/core/lib/iomgr/socket_utils_common_posix.c \ src/core/lib/iomgr/socket_utils_linux.c \ src/core/lib/iomgr/socket_utils_posix.c \ @@ -2851,6 +2852,7 @@ LIBGRPC_CRONET_SRC = \ src/core/lib/iomgr/resolve_address_posix.c \ src/core/lib/iomgr/resolve_address_windows.c \ src/core/lib/iomgr/sockaddr_utils.c \ + src/core/lib/iomgr/socket_mutator.c \ src/core/lib/iomgr/socket_utils_common_posix.c \ src/core/lib/iomgr/socket_utils_linux.c \ src/core/lib/iomgr/socket_utils_posix.c \ @@ -3118,6 +3120,7 @@ LIBGRPC_TEST_UTIL_SRC = \ src/core/lib/iomgr/resolve_address_posix.c \ src/core/lib/iomgr/resolve_address_windows.c \ src/core/lib/iomgr/sockaddr_utils.c \ + src/core/lib/iomgr/socket_mutator.c \ src/core/lib/iomgr/socket_utils_common_posix.c \ src/core/lib/iomgr/socket_utils_linux.c \ src/core/lib/iomgr/socket_utils_posix.c \ @@ -3312,6 +3315,7 @@ LIBGRPC_UNSECURE_SRC = \ src/core/lib/iomgr/resolve_address_posix.c \ src/core/lib/iomgr/resolve_address_windows.c \ src/core/lib/iomgr/sockaddr_utils.c \ + src/core/lib/iomgr/socket_mutator.c \ src/core/lib/iomgr/socket_utils_common_posix.c \ src/core/lib/iomgr/socket_utils_linux.c \ src/core/lib/iomgr/socket_utils_posix.c \ diff --git a/binding.gyp b/binding.gyp index 58edda2e63e..dcc4fae4553 100644 --- a/binding.gyp +++ b/binding.gyp @@ -605,6 +605,7 @@ 'src/core/lib/iomgr/resolve_address_posix.c', 'src/core/lib/iomgr/resolve_address_windows.c', 'src/core/lib/iomgr/sockaddr_utils.c', + 'src/core/lib/iomgr/socket_mutator.c', 'src/core/lib/iomgr/socket_utils_common_posix.c', 'src/core/lib/iomgr/socket_utils_linux.c', 'src/core/lib/iomgr/socket_utils_posix.c', diff --git a/build.yaml b/build.yaml index 584084ff865..79b00d8c655 100644 --- a/build.yaml +++ b/build.yaml @@ -210,6 +210,7 @@ filegroups: - src/core/lib/iomgr/sockaddr_posix.h - src/core/lib/iomgr/sockaddr_utils.h - src/core/lib/iomgr/sockaddr_windows.h + - src/core/lib/iomgr/socket_mutator.h - src/core/lib/iomgr/socket_utils_posix.h - src/core/lib/iomgr/socket_windows.h - src/core/lib/iomgr/tcp_client.h @@ -290,6 +291,7 @@ filegroups: - src/core/lib/iomgr/resolve_address_posix.c - src/core/lib/iomgr/resolve_address_windows.c - src/core/lib/iomgr/sockaddr_utils.c + - src/core/lib/iomgr/socket_mutator.c - src/core/lib/iomgr/socket_utils_common_posix.c - src/core/lib/iomgr/socket_utils_linux.c - src/core/lib/iomgr/socket_utils_posix.c diff --git a/config.m4 b/config.m4 index 0f103655a84..b7ef4a991df 100644 --- a/config.m4 +++ b/config.m4 @@ -124,6 +124,7 @@ if test "$PHP_GRPC" != "no"; then src/core/lib/iomgr/resolve_address_posix.c \ src/core/lib/iomgr/resolve_address_windows.c \ src/core/lib/iomgr/sockaddr_utils.c \ + src/core/lib/iomgr/socket_mutator.c \ src/core/lib/iomgr/socket_utils_common_posix.c \ src/core/lib/iomgr/socket_utils_linux.c \ src/core/lib/iomgr/socket_utils_posix.c \ diff --git a/gRPC-Core.podspec b/gRPC-Core.podspec index 6886bdfb5aa..5bd76ab10e4 100644 --- a/gRPC-Core.podspec +++ b/gRPC-Core.podspec @@ -293,6 +293,7 @@ Pod::Spec.new do |s| 'src/core/lib/iomgr/sockaddr_posix.h', 'src/core/lib/iomgr/sockaddr_utils.h', 'src/core/lib/iomgr/sockaddr_windows.h', + 'src/core/lib/iomgr/socket_mutator.h', 'src/core/lib/iomgr/socket_utils_posix.h', 'src/core/lib/iomgr/socket_windows.h', 'src/core/lib/iomgr/tcp_client.h', @@ -454,6 +455,7 @@ Pod::Spec.new do |s| 'src/core/lib/iomgr/resolve_address_posix.c', 'src/core/lib/iomgr/resolve_address_windows.c', 'src/core/lib/iomgr/sockaddr_utils.c', + 'src/core/lib/iomgr/socket_mutator.c', 'src/core/lib/iomgr/socket_utils_common_posix.c', 'src/core/lib/iomgr/socket_utils_linux.c', 'src/core/lib/iomgr/socket_utils_posix.c', @@ -666,6 +668,7 @@ Pod::Spec.new do |s| 'src/core/lib/iomgr/sockaddr_posix.h', 'src/core/lib/iomgr/sockaddr_utils.h', 'src/core/lib/iomgr/sockaddr_windows.h', + 'src/core/lib/iomgr/socket_mutator.h', 'src/core/lib/iomgr/socket_utils_posix.h', 'src/core/lib/iomgr/socket_windows.h', 'src/core/lib/iomgr/tcp_client.h', diff --git a/grpc.gemspec b/grpc.gemspec index 6079ea2aef5..c3601ec3129 100755 --- a/grpc.gemspec +++ b/grpc.gemspec @@ -213,6 +213,7 @@ Gem::Specification.new do |s| s.files += %w( src/core/lib/iomgr/sockaddr_posix.h ) s.files += %w( src/core/lib/iomgr/sockaddr_utils.h ) s.files += %w( src/core/lib/iomgr/sockaddr_windows.h ) + s.files += %w( src/core/lib/iomgr/socket_mutator.h ) s.files += %w( src/core/lib/iomgr/socket_utils_posix.h ) s.files += %w( src/core/lib/iomgr/socket_windows.h ) s.files += %w( src/core/lib/iomgr/tcp_client.h ) @@ -374,6 +375,7 @@ Gem::Specification.new do |s| s.files += %w( src/core/lib/iomgr/resolve_address_posix.c ) s.files += %w( src/core/lib/iomgr/resolve_address_windows.c ) s.files += %w( src/core/lib/iomgr/sockaddr_utils.c ) + s.files += %w( src/core/lib/iomgr/socket_mutator.c ) s.files += %w( src/core/lib/iomgr/socket_utils_common_posix.c ) s.files += %w( src/core/lib/iomgr/socket_utils_linux.c ) s.files += %w( src/core/lib/iomgr/socket_utils_posix.c ) diff --git a/include/grpc++/support/channel_arguments.h b/include/grpc++/support/channel_arguments.h index ae243939e9a..a17557f59d7 100644 --- a/include/grpc++/support/channel_arguments.h +++ b/include/grpc++/support/channel_arguments.h @@ -77,6 +77,9 @@ class ChannelArguments { /// Set the compression algorithm for the channel. void SetCompressionAlgorithm(grpc_compression_algorithm algorithm); + /// Set the socket mutator for the channel. + void SetSocketMutator(grpc_socket_mutator* mutator); + /// The given string will be sent at the front of the user agent string. void SetUserAgentPrefix(const grpc::string& user_agent_prefix); diff --git a/include/grpc/impl/codegen/grpc_types.h b/include/grpc/impl/codegen/grpc_types.h index 6621119d255..800d9fe3d3a 100644 --- a/include/grpc/impl/codegen/grpc_types.h +++ b/include/grpc/impl/codegen/grpc_types.h @@ -83,6 +83,9 @@ typedef struct grpc_server grpc_server; can have messages written to it and read from it. */ typedef struct grpc_call grpc_call; +/** The Socket Mutator interface allows changes on socket options */ +typedef struct grpc_socket_mutator grpc_socket_mutator; + /** Type specifier for grpc_arg */ typedef enum { GRPC_ARG_STRING, @@ -205,16 +208,6 @@ typedef struct { #define GRPC_ARG_SOCKET_MUTATOR "grpc.socket_mutator" /** \} */ -typedef struct grpc_socket_mutator grpc_socket_mutator; - -typedef struct grpc_socket_mutator_vtable { - bool (*mutate_fd)(int fd, grpc_socket_mutator *mutator); -} grpc_socket_mutator_vtable; - -struct grpc_socket_mutator { - const grpc_socket_mutator_vtable *vtable; -}; - /** Result of a grpc call. If the caller satisfies the prerequisites of a particular operation, the grpc_call_error returned will be GRPC_CALL_OK. Receiving any other value listed here is an indication of a bug in the diff --git a/package.xml b/package.xml index 7bac6957871..2827faa22d3 100644 --- a/package.xml +++ b/package.xml @@ -220,6 +220,7 @@ + @@ -381,6 +382,7 @@ + diff --git a/src/core/lib/channel/channel_args.c b/src/core/lib/channel/channel_args.c index 3a56b1ff205..770b4e0a791 100644 --- a/src/core/lib/channel/channel_args.c +++ b/src/core/lib/channel/channel_args.c @@ -261,6 +261,12 @@ uint32_t grpc_channel_args_compression_algorithm_get_states( } } +grpc_channel_args *grpc_channel_args_set_socket_mutator( + grpc_channel_args *a, grpc_socket_mutator *mutator) { + grpc_arg tmp = grpc_socket_mutator_to_arg(mutator); + return grpc_channel_args_copy_and_add(a, &tmp, 1); +} + int grpc_channel_args_compare(const grpc_channel_args *a, const grpc_channel_args *b) { int c = GPR_ICMP(a->num_args, b->num_args); diff --git a/src/core/lib/channel/channel_args.h b/src/core/lib/channel/channel_args.h index 586a296d1f6..8a3576247c5 100644 --- a/src/core/lib/channel/channel_args.h +++ b/src/core/lib/channel/channel_args.h @@ -23,8 +23,8 @@ * 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 + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * 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. @@ -36,6 +36,7 @@ #include #include +#include "src/core/lib/iomgr/socket_mutator.h" // Channel args are intentionally immutable, to avoid the need for locking. @@ -89,6 +90,13 @@ uint32_t grpc_channel_args_compression_algorithm_get_states( int grpc_channel_args_compare(const grpc_channel_args *a, const grpc_channel_args *b); +/** Returns a channel arg instance with socket mutator added. The socket mutator + * will perform its mutate_fd method on all file descriptors used by the + * channel. + * If \a a is non-MULL, its args are copied. */ +grpc_channel_args *grpc_channel_args_set_socket_mutator( + grpc_channel_args *a, grpc_socket_mutator *mutator); + typedef struct grpc_integer_options { int default_value; // Return this if value is outside of expected bounds. int min_value; diff --git a/src/core/lib/iomgr/socket_mutator.c b/src/core/lib/iomgr/socket_mutator.c new file mode 100644 index 00000000000..3f66cb100da --- /dev/null +++ b/src/core/lib/iomgr/socket_mutator.c @@ -0,0 +1,81 @@ +/* + * + * Copyright 2015, 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 "src/core/lib/iomgr/socket_mutator.h" + +#include +#include +#include + +void grpc_socket_mutator_init(grpc_socket_mutator *mutator, + const grpc_socket_mutator_vtable *vtable) { + mutator->vtable = vtable; + gpr_ref_init(&mutator->refcount, 1); +} + +grpc_socket_mutator *grpc_socket_mutator_ref(grpc_socket_mutator *mutator) { + gpr_ref(&mutator->refcount); + return mutator; +} + +bool grpc_socket_mutator_mutate_fd(grpc_socket_mutator *mutator, int fd) { + return mutator->vtable->mutate_fd(fd, mutator); +} + +void grpc_socket_mutator_unref(grpc_socket_mutator *mutator) { + if (gpr_unref(&mutator->refcount)) { + mutator->vtable->destory(mutator); + } +} + +static void *socket_mutator_arg_copy(void *p) { + return grpc_socket_mutator_ref(p); +} + +static void socket_mutator_arg_destroy(void *p) { + grpc_socket_mutator_unref(p); +} + +static int socket_mutator_cmp(void *a, void *b) { return GPR_ICMP(a, b); } + +static const grpc_arg_pointer_vtable socket_mutator_arg_vtable = { + socket_mutator_arg_copy, socket_mutator_arg_destroy, socket_mutator_cmp}; + +grpc_arg grpc_socket_mutator_to_arg(grpc_socket_mutator *mutator) { + grpc_arg arg; + arg.type = GRPC_ARG_POINTER; + arg.key = GRPC_ARG_SOCKET_MUTATOR; + arg.value.pointer.vtable = &socket_mutator_arg_vtable; + arg.value.pointer.p = mutator; + return arg; +} diff --git a/src/core/lib/iomgr/socket_mutator.h b/src/core/lib/iomgr/socket_mutator.h new file mode 100644 index 00000000000..5200f52d3a1 --- /dev/null +++ b/src/core/lib/iomgr/socket_mutator.h @@ -0,0 +1,75 @@ +/* + * + * Copyright 2015, 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. + * + */ + +#ifndef GRPC_CORE_LIB_IOMGR_SOCKET_MUTATOR_H +#define GRPC_CORE_LIB_IOMGR_SOCKET_MUTATOR_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** The virtual table of grpc_socket_mutator */ +typedef struct { + /** Mutates the socket opitons of \a fd */ + bool (*mutate_fd)(int fd, grpc_socket_mutator *mutator); + /** Destroys the socket mutator instance */ + void (*destory)(grpc_socket_mutator *mutator); +} grpc_socket_mutator_vtable; + +/** The Socket Mutator interface allows changes on socket options */ +struct grpc_socket_mutator { + const grpc_socket_mutator_vtable *vtable; + gpr_refcount refcount; +}; + +/** called by concrete implementations to initialize the base struct */ +void grpc_socket_mutator_init(grpc_socket_mutator *mutator, + const grpc_socket_mutator_vtable *vtable); + +/** Wrap \a mutator as a grpc_arg */ +grpc_arg grpc_socket_mutator_to_arg(grpc_socket_mutator *mutator); + +/** Perform the file descriptor mutation operation of \a mutator on \a fd */ +bool grpc_socket_mutator_mutate_fd(grpc_socket_mutator *mutator, int fd); + +grpc_socket_mutator *grpc_socket_mutator_ref(grpc_socket_mutator *mutator); +void grpc_socket_mutator_unref(grpc_socket_mutator *mutator); + +#ifdef __cplusplus +} +#endif + +#endif /* GRPC_CORE_LIB_IOMGR_SOCKET_MUTATOR_H */ diff --git a/src/core/lib/iomgr/socket_utils_common_posix.c b/src/core/lib/iomgr/socket_utils_common_posix.c index 8c33ba37546..9c67ef89401 100644 --- a/src/core/lib/iomgr/socket_utils_common_posix.c +++ b/src/core/lib/iomgr/socket_utils_common_posix.c @@ -211,7 +211,7 @@ grpc_error *grpc_set_socket_low_latency(int fd, int low_latency) { /* set a socker using a grpc_socket_mutator */ grpc_error *grpc_set_socket_with_mutator(int fd, grpc_socket_mutator *mutator) { GPR_ASSERT(mutator); - if (!mutator->vtable->mutate_fd(fd, mutator)) { + if (!grpc_socket_mutator_mutate_fd(mutator, fd)) { return GRPC_ERROR_CREATE("grpc_socket_mutator failed."); } return GRPC_ERROR_NONE; diff --git a/src/core/lib/iomgr/socket_utils_posix.h b/src/core/lib/iomgr/socket_utils_posix.h index d84a95d3d39..0ad2d39497a 100644 --- a/src/core/lib/iomgr/socket_utils_posix.h +++ b/src/core/lib/iomgr/socket_utils_posix.h @@ -39,6 +39,7 @@ #include #include "src/core/lib/iomgr/error.h" +#include "src/core/lib/iomgr/socket_mutator.h" /* a wrapper for accept or accept4 */ int grpc_accept4(int sockfd, struct sockaddr *addr, socklen_t *addrlen, diff --git a/src/core/lib/iomgr/tcp_client_posix.c b/src/core/lib/iomgr/tcp_client_posix.c index 84eb41ecd28..9089751d94e 100644 --- a/src/core/lib/iomgr/tcp_client_posix.c +++ b/src/core/lib/iomgr/tcp_client_posix.c @@ -50,6 +50,7 @@ #include "src/core/lib/iomgr/ev_posix.h" #include "src/core/lib/iomgr/iomgr_posix.h" #include "src/core/lib/iomgr/sockaddr_utils.h" +#include "src/core/lib/iomgr/socket_mutator.h" #include "src/core/lib/iomgr/socket_utils_posix.h" #include "src/core/lib/iomgr/tcp_posix.h" #include "src/core/lib/iomgr/timer.h" diff --git a/src/cpp/common/channel_arguments.cc b/src/cpp/common/channel_arguments.cc index f297ae85870..ae56409a54a 100644 --- a/src/cpp/common/channel_arguments.cc +++ b/src/cpp/common/channel_arguments.cc @@ -37,7 +37,7 @@ #include #include #include "src/core/lib/channel/channel_args.h" - +#include "src/core/lib/iomgr/socket_mutator.h" namespace grpc { ChannelArguments::ChannelArguments() { @@ -88,6 +88,24 @@ void ChannelArguments::SetCompressionAlgorithm( SetInt(GRPC_COMPRESSION_CHANNEL_DEFAULT_ALGORITHM, algorithm); } +void ChannelArguments::SetSocketMutator(grpc_socket_mutator* mutator) { + if (!mutator) { + return; + } + grpc_arg mutator_arg = grpc_socket_mutator_to_arg(mutator); + bool replaced = false; + for (auto it = args_.begin(); it != args_.end(); ++it) { + if (it->type == mutator_arg.type && + grpc::string(it->key) == grpc::string(mutator_arg.key)) { + it->value.pointer.vtable->destroy(it->value.pointer.p); + it->value.pointer = mutator_arg.value.pointer; + } + } + if (!replaced) { + args_.push_back(mutator_arg); + } +} + // Note: a second call to this will add in front the result of the first call. // An example is calling this on a copy of ChannelArguments which already has a // prefix. The user can build up a prefix string by calling this multiple times, diff --git a/src/python/grpcio/grpc_core_dependencies.py b/src/python/grpcio/grpc_core_dependencies.py index 2bebf48c70a..b4add7bb26e 100644 --- a/src/python/grpcio/grpc_core_dependencies.py +++ b/src/python/grpcio/grpc_core_dependencies.py @@ -118,6 +118,7 @@ CORE_SOURCE_FILES = [ 'src/core/lib/iomgr/resolve_address_posix.c', 'src/core/lib/iomgr/resolve_address_windows.c', 'src/core/lib/iomgr/sockaddr_utils.c', + 'src/core/lib/iomgr/socket_mutator.c', 'src/core/lib/iomgr/socket_utils_common_posix.c', 'src/core/lib/iomgr/socket_utils_linux.c', 'src/core/lib/iomgr/socket_utils_posix.c', diff --git a/test/core/channel/channel_args_test.c b/test/core/channel/channel_args_test.c index 8ef1bff22e7..d3eb969f098 100644 --- a/test/core/channel/channel_args_test.c +++ b/test/core/channel/channel_args_test.c @@ -134,12 +134,26 @@ static void test_compression_algorithm_states(void) { grpc_channel_args_destroy(ch_args); } +static void test_set_socket_mutator(void) { + grpc_channel_args *ch_args; + grpc_socket_mutator mutator; + grpc_socket_mutator_init(&mutator, NULL); + + ch_args = grpc_channel_args_set_socket_mutator(NULL, &mutator); + GPR_ASSERT(ch_args->num_args == 1); + GPR_ASSERT(strcmp(ch_args->args[0].key, GRPC_ARG_SOCKET_MUTATOR) == 0); + GPR_ASSERT(ch_args->args[0].type == GRPC_ARG_POINTER); + + grpc_channel_args_destroy(ch_args); +} + int main(int argc, char **argv) { grpc_test_init(argc, argv); grpc_init(); test_create(); test_set_compression_algorithm(); test_compression_algorithm_states(); + test_set_socket_mutator(); grpc_shutdown(); return 0; } diff --git a/test/core/iomgr/socket_utils_test.c b/test/core/iomgr/socket_utils_test.c index 113668b4e94..0b0dfcffbef 100644 --- a/test/core/iomgr/socket_utils_test.c +++ b/test/core/iomgr/socket_utils_test.c @@ -38,7 +38,10 @@ #include #include +#include #include +#include +#include "src/core/lib/iomgr/socket_mutator.h" #include "test/core/util/test_config.h" struct test_socket_mutator { @@ -46,7 +49,7 @@ struct test_socket_mutator { int option_value; }; -static bool mutate_fd(int fd, grpc_socket_mutator* mutator) { +static bool mutate_fd(int fd, grpc_socket_mutator *mutator) { int newval; socklen_t intlen = sizeof(newval); struct test_socket_mutator* m = (struct test_socket_mutator*)mutator; @@ -64,7 +67,13 @@ static bool mutate_fd(int fd, grpc_socket_mutator* mutator) { return true; } -static const grpc_socket_mutator_vtable mutator_vtable = {mutate_fd}; +static void destroy_test_mutator(grpc_socket_mutator *mutator) { + struct test_socket_mutator *m = (struct test_socket_mutator *)mutator; + gpr_free(m); +} + +static const grpc_socket_mutator_vtable mutator_vtable = {mutate_fd, + destroy_test_mutator}; int main(int argc, char **argv) { int sock; @@ -91,7 +100,7 @@ int main(int argc, char **argv) { grpc_set_socket_low_latency(sock, 0))); struct test_socket_mutator mutator; - mutator.base.vtable = &mutator_vtable; + grpc_socket_mutator_init(&mutator.base, &mutator_vtable); mutator.option_value = IPTOS_LOWDELAY; GPR_ASSERT(GRPC_LOG_IF_ERROR( diff --git a/test/cpp/common/channel_arguments_test.cc b/test/cpp/common/channel_arguments_test.cc index 1443eb2f68d..0d1e06b1e99 100644 --- a/test/cpp/common/channel_arguments_test.cc +++ b/test/cpp/common/channel_arguments_test.cc @@ -34,11 +34,53 @@ #include #include +#include #include +#include "src/core/lib/iomgr/socket_mutator.h" namespace grpc { namespace testing { +namespace { + +// A simple grpc_socket_mutator to be used to test SetSocketMutator +class TestSocketMutator : public grpc_socket_mutator { + public: + TestSocketMutator(); + + bool MutateFd(int fd) { + // Do nothing on the fd + return true; + } +}; + +// +// C API for TestSocketMutator +// + +bool test_mutator_mutate_fd(int fd, grpc_socket_mutator* mutator) { + TestSocketMutator* tsm = (TestSocketMutator*)mutator; + return tsm->MutateFd(fd); +} + +void test_mutator_destroy(grpc_socket_mutator* mutator) { + TestSocketMutator* tsm = (TestSocketMutator*)mutator; + gpr_log(GPR_ERROR, "destroy is called"); + delete tsm; +} + +grpc_socket_mutator_vtable test_mutator_vtable = {test_mutator_mutate_fd, + test_mutator_destroy}; + +// +// TestSocketMutator implementation +// + +TestSocketMutator::TestSocketMutator() { + grpc_socket_mutator_init(this, &test_mutator_vtable); +} +} + class ChannelArgumentsTest : public ::testing::Test { protected: ChannelArgumentsTest() @@ -165,6 +207,26 @@ TEST_F(ChannelArgumentsTest, SetPointer) { EXPECT_TRUE(HasArg(arg0)); } +TEST_F(ChannelArgumentsTest, SetSocketMutator) { + VerifyDefaultChannelArgs(); + grpc_arg arg0, arg1; + TestSocketMutator* mutator0 = new TestSocketMutator(); + TestSocketMutator* mutator1 = new TestSocketMutator(); + arg0 = grpc_socket_mutator_to_arg(mutator0); + arg1 = grpc_socket_mutator_to_arg(mutator1); + + channel_args_.SetSocketMutator(mutator0); + EXPECT_TRUE(HasArg(arg0)); + + channel_args_.SetSocketMutator(mutator1); + EXPECT_TRUE(HasArg(arg1)); + // arg0 is replaced by arg1 + EXPECT_FALSE(HasArg(arg0)); + + // arg0 is destroyed by grpc_socket_mutator_to_arg(mutator1) + arg1.value.pointer.vtable->destroy(arg1.value.pointer.p); +} + TEST_F(ChannelArgumentsTest, SetUserAgentPrefix) { VerifyDefaultChannelArgs(); grpc::string prefix("prefix"); diff --git a/tools/doxygen/Doxyfile.core.internal b/tools/doxygen/Doxyfile.core.internal index 44f147aeb18..8640de48116 100644 --- a/tools/doxygen/Doxyfile.core.internal +++ b/tools/doxygen/Doxyfile.core.internal @@ -830,6 +830,7 @@ src/core/lib/iomgr/sockaddr.h \ src/core/lib/iomgr/sockaddr_posix.h \ src/core/lib/iomgr/sockaddr_utils.h \ src/core/lib/iomgr/sockaddr_windows.h \ +src/core/lib/iomgr/socket_mutator.h \ src/core/lib/iomgr/socket_utils_posix.h \ src/core/lib/iomgr/socket_windows.h \ src/core/lib/iomgr/tcp_client.h \ @@ -991,6 +992,7 @@ src/core/lib/iomgr/pollset_windows.c \ src/core/lib/iomgr/resolve_address_posix.c \ src/core/lib/iomgr/resolve_address_windows.c \ src/core/lib/iomgr/sockaddr_utils.c \ +src/core/lib/iomgr/socket_mutator.c \ src/core/lib/iomgr/socket_utils_common_posix.c \ src/core/lib/iomgr/socket_utils_linux.c \ src/core/lib/iomgr/socket_utils_posix.c \ diff --git a/tools/run_tests/sources_and_headers.json b/tools/run_tests/sources_and_headers.json index c05d194e19e..ce111303a69 100644 --- a/tools/run_tests/sources_and_headers.json +++ b/tools/run_tests/sources_and_headers.json @@ -6394,6 +6394,7 @@ "src/core/lib/iomgr/sockaddr_posix.h", "src/core/lib/iomgr/sockaddr_utils.h", "src/core/lib/iomgr/sockaddr_windows.h", + "src/core/lib/iomgr/socket_mutator.h", "src/core/lib/iomgr/socket_utils_posix.h", "src/core/lib/iomgr/socket_windows.h", "src/core/lib/iomgr/tcp_client.h", @@ -6529,6 +6530,8 @@ "src/core/lib/iomgr/sockaddr_utils.c", "src/core/lib/iomgr/sockaddr_utils.h", "src/core/lib/iomgr/sockaddr_windows.h", + "src/core/lib/iomgr/socket_mutator.c", + "src/core/lib/iomgr/socket_mutator.h", "src/core/lib/iomgr/socket_utils_common_posix.c", "src/core/lib/iomgr/socket_utils_linux.c", "src/core/lib/iomgr/socket_utils_posix.c", diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj b/vsprojects/vcxproj/grpc/grpc.vcxproj index 965d06d1d5c..bb503ccdd41 100644 --- a/vsprojects/vcxproj/grpc/grpc.vcxproj +++ b/vsprojects/vcxproj/grpc/grpc.vcxproj @@ -339,6 +339,7 @@ + @@ -543,6 +544,8 @@ + + diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters index dddd4ecce51..6ed4ae0d8f6 100644 --- a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters +++ b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters @@ -124,6 +124,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr @@ -800,6 +803,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr diff --git a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj index b724c217ed4..d18009ee23e 100644 --- a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj +++ b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj @@ -232,6 +232,7 @@ + @@ -391,6 +392,8 @@ + + diff --git a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters index 92806fa04a2..21aec591973 100644 --- a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters +++ b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters @@ -178,6 +178,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr @@ -587,6 +590,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr diff --git a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj index b46773632cb..948be2c20c8 100644 --- a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj +++ b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj @@ -329,6 +329,7 @@ + @@ -511,6 +512,8 @@ + + diff --git a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters index 6ffc1eab708..74be00343e4 100644 --- a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters +++ b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters @@ -127,6 +127,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr @@ -710,6 +713,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr From a54be0388a0572fac0d76ee8fb8ca99c5fa7b267 Mon Sep 17 00:00:00 2001 From: Yuchen Zeng Date: Thu, 13 Oct 2016 18:42:09 -0700 Subject: [PATCH 07/55] Fix sanity issues --- src/core/lib/channel/channel_args.h | 2 +- test/core/iomgr/socket_utils_test.c | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/core/lib/channel/channel_args.h b/src/core/lib/channel/channel_args.h index 8a3576247c5..17b22ce6699 100644 --- a/src/core/lib/channel/channel_args.h +++ b/src/core/lib/channel/channel_args.h @@ -23,8 +23,8 @@ * 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 - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * 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. diff --git a/test/core/iomgr/socket_utils_test.c b/test/core/iomgr/socket_utils_test.c index 0b0dfcffbef..15d71863baa 100644 --- a/test/core/iomgr/socket_utils_test.c +++ b/test/core/iomgr/socket_utils_test.c @@ -52,7 +52,7 @@ struct test_socket_mutator { static bool mutate_fd(int fd, grpc_socket_mutator *mutator) { int newval; socklen_t intlen = sizeof(newval); - struct test_socket_mutator* m = (struct test_socket_mutator*)mutator; + struct test_socket_mutator *m = (struct test_socket_mutator *)mutator; if (0 != setsockopt(fd, IPPROTO_IP, IP_TOS, &m->option_value, sizeof(m->option_value))) { @@ -105,21 +105,21 @@ int main(int argc, char **argv) { mutator.option_value = IPTOS_LOWDELAY; GPR_ASSERT(GRPC_LOG_IF_ERROR( "set_socket_with_mutator", - grpc_set_socket_with_mutator(sock, (grpc_socket_mutator*)&mutator))); + grpc_set_socket_with_mutator(sock, (grpc_socket_mutator *)&mutator))); mutator.option_value = IPTOS_THROUGHPUT; GPR_ASSERT(GRPC_LOG_IF_ERROR( "set_socket_with_mutator", - grpc_set_socket_with_mutator(sock, (grpc_socket_mutator*)&mutator))); + grpc_set_socket_with_mutator(sock, (grpc_socket_mutator *)&mutator))); mutator.option_value = IPTOS_RELIABILITY; GPR_ASSERT(GRPC_LOG_IF_ERROR( "set_socket_with_mutator", - grpc_set_socket_with_mutator(sock, (grpc_socket_mutator*)&mutator))); + grpc_set_socket_with_mutator(sock, (grpc_socket_mutator *)&mutator))); mutator.option_value = -1; GPR_ASSERT(GRPC_ERROR_NONE != grpc_set_socket_with_mutator( - sock, (grpc_socket_mutator*)&mutator)); + sock, (grpc_socket_mutator *)&mutator)); close(sock); From 87772d5b881449208858bd4a75a52b5b50d30304 Mon Sep 17 00:00:00 2001 From: Yuchen Zeng Date: Fri, 14 Oct 2016 11:33:16 -0700 Subject: [PATCH 08/55] Fix asan issues, clean up --- test/core/iomgr/socket_utils_test.c | 6 ++++-- test/cpp/common/channel_arguments_test.cc | 2 -- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/test/core/iomgr/socket_utils_test.c b/test/core/iomgr/socket_utils_test.c index 15d71863baa..cb4232bb272 100644 --- a/test/core/iomgr/socket_utils_test.c +++ b/test/core/iomgr/socket_utils_test.c @@ -77,6 +77,7 @@ static const grpc_socket_mutator_vtable mutator_vtable = {mutate_fd, int main(int argc, char **argv) { int sock; + grpc_error *err; grpc_test_init(argc, argv); sock = socket(PF_INET, SOCK_STREAM, 0); @@ -118,8 +119,9 @@ int main(int argc, char **argv) { grpc_set_socket_with_mutator(sock, (grpc_socket_mutator *)&mutator))); mutator.option_value = -1; - GPR_ASSERT(GRPC_ERROR_NONE != grpc_set_socket_with_mutator( - sock, (grpc_socket_mutator *)&mutator)); + err = grpc_set_socket_with_mutator(sock, (grpc_socket_mutator *)&mutator); + GPR_ASSERT(err != GRPC_ERROR_NONE); + GRPC_ERROR_UNREF(err); close(sock); diff --git a/test/cpp/common/channel_arguments_test.cc b/test/cpp/common/channel_arguments_test.cc index 0d1e06b1e99..e048108f0f5 100644 --- a/test/cpp/common/channel_arguments_test.cc +++ b/test/cpp/common/channel_arguments_test.cc @@ -34,7 +34,6 @@ #include #include -#include #include #include "src/core/lib/iomgr/socket_mutator.h" @@ -65,7 +64,6 @@ bool test_mutator_mutate_fd(int fd, grpc_socket_mutator* mutator) { void test_mutator_destroy(grpc_socket_mutator* mutator) { TestSocketMutator* tsm = (TestSocketMutator*)mutator; - gpr_log(GPR_ERROR, "destroy is called"); delete tsm; } From 5ab4ca5ed838221de17f2cc05a7655dedf516065 Mon Sep 17 00:00:00 2001 From: Yuchen Zeng Date: Mon, 24 Oct 2016 10:49:55 -0700 Subject: [PATCH 09/55] Add endpoint interface in transport --- .../ext/transport/chttp2/transport/chttp2_transport.c | 11 ++++++++++- .../ext/transport/cronet/transport/cronet_transport.c | 9 ++++++++- src/core/lib/transport/transport.c | 5 +++++ src/core/lib/transport/transport.h | 5 +++++ src/core/lib/transport/transport_impl.h | 3 +++ 5 files changed, 31 insertions(+), 2 deletions(-) diff --git a/src/core/ext/transport/chttp2/transport/chttp2_transport.c b/src/core/ext/transport/chttp2/transport/chttp2_transport.c index 97780d90f25..9f7bc818b62 100644 --- a/src/core/ext/transport/chttp2/transport/chttp2_transport.c +++ b/src/core/ext/transport/chttp2/transport/chttp2_transport.c @@ -2157,6 +2157,14 @@ static char *chttp2_get_peer(grpc_exec_ctx *exec_ctx, grpc_transport *t) { return gpr_strdup(((grpc_chttp2_transport *)t)->peer_string); } +/******************************************************************************* + * MONITORING + */ +static grpc_endpoint *chttp2_get_endpoint(grpc_exec_ctx *exec_ctx, + grpc_transport *t) { + return ((grpc_chttp2_transport *)t)->ep; +} + static const grpc_transport_vtable vtable = {sizeof(grpc_chttp2_stream), "chttp2", init_stream, @@ -2166,7 +2174,8 @@ static const grpc_transport_vtable vtable = {sizeof(grpc_chttp2_stream), perform_transport_op, destroy_stream, destroy_transport, - chttp2_get_peer}; + chttp2_get_peer, + chttp2_get_endpoint}; grpc_transport *grpc_create_chttp2_transport( grpc_exec_ctx *exec_ctx, const grpc_channel_args *channel_args, diff --git a/src/core/ext/transport/cronet/transport/cronet_transport.c b/src/core/ext/transport/cronet/transport/cronet_transport.c index 25ad40b935a..2cd25d68912 100644 --- a/src/core/ext/transport/cronet/transport/cronet_transport.c +++ b/src/core/ext/transport/cronet/transport/cronet_transport.c @@ -42,6 +42,7 @@ #include #include "src/core/ext/transport/chttp2/transport/incoming_metadata.h" +#include "src/core/lib/iomgr/endpoint.h" #include "src/core/lib/iomgr/exec_ctx.h" #include "src/core/lib/support/string.h" #include "src/core/lib/surface/channel.h" @@ -1054,6 +1055,11 @@ static char *get_peer(grpc_exec_ctx *exec_ctx, grpc_transport *gt) { return NULL; } +static grpc_endpoint *get_endpoint(grpc_exec_ctx *exec_ctx, + grpc_transport *gt) { + return NULL; +} + static void perform_op(grpc_exec_ctx *exec_ctx, grpc_transport *gt, grpc_transport_op *op) {} @@ -1066,4 +1072,5 @@ const grpc_transport_vtable grpc_cronet_vtable = {sizeof(stream_obj), perform_op, destroy_stream, destroy_transport, - get_peer}; + get_peer, + get_endpoint}; diff --git a/src/core/lib/transport/transport.c b/src/core/lib/transport/transport.c index 75aec7a5b44..a3713f037f8 100644 --- a/src/core/lib/transport/transport.c +++ b/src/core/lib/transport/transport.c @@ -159,6 +159,11 @@ char *grpc_transport_get_peer(grpc_exec_ctx *exec_ctx, return transport->vtable->get_peer(exec_ctx, transport); } +grpc_endpoint *grpc_transport_get_endpoint(grpc_exec_ctx *exec_ctx, + grpc_transport *transport) { + return transport->vtable->get_endpoint(exec_ctx, transport); +} + void grpc_transport_stream_op_finish_with_failure(grpc_exec_ctx *exec_ctx, grpc_transport_stream_op *op, grpc_error *error) { diff --git a/src/core/lib/transport/transport.h b/src/core/lib/transport/transport.h index 50253ebad18..646b7529e97 100644 --- a/src/core/lib/transport/transport.h +++ b/src/core/lib/transport/transport.h @@ -37,6 +37,7 @@ #include #include "src/core/lib/channel/context.h" +#include "src/core/lib/iomgr/endpoint.h" #include "src/core/lib/iomgr/polling_entity.h" #include "src/core/lib/iomgr/pollset.h" #include "src/core/lib/iomgr/pollset_set.h" @@ -295,6 +296,10 @@ void grpc_transport_destroy(grpc_exec_ctx *exec_ctx, grpc_transport *transport); char *grpc_transport_get_peer(grpc_exec_ctx *exec_ctx, grpc_transport *transport); +/* Get the endpoint used by \a transport */ +grpc_endpoint *grpc_transport_get_endpoint(grpc_exec_ctx *exec_ctx, + grpc_transport *transport); + /* Allocate a grpc_transport_op, and preconfigure the on_consumed closure to \a on_consumed and then delete the returned transport op */ grpc_transport_op *grpc_make_transport_op(grpc_closure *on_consumed); diff --git a/src/core/lib/transport/transport_impl.h b/src/core/lib/transport/transport_impl.h index fc7140671b9..8553148c35f 100644 --- a/src/core/lib/transport/transport_impl.h +++ b/src/core/lib/transport/transport_impl.h @@ -74,6 +74,9 @@ typedef struct grpc_transport_vtable { /* implementation of grpc_transport_get_peer */ char *(*get_peer)(grpc_exec_ctx *exec_ctx, grpc_transport *self); + + /* implementation of grpc_transport_get_endpoint */ + grpc_endpoint *(*get_endpoint)(grpc_exec_ctx *exec_ctx, grpc_transport *self); } grpc_transport_vtable; /* an instance of a grpc transport */ From e5ec9ac9e2e0195e04c7c99d1c2d9a87f67404fb Mon Sep 17 00:00:00 2001 From: Yuchen Zeng Date: Mon, 24 Oct 2016 14:43:12 -0700 Subject: [PATCH 10/55] Add grpc_endpoint_get_socket and GRPC_SOCKET --- src/core/lib/iomgr/endpoint.h | 6 +++++ src/core/lib/iomgr/sockaddr_posix.h | 2 ++ src/core/lib/iomgr/sockaddr_windows.h | 2 ++ src/core/lib/iomgr/tcp_posix.c | 8 ++++++- .../lib/security/transport/secure_endpoint.c | 8 ++++++- test/core/internal_api_canaries/iomgr.c | 3 ++- test/core/util/mock_endpoint.c | 22 ++++++++++--------- test/core/util/passthru_endpoint.c | 22 ++++++++++--------- 8 files changed, 50 insertions(+), 23 deletions(-) diff --git a/src/core/lib/iomgr/endpoint.h b/src/core/lib/iomgr/endpoint.h index 910a6f6532a..22979982e40 100644 --- a/src/core/lib/iomgr/endpoint.h +++ b/src/core/lib/iomgr/endpoint.h @@ -39,6 +39,7 @@ #include #include "src/core/lib/iomgr/pollset.h" #include "src/core/lib/iomgr/pollset_set.h" +#include "src/core/lib/iomgr/sockaddr.h" /* An endpoint caps a streaming channel between two communicating processes. Examples may be: a tcp socket, , or some shared memory. */ @@ -59,6 +60,7 @@ struct grpc_endpoint_vtable { void (*shutdown)(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep); void (*destroy)(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep); char *(*get_peer)(grpc_endpoint *ep); + GRPC_SOCKET *(*get_socket)(grpc_endpoint *ep); }; /* When data is available on the connection, calls the callback with slices. @@ -71,6 +73,10 @@ void grpc_endpoint_read(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, char *grpc_endpoint_get_peer(grpc_endpoint *ep); +/* Get the socket (file descriptor or SOCKET) used by \a ep. Return NULL if + \a ep is not using a socket. */ +GRPC_SOCKET *grpc_endpoint_get_socket(grpc_endpoint *ep); + /* Retrieve a reference to the workqueue associated with this endpoint */ grpc_workqueue *grpc_endpoint_get_workqueue(grpc_endpoint *ep); diff --git a/src/core/lib/iomgr/sockaddr_posix.h b/src/core/lib/iomgr/sockaddr_posix.h index b150de42f70..a4236ffaeeb 100644 --- a/src/core/lib/iomgr/sockaddr_posix.h +++ b/src/core/lib/iomgr/sockaddr_posix.h @@ -41,4 +41,6 @@ #include #include +typedef int GRPC_SOCKET; + #endif /* GRPC_CORE_LIB_IOMGR_SOCKADDR_POSIX_H */ diff --git a/src/core/lib/iomgr/sockaddr_windows.h b/src/core/lib/iomgr/sockaddr_windows.h index 971db5b32b2..507fc71f63d 100644 --- a/src/core/lib/iomgr/sockaddr_windows.h +++ b/src/core/lib/iomgr/sockaddr_windows.h @@ -40,4 +40,6 @@ // must be included after the above #include +typedef SOCKET GRPC_SOCKET; + #endif /* GRPC_CORE_LIB_IOMGR_SOCKADDR_WINDOWS_H */ diff --git a/src/core/lib/iomgr/tcp_posix.c b/src/core/lib/iomgr/tcp_posix.c index 00fd77679ad..5ed00a8e981 100644 --- a/src/core/lib/iomgr/tcp_posix.c +++ b/src/core/lib/iomgr/tcp_posix.c @@ -464,6 +464,11 @@ static char *tcp_get_peer(grpc_endpoint *ep) { return gpr_strdup(tcp->peer_string); } +static int *tcp_get_socket(grpc_endpoint *ep) { + grpc_tcp *tcp = (grpc_tcp *)ep; + return &tcp->fd; +} + static grpc_workqueue *tcp_get_workqueue(grpc_endpoint *ep) { grpc_tcp *tcp = (grpc_tcp *)ep; return grpc_fd_get_workqueue(tcp->em_fd); @@ -476,7 +481,8 @@ static const grpc_endpoint_vtable vtable = {tcp_read, tcp_add_to_pollset_set, tcp_shutdown, tcp_destroy, - tcp_get_peer}; + tcp_get_peer, + tcp_get_socket}; grpc_endpoint *grpc_tcp_create(grpc_fd *em_fd, size_t slice_size, const char *peer_string) { diff --git a/src/core/lib/security/transport/secure_endpoint.c b/src/core/lib/security/transport/secure_endpoint.c index acb0113ea8c..1086c3be6af 100644 --- a/src/core/lib/security/transport/secure_endpoint.c +++ b/src/core/lib/security/transport/secure_endpoint.c @@ -38,6 +38,7 @@ #include #include #include "src/core/lib/debug/trace.h" +#include "src/core/lib/iomgr/sockaddr.h" #include "src/core/lib/profiling/timers.h" #include "src/core/lib/security/transport/tsi_error.h" #include "src/core/lib/support/string.h" @@ -365,6 +366,10 @@ static char *endpoint_get_peer(grpc_endpoint *secure_ep) { return grpc_endpoint_get_peer(ep->wrapped_ep); } +static GRPC_SOCKET *endpoint_get_socket(grpc_endpoint *secure_ep) { + return NULL; +} + static grpc_workqueue *endpoint_get_workqueue(grpc_endpoint *secure_ep) { secure_endpoint *ep = (secure_endpoint *)secure_ep; return grpc_endpoint_get_workqueue(ep->wrapped_ep); @@ -377,7 +382,8 @@ static const grpc_endpoint_vtable vtable = {endpoint_read, endpoint_add_to_pollset_set, endpoint_shutdown, endpoint_destroy, - endpoint_get_peer}; + endpoint_get_peer, + endpoint_get_socket}; grpc_endpoint *grpc_secure_endpoint_create( struct tsi_frame_protector *protector, grpc_endpoint *transport, diff --git a/test/core/internal_api_canaries/iomgr.c b/test/core/internal_api_canaries/iomgr.c index 27d630623ed..3620b932859 100644 --- a/test/core/internal_api_canaries/iomgr.c +++ b/test/core/internal_api_canaries/iomgr.c @@ -84,7 +84,8 @@ static void test_code(void) { grpc_endpoint_add_to_pollset_set, grpc_endpoint_shutdown, grpc_endpoint_destroy, - grpc_endpoint_get_peer}; + grpc_endpoint_get_peer, + grpc_endpoint_get_socket}; endpoint.vtable = &vtable; grpc_endpoint_read(&exec_ctx, &endpoint, NULL, NULL); diff --git a/test/core/util/mock_endpoint.c b/test/core/util/mock_endpoint.c index 13e0e918fbe..15e88968e8f 100644 --- a/test/core/util/mock_endpoint.c +++ b/test/core/util/mock_endpoint.c @@ -35,6 +35,7 @@ #include #include +#include "src/core/lib/iomgr/sockaddr.h" typedef struct grpc_mock_endpoint { grpc_endpoint base; @@ -95,18 +96,19 @@ static char *me_get_peer(grpc_endpoint *ep) { return gpr_strdup("fake:mock_endpoint"); } +static GRPC_SOCKET *me_get_socket(grpc_endpoint *ep) { return NULL; } + static grpc_workqueue *me_get_workqueue(grpc_endpoint *ep) { return NULL; } -static const grpc_endpoint_vtable vtable = { - me_read, - me_write, - me_get_workqueue, - me_add_to_pollset, - me_add_to_pollset_set, - me_shutdown, - me_destroy, - me_get_peer, -}; +static const grpc_endpoint_vtable vtable = {me_read, + me_write, + me_get_workqueue, + me_add_to_pollset, + me_add_to_pollset_set, + me_shutdown, + me_destroy, + me_get_peer, + me_get_socket}; grpc_endpoint *grpc_mock_endpoint_create(void (*on_write)(gpr_slice slice)) { grpc_mock_endpoint *m = gpr_malloc(sizeof(*m)); diff --git a/test/core/util/passthru_endpoint.c b/test/core/util/passthru_endpoint.c index 7ed9e97bd6a..5c7167207f9 100644 --- a/test/core/util/passthru_endpoint.c +++ b/test/core/util/passthru_endpoint.c @@ -35,6 +35,7 @@ #include #include +#include "src/core/lib/iomgr/sockaddr.h" typedef struct passthru_endpoint passthru_endpoint; @@ -140,18 +141,19 @@ static char *me_get_peer(grpc_endpoint *ep) { return gpr_strdup("fake:mock_endpoint"); } +static GRPC_SOCKET *me_get_socket(grpc_endpoint *ep) { return NULL; } + static grpc_workqueue *me_get_workqueue(grpc_endpoint *ep) { return NULL; } -static const grpc_endpoint_vtable vtable = { - me_read, - me_write, - me_get_workqueue, - me_add_to_pollset, - me_add_to_pollset_set, - me_shutdown, - me_destroy, - me_get_peer, -}; +static const grpc_endpoint_vtable vtable = {me_read, + me_write, + me_get_workqueue, + me_add_to_pollset, + me_add_to_pollset_set, + me_shutdown, + me_destroy, + me_get_peer, + me_get_socket}; static void half_init(half *m, passthru_endpoint *parent) { m->base.vtable = &vtable; From 68413c221e341f4f00326e892077c5fcd4b4f788 Mon Sep 17 00:00:00 2001 From: Yuchen Zeng Date: Wed, 2 Nov 2016 11:57:37 -0700 Subject: [PATCH 11/55] Remove GRPC_SOCKET --- src/core/lib/iomgr/endpoint.c | 2 ++ src/core/lib/iomgr/endpoint.h | 9 ++++----- src/core/lib/iomgr/sockaddr_posix.h | 2 -- src/core/lib/iomgr/sockaddr_windows.h | 2 -- src/core/lib/iomgr/tcp_posix.c | 6 +++--- src/core/lib/security/transport/secure_endpoint.c | 6 ++---- test/core/internal_api_canaries/iomgr.c | 2 +- test/core/util/mock_endpoint.c | 4 ++-- test/core/util/passthru_endpoint.c | 4 ++-- 9 files changed, 16 insertions(+), 21 deletions(-) diff --git a/src/core/lib/iomgr/endpoint.c b/src/core/lib/iomgr/endpoint.c index f901fcf9622..e70b5599a13 100644 --- a/src/core/lib/iomgr/endpoint.c +++ b/src/core/lib/iomgr/endpoint.c @@ -66,6 +66,8 @@ char* grpc_endpoint_get_peer(grpc_endpoint* ep) { return ep->vtable->get_peer(ep); } +int grpc_endpoint_get_fd(grpc_endpoint* ep) { return ep->vtable->get_fd(ep); } + grpc_workqueue* grpc_endpoint_get_workqueue(grpc_endpoint* ep) { return ep->vtable->get_workqueue(ep); } diff --git a/src/core/lib/iomgr/endpoint.h b/src/core/lib/iomgr/endpoint.h index 22979982e40..2fa59cfc072 100644 --- a/src/core/lib/iomgr/endpoint.h +++ b/src/core/lib/iomgr/endpoint.h @@ -39,7 +39,6 @@ #include #include "src/core/lib/iomgr/pollset.h" #include "src/core/lib/iomgr/pollset_set.h" -#include "src/core/lib/iomgr/sockaddr.h" /* An endpoint caps a streaming channel between two communicating processes. Examples may be: a tcp socket, , or some shared memory. */ @@ -60,7 +59,7 @@ struct grpc_endpoint_vtable { void (*shutdown)(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep); void (*destroy)(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep); char *(*get_peer)(grpc_endpoint *ep); - GRPC_SOCKET *(*get_socket)(grpc_endpoint *ep); + int (*get_fd)(grpc_endpoint *ep); }; /* When data is available on the connection, calls the callback with slices. @@ -73,9 +72,9 @@ void grpc_endpoint_read(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, char *grpc_endpoint_get_peer(grpc_endpoint *ep); -/* Get the socket (file descriptor or SOCKET) used by \a ep. Return NULL if - \a ep is not using a socket. */ -GRPC_SOCKET *grpc_endpoint_get_socket(grpc_endpoint *ep); +/* Get the file descriptor used by \a ep. Return -1 if \a ep is not using a fd. + */ +int grpc_endpoint_get_fd(grpc_endpoint *ep); /* Retrieve a reference to the workqueue associated with this endpoint */ grpc_workqueue *grpc_endpoint_get_workqueue(grpc_endpoint *ep); diff --git a/src/core/lib/iomgr/sockaddr_posix.h b/src/core/lib/iomgr/sockaddr_posix.h index a4236ffaeeb..b150de42f70 100644 --- a/src/core/lib/iomgr/sockaddr_posix.h +++ b/src/core/lib/iomgr/sockaddr_posix.h @@ -41,6 +41,4 @@ #include #include -typedef int GRPC_SOCKET; - #endif /* GRPC_CORE_LIB_IOMGR_SOCKADDR_POSIX_H */ diff --git a/src/core/lib/iomgr/sockaddr_windows.h b/src/core/lib/iomgr/sockaddr_windows.h index 507fc71f63d..971db5b32b2 100644 --- a/src/core/lib/iomgr/sockaddr_windows.h +++ b/src/core/lib/iomgr/sockaddr_windows.h @@ -40,6 +40,4 @@ // must be included after the above #include -typedef SOCKET GRPC_SOCKET; - #endif /* GRPC_CORE_LIB_IOMGR_SOCKADDR_WINDOWS_H */ diff --git a/src/core/lib/iomgr/tcp_posix.c b/src/core/lib/iomgr/tcp_posix.c index 5ed00a8e981..73e28ef5dd9 100644 --- a/src/core/lib/iomgr/tcp_posix.c +++ b/src/core/lib/iomgr/tcp_posix.c @@ -464,9 +464,9 @@ static char *tcp_get_peer(grpc_endpoint *ep) { return gpr_strdup(tcp->peer_string); } -static int *tcp_get_socket(grpc_endpoint *ep) { +static int tcp_get_fd(grpc_endpoint *ep) { grpc_tcp *tcp = (grpc_tcp *)ep; - return &tcp->fd; + return tcp->fd; } static grpc_workqueue *tcp_get_workqueue(grpc_endpoint *ep) { @@ -482,7 +482,7 @@ static const grpc_endpoint_vtable vtable = {tcp_read, tcp_shutdown, tcp_destroy, tcp_get_peer, - tcp_get_socket}; + tcp_get_fd}; grpc_endpoint *grpc_tcp_create(grpc_fd *em_fd, size_t slice_size, const char *peer_string) { diff --git a/src/core/lib/security/transport/secure_endpoint.c b/src/core/lib/security/transport/secure_endpoint.c index 1086c3be6af..22dc05e9f9e 100644 --- a/src/core/lib/security/transport/secure_endpoint.c +++ b/src/core/lib/security/transport/secure_endpoint.c @@ -366,9 +366,7 @@ static char *endpoint_get_peer(grpc_endpoint *secure_ep) { return grpc_endpoint_get_peer(ep->wrapped_ep); } -static GRPC_SOCKET *endpoint_get_socket(grpc_endpoint *secure_ep) { - return NULL; -} +static int endpoint_get_fd(grpc_endpoint *secure_ep) { return -1; } static grpc_workqueue *endpoint_get_workqueue(grpc_endpoint *secure_ep) { secure_endpoint *ep = (secure_endpoint *)secure_ep; @@ -383,7 +381,7 @@ static const grpc_endpoint_vtable vtable = {endpoint_read, endpoint_shutdown, endpoint_destroy, endpoint_get_peer, - endpoint_get_socket}; + endpoint_get_fd}; grpc_endpoint *grpc_secure_endpoint_create( struct tsi_frame_protector *protector, grpc_endpoint *transport, diff --git a/test/core/internal_api_canaries/iomgr.c b/test/core/internal_api_canaries/iomgr.c index 3620b932859..0995332933b 100644 --- a/test/core/internal_api_canaries/iomgr.c +++ b/test/core/internal_api_canaries/iomgr.c @@ -85,7 +85,7 @@ static void test_code(void) { grpc_endpoint_shutdown, grpc_endpoint_destroy, grpc_endpoint_get_peer, - grpc_endpoint_get_socket}; + grpc_endpoint_get_fd}; endpoint.vtable = &vtable; grpc_endpoint_read(&exec_ctx, &endpoint, NULL, NULL); diff --git a/test/core/util/mock_endpoint.c b/test/core/util/mock_endpoint.c index 15e88968e8f..063d4366cfd 100644 --- a/test/core/util/mock_endpoint.c +++ b/test/core/util/mock_endpoint.c @@ -96,7 +96,7 @@ static char *me_get_peer(grpc_endpoint *ep) { return gpr_strdup("fake:mock_endpoint"); } -static GRPC_SOCKET *me_get_socket(grpc_endpoint *ep) { return NULL; } +static int me_get_fd(grpc_endpoint *ep) { return -1; } static grpc_workqueue *me_get_workqueue(grpc_endpoint *ep) { return NULL; } @@ -108,7 +108,7 @@ static const grpc_endpoint_vtable vtable = {me_read, me_shutdown, me_destroy, me_get_peer, - me_get_socket}; + me_get_fd}; grpc_endpoint *grpc_mock_endpoint_create(void (*on_write)(gpr_slice slice)) { grpc_mock_endpoint *m = gpr_malloc(sizeof(*m)); diff --git a/test/core/util/passthru_endpoint.c b/test/core/util/passthru_endpoint.c index 5c7167207f9..f40177819e6 100644 --- a/test/core/util/passthru_endpoint.c +++ b/test/core/util/passthru_endpoint.c @@ -141,7 +141,7 @@ static char *me_get_peer(grpc_endpoint *ep) { return gpr_strdup("fake:mock_endpoint"); } -static GRPC_SOCKET *me_get_socket(grpc_endpoint *ep) { return NULL; } +static int me_get_fd(grpc_endpoint *ep) { return -1; } static grpc_workqueue *me_get_workqueue(grpc_endpoint *ep) { return NULL; } @@ -153,7 +153,7 @@ static const grpc_endpoint_vtable vtable = {me_read, me_shutdown, me_destroy, me_get_peer, - me_get_socket}; + me_get_fd}; static void half_init(half *m, passthru_endpoint *parent) { m->base.vtable = &vtable; From 90102c2bfcf98f842f66567c67cbccbd0ede1d2b Mon Sep 17 00:00:00 2001 From: Vijay Pai Date: Thu, 3 Nov 2016 11:41:19 -0700 Subject: [PATCH 12/55] Eliminate unnecessary uses of new[]/delete[] that can be replaced with vector Also start eliminating uses of plain-old delete that are not helpful --- test/cpp/end2end/async_end2end_test.cc | 6 ++---- test/cpp/end2end/thread_stress_test.cc | 14 ++++++-------- test/cpp/qps/client.h | 7 ++----- test/cpp/qps/client_sync.cc | 12 +++--------- test/cpp/qps/driver.cc | 13 ++----------- 5 files changed, 15 insertions(+), 37 deletions(-) diff --git a/test/cpp/end2end/async_end2end_test.cc b/test/cpp/end2end/async_end2end_test.cc index 3845582d5db..0993ead86fc 100644 --- a/test/cpp/end2end/async_end2end_test.cc +++ b/test/cpp/end2end/async_end2end_test.cc @@ -352,15 +352,13 @@ void ServerWait(Server* server, int* notify) { } TEST_P(AsyncEnd2endTest, WaitAndShutdownTest) { int notify = 0; - std::thread* wait_thread = - new std::thread(&ServerWait, server_.get(), ¬ify); + std::thread wait_thread(&ServerWait, server_.get(), ¬ify); ResetStub(); SendRpc(1); EXPECT_EQ(0, notify); server_->Shutdown(); - wait_thread->join(); + wait_thread.join(); EXPECT_EQ(1, notify); - delete wait_thread; } TEST_P(AsyncEnd2endTest, ShutdownThenWait) { diff --git a/test/cpp/end2end/thread_stress_test.cc b/test/cpp/end2end/thread_stress_test.cc index fe5a219eed7..51cc3d91df5 100644 --- a/test/cpp/end2end/thread_stress_test.cc +++ b/test/cpp/end2end/thread_stress_test.cc @@ -232,13 +232,13 @@ class CommonStressTestSyncServer : public CommonStressTest { class CommonStressTestAsyncServer : public CommonStressTest { public: + CommonStressTestAsyncServer() : contexts_(kNumAsyncServerThreads * 100) {} void SetUp() override { shutting_down_ = false; ServerBuilder builder; SetUpStart(&builder, &service_); cq_ = builder.AddCompletionQueue(); SetUpEnd(&builder); - contexts_ = new Context[kNumAsyncServerThreads * 100]; for (int i = 0; i < kNumAsyncServerThreads * 100; i++) { RefreshContext(i); } @@ -265,7 +265,6 @@ class CommonStressTestAsyncServer while (cq_->Next(&ignored_tag, &ignored_ok)) ; TearDownEnd(); - delete[] contexts_; } private: @@ -311,7 +310,8 @@ class CommonStressTestAsyncServer response_writer; EchoRequest recv_request; enum { READY, DONE } state; - } * contexts_; + }; + std::vector contexts_; ::grpc::testing::EchoTestService::AsyncService service_; std::unique_ptr cq_; bool shutting_down_; @@ -353,14 +353,12 @@ typedef ::testing::Typescommon_.ResetStub(); - std::vector threads; + std::vector threads; for (int i = 0; i < kNumThreads; ++i) { - threads.push_back( - new std::thread(SendRpc, this->common_.GetStub(), kNumRpcs)); + threads.emplace_back(SendRpc, this->common_.GetStub(), kNumRpcs); } for (int i = 0; i < kNumThreads; ++i) { - threads[i]->join(); - delete threads[i]; + threads[i].join(); } } diff --git a/test/cpp/qps/client.h b/test/cpp/qps/client.h index a8d125ad281..56bfa9fee12 100644 --- a/test/cpp/qps/client.h +++ b/test/cpp/qps/client.h @@ -163,10 +163,9 @@ class Client { MaybeStartRequests(); - // avoid std::vector for old compilers that expect a copy constructor if (reset) { - Histogram* to_merge = new Histogram[threads_.size()]; - StatusHistogram* to_merge_status = new StatusHistogram[threads_.size()]; + std::vector to_merge(threads_.size()); + std::vector to_merge_status(threads_.size()); for (size_t i = 0; i < threads_.size(); i++) { threads_[i]->BeginSwap(&to_merge[i], &to_merge_status[i]); @@ -177,8 +176,6 @@ class Client { latencies.Merge(to_merge[i]); MergeStatusHistogram(to_merge_status[i], &statuses); } - delete[] to_merge; - delete[] to_merge_status; timer_result = timer->Mark(); } else { // merge snapshots of each thread histogram diff --git a/test/cpp/qps/client_sync.cc b/test/cpp/qps/client_sync.cc index a88a24d89cc..3f402b5c36c 100644 --- a/test/cpp/qps/client_sync.cc +++ b/test/cpp/qps/client_sync.cc @@ -138,10 +138,7 @@ class SynchronousUnaryClient final : public SynchronousClient { class SynchronousStreamingClient final : public SynchronousClient { public: SynchronousStreamingClient(const ClientConfig& config) - : SynchronousClient(config) { - context_ = new grpc::ClientContext[num_threads_]; - stream_ = new std::unique_ptr< - grpc::ClientReaderWriter>[num_threads_]; + : SynchronousClient(config), context_(num_threads_), stream_(num_threads_) { for (size_t thread_idx = 0; thread_idx < num_threads_; thread_idx++) { auto* stub = channels_[thread_idx % channels_.size()].get_stub(); stream_[thread_idx] = stub->StreamingCall(&context_[thread_idx]); @@ -161,8 +158,6 @@ class SynchronousStreamingClient final : public SynchronousClient { } } } - delete[] stream_; - delete[] context_; } bool ThreadFunc(HistogramEntry* entry, size_t thread_idx) override { @@ -182,9 +177,8 @@ class SynchronousStreamingClient final : public SynchronousClient { private: // These are both conceptually std::vector but cannot be for old compilers // that expect contained classes to support copy constructors - grpc::ClientContext* context_; - std::unique_ptr>* - stream_; + std::vector context_; + std::vector>> stream_; }; std::unique_ptr CreateSynchronousUnaryClient( diff --git a/test/cpp/qps/driver.cc b/test/cpp/qps/driver.cc index a440341ccf4..2f343d36885 100644 --- a/test/cpp/qps/driver.cc +++ b/test/cpp/qps/driver.cc @@ -262,10 +262,7 @@ std::unique_ptr RunScenario( workers.resize(num_clients + num_servers); // Start servers - using runsc::ServerData; - // servers is array rather than std::vector to avoid gcc-4.4 issues - // where class contained in std::vector must have a copy constructor - auto* servers = new ServerData[num_servers]; + std::vector servers(num_servers); for (size_t i = 0; i < num_servers; i++) { gpr_log(GPR_INFO, "Starting server on %s (worker #%" PRIuPTR ")", workers[i].c_str(), i); @@ -328,10 +325,7 @@ std::unique_ptr RunScenario( // Targets are all set by now result_client_config = client_config; // Start clients - using runsc::ClientData; - // clients is array rather than std::vector to avoid gcc-4.4 issues - // where class contained in std::vector must have a copy constructor - auto* clients = new ClientData[num_clients]; + std::vector clients(num_clients); size_t channels_allocated = 0; for (size_t i = 0; i < num_clients; i++) { const auto& worker = workers[i + num_servers]; @@ -501,7 +495,6 @@ std::unique_ptr RunScenario( s.error_message().c_str()); } } - delete[] clients; merged_latencies.FillProto(result->mutable_latencies()); for (std::unordered_map::iterator it = merged_statuses.begin(); @@ -544,8 +537,6 @@ std::unique_ptr RunScenario( } } - delete[] servers; - postprocess_scenario_result(result.get()); return result; } From f2764e76f96558761af97d9ab3257342fe23e42f Mon Sep 17 00:00:00 2001 From: Vijay Pai Date: Thu, 3 Nov 2016 11:43:39 -0700 Subject: [PATCH 13/55] clang-format --- test/cpp/qps/client_sync.cc | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/test/cpp/qps/client_sync.cc b/test/cpp/qps/client_sync.cc index 3f402b5c36c..b1e61865e73 100644 --- a/test/cpp/qps/client_sync.cc +++ b/test/cpp/qps/client_sync.cc @@ -138,7 +138,9 @@ class SynchronousUnaryClient final : public SynchronousClient { class SynchronousStreamingClient final : public SynchronousClient { public: SynchronousStreamingClient(const ClientConfig& config) - : SynchronousClient(config), context_(num_threads_), stream_(num_threads_) { + : SynchronousClient(config), + context_(num_threads_), + stream_(num_threads_) { for (size_t thread_idx = 0; thread_idx < num_threads_; thread_idx++) { auto* stub = channels_[thread_idx % channels_.size()].get_stub(); stream_[thread_idx] = stub->StreamingCall(&context_[thread_idx]); @@ -178,7 +180,9 @@ class SynchronousStreamingClient final : public SynchronousClient { // These are both conceptually std::vector but cannot be for old compilers // that expect contained classes to support copy constructors std::vector context_; - std::vector>> stream_; + std::vector< + std::unique_ptr>> + stream_; }; std::unique_ptr CreateSynchronousUnaryClient( From d75e7fec017a2fb0cd09443a83f594afec768b60 Mon Sep 17 00:00:00 2001 From: Vijay Pai Date: Thu, 3 Nov 2016 12:17:25 -0700 Subject: [PATCH 14/55] Fix a comment --- test/cpp/util/config_grpc_cli.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/cpp/util/config_grpc_cli.h b/test/cpp/util/config_grpc_cli.h index ea8231aa26d..ac1e3044b77 100644 --- a/test/cpp/util/config_grpc_cli.h +++ b/test/cpp/util/config_grpc_cli.h @@ -77,7 +77,7 @@ namespace compiler { typedef GRPC_CUSTOM_DISKSOURCETREE DiskSourceTree; typedef GRPC_CUSTOM_IMPORTER Importer; typedef GRPC_CUSTOM_MULTIFILEERRORCOLLECTOR MultiFileErrorCollector; -} // namespace importer +} // namespace compiler } // namespace protobuf } // namespace grpc From c01958bf550f95c72ebf3aa509be27a76e93ac89 Mon Sep 17 00:00:00 2001 From: Vijay Pai Date: Thu, 3 Nov 2016 12:22:11 -0700 Subject: [PATCH 15/55] Cleanup unneeded namespace --- test/cpp/qps/client_async.cc | 1 - 1 file changed, 1 deletion(-) diff --git a/test/cpp/qps/client_async.cc b/test/cpp/qps/client_async.cc index 2ec6a5a23bc..4032039ea10 100644 --- a/test/cpp/qps/client_async.cc +++ b/test/cpp/qps/client_async.cc @@ -177,7 +177,6 @@ class AsyncClient : public ClientImpl { shutdown_state_.emplace_back(new PerThreadShutdownState()); } - using namespace std::placeholders; int t = 0; for (int ch = 0; ch < config.client_channels(); ch++) { for (int i = 0; i < config.outstanding_rpcs_per_channel(); i++) { From f4671bfaef0db6456a98f49d12dab5b845ea5ed4 Mon Sep 17 00:00:00 2001 From: Vijay Pai Date: Thu, 3 Nov 2016 12:25:39 -0700 Subject: [PATCH 16/55] Remove a namespace and start using a lambda for a small function --- test/cpp/qps/driver.cc | 50 ++++++++++++++++-------------------------- 1 file changed, 19 insertions(+), 31 deletions(-) diff --git a/test/cpp/qps/driver.cc b/test/cpp/qps/driver.cc index 2f343d36885..cc16cc820cd 100644 --- a/test/cpp/qps/driver.cc +++ b/test/cpp/qps/driver.cc @@ -177,39 +177,21 @@ static void postprocess_scenario_result(ScenarioResult* result) { } } -// Namespace for classes and functions used only in RunScenario -// Using this rather than local definitions to workaround gcc-4.4 limitations -// regarding using templates without linkage -namespace runsc { - -// ClientContext allocator -static ClientContext* AllocContext(list* contexts) { - contexts->emplace_back(); - auto context = &contexts->back(); - context->set_wait_for_ready(true); - return context; -} - -struct ServerData { - unique_ptr stub; - unique_ptr> stream; -}; - -struct ClientData { - unique_ptr stub; - unique_ptr> stream; -}; -} // namespace runsc - std::unique_ptr RunScenario( const ClientConfig& initial_client_config, size_t num_clients, const ServerConfig& initial_server_config, size_t num_servers, int warmup_seconds, int benchmark_seconds, int spawn_local_worker_count) { // Log everything from the driver gpr_set_log_verbosity(GPR_LOG_SEVERITY_DEBUG); - + // ClientContext allocations (all are destroyed at scope exit) list contexts; + auto alloc_context = [](list* contexts) { + contexts->emplace_back(); + auto context = &contexts->back(); + context->set_wait_for_ready(true); + return context; + }; // To be added to the result, containing the final configuration used for // client and config (including host, etc.) @@ -262,7 +244,11 @@ std::unique_ptr RunScenario( workers.resize(num_clients + num_servers); // Start servers - std::vector servers(num_servers); + struct ServerData { + unique_ptr stub; + unique_ptr> stream; + }; + std::vector servers(num_servers); for (size_t i = 0; i < num_servers; i++) { gpr_log(GPR_INFO, "Starting server on %s (worker #%" PRIuPTR ")", workers[i].c_str(), i); @@ -306,8 +292,7 @@ std::unique_ptr RunScenario( ServerArgs args; *args.mutable_setup() = server_config; - servers[i].stream = - servers[i].stub->RunServer(runsc::AllocContext(&contexts)); + servers[i].stream = servers[i].stub->RunServer(alloc_context(&contexts)); if (!servers[i].stream->Write(args)) { gpr_log(GPR_ERROR, "Could not write args to server %zu", i); } @@ -325,7 +310,11 @@ std::unique_ptr RunScenario( // Targets are all set by now result_client_config = client_config; // Start clients - std::vector clients(num_clients); + struct ClientData { + unique_ptr stub; + unique_ptr> stream; + }; + std::vector clients(num_clients); size_t channels_allocated = 0; for (size_t i = 0; i < num_clients; i++) { const auto& worker = workers[i + num_servers]; @@ -374,8 +363,7 @@ std::unique_ptr RunScenario( ClientArgs args; *args.mutable_setup() = per_client_config; - clients[i].stream = - clients[i].stub->RunClient(runsc::AllocContext(&contexts)); + clients[i].stream = clients[i].stub->RunClient(alloc_context(&contexts)); if (!clients[i].stream->Write(args)) { gpr_log(GPR_ERROR, "Could not write args to client %zu", i); } From b0a6be2b8f7791b62bb4c998845bee1ed1a23f23 Mon Sep 17 00:00:00 2001 From: Vijay Pai Date: Thu, 3 Nov 2016 12:45:02 -0700 Subject: [PATCH 17/55] Remove some unnecessary new/delete patterns --- test/cpp/end2end/async_end2end_test.cc | 8 ++++---- test/cpp/end2end/end2end_test.cc | 21 +++++++++------------ test/cpp/end2end/test_service_impl.cc | 12 ++++++------ test/cpp/end2end/thread_stress_test.cc | 25 +++++++++++-------------- 4 files changed, 30 insertions(+), 36 deletions(-) diff --git a/test/cpp/end2end/async_end2end_test.cc b/test/cpp/end2end/async_end2end_test.cc index 0993ead86fc..3bec37fdd3e 100644 --- a/test/cpp/end2end/async_end2end_test.cc +++ b/test/cpp/end2end/async_end2end_test.cc @@ -989,7 +989,7 @@ class AsyncEnd2endServerTryCancelTest : public AsyncEnd2endTest { expected_server_cq_result = false; } - std::thread* server_try_cancel_thd = NULL; + std::thread* server_try_cancel_thd = nullptr; auto verif = Verifier(GetParam().disable_blocking); @@ -1025,7 +1025,7 @@ class AsyncEnd2endServerTryCancelTest : public AsyncEnd2endTest { } } - if (server_try_cancel_thd != NULL) { + if (server_try_cancel_thd != nullptr) { server_try_cancel_thd->join(); delete server_try_cancel_thd; } @@ -1250,7 +1250,7 @@ class AsyncEnd2endServerTryCancelTest : public AsyncEnd2endTest { expected_cq_result = false; } - std::thread* server_try_cancel_thd = NULL; + std::thread* server_try_cancel_thd = nullptr; auto verif = Verifier(GetParam().disable_blocking); @@ -1330,7 +1330,7 @@ class AsyncEnd2endServerTryCancelTest : public AsyncEnd2endTest { EXPECT_EQ(verif.Next(cq_.get(), ignore_cq_result), 8); } - if (server_try_cancel_thd != NULL) { + if (server_try_cancel_thd != nullptr) { server_try_cancel_thd->join(); delete server_try_cancel_thd; } diff --git a/test/cpp/end2end/end2end_test.cc b/test/cpp/end2end/end2end_test.cc index 4b8749884f8..9bb892c694b 100644 --- a/test/cpp/end2end/end2end_test.cc +++ b/test/cpp/end2end/end2end_test.cc @@ -656,25 +656,23 @@ TEST_P(End2endTest, SimpleRpcWithCustomeUserAgentPrefix) { TEST_P(End2endTest, MultipleRpcsWithVariedBinaryMetadataValue) { ResetStub(); - std::vector threads; + std::vector threads; for (int i = 0; i < 10; ++i) { - threads.push_back(new std::thread(SendRpc, stub_.get(), 10, true)); + threads.emplace_back(SendRpc, stub_.get(), 10, true); } for (int i = 0; i < 10; ++i) { - threads[i]->join(); - delete threads[i]; + threads[i].join(); } } TEST_P(End2endTest, MultipleRpcs) { ResetStub(); - std::vector threads; + std::vector threads; for (int i = 0; i < 10; ++i) { - threads.push_back(new std::thread(SendRpc, stub_.get(), 10, false)); + threads.emplace_back(SendRpc, stub_.get(), 10, false); } for (int i = 0; i < 10; ++i) { - threads[i]->join(); - delete threads[i]; + threads[i].join(); } } @@ -1058,13 +1056,12 @@ TEST_P(ProxyEnd2endTest, SimpleRpcWithEmptyMessages) { TEST_P(ProxyEnd2endTest, MultipleRpcs) { ResetStub(); - std::vector threads; + std::vector threads; for (int i = 0; i < 10; ++i) { - threads.push_back(new std::thread(SendRpc, stub_.get(), 10, false)); + threads.emplace_back(SendRpc, stub_.get(), 10, false); } for (int i = 0; i < 10; ++i) { - threads[i]->join(); - delete threads[i]; + threads[i].join(); } } diff --git a/test/cpp/end2end/test_service_impl.cc b/test/cpp/end2end/test_service_impl.cc index 2de344efd58..001047778d7 100644 --- a/test/cpp/end2end/test_service_impl.cc +++ b/test/cpp/end2end/test_service_impl.cc @@ -194,7 +194,7 @@ Status TestServiceImpl::RequestStream(ServerContext* context, return Status::CANCELLED; } - std::thread* server_try_cancel_thd = NULL; + std::thread* server_try_cancel_thd = nullptr; if (server_try_cancel == CANCEL_DURING_PROCESSING) { server_try_cancel_thd = new std::thread(&TestServiceImpl::ServerTryCancel, this, context); @@ -212,7 +212,7 @@ Status TestServiceImpl::RequestStream(ServerContext* context, } gpr_log(GPR_INFO, "Read: %d messages", num_msgs_read); - if (server_try_cancel_thd != NULL) { + if (server_try_cancel_thd != nullptr) { server_try_cancel_thd->join(); delete server_try_cancel_thd; return Status::CANCELLED; @@ -248,7 +248,7 @@ Status TestServiceImpl::ResponseStream(ServerContext* context, } EchoResponse response; - std::thread* server_try_cancel_thd = NULL; + std::thread* server_try_cancel_thd = nullptr; if (server_try_cancel == CANCEL_DURING_PROCESSING) { server_try_cancel_thd = new std::thread(&TestServiceImpl::ServerTryCancel, this, context); @@ -259,7 +259,7 @@ Status TestServiceImpl::ResponseStream(ServerContext* context, writer->Write(response); } - if (server_try_cancel_thd != NULL) { + if (server_try_cancel_thd != nullptr) { server_try_cancel_thd->join(); delete server_try_cancel_thd; return Status::CANCELLED; @@ -295,7 +295,7 @@ Status TestServiceImpl::BidiStream( return Status::CANCELLED; } - std::thread* server_try_cancel_thd = NULL; + std::thread* server_try_cancel_thd = nullptr; if (server_try_cancel == CANCEL_DURING_PROCESSING) { server_try_cancel_thd = new std::thread(&TestServiceImpl::ServerTryCancel, this, context); @@ -307,7 +307,7 @@ Status TestServiceImpl::BidiStream( stream->Write(response); } - if (server_try_cancel_thd != NULL) { + if (server_try_cancel_thd != nullptr) { server_try_cancel_thd->join(); delete server_try_cancel_thd; return Status::CANCELLED; diff --git a/test/cpp/end2end/thread_stress_test.cc b/test/cpp/end2end/thread_stress_test.cc index 51cc3d91df5..5d1cbd92107 100644 --- a/test/cpp/end2end/thread_stress_test.cc +++ b/test/cpp/end2end/thread_stress_test.cc @@ -243,8 +243,8 @@ class CommonStressTestAsyncServer RefreshContext(i); } for (int i = 0; i < kNumAsyncServerThreads; i++) { - server_threads_.push_back( - new std::thread(&CommonStressTestAsyncServer::ProcessRpcs, this)); + server_threads_.emplace_back(&CommonStressTestAsyncServer::ProcessRpcs, + this); } } void TearDown() override { @@ -256,8 +256,7 @@ class CommonStressTestAsyncServer } for (int i = 0; i < kNumAsyncServerThreads; i++) { - server_threads_[i]->join(); - delete server_threads_[i]; + server_threads_[i].join(); } void* ignored_tag; @@ -316,7 +315,7 @@ class CommonStressTestAsyncServer std::unique_ptr cq_; bool shutting_down_; std::mutex mu_; - std::vector server_threads_; + std::vector server_threads_; }; template @@ -440,26 +439,24 @@ class AsyncClientEnd2endTest : public ::testing::Test { TYPED_TEST_CASE(AsyncClientEnd2endTest, CommonTypes); TYPED_TEST(AsyncClientEnd2endTest, ThreadStress) { this->common_.ResetStub(); - std::vector send_threads, completion_threads; + std::vector send_threads, completion_threads; for (int i = 0; i < kNumAsyncReceiveThreads; ++i) { - completion_threads.push_back(new std::thread( + completion_threads.emplace_back( &AsyncClientEnd2endTest_ThreadStress_Test::AsyncCompleteRpc, - this)); + this); } for (int i = 0; i < kNumAsyncSendThreads; ++i) { - send_threads.push_back(new std::thread( + send_threads.emplace_back( &AsyncClientEnd2endTest_ThreadStress_Test::AsyncSendRpc, - this, kNumRpcs)); + this, kNumRpcs); } for (int i = 0; i < kNumAsyncSendThreads; ++i) { - send_threads[i]->join(); - delete send_threads[i]; + send_threads[i].join(); } this->Wait(); for (int i = 0; i < kNumAsyncReceiveThreads; ++i) { - completion_threads[i]->join(); - delete completion_threads[i]; + completion_threads[i].join(); } } From 1b87ddee0ae35c4470ef78d83f73767e5dcb7de0 Mon Sep 17 00:00:00 2001 From: Vijay Pai Date: Fri, 4 Nov 2016 09:09:58 -0700 Subject: [PATCH 18/55] One more NULL->nullptr --- test/cpp/end2end/async_end2end_test.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/cpp/end2end/async_end2end_test.cc b/test/cpp/end2end/async_end2end_test.cc index 3bec37fdd3e..8e385d100c1 100644 --- a/test/cpp/end2end/async_end2end_test.cc +++ b/test/cpp/end2end/async_end2end_test.cc @@ -1110,7 +1110,7 @@ class AsyncEnd2endServerTryCancelTest : public AsyncEnd2endTest { expected_cq_result = false; } - std::thread* server_try_cancel_thd = NULL; + std::thread* server_try_cancel_thd = nullptr; auto verif = Verifier(GetParam().disable_blocking); @@ -1148,7 +1148,7 @@ class AsyncEnd2endServerTryCancelTest : public AsyncEnd2endTest { } } - if (server_try_cancel_thd != NULL) { + if (server_try_cancel_thd != nullptr) { server_try_cancel_thd->join(); delete server_try_cancel_thd; } From 56540ba9f9207851691ae95c0a8d15ece72c1548 Mon Sep 17 00:00:00 2001 From: Vijay Pai Date: Fri, 4 Nov 2016 10:02:31 -0700 Subject: [PATCH 19/55] clang-format --- test/cpp/end2end/thread_stress_test.cc | 2 +- test/cpp/qps/driver.cc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/cpp/end2end/thread_stress_test.cc b/test/cpp/end2end/thread_stress_test.cc index 5d1cbd92107..d353f9894b3 100644 --- a/test/cpp/end2end/thread_stress_test.cc +++ b/test/cpp/end2end/thread_stress_test.cc @@ -244,7 +244,7 @@ class CommonStressTestAsyncServer } for (int i = 0; i < kNumAsyncServerThreads; i++) { server_threads_.emplace_back(&CommonStressTestAsyncServer::ProcessRpcs, - this); + this); } } void TearDown() override { diff --git a/test/cpp/qps/driver.cc b/test/cpp/qps/driver.cc index cc16cc820cd..7a39176783c 100644 --- a/test/cpp/qps/driver.cc +++ b/test/cpp/qps/driver.cc @@ -183,7 +183,7 @@ std::unique_ptr RunScenario( int warmup_seconds, int benchmark_seconds, int spawn_local_worker_count) { // Log everything from the driver gpr_set_log_verbosity(GPR_LOG_SEVERITY_DEBUG); - + // ClientContext allocations (all are destroyed at scope exit) list contexts; auto alloc_context = [](list* contexts) { From 31e212857106b5e366f3ad1903d95383d0ed489f Mon Sep 17 00:00:00 2001 From: yang-g Date: Fri, 4 Nov 2016 15:10:03 -0700 Subject: [PATCH 20/55] Add a fuzzer for ssl server side --- Makefile | 70 ++++++++++ build.yaml | 13 ++ test/core/security/ssl_server_fuzzer.c | 154 ++++++++++++++++++++++ tools/fuzzer/runners/ssl_server_fuzzer.sh | 44 +++++++ tools/run_tests/sources_and_headers.json | 35 +++++ 5 files changed, 316 insertions(+) create mode 100644 test/core/security/ssl_server_fuzzer.c create mode 100644 tools/fuzzer/runners/ssl_server_fuzzer.sh diff --git a/Makefile b/Makefile index de8a26283bf..cb7658d8ccf 100644 --- a/Makefile +++ b/Makefile @@ -1019,6 +1019,7 @@ set_initial_connect_string_test: $(BINDIR)/$(CONFIG)/set_initial_connect_string_ sockaddr_resolver_test: $(BINDIR)/$(CONFIG)/sockaddr_resolver_test sockaddr_utils_test: $(BINDIR)/$(CONFIG)/sockaddr_utils_test socket_utils_test: $(BINDIR)/$(CONFIG)/socket_utils_test +ssl_server_fuzzer: $(BINDIR)/$(CONFIG)/ssl_server_fuzzer tcp_client_posix_test: $(BINDIR)/$(CONFIG)/tcp_client_posix_test tcp_posix_test: $(BINDIR)/$(CONFIG)/tcp_posix_test tcp_server_posix_test: $(BINDIR)/$(CONFIG)/tcp_server_posix_test @@ -1183,6 +1184,7 @@ nanopb_fuzzer_serverlist_test_one_entry: $(BINDIR)/$(CONFIG)/nanopb_fuzzer_serve percent_decode_fuzzer_one_entry: $(BINDIR)/$(CONFIG)/percent_decode_fuzzer_one_entry percent_encode_fuzzer_one_entry: $(BINDIR)/$(CONFIG)/percent_encode_fuzzer_one_entry server_fuzzer_one_entry: $(BINDIR)/$(CONFIG)/server_fuzzer_one_entry +ssl_server_fuzzer_one_entry: $(BINDIR)/$(CONFIG)/ssl_server_fuzzer_one_entry uri_fuzzer_test_one_entry: $(BINDIR)/$(CONFIG)/uri_fuzzer_test_one_entry run_dep_checks: @@ -1411,6 +1413,7 @@ buildtests_c: privatelibs_c \ $(BINDIR)/$(CONFIG)/percent_decode_fuzzer_one_entry \ $(BINDIR)/$(CONFIG)/percent_encode_fuzzer_one_entry \ $(BINDIR)/$(CONFIG)/server_fuzzer_one_entry \ + $(BINDIR)/$(CONFIG)/ssl_server_fuzzer_one_entry \ $(BINDIR)/$(CONFIG)/uri_fuzzer_test_one_entry \ @@ -10779,6 +10782,38 @@ endif endif +SSL_SERVER_FUZZER_SRC = \ + test/core/security/ssl_server_fuzzer.c \ + +SSL_SERVER_FUZZER_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(SSL_SERVER_FUZZER_SRC)))) +ifeq ($(NO_SECURE),true) + +# You can't build secure targets if you don't have OpenSSL. + +$(BINDIR)/$(CONFIG)/ssl_server_fuzzer: openssl_dep_error + +else + + + +$(BINDIR)/$(CONFIG)/ssl_server_fuzzer: $(SSL_SERVER_FUZZER_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a + $(E) "[LD] Linking $@" + $(Q) mkdir -p `dirname $@` + $(Q) $(LDXX) $(LDFLAGS) $(SSL_SERVER_FUZZER_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -lFuzzer -o $(BINDIR)/$(CONFIG)/ssl_server_fuzzer + +endif + +$(OBJDIR)/$(CONFIG)/test/core/security/ssl_server_fuzzer.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a + +deps_ssl_server_fuzzer: $(SSL_SERVER_FUZZER_OBJS:.o=.dep) + +ifneq ($(NO_SECURE),true) +ifneq ($(NO_DEPS),true) +-include $(SSL_SERVER_FUZZER_OBJS:.o=.dep) +endif +endif + + TCP_CLIENT_POSIX_TEST_SRC = \ test/core/iomgr/tcp_client_posix_test.c \ @@ -16225,6 +16260,41 @@ endif endif +SSL_SERVER_FUZZER_ONE_ENTRY_SRC = \ + test/core/security/ssl_server_fuzzer.c \ + test/core/util/one_corpus_entry_fuzzer.c \ + +SSL_SERVER_FUZZER_ONE_ENTRY_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(SSL_SERVER_FUZZER_ONE_ENTRY_SRC)))) +ifeq ($(NO_SECURE),true) + +# You can't build secure targets if you don't have OpenSSL. + +$(BINDIR)/$(CONFIG)/ssl_server_fuzzer_one_entry: openssl_dep_error + +else + + + +$(BINDIR)/$(CONFIG)/ssl_server_fuzzer_one_entry: $(SSL_SERVER_FUZZER_ONE_ENTRY_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a + $(E) "[LD] Linking $@" + $(Q) mkdir -p `dirname $@` + $(Q) $(LD) $(LDFLAGS) $(SSL_SERVER_FUZZER_ONE_ENTRY_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/ssl_server_fuzzer_one_entry + +endif + +$(OBJDIR)/$(CONFIG)/test/core/security/ssl_server_fuzzer.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a + +$(OBJDIR)/$(CONFIG)/test/core/util/one_corpus_entry_fuzzer.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a + +deps_ssl_server_fuzzer_one_entry: $(SSL_SERVER_FUZZER_ONE_ENTRY_OBJS:.o=.dep) + +ifneq ($(NO_SECURE),true) +ifneq ($(NO_DEPS),true) +-include $(SSL_SERVER_FUZZER_ONE_ENTRY_OBJS:.o=.dep) +endif +endif + + URI_FUZZER_TEST_ONE_ENTRY_SRC = \ test/core/client_channel/uri_fuzzer_test.c \ test/core/util/one_corpus_entry_fuzzer.c \ diff --git a/build.yaml b/build.yaml index a5b811e8003..059a2b315da 100644 --- a/build.yaml +++ b/build.yaml @@ -2554,6 +2554,19 @@ targets: - mac - linux - posix +- name: ssl_server_fuzzer + build: fuzzer + language: c + src: + - test/core/security/ssl_server_fuzzer.c + deps: + - grpc_test_util + - grpc + - gpr_test_util + - gpr + corpus_dirs: + - test/core/security/corpus/ssl_server_corpus + maxlen: 2048 - name: tcp_client_posix_test cpu_cost: 0.5 build: test diff --git a/test/core/security/ssl_server_fuzzer.c b/test/core/security/ssl_server_fuzzer.c new file mode 100644 index 00000000000..7723a67ff5a --- /dev/null +++ b/test/core/security/ssl_server_fuzzer.c @@ -0,0 +1,154 @@ +/* + * + * 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 +#include +#include + +#include "src/core/lib/iomgr/load_file.h" +#include "src/core/lib/security/credentials/credentials.h" +#include "src/core/lib/security/transport/security_connector.h" +#include "test/core/util/memory_counters.h" +#include "test/core/util/mock_endpoint.h" + +bool squelch = true; +// ssl has an array of global gpr_mu's that are never released. +// Turning this on will fail the leak check. +bool leak_check = false; + +#define SSL_CERT_PATH "src/core/lib/tsi/test_creds/server1.pem" +#define SSL_KEY_PATH "src/core/lib/tsi/test_creds/server1.key" +#define SSL_CA_PATH "src/core/lib/tsi/test_creds/ca.pem" + +static void discard_write(gpr_slice slice) {} + +static void dont_log(gpr_log_func_args *args) {} + +struct handshake_state { + bool done_callback_called; +}; + +static void on_secure_handshake_done(grpc_exec_ctx *exec_ctx, void *statep, + grpc_security_status status, + grpc_endpoint *secure_endpoint, + grpc_auth_context *auth_context) { + struct handshake_state *state = (struct handshake_state *)statep; + GPR_ASSERT(state->done_callback_called == false); + state->done_callback_called = true; + // The fuzzer should not pass the handshake. + GPR_ASSERT(status != GRPC_SECURITY_OK); + GPR_ASSERT(secure_endpoint == NULL); + GPR_ASSERT(auth_context == NULL); +} + +int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { + struct grpc_memory_counters counters; + if (squelch) gpr_set_log_function(dont_log); + if (leak_check) grpc_memory_counters_init(); + grpc_init(); + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + + grpc_resource_quota *resource_quota = + grpc_resource_quota_create("ssl_server_fuzzer"); + grpc_endpoint *mock_endpoint = + grpc_mock_endpoint_create(discard_write, resource_quota); + grpc_resource_quota_internal_unref(&exec_ctx, resource_quota); + + grpc_mock_endpoint_put_read( + &exec_ctx, mock_endpoint, + gpr_slice_from_copied_buffer((const char *)data, size)); + + // Load key pair and establish server SSL credentials. + grpc_ssl_pem_key_cert_pair pem_key_cert_pair; + gpr_slice ca_slice, cert_slice, key_slice; + GPR_ASSERT(GRPC_LOG_IF_ERROR("load_file", + grpc_load_file(SSL_CA_PATH, 1, &ca_slice))); + GPR_ASSERT(GRPC_LOG_IF_ERROR("load_file", + grpc_load_file(SSL_CERT_PATH, 1, &cert_slice))); + GPR_ASSERT(GRPC_LOG_IF_ERROR("load_file", + grpc_load_file(SSL_KEY_PATH, 1, &key_slice))); + const char *ca_cert = (const char *)GPR_SLICE_START_PTR(ca_slice); + pem_key_cert_pair.private_key = (const char *)GPR_SLICE_START_PTR(key_slice); + pem_key_cert_pair.cert_chain = (const char *)GPR_SLICE_START_PTR(cert_slice); + grpc_server_credentials *creds = grpc_ssl_server_credentials_create( + ca_cert, &pem_key_cert_pair, 1, 0, NULL); + + // Create security connector + grpc_server_security_connector *sc = NULL; + grpc_security_status status = + grpc_server_credentials_create_security_connector(creds, &sc); + GPR_ASSERT(status == GRPC_SECURITY_OK); + sc->channel_args = NULL; + gpr_timespec deadline = gpr_time_add( + gpr_now(GPR_CLOCK_MONOTONIC), + gpr_time_from_seconds(1, GPR_TIMESPAN)); + + struct handshake_state state; + state.done_callback_called = false; + grpc_server_security_connector_do_handshake( + &exec_ctx, sc, NULL, mock_endpoint, NULL, deadline, + on_secure_handshake_done, &state); + grpc_exec_ctx_flush(&exec_ctx); + + bool mock_endpoint_shutdown = false; + // If the given string happens to be part of the correct client hello, the + // server will wait for more data. Explicitly fail the server by shutting down + // the endpoint. + if (!state.done_callback_called) { + mock_endpoint_shutdown = true; + grpc_endpoint_shutdown(&exec_ctx, mock_endpoint); + grpc_exec_ctx_flush(&exec_ctx); + } + + GPR_ASSERT(state.done_callback_called); + + GRPC_SECURITY_CONNECTOR_UNREF(&sc->base, "test"); + grpc_server_credentials_release(creds); + gpr_slice_unref(cert_slice); + gpr_slice_unref(key_slice); + gpr_slice_unref(ca_slice); + // grpc_endpoint_destroy has been called in handshake failure handling code. + if (!mock_endpoint_shutdown) { + grpc_endpoint_shutdown(&exec_ctx, mock_endpoint); + grpc_exec_ctx_flush(&exec_ctx); + } + grpc_exec_ctx_flush(&exec_ctx); + + grpc_shutdown(); + if (leak_check) { + counters = grpc_memory_counters_snapshot(); + grpc_memory_counters_destroy(); + GPR_ASSERT(counters.total_size_relative == 0); + } + return 0; +} diff --git a/tools/fuzzer/runners/ssl_server_fuzzer.sh b/tools/fuzzer/runners/ssl_server_fuzzer.sh new file mode 100644 index 00000000000..23aef992e08 --- /dev/null +++ b/tools/fuzzer/runners/ssl_server_fuzzer.sh @@ -0,0 +1,44 @@ +#!/bin/bash +# 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. +# + +flags="-max_total_time=$runtime -artifact_prefix=fuzzer_output/ -max_len=2048 -timeout=120" + +if [ "$jobs" != "1" ] +then + flags="-jobs=$jobs -workers=$jobs $flags" +fi + +if [ "$config" == "asan-trace-cmp" ] +then + flags="-use_traces=1 $flags" +fi + +bins/$config/ssl_server_fuzzer $flags fuzzer_output test/core/security/corpus/ssl_server_corpus diff --git a/tools/run_tests/sources_and_headers.json b/tools/run_tests/sources_and_headers.json index 8efa2f40d69..231c302b090 100644 --- a/tools/run_tests/sources_and_headers.json +++ b/tools/run_tests/sources_and_headers.json @@ -1909,6 +1909,23 @@ "third_party": false, "type": "target" }, + { + "deps": [ + "gpr", + "gpr_test_util", + "grpc", + "grpc_test_util" + ], + "headers": [], + "is_filegroup": false, + "language": "c", + "name": "ssl_server_fuzzer", + "src": [ + "test/core/security/ssl_server_fuzzer.c" + ], + "third_party": false, + "type": "target" + }, { "deps": [ "gpr", @@ -4782,6 +4799,24 @@ "third_party": false, "type": "target" }, + { + "deps": [ + "gpr", + "gpr_test_util", + "grpc", + "grpc_test_util" + ], + "headers": [], + "is_filegroup": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "src": [ + "test/core/security/ssl_server_fuzzer.c", + "test/core/util/one_corpus_entry_fuzzer.c" + ], + "third_party": false, + "type": "target" + }, { "deps": [ "gpr", From e942434f8d6899147b9bb396f935da2f5ec17e19 Mon Sep 17 00:00:00 2001 From: Yuchen Zeng Date: Fri, 4 Nov 2016 15:40:20 -0700 Subject: [PATCH 21/55] Fix typo --- src/core/lib/iomgr/endpoint.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/lib/iomgr/endpoint.h b/src/core/lib/iomgr/endpoint.h index a47b9112c52..363bd39a6d7 100644 --- a/src/core/lib/iomgr/endpoint.h +++ b/src/core/lib/iomgr/endpoint.h @@ -74,7 +74,7 @@ void grpc_endpoint_read(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, char *grpc_endpoint_get_peer(grpc_endpoint *ep); -/* Get the file descriptor used by \a ep. Return -1 if \a ep is not using a fd. +/* Get the file descriptor used by \a ep. Return -1 if \a ep is not using an fd. */ int grpc_endpoint_get_fd(grpc_endpoint *ep); From aad8f7bb34b67ce89aaae09ad5dec6157b6fa611 Mon Sep 17 00:00:00 2001 From: yang-g Date: Fri, 4 Nov 2016 15:46:39 -0700 Subject: [PATCH 22/55] Add corpus, the seed examples seem to be merged out --- .../05cda1e986096f42698ee2d86ab0a4a3f6a6690b | Bin 0 -> 158 bytes .../0f65ef472e8308561c77ada56afd4de5932d950a | Bin 0 -> 156 bytes .../128915cb83e66a736f8a1833c8901eccb81e0656 | Bin 0 -> 473 bytes .../134d3a5e7a1609a583f6282c48ef9b871e0fdc15 | Bin 0 -> 64 bytes .../13fccd43a6b52c62851ea24e8be4f8cfe6c0103d | Bin 0 -> 156 bytes .../171bc6b14b94c72435d2da2e31e9682f12a3f13c | Bin 0 -> 156 bytes .../17dea38d21e9282ecd062466cf287ecf5b30c1cf | Bin 0 -> 156 bytes .../1961eb9d4dd4bf21cbcd9c45a17b1d025eb0d200 | Bin 0 -> 43 bytes .../226ebb5cc16ac42fae3be273de533ac79759ae01 | Bin 0 -> 470 bytes .../2333cf428cb1e2976679ac84e64873bf76c6595e | Bin 0 -> 156 bytes .../2885553a9e6829265d5f44ea4e24fcf7d6513436 | Bin 0 -> 313 bytes .../28bce9a7cb21f3232239b9b71ef568137bf801f4 | Bin 0 -> 156 bytes .../2a0286615be426d1e7fd5894aadf1a503df05a0a | Bin 0 -> 156 bytes .../2b4a1f3ebe223d91c042a5e86aff31e460f6cc3f | Bin 0 -> 156 bytes .../2cfbe809bcf53160ecc0109b2df01a8696a226fd | Bin 0 -> 156 bytes .../2f770de96db36ef9a71f7eb09b2e8695ac1f0655 | Bin 0 -> 172 bytes .../30ba8ad171657470b5312232387b7da70c387219 | Bin 0 -> 63 bytes .../36548a97a8b847e17a77d1e646c6eb5ec001d84a | Bin 0 -> 156 bytes .../3c442804f73cfe826a609d97c12ef87852742883 | Bin 0 -> 156 bytes .../3dad758011b16a3771376f9af91242953be3e47b | Bin 0 -> 61 bytes .../43b56a1adffaf2c3c994679bf2b6fe6414e13df4 | Bin 0 -> 156 bytes .../4446c60ab89c34e5ccc26bec18d7e7d21fe5aec1 | Bin 0 -> 42 bytes .../44924b3866956d0668ec65750c3663279ac84a36 | Bin 0 -> 156 bytes .../44e4370a4eafde61f8e7dc7e4542e0ad5ecf5253 | Bin 0 -> 471 bytes .../44fb8c02117ebd75c97e517624c0abc9f9a76aa7 | Bin 0 -> 63 bytes .../45d76dd1f0a29fce3f8d289b5177263871eb3f83 | Bin 0 -> 156 bytes .../4fcbf18c4135352539eaf445c26f2f8a5da9b68e | Bin 0 -> 156 bytes .../508ca86c6f4e6ecc30c252ccf74e78256a893b17 | Bin 0 -> 43 bytes .../515d240b860fcd1e77d4a5af291aa4a667d9b609 | Bin 0 -> 156 bytes .../528e9738d5016f01cf59d74f20a8aa3f341ad89e | Bin 0 -> 156 bytes .../54b636a2bb66ccf8247b53ff76a6400e9f1355d0 | Bin 0 -> 313 bytes .../5cc337c4b33cd703cd354804530f5b72684260d0 | Bin 0 -> 7 bytes .../5ce3ec59111bf328044e41fcf26b3bc542df527e | Bin 0 -> 314 bytes .../5eaac270339f19cfce4eafa2e69d62adf100ad1c | 1 + .../6129382083353687a5c3acb3d4274b811227bf3d | Bin 0 -> 43 bytes .../616a25f7c4557ef9eb33d4367c6884abc336802d | Bin 0 -> 46 bytes .../6214e558afbfdb8451e49b62619896492f1a8972 | Bin 0 -> 312 bytes .../6c6a6b2ce74acf8a8b90fc0b268ecc7dc992cd60 | 2 ++ .../6f72309e1b23b824e9bbb9abf74a014b78be038e | Bin 0 -> 64 bytes .../7137ffad853e4dd76c6d6490f37b36e20de7ede0 | Bin 0 -> 64 bytes .../71c9356b6b6c5a3a07033d0fa4ed417fa74a77e5 | Bin 0 -> 395 bytes .../7414938799ed61282f41d5fb1474751ca52b2682 | Bin 0 -> 315 bytes .../75e853eb2ff7e78efb327e114b39baff5a1dd5bb | Bin 0 -> 156 bytes .../7607c92952b4429e350260d8074c3c460468fd49 | Bin 0 -> 156 bytes .../7677373c082fee56d8cdde009d9db5b117a4c8de | Bin 0 -> 42 bytes .../76abde5c970743f9fb8bc781e46c431dee2aa104 | 2 ++ .../77e0b4e2066853df9d32d475b8788e3d7d19329b | Bin 0 -> 313 bytes .../78e66840048ddc3c75e0e4abffbb3109af0d750e | Bin 0 -> 156 bytes .../7dc620eb45764390c7b106362fc4922227415407 | Bin 0 -> 156 bytes .../82ca7a52d589e9dbae37ebf1c59fac7ad876eb7c | 1 + .../8997d472f73eec84fea712638abd762818ec92ec | Bin 0 -> 156 bytes .../933bc3fdc56718d7ac0486c26eecddb6db1c5ba2 | Bin 0 -> 161 bytes .../94431bda60ddc175cf86273ddc07cb41ecf45fa1 | Bin 0 -> 64 bytes .../94c4272b2bb4fa9178eb4ae7dcf4b796fdcb22ac | Bin 0 -> 472 bytes .../9551c32a794250fb425005d8faf4bd24475acd41 | Bin 0 -> 314 bytes .../9677da7c82f18cec3e0ed2e78aadd6e590271a52 | Bin 0 -> 156 bytes .../9c2e6291aff608f3f5307a7c80db6b17107f0575 | Bin 0 -> 313 bytes .../9c39dc04c7414ca0bb64fb942422bebe83ed8e8f | Bin 0 -> 156 bytes .../9cc8547d183a4f2ab7022b36376ca4a6230726c6 | Bin 0 -> 313 bytes .../9e19e5e77789c34f99bbe1e6de198610d6765806 | Bin 0 -> 317 bytes .../9f0853ccf6912df9fba2d5fc3a1ddece41c377ac | Bin 0 -> 20 bytes .../a6d521e501322f052df5a81ee622e0e4942ddcda | Bin 0 -> 156 bytes .../a9dc20f09890403be510357a7665a8f0db2468a4 | Bin 0 -> 313 bytes .../ac1c60970910880558ae7a2ca2e155cfd7772e05 | Bin 0 -> 312 bytes .../afe36d0187a155fc6e4e5c055c0ed0f3802cf696 | Bin 0 -> 156 bytes .../b12b5fc39edc5407b4a525c414ff6b5e116eee05 | Bin 0 -> 65 bytes .../b5b088c6e3a96f88119a940874ab04cb954797ae | 1 + .../b65ad77a43ede3394ba714238829860c4ef4bc9f | Bin 0 -> 312 bytes .../b6f265cad9d47e2ccd17a73a6d309d8898dc5428 | Bin 0 -> 156 bytes .../b7ca5868bca7ae7d1952f44ca966218b26fb7207 | Bin 0 -> 43 bytes .../bd20809eacabadb9bcc77d31e42d3359117b03f2 | Bin 0 -> 156 bytes .../c328623c4ce12505a54cf1a7a1606e1db36e870d | Bin 0 -> 165 bytes .../c823e8bd5526d9fe7d51319737f51bd18bdd75e8 | Bin 0 -> 64 bytes .../c9394095d86ff36b69d90f7122592bf51cafe7dd | Bin 0 -> 157 bytes .../cdbf0d2ae953bec07a67b7152785b548e55f85a4 | 1 + .../cef06f9c35ee338998703555847d70c26bfc9474 | Bin 0 -> 156 bytes .../cfb40ab8eb7031e978bed2418cdc2f0b8a8d8ec7 | Bin 0 -> 156 bytes .../d30840c3f48f11179ef976ada30477045c6d1e98 | Bin 0 -> 312 bytes .../d5afef69141edc7f4911243cf2deb19c912999cf | Bin 0 -> 155 bytes .../d5cf71396e1a04da1a7ec266957ffd2de29d6a57 | Bin 0 -> 312 bytes .../d6dd8a2b085db5d33ef24b23502293ce1ce906a3 | Bin 0 -> 156 bytes .../d7676dcd39b7c7cfaac513a98b56fe4ac8ea27d8 | Bin 0 -> 156 bytes .../d8c9e9ef14abc23b36cb493283ba3e2812d9e537 | Bin 0 -> 156 bytes .../d9edb0aa5d2fe4af26ac861770c1530a4075f919 | 1 + .../da1b52041957334b9ea1371bd2993013118bc82d | Bin 0 -> 62 bytes .../dca7861424c8f92d3720de5c4488454cde1c39df | Bin 0 -> 64 bytes .../df3755e257d024ef8ab08f6d5cefcf28148ea4b1 | Bin 0 -> 64 bytes .../e360a49faefb87d671edb99e777f528f52cac9ae | Bin 0 -> 156 bytes .../e5e789605744d47e5a5d433bb04db1b413bc91a8 | Bin 0 -> 43 bytes .../e6e44a6aa0ece409450c85e43d02c57e338ce1da | Bin 0 -> 314 bytes .../e8ebd49ee98cf57ca7eb35b6e96ef8866270aac6 | Bin 0 -> 156 bytes .../ea0645f46ccd233337a8389b6118db5b0289f040 | Bin 0 -> 312 bytes .../f6f7687df6b7056d3c819c03c9268e22a956b6b5 | Bin 0 -> 156 bytes .../f725caa73aa9467c5e934c49780fc409b36b251c | Bin 0 -> 156 bytes .../f8d3326a860091edd4d60725f96f429d13f3abe6 | Bin 0 -> 156 bytes .../f9261344b4049e90e88b5af784dd29b938c5c838 | Bin 0 -> 156 bytes .../f95b97ece3b46815204a8e6d6e94f92ec40a9672 | Bin 0 -> 156 bytes .../f97db29497e4e3225016a6ced837e20a13622f16 | Bin 0 -> 156 bytes .../ff1a900b12f19772f9a86bd5f560a754cdb18d1a | Bin 0 -> 311 bytes 99 files changed, 9 insertions(+) create mode 100644 test/core/security/corpus/ssl_server_corpus/05cda1e986096f42698ee2d86ab0a4a3f6a6690b create mode 100644 test/core/security/corpus/ssl_server_corpus/0f65ef472e8308561c77ada56afd4de5932d950a create mode 100644 test/core/security/corpus/ssl_server_corpus/128915cb83e66a736f8a1833c8901eccb81e0656 create mode 100644 test/core/security/corpus/ssl_server_corpus/134d3a5e7a1609a583f6282c48ef9b871e0fdc15 create mode 100644 test/core/security/corpus/ssl_server_corpus/13fccd43a6b52c62851ea24e8be4f8cfe6c0103d create mode 100644 test/core/security/corpus/ssl_server_corpus/171bc6b14b94c72435d2da2e31e9682f12a3f13c create mode 100644 test/core/security/corpus/ssl_server_corpus/17dea38d21e9282ecd062466cf287ecf5b30c1cf create mode 100644 test/core/security/corpus/ssl_server_corpus/1961eb9d4dd4bf21cbcd9c45a17b1d025eb0d200 create mode 100644 test/core/security/corpus/ssl_server_corpus/226ebb5cc16ac42fae3be273de533ac79759ae01 create mode 100644 test/core/security/corpus/ssl_server_corpus/2333cf428cb1e2976679ac84e64873bf76c6595e create mode 100644 test/core/security/corpus/ssl_server_corpus/2885553a9e6829265d5f44ea4e24fcf7d6513436 create mode 100644 test/core/security/corpus/ssl_server_corpus/28bce9a7cb21f3232239b9b71ef568137bf801f4 create mode 100644 test/core/security/corpus/ssl_server_corpus/2a0286615be426d1e7fd5894aadf1a503df05a0a create mode 100644 test/core/security/corpus/ssl_server_corpus/2b4a1f3ebe223d91c042a5e86aff31e460f6cc3f create mode 100644 test/core/security/corpus/ssl_server_corpus/2cfbe809bcf53160ecc0109b2df01a8696a226fd create mode 100644 test/core/security/corpus/ssl_server_corpus/2f770de96db36ef9a71f7eb09b2e8695ac1f0655 create mode 100644 test/core/security/corpus/ssl_server_corpus/30ba8ad171657470b5312232387b7da70c387219 create mode 100644 test/core/security/corpus/ssl_server_corpus/36548a97a8b847e17a77d1e646c6eb5ec001d84a create mode 100644 test/core/security/corpus/ssl_server_corpus/3c442804f73cfe826a609d97c12ef87852742883 create mode 100644 test/core/security/corpus/ssl_server_corpus/3dad758011b16a3771376f9af91242953be3e47b create mode 100644 test/core/security/corpus/ssl_server_corpus/43b56a1adffaf2c3c994679bf2b6fe6414e13df4 create mode 100644 test/core/security/corpus/ssl_server_corpus/4446c60ab89c34e5ccc26bec18d7e7d21fe5aec1 create mode 100644 test/core/security/corpus/ssl_server_corpus/44924b3866956d0668ec65750c3663279ac84a36 create mode 100644 test/core/security/corpus/ssl_server_corpus/44e4370a4eafde61f8e7dc7e4542e0ad5ecf5253 create mode 100644 test/core/security/corpus/ssl_server_corpus/44fb8c02117ebd75c97e517624c0abc9f9a76aa7 create mode 100644 test/core/security/corpus/ssl_server_corpus/45d76dd1f0a29fce3f8d289b5177263871eb3f83 create mode 100644 test/core/security/corpus/ssl_server_corpus/4fcbf18c4135352539eaf445c26f2f8a5da9b68e create mode 100644 test/core/security/corpus/ssl_server_corpus/508ca86c6f4e6ecc30c252ccf74e78256a893b17 create mode 100644 test/core/security/corpus/ssl_server_corpus/515d240b860fcd1e77d4a5af291aa4a667d9b609 create mode 100644 test/core/security/corpus/ssl_server_corpus/528e9738d5016f01cf59d74f20a8aa3f341ad89e create mode 100644 test/core/security/corpus/ssl_server_corpus/54b636a2bb66ccf8247b53ff76a6400e9f1355d0 create mode 100644 test/core/security/corpus/ssl_server_corpus/5cc337c4b33cd703cd354804530f5b72684260d0 create mode 100644 test/core/security/corpus/ssl_server_corpus/5ce3ec59111bf328044e41fcf26b3bc542df527e create mode 100644 test/core/security/corpus/ssl_server_corpus/5eaac270339f19cfce4eafa2e69d62adf100ad1c create mode 100644 test/core/security/corpus/ssl_server_corpus/6129382083353687a5c3acb3d4274b811227bf3d create mode 100644 test/core/security/corpus/ssl_server_corpus/616a25f7c4557ef9eb33d4367c6884abc336802d create mode 100644 test/core/security/corpus/ssl_server_corpus/6214e558afbfdb8451e49b62619896492f1a8972 create mode 100644 test/core/security/corpus/ssl_server_corpus/6c6a6b2ce74acf8a8b90fc0b268ecc7dc992cd60 create mode 100644 test/core/security/corpus/ssl_server_corpus/6f72309e1b23b824e9bbb9abf74a014b78be038e create mode 100644 test/core/security/corpus/ssl_server_corpus/7137ffad853e4dd76c6d6490f37b36e20de7ede0 create mode 100644 test/core/security/corpus/ssl_server_corpus/71c9356b6b6c5a3a07033d0fa4ed417fa74a77e5 create mode 100644 test/core/security/corpus/ssl_server_corpus/7414938799ed61282f41d5fb1474751ca52b2682 create mode 100644 test/core/security/corpus/ssl_server_corpus/75e853eb2ff7e78efb327e114b39baff5a1dd5bb create mode 100644 test/core/security/corpus/ssl_server_corpus/7607c92952b4429e350260d8074c3c460468fd49 create mode 100644 test/core/security/corpus/ssl_server_corpus/7677373c082fee56d8cdde009d9db5b117a4c8de create mode 100644 test/core/security/corpus/ssl_server_corpus/76abde5c970743f9fb8bc781e46c431dee2aa104 create mode 100644 test/core/security/corpus/ssl_server_corpus/77e0b4e2066853df9d32d475b8788e3d7d19329b create mode 100644 test/core/security/corpus/ssl_server_corpus/78e66840048ddc3c75e0e4abffbb3109af0d750e create mode 100644 test/core/security/corpus/ssl_server_corpus/7dc620eb45764390c7b106362fc4922227415407 create mode 100644 test/core/security/corpus/ssl_server_corpus/82ca7a52d589e9dbae37ebf1c59fac7ad876eb7c create mode 100644 test/core/security/corpus/ssl_server_corpus/8997d472f73eec84fea712638abd762818ec92ec create mode 100644 test/core/security/corpus/ssl_server_corpus/933bc3fdc56718d7ac0486c26eecddb6db1c5ba2 create mode 100644 test/core/security/corpus/ssl_server_corpus/94431bda60ddc175cf86273ddc07cb41ecf45fa1 create mode 100644 test/core/security/corpus/ssl_server_corpus/94c4272b2bb4fa9178eb4ae7dcf4b796fdcb22ac create mode 100644 test/core/security/corpus/ssl_server_corpus/9551c32a794250fb425005d8faf4bd24475acd41 create mode 100644 test/core/security/corpus/ssl_server_corpus/9677da7c82f18cec3e0ed2e78aadd6e590271a52 create mode 100644 test/core/security/corpus/ssl_server_corpus/9c2e6291aff608f3f5307a7c80db6b17107f0575 create mode 100644 test/core/security/corpus/ssl_server_corpus/9c39dc04c7414ca0bb64fb942422bebe83ed8e8f create mode 100644 test/core/security/corpus/ssl_server_corpus/9cc8547d183a4f2ab7022b36376ca4a6230726c6 create mode 100644 test/core/security/corpus/ssl_server_corpus/9e19e5e77789c34f99bbe1e6de198610d6765806 create mode 100644 test/core/security/corpus/ssl_server_corpus/9f0853ccf6912df9fba2d5fc3a1ddece41c377ac create mode 100644 test/core/security/corpus/ssl_server_corpus/a6d521e501322f052df5a81ee622e0e4942ddcda create mode 100644 test/core/security/corpus/ssl_server_corpus/a9dc20f09890403be510357a7665a8f0db2468a4 create mode 100644 test/core/security/corpus/ssl_server_corpus/ac1c60970910880558ae7a2ca2e155cfd7772e05 create mode 100644 test/core/security/corpus/ssl_server_corpus/afe36d0187a155fc6e4e5c055c0ed0f3802cf696 create mode 100644 test/core/security/corpus/ssl_server_corpus/b12b5fc39edc5407b4a525c414ff6b5e116eee05 create mode 100644 test/core/security/corpus/ssl_server_corpus/b5b088c6e3a96f88119a940874ab04cb954797ae create mode 100644 test/core/security/corpus/ssl_server_corpus/b65ad77a43ede3394ba714238829860c4ef4bc9f create mode 100644 test/core/security/corpus/ssl_server_corpus/b6f265cad9d47e2ccd17a73a6d309d8898dc5428 create mode 100644 test/core/security/corpus/ssl_server_corpus/b7ca5868bca7ae7d1952f44ca966218b26fb7207 create mode 100644 test/core/security/corpus/ssl_server_corpus/bd20809eacabadb9bcc77d31e42d3359117b03f2 create mode 100644 test/core/security/corpus/ssl_server_corpus/c328623c4ce12505a54cf1a7a1606e1db36e870d create mode 100644 test/core/security/corpus/ssl_server_corpus/c823e8bd5526d9fe7d51319737f51bd18bdd75e8 create mode 100644 test/core/security/corpus/ssl_server_corpus/c9394095d86ff36b69d90f7122592bf51cafe7dd create mode 100644 test/core/security/corpus/ssl_server_corpus/cdbf0d2ae953bec07a67b7152785b548e55f85a4 create mode 100644 test/core/security/corpus/ssl_server_corpus/cef06f9c35ee338998703555847d70c26bfc9474 create mode 100644 test/core/security/corpus/ssl_server_corpus/cfb40ab8eb7031e978bed2418cdc2f0b8a8d8ec7 create mode 100644 test/core/security/corpus/ssl_server_corpus/d30840c3f48f11179ef976ada30477045c6d1e98 create mode 100644 test/core/security/corpus/ssl_server_corpus/d5afef69141edc7f4911243cf2deb19c912999cf create mode 100644 test/core/security/corpus/ssl_server_corpus/d5cf71396e1a04da1a7ec266957ffd2de29d6a57 create mode 100644 test/core/security/corpus/ssl_server_corpus/d6dd8a2b085db5d33ef24b23502293ce1ce906a3 create mode 100644 test/core/security/corpus/ssl_server_corpus/d7676dcd39b7c7cfaac513a98b56fe4ac8ea27d8 create mode 100644 test/core/security/corpus/ssl_server_corpus/d8c9e9ef14abc23b36cb493283ba3e2812d9e537 create mode 100644 test/core/security/corpus/ssl_server_corpus/d9edb0aa5d2fe4af26ac861770c1530a4075f919 create mode 100644 test/core/security/corpus/ssl_server_corpus/da1b52041957334b9ea1371bd2993013118bc82d create mode 100644 test/core/security/corpus/ssl_server_corpus/dca7861424c8f92d3720de5c4488454cde1c39df create mode 100644 test/core/security/corpus/ssl_server_corpus/df3755e257d024ef8ab08f6d5cefcf28148ea4b1 create mode 100644 test/core/security/corpus/ssl_server_corpus/e360a49faefb87d671edb99e777f528f52cac9ae create mode 100644 test/core/security/corpus/ssl_server_corpus/e5e789605744d47e5a5d433bb04db1b413bc91a8 create mode 100644 test/core/security/corpus/ssl_server_corpus/e6e44a6aa0ece409450c85e43d02c57e338ce1da create mode 100644 test/core/security/corpus/ssl_server_corpus/e8ebd49ee98cf57ca7eb35b6e96ef8866270aac6 create mode 100644 test/core/security/corpus/ssl_server_corpus/ea0645f46ccd233337a8389b6118db5b0289f040 create mode 100644 test/core/security/corpus/ssl_server_corpus/f6f7687df6b7056d3c819c03c9268e22a956b6b5 create mode 100644 test/core/security/corpus/ssl_server_corpus/f725caa73aa9467c5e934c49780fc409b36b251c create mode 100644 test/core/security/corpus/ssl_server_corpus/f8d3326a860091edd4d60725f96f429d13f3abe6 create mode 100644 test/core/security/corpus/ssl_server_corpus/f9261344b4049e90e88b5af784dd29b938c5c838 create mode 100644 test/core/security/corpus/ssl_server_corpus/f95b97ece3b46815204a8e6d6e94f92ec40a9672 create mode 100644 test/core/security/corpus/ssl_server_corpus/f97db29497e4e3225016a6ced837e20a13622f16 create mode 100644 test/core/security/corpus/ssl_server_corpus/ff1a900b12f19772f9a86bd5f560a754cdb18d1a diff --git a/test/core/security/corpus/ssl_server_corpus/05cda1e986096f42698ee2d86ab0a4a3f6a6690b b/test/core/security/corpus/ssl_server_corpus/05cda1e986096f42698ee2d86ab0a4a3f6a6690b new file mode 100644 index 0000000000000000000000000000000000000000..272c22d321e8062f5b4bc1713068b000a93b1967 GIT binary patch literal 158 zcmWe*W@MPo$iOg}nOQP-hW(jq>oNiwO0KR+ktns0b=YxQXkK6(t4z31{+Gk5Wef}) z2lNl9AJ8~p0MwH7pOFDbF))ZTh%zt;rRC@Am82Gz=%wf9r{|>Vr4<1s7#Ng+n3q9_ zL4b{sjhU5^m6?T+g_((wiP@wCC?mkY$H2ppUR02*n_5x8lwric&AoNiwO0KR+ktj8hb=YxQXkMH>Yk2;b!>VNr3>*ja z52zo|IA8$Oko5l>1CU~15N8l&U=Xs(&(|wSEiTbZ&(BZKN!3d$0!lD2C<8GsgAjuN z8zUPtDnOQP-hW(jq>oNiwO0KR+ktns0bvP|FFV3DdJpapK)iMSK zjsyA!)DLJJFkob0NcztR)C&aS45ADSLTUN=V$2}3u$dGOG-(IWsK7W3qksk&Fapg& zHA=4}wYWqNLZ;{Er{|>Vr4<2fVqj1PVqOLz1_3rkHcS~#s0=eJBP%ltBMUPVg2l+h zY+M4=Ex^FXpv8gW*tIDB#^zd(W<{889**>)f@Iy)iUOt#69#SuyrF{bi9KLXFab@_ zEl6fEsz}XX&}3i&dY_8{#q~fTCN2gR2Cy%X-HvR#5d$|DSThSmF%vM1fLI&=5#(gO literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/134d3a5e7a1609a583f6282c48ef9b871e0fdc15 b/test/core/security/corpus/ssl_server_corpus/134d3a5e7a1609a583f6282c48ef9b871e0fdc15 new file mode 100644 index 0000000000000000000000000000000000000000..13c6a93dcfbdee21a354ceb5928a7e9248cfb604 GIT binary patch literal 64 zcmWe*W@IpDWMD90W|qvIVSnb@x{QE^lB;V{BuXu09d?`+nim-76`ud)uxc3t1IGdV S1L_Af4wwQpB>iV(08#*lSQJbE literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/13fccd43a6b52c62851ea24e8be4f8cfe6c0103d b/test/core/security/corpus/ssl_server_corpus/13fccd43a6b52c62851ea24e8be4f8cfe6c0103d new file mode 100644 index 0000000000000000000000000000000000000000..505cfa73fc9dfb206402047594a2033bb1d398f1 GIT binary patch literal 156 zcmWe*W@MPo$iOg}nOQP-hW(jq>oNiwO0KR+ktns0b=YxQXkK6(Yk2;b!>Sq#3>^9g z4yYf{IA8$Oko2FC0Z1`0h%<;XFbJjP=j)ZEelF2V&(BZKN!3d$0!lD2C<8GsgAjuN z8zUPtDoNiwO0KR+ktns0b=YxQXkK6(Yk2;b!>Sq#3>^9g z4yYf{IA8$Oko2FC0Z1`0h%<;XF$ksQ=j)ZE7MJLy=jW&Ar0S&=0VNn1l!2I+L5x9w zjggI+m64U1g^`7siIIufummV0z`)1A!;xN8kgS_pQNWa8#K6tK1T>V3fkl9cK^y?J C5+Nu6 literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/17dea38d21e9282ecd062466cf287ecf5b30c1cf b/test/core/security/corpus/ssl_server_corpus/17dea38d21e9282ecd062466cf287ecf5b30c1cf new file mode 100644 index 0000000000000000000000000000000000000000..7e77bb637164a5a4ddf0f5c162854253d43181aa GIT binary patch literal 156 zcmWe*W@MPo$iOg}nOQP-hW(jq>oNiwO0KR+ktns0b=YxQXkMH>Yk2;b!>VNr3>*ja z52zo|IA8$Oko2FC0Z1`0h%<;XFbJjP=j)ZE7MJLy=jW&Ar0S&=0VNn1l!2I+L5M+s zjggI+m64U1g^`7siIIufxCAI8z`)1A!;xN8pj(j4WK@xw!Jx^&1T>V3frWvIK^y?Y CWFcJu literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/1961eb9d4dd4bf21cbcd9c45a17b1d025eb0d200 b/test/core/security/corpus/ssl_server_corpus/1961eb9d4dd4bf21cbcd9c45a17b1d025eb0d200 new file mode 100644 index 0000000000000000000000000000000000000000..f3b9d87bdfd30d67f164e6cddfe56d2276be5b5d GIT binary patch literal 43 zcmZo*XB1;(5Sz}(z%ZGaSu%Hqrv0@u>oNiwO4eAUT-A~&b=YxQh?#+bfpH!H{!R?E literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/226ebb5cc16ac42fae3be273de533ac79759ae01 b/test/core/security/corpus/ssl_server_corpus/226ebb5cc16ac42fae3be273de533ac79759ae01 new file mode 100644 index 0000000000000000000000000000000000000000..e300b25dd650474c2b156bc4c6065cbf332d60ce GIT binary patch literal 470 zcmWe*W@MPo$iOg}nNc!#hW(jq>oNiwO0KR+ktns0b=YxQXkMH>Yk2;b!>VNr3>*ja z52zo|IA8$Oko2FC0Z1`0h%<;XFbJjP=j)X)GnDA1=jW&Ar0S&=0VNn1l!2I+L5M+s zjggI+m64U1g^`7siIIufxCAI8z`)1A!;xN8kgS_pQNWa8#K6tK1T>V3frWvIK@9FR zW*klnjDtI^1I1|?aJMn!3yJ2ZG3XVf79+V$4D2{{G}noPodE(Kum>7)oTP>v6C~us0c`kWhX4Qo literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/2333cf428cb1e2976679ac84e64873bf76c6595e b/test/core/security/corpus/ssl_server_corpus/2333cf428cb1e2976679ac84e64873bf76c6595e new file mode 100644 index 0000000000000000000000000000000000000000..de233b4df7d2a2a4106c1b35a93d4fbbf4a64f91 GIT binary patch literal 156 zcmWe*W@MPo$iOg}nOQP-hW(jq>oNiwO0KR+k%+gDb=YxQXkK6(Yk2;b!>VNr3>*ja z52zo|IA8$Oko2FC0Z1`0hzp1^FbJjP=j)ZE7MJLy=jW&Ar0S&=F^B^tl^K{Aco~Ek z1lSnam{}QFnOPWFn3))vm`zH6vH}cz3_Kj^MFq*asTBoG8Ac4;3`~p+Ok4~sKz-r> D$NV8s literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/2885553a9e6829265d5f44ea4e24fcf7d6513436 b/test/core/security/corpus/ssl_server_corpus/2885553a9e6829265d5f44ea4e24fcf7d6513436 new file mode 100644 index 0000000000000000000000000000000000000000..c52dac216070d76d8636361e8d82108f78c94262 GIT binary patch literal 313 zcmWe*W@MPo$iOg}nOQP-hW(jq>oNixO0KR+ktns0b=YxQXkMH>Yk2;b!>VNr3>*i- z52zo|IA8$Oko2FC0Z1`0h%<;XFbJ(o%g1xhe5C<8GsgAjuN z8zUPtDDFEePpMBT?TSNzL02s8iO9lWqM$jrRt>>VRM=|$Zb|EK(}c!8)7;x!w~Ma J10ctV0|0|iL+}6q literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/28bce9a7cb21f3232239b9b71ef568137bf801f4 b/test/core/security/corpus/ssl_server_corpus/28bce9a7cb21f3232239b9b71ef568137bf801f4 new file mode 100644 index 0000000000000000000000000000000000000000..99bde1b4860a05a409afb374f369527f63a04976 GIT binary patch literal 156 zcmWe*W@MPo$iOg}nOQP-hW(jq>oNiwO0KR+ktmgQu-I{0XkK6(Yk2;b!>VNr3>*ja z52zo|IA8$Oko2FC0Z1`0h%+$c3yJ2ZG3b?~7MJLy=jW&Ar0S&=fg~7|8LSw18H5-F z*cjQESs7WGSr}QEw3sxRjZ1*C0t|c%JRIpo1oNiwO0KR+ktns0b=YxQXkK6(Yk2;b!>VNr3>*ja z52zo|IA8$Oko2FC0Z1`0h%<;XFbJjP=j)ZE7MJLy=jW&Ar0S&=0VNn1l!2I+L5M+s zjggI+m64U1g^`7siIIufxCAI8z`)1A!;xN8kgS_hQNWa8$iU6O#PF1Xi-845ivs}E C<4a literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/2b4a1f3ebe223d91c042a5e86aff31e460f6cc3f b/test/core/security/corpus/ssl_server_corpus/2b4a1f3ebe223d91c042a5e86aff31e460f6cc3f new file mode 100644 index 0000000000000000000000000000000000000000..eca71b4ca633f0c33b472136fcf5d4bbbd1adc66 GIT binary patch literal 156 zcmWe*W@MPo$iOg}nOQP-hW(jq>oNiwO0KR+ktns0b=YxQXkK8PS9t!H!>VNr3>*ja z52zo|IA8$Oko2FC0Z1`0h%<;XFbJjP=j)ZE7MJLy=jW&Ar0S&=0VNn1l!2I+L5M+s zjgifem64UXnT3&siIIufxCAI8z`)1A!;xN8kgS_pQNWa8#KgeB4K$RCfrWvIK^y=K C6Cy+a literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/2cfbe809bcf53160ecc0109b2df01a8696a226fd b/test/core/security/corpus/ssl_server_corpus/2cfbe809bcf53160ecc0109b2df01a8696a226fd new file mode 100644 index 0000000000000000000000000000000000000000..6a2035fe37f402f53e00ed555b2b0fcaab4649d4 GIT binary patch literal 156 zcmWe*W@MPo$iOg}nOQP-hW(jq>oNiwO0KR+ktns0b=YxQXkMH>Yk2;b!>VNr3>*ja z52zo|FgO6zko5l>1CU~15N8l&WDrWr&(|wSEiTbZ&(BZKNzqFy0!lD2C^Il9@G=N7 z2(U4-F|#tVGP5wUFf%bSF&mWtWd#`c7v0~Z4e0~3Qd0ED?GH2?qr literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/30ba8ad171657470b5312232387b7da70c387219 b/test/core/security/corpus/ssl_server_corpus/30ba8ad171657470b5312232387b7da70c387219 new file mode 100644 index 0000000000000000000000000000000000000000..297c1ce6494c498ae7614661b012004bae822a3b GIT binary patch literal 63 zcmWe*W@IpDWMD90W|qvIVSnb@x{QDZIXCqm;%)&{bytVQUGwo6XpN_ literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/36548a97a8b847e17a77d1e646c6eb5ec001d84a b/test/core/security/corpus/ssl_server_corpus/36548a97a8b847e17a77d1e646c6eb5ec001d84a new file mode 100644 index 0000000000000000000000000000000000000000..9c209ebb50d31c336ea737e44fce4161530ade60 GIT binary patch literal 156 zcmWe*W@MPo$iOg}iCHpthW(jq>oNiwO0KR+ktns0b=YxQXkMH>Yk2;b!>VNr3>*ja z52zo|IA8$Oko2FC0Z1`0h%<;XFbJjP=j)ZE7MJLy=jW&Ar0S&=0VNn1l!2I+L5M+s zjggI+m64U1g^`7siIIufxCAI8z`)1A!;xN8kgS_pQNWa8#GuK*1T>V3frWvIK^y?Z CY$03# literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/3c442804f73cfe826a609d97c12ef87852742883 b/test/core/security/corpus/ssl_server_corpus/3c442804f73cfe826a609d97c12ef87852742883 new file mode 100644 index 0000000000000000000000000000000000000000..e8574594af34069186c1956c62285f84d1e6a67d GIT binary patch literal 156 zcmWe*W@MPo$iOg}nOQP-hW(jq>oNiwO0KR+ktns0b=YxQXkK6(Yk2;b!>Sq#3>^9g z4yYf{IA8$Oko2FC0Z1`0h%<;XFbJjP=j)ZE7MJLy=jW$erRt>>0VNn1l!2I+L5M+s zjggI!m6er+nURH=iIIufqy#7V3frWvIK^y>~ Cf*}+D literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/3dad758011b16a3771376f9af91242953be3e47b b/test/core/security/corpus/ssl_server_corpus/3dad758011b16a3771376f9af91242953be3e47b new file mode 100644 index 0000000000000000000000000000000000000000..11f9b74e3f5359f9c853f8628fbbe9d308839501 GIT binary patch literal 61 zcmWe*W@IpDWMD90W|qvIVSi>_MnlQfwJ8#%7P1aIP7BQojN=N=|8iKhjDdmUfc^pX R+ZqQ<85olOGco`*0RS_p69E7K literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/43b56a1adffaf2c3c994679bf2b6fe6414e13df4 b/test/core/security/corpus/ssl_server_corpus/43b56a1adffaf2c3c994679bf2b6fe6414e13df4 new file mode 100644 index 0000000000000000000000000000000000000000..197cc02ebc9ea8781a96e049fd9323bbd2eea905 GIT binary patch literal 156 zcmWe*W@MPo$iOgJioNiwO0KR+ktns0b=YxQXkK6(Yk2;b!>Sq#3>*yl z2hmFZ%E-#h!pOqR#K^>KR05O{VBllm;YcqkNY+iQC}7GkV&G literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/4446c60ab89c34e5ccc26bec18d7e7d21fe5aec1 b/test/core/security/corpus/ssl_server_corpus/4446c60ab89c34e5ccc26bec18d7e7d21fe5aec1 new file mode 100644 index 0000000000000000000000000000000000000000..baff50d61d23e9dc5565474f92a16cd61c5ac74a GIT binary patch literal 42 ycmZo*WE5j$5Sz}(z%ZGaSu%Hqru~^~>oNiwO0KR+ktns0b=YxQh?#+bfe`@l(F_9s literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/44924b3866956d0668ec65750c3663279ac84a36 b/test/core/security/corpus/ssl_server_corpus/44924b3866956d0668ec65750c3663279ac84a36 new file mode 100644 index 0000000000000000000000000000000000000000..4fb36b65bb6d8f4d1fc3fe12a71f4c4d1f9c04e7 GIT binary patch literal 156 zcmWe*W@MPo$iOg}nOQP-hW(jq>oR6Flw4htB2j7~>#*ar(7ZT%*6{oU-_((?1gz-D1HDIRFj4xmwiaTrDc4KQE?nuThV zUP)?ki5`SZ&(BZKN!3d$0@}pDpbW&k3_=V7Y>aG}GMrEuW>!X4W)?;kW+nuSk%`&3 z1gKkpfsa9p1I4jxQT&a~wII!kFx@;H=|u&}x~UZfOc^E&+zfa_1>F;Sz@A_NnxI>d x%w$xNn!%vSzy$O@7XymxfkI4N3@i*_Um&|3*>)oaZZ5E97KmadU>E_hH~;}7WV8SP literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/44fb8c02117ebd75c97e517624c0abc9f9a76aa7 b/test/core/security/corpus/ssl_server_corpus/44fb8c02117ebd75c97e517624c0abc9f9a76aa7 new file mode 100644 index 0000000000000000000000000000000000000000..9e4b559e9739405a83959a3a2f80a294e3c1eb69 GIT binary patch literal 63 zcmWe*W@IpDWMD90W|qvIVSnb@x{QE^lB;V{BuXu09d?`+nim+y6`ud)uxc3t1IGdV T1M0Um4wy19B>iV(0BQpOZv_-4 literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/45d76dd1f0a29fce3f8d289b5177263871eb3f83 b/test/core/security/corpus/ssl_server_corpus/45d76dd1f0a29fce3f8d289b5177263871eb3f83 new file mode 100644 index 0000000000000000000000000000000000000000..52168fa700db135f00faaf9c4963608878bccb54 GIT binary patch literal 156 zcmWe*W@MPo$iOg}nOQP-hW(jq>oNiwO0KR+ktns0b=YxQXkMH>Yk2;b!>VNr3>*ja z52zo|IA8$Oko5l>1CU~15N8l&U=T{n&(|wSEiTbZ&(BZKN!3d$0!lD2C<8GsgAjuN z8zUPtDmoS- literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/4fcbf18c4135352539eaf445c26f2f8a5da9b68e b/test/core/security/corpus/ssl_server_corpus/4fcbf18c4135352539eaf445c26f2f8a5da9b68e new file mode 100644 index 0000000000000000000000000000000000000000..e35f17d7e4875c336f3788e0f55944f9fb029529 GIT binary patch literal 156 zcmWe*W@MPo$iOg}nOQP-hW(jq>oNiwO0KR+ktns0b=YxQXkMH>Yk2;b!>VNr3>*ja z52zo|FgO6zko5l>1CU~15N8l&WDrWr&(|wSEiTbZ&(BZKNzqFy0!lD2C^Il9@G=N7 z2(U4-F|#tVGP5wUFf%hS8I>?HFfj-)@G!wx|GG!Psa5FFg4dr5B0h%oi E04Sy+Qvd(} literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/508ca86c6f4e6ecc30c252ccf74e78256a893b17 b/test/core/security/corpus/ssl_server_corpus/508ca86c6f4e6ecc30c252ccf74e78256a893b17 new file mode 100644 index 0000000000000000000000000000000000000000..5692502a6445ba1ec9020666c83cb3277c10919a GIT binary patch literal 43 zcmZorW)x#&5Sz}(z%ZGaSu%Hqru~^~S2NZHG?c7Kktns0b=YxQh?#+bfpH!H1)dDU literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/515d240b860fcd1e77d4a5af291aa4a667d9b609 b/test/core/security/corpus/ssl_server_corpus/515d240b860fcd1e77d4a5af291aa4a667d9b609 new file mode 100644 index 0000000000000000000000000000000000000000..2de4f1f2bf967ccdc9e6848fb35a620764149f08 GIT binary patch literal 156 zcmWe*W@MPo$iOg}nOQP-hW(jq>oNiwO0KR+k%+gDb=YxQXkK6(Yk2;b!>VNr3>*ja z52zo|IA8$Oko2FCL4g4X#05kd7=+UD^Yuzni%ay<^YhblQuWe`7{!5-$_z{lybMAN z0&I+I%&d&8%q)y7%uI|-%tj?ZSpfz<1|E*|qJm`I)QSS83?l|^1|~)ZCN2gRpgwT` D({~|m literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/528e9738d5016f01cf59d74f20a8aa3f341ad89e b/test/core/security/corpus/ssl_server_corpus/528e9738d5016f01cf59d74f20a8aa3f341ad89e new file mode 100644 index 0000000000000000000000000000000000000000..91fd77f9e35fa5029b368cc8ffb8adaa7c841b09 GIT binary patch literal 156 zcmWe*W@MPo$iOg}nMpEthW(jq>oNiwO0KR+ktns0b=YxQXkMH>Yk2;b!>VNr3>*ja z52zo|IA8$Oko2FC0Z1`0h%<;XFbJjP=j)ZE7MJLy=jW&Ar0S&=0VNn1l!2I+L5M+s zjggI+m64U1g^`7siIIufxCAI8z`)1A!;xN8kgS_pQNWa8#GuK*1T>V3frWvIK^y?Z CZ6RC$ literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/54b636a2bb66ccf8247b53ff76a6400e9f1355d0 b/test/core/security/corpus/ssl_server_corpus/54b636a2bb66ccf8247b53ff76a6400e9f1355d0 new file mode 100644 index 0000000000000000000000000000000000000000..0e8bf5b9dd50911aa53bf35c81994ed12bf121ec GIT binary patch literal 313 zcmWe*W@MPo$iOg}nOQP-hW(jq>oNiwO0KR+ktns0b=YxQXkMH>Yk2;b!>VNr3>*ja z52zo|IA8$Oko2FC0Z1`0h%>MV3frWvIL5!f& s0^(Cu%h~hYL0ANf(@&Et; literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/5cc337c4b33cd703cd354804530f5b72684260d0 b/test/core/security/corpus/ssl_server_corpus/5cc337c4b33cd703cd354804530f5b72684260d0 new file mode 100644 index 0000000000000000000000000000000000000000..0b8827c39b236aa002277ea63ac2eecdd98176c0 GIT binary patch literal 7 OcmezG#>m7F!UX^cV*#fC literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/5ce3ec59111bf328044e41fcf26b3bc542df527e b/test/core/security/corpus/ssl_server_corpus/5ce3ec59111bf328044e41fcf26b3bc542df527e new file mode 100644 index 0000000000000000000000000000000000000000..9ab3862c7dd80c06343d44bc512451e8a779f550 GIT binary patch literal 314 zcmWe*W@MPo$iOg}nOQP-hW(jq>oNiwO0KR+ktns0b=YxQXkMH>Yk2;b!>VNr3>*ja z52zo|IA8$Oko2FC0Z1`0h%<;XFbJ(o%gH~_i} BL+bzl literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/5eaac270339f19cfce4eafa2e69d62adf100ad1c b/test/core/security/corpus/ssl_server_corpus/5eaac270339f19cfce4eafa2e69d62adf100ad1c new file mode 100644 index 00000000000..93d651b9a23 --- /dev/null +++ b/test/core/security/corpus/ssl_server_corpus/5eaac270339f19cfce4eafa2e69d62adf100ad1c @@ -0,0 +1 @@ + GEF \ No newline at end of file diff --git a/test/core/security/corpus/ssl_server_corpus/6129382083353687a5c3acb3d4274b811227bf3d b/test/core/security/corpus/ssl_server_corpus/6129382083353687a5c3acb3d4274b811227bf3d new file mode 100644 index 0000000000000000000000000000000000000000..f8a9920fa889d8f3265e4269bdd7f44f6a20571d GIT binary patch literal 43 zcmZorW)x#&P@K-lz%ZGaSu%Hqru~^~S2NZHG?c7Kktns0b=YxQh?#+bfpH!H2Q>`N literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/616a25f7c4557ef9eb33d4367c6884abc336802d b/test/core/security/corpus/ssl_server_corpus/616a25f7c4557ef9eb33d4367c6884abc336802d new file mode 100644 index 0000000000000000000000000000000000000000..25ce7c1041692e95d9be1421f939b5c4c6b536ac GIT binary patch literal 46 wcmZorW)x#&U}j)on9R&9nL9(%{>-(j837F?Yf>aGmRiU<>^Ln1k_Cf#02^@(IsgCw literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/6214e558afbfdb8451e49b62619896492f1a8972 b/test/core/security/corpus/ssl_server_corpus/6214e558afbfdb8451e49b62619896492f1a8972 new file mode 100644 index 0000000000000000000000000000000000000000..db4c693368fd0daf7605080fb82465313c0f6aa9 GIT binary patch literal 312 zcmWe-W@MPo$iOg}nOQP-hW(jq>oNiwO0KR+ktns0b=YxQXkMH>Yk2;b!>VNr3>*ja z52zo|IA8$Oko2FC0Z1`0h%<;XFbJjP=j)ZE7MJLy=jW&Ar0S&=0VNn1l!2I+L5M+s zjggI+m64U1g^`7siIIufxCAI8z`)0##UX~%3Gq-T1jdo+ggsy|0Ep-mbN~PV literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/7137ffad853e4dd76c6d6490f37b36e20de7ede0 b/test/core/security/corpus/ssl_server_corpus/7137ffad853e4dd76c6d6490f37b36e20de7ede0 new file mode 100644 index 0000000000000000000000000000000000000000..c28d5e39e5e5afc66636538891a7f6883fa5088e GIT binary patch literal 64 zcmV-G0Kfkg0|@{L0+#^;0001!0|Oatm_N+cu4qtzP}Qtt7oNiwO0KR+ktns0b=YxQXkMH>Yk2;b!>VNr3>*ja z52zo|IA8$Oko2FC0Z1`0h%<MY31*l##KHamdP5VtKMZ010EL?d aFx>PHpoAL>0~0*#n1GfGrRC@Al>h+H8(0_s literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/7414938799ed61282f41d5fb1474751ca52b2682 b/test/core/security/corpus/ssl_server_corpus/7414938799ed61282f41d5fb1474751ca52b2682 new file mode 100644 index 0000000000000000000000000000000000000000..96343edcfdfd5e33828cf893794537b3fdc87aeb GIT binary patch literal 315 zcmdnO%*de0#K6eFFqxTIGIxgknQQAZ0vbxLu1S$7wUBk#aaw3zU>s|B{+Gk58Vn2^ zV#16J(}`BCf8c=n0gVF&j0}uP{~18GFffQSh%zt;rRC@Am82GzAXG4b6fh=XsL)H# z&ri2X)k`Y^YGq(h24Y?YAqD|9Mm9!PR#p~fMiyo!MkZ#H5}=F#10MreLk?CA%&d&8 z%q&n1#xM;$96TK9MFq*ZsTBoG8Ac4;3`{_mYH%^IFff6{by38*fL;JfFo**Hd#*x& literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/75e853eb2ff7e78efb327e114b39baff5a1dd5bb b/test/core/security/corpus/ssl_server_corpus/75e853eb2ff7e78efb327e114b39baff5a1dd5bb new file mode 100644 index 0000000000000000000000000000000000000000..a53b956562704061765486f01dbda96193d2433f GIT binary patch literal 156 zcmWe*W@MPo$iOg}nOQP-hW(jq>oNiwO0KR+ktns0b=YxQXkMH>Yk2;b!>VNr3>*ja z52zo|IA8$Oko5l>1CU~15N8l&U=T{n&(|wSEiTbZ&(BZKN!3d$0!lD2C<8GsgAjuN z8zUPtDoNiwO0KR+ktns0b=YxQXkMH>Yk2;b!>VNr3>*ja z52zo|IA8$Oko5l>1CU~15N8l&U=T{n&(|wSEiTbZ&(BZKN!3d$0!lD2C<8GsgAjuN z8zUPtDxid8F&s@8j5ztVwCPkvuLe^o&X(6!eJOJ7n3uyoV literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/76abde5c970743f9fb8bc781e46c431dee2aa104 b/test/core/security/corpus/ssl_server_corpus/76abde5c970743f9fb8bc781e46c431dee2aa104 new file mode 100644 index 00000000000..11ab4600900 --- /dev/null +++ b/test/core/security/corpus/ssl_server_corpus/76abde5c970743f9fb8bc781e46c431dee2aa104 @@ -0,0 +1,2 @@ +CONNEþTF +û \ No newline at end of file diff --git a/test/core/security/corpus/ssl_server_corpus/77e0b4e2066853df9d32d475b8788e3d7d19329b b/test/core/security/corpus/ssl_server_corpus/77e0b4e2066853df9d32d475b8788e3d7d19329b new file mode 100644 index 0000000000000000000000000000000000000000..6eddfc2c2a4153a1f6cb2c5048692650bf40b9ec GIT binary patch literal 313 zcmWe*W@MPo$iOg}nOQP-hW(jq>oNiwO0KR+ktns0b=YxQXkMH>Yk2;b!>VNr3>*ja z52zo|IA8$Oko2FC0Z1`0h%<;XFbEl?<>#xHq!yRhrRV3T=jf%S0wow2l!2I+L5M+s zjggI+m64U1g^`7siIIufxCAI8z`)1A!;xN8kgS_pQNWa8#K6tK1T>V3frWvIL5!f& z0^@Kx4QM*ZX$<*7qWNhIdLWnSfnAoWmsW($Y2qNaS+M}!rpauG>9`C-xZ4hZ948I{ D2Ny$f literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/78e66840048ddc3c75e0e4abffbb3109af0d750e b/test/core/security/corpus/ssl_server_corpus/78e66840048ddc3c75e0e4abffbb3109af0d750e new file mode 100644 index 0000000000000000000000000000000000000000..f7cd40b1d07a0a9d77c35b0cb607a7ff106448d8 GIT binary patch literal 156 zcmWe*W@MPo$iOg}nL#plhW(jq>oNiwO0KR+ktmgQu-I{0XkK6(Yk2;b!>VNr3>*ja z52zo|IA8$Oko2FC0Z1`0h%+$c3yJ2ZG3b?~7MJLy=jW&Ar0S&=fg~7|8LSw18H5-F z*cjQESs7WGSr}QEw3sxRjZ1*C0t|c%JRIpo1oNiwO0KR+ktns0b=YxQXkMH>Yk2;b!>VNr3>*ja z52zo|FgO6zko5l>1CU~15N8l&WDrWr&(|wSEiTbZ&(BZKN!3d$0!lD2C^Il9@G=N7 z2(U4-F|#tVGP5wUFf%bSF&mWtWd#`c7oNiwO0KR+ktns0b=YxQXkMH>Yk2;b!>VNr3>*ja z52zo|IA8$Oko5l>1CU~15N8l&U=T{n&(|wSEiTbZ&(BZKN!3d$0!lD2C<8GsgAjuN z8zUPtDoNiwO0KR+ktns0b=YxQXkK6(Yk2;b!>VNr3>*ja z52zo|IN%Wy!es!|l=PpG0Z1`0h%<;XFbJjP=j)ZE7MJLy=jW&Ar0S&=0VNn1l!2I+ zL5M+sjggI+m64U1g^}eyGZP~dvvCPfN`Qfnfrlf#s32K4wW5G2!-#>Kfr*iWfs28K Ifr&vJ0B6Z0Q2+n{ literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/94431bda60ddc175cf86273ddc07cb41ecf45fa1 b/test/core/security/corpus/ssl_server_corpus/94431bda60ddc175cf86273ddc07cb41ecf45fa1 new file mode 100644 index 0000000000000000000000000000000000000000..8f9893f46e963060524fd55b116c65bf07a8e579 GIT binary patch literal 64 zcmWe*W@KQT&cHC4nOQP-hW(jq>oNiwO0KR+ktns0b=YxQXkK8PS9t!H!>VNr3>*ja U52znlaln9)fg$NXP$L5a0J$?2iU0rr literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/94c4272b2bb4fa9178eb4ae7dcf4b796fdcb22ac b/test/core/security/corpus/ssl_server_corpus/94c4272b2bb4fa9178eb4ae7dcf4b796fdcb22ac new file mode 100644 index 0000000000000000000000000000000000000000..4b77d18fefe07cb3cca2f4ae6b5eddc4f23241b9 GIT binary patch literal 472 zcmWe*W@MPo$iy(2nOQP-hW(jq>oNiwO0KR+ktns0b=YxQXkK6(Yk2;b!>VNr3>*ja z52zo|IAFlYz>xHxkpW0CFo-jVGB60G<%@w$VxY_0Mfr&)_F=QA5O%R6|0o2YQjwkFe+>gttAkSjB734s$ IZAg{@0O1>DH~;_u literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/9551c32a794250fb425005d8faf4bd24475acd41 b/test/core/security/corpus/ssl_server_corpus/9551c32a794250fb425005d8faf4bd24475acd41 new file mode 100644 index 0000000000000000000000000000000000000000..548f26968d11850058b5a0a7daaa1d702d872957 GIT binary patch literal 314 zcmWe*W@MPo$iOg}nOQP-hW(jq>oNiwO0KR+ktns0b=YxQXkMH>Yk2;b!>VNr3>*ja z52zo|IA8$Oko2FC0Z1`0h%<;XFbJ(o%g@&uw14=M3C<8GsgAjuN z8zUPtDoNiwO0KR+ktns0b=YxQXkK8PS9t!H!>VNr3>*ja z52zo|IA8$Oko2FC0Z1`0h%<;XFbJjP=j)ZE7MJLy=jW&Ar0S&=0VNn1l!2I+L5M+s zjgifem64UXnT3&siIIufxCAI8z`)1A!;xN8kgS_pQNWa8#K6tK1T>V3frWvIK^y=K CBO*iq literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/9c2e6291aff608f3f5307a7c80db6b17107f0575 b/test/core/security/corpus/ssl_server_corpus/9c2e6291aff608f3f5307a7c80db6b17107f0575 new file mode 100644 index 0000000000000000000000000000000000000000..86c59f30eb28065ac8a313c227b0266d7a32c146 GIT binary patch literal 313 zcmWe*W@MPo$iOg}nOQP-hW(jq>oNiwO0KR+ktns0b=YxQXkK6(Yk2;b!>Sq#3>^9g z4yYf{IAEX!)RFX`kpW0CFo-jVGB60G<>%{_q!yRxrRV3T=cMYT6#*p}7?gpSmqCa@ zfQ^xjnUzrtr*-jY)|CORJD?A-4#hSBOxswQSr}QEnHZUvjY@#_2{7<6@NlFT6(sAX pRunL07%^}&FagcrVqigX7Zc1~3``8-Ah#h*F~MUB6VMcp4gloNiwO0KR+ktns0b=YxQXkMH>Yk2;b!>VNr3>*ja zAE+PDIA8$Oko2FC0Z1`0h%<;XFbJjP=j)ZE7MJLy=jW&Ar0S&=0VNa|lz|F(8H5-F z*cjQESs7WGSr}QEnHZUvjZ1(s0t|c%JRIpo1oUY(Ld?vPP@#Z^lB;V{BuXu09d?`+nipr!8lL~< zuxc3t1IGdV1L_Af3=ROzNc#Vc0Z1`0h%<;XG6<#R=j)ZE7MJLy=jW&Ar0As;F`$?u z4pgbkz@We@G%qj?VxR`lK>Y(C0}mL04P=BH$b@cSD#$>n84SD(VhjRojBL!TjI7Ko zj4aGdj7-diB|sYl82A`?IMRz4gfJBtAuA|I)=m9Uz?5Ocz|Ft}w493pBvMg`EW!eG L4vPTLDdOS)HbX=V literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/9e19e5e77789c34f99bbe1e6de198610d6765806 b/test/core/security/corpus/ssl_server_corpus/9e19e5e77789c34f99bbe1e6de198610d6765806 new file mode 100644 index 0000000000000000000000000000000000000000..66648167e5313b939c2062f5f5a96890bf2f69c4 GIT binary patch literal 317 zcmWe*W^9oNiwO0KR+ktns0b=YxQh?#+bVP0UIJ!^RWm&2-M z3=A9x^be>X&^TZK)Rpv~kpW0CFo-cTG60QHz-i39@Hkd`d?tu9h%$%^i87=yFy!a! zm82Gz=%wf9r{|!lSjhy(3V24Y?YAqD|9MmAoNiwO0KR+ktns0b=YxQXkK6(Yk2;b!>Sq#3>^9g z4yYf{IA8$Oko2FC0Z1`0h%<;XF$ksQ=j)ZE7MJLy=jW&Ar0S&=0VNn1l!2I+L5M+s zjggI+m64U1g^`7siIIufummV0z`)1A!;xN8kgS_pQNWa8#K6tK1T>V3fkl9cK^y?I CHX$Sc literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/a9dc20f09890403be510357a7665a8f0db2468a4 b/test/core/security/corpus/ssl_server_corpus/a9dc20f09890403be510357a7665a8f0db2468a4 new file mode 100644 index 0000000000000000000000000000000000000000..2c82ef585ad9d4139bf16e39c339c7123f2add3c GIT binary patch literal 313 zcmWe*W@MPo$iOg}nOQP-hW(jq>oNiwO0KR+ktns0b=YxQXkMH>Yk2;b!>VNr3>*ja z52zo|IA8$Oko2FC0Z1`0h%<;XFbJjP=j)X)GnDA1=jW&Ar0S&=0VNn1l!2I+L5M+s zjggI+m64U1g^`7siIIufxCAI8z`)1A!;xN8kgS_pQNWa8#K6tK1T>V3frWvIL5!f& s0^(Cu%h~hYL0B@W^0ssI2 literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/ac1c60970910880558ae7a2ca2e155cfd7772e05 b/test/core/security/corpus/ssl_server_corpus/ac1c60970910880558ae7a2ca2e155cfd7772e05 new file mode 100644 index 0000000000000000000000000000000000000000..9040ab0a6354d8621871697fdd97f31fac64754f GIT binary patch literal 312 zcmWe*W@MPo$iOg}nOQP-hW(jq>oNiwO0KR+ktns0b=YxQXkMH>Yk2;b!>VNr3>*ja z52zo|IA8$Oko2FC0Z1`0h%<;XFbJ(o%g@&uw14=M3C<8GsgOC6N z6C)clD0xYybcN literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/afe36d0187a155fc6e4e5c055c0ed0f3802cf696 b/test/core/security/corpus/ssl_server_corpus/afe36d0187a155fc6e4e5c055c0ed0f3802cf696 new file mode 100644 index 0000000000000000000000000000000000000000..473e77e0480e678f54ed54380defd0a4ad6e3ce9 GIT binary patch literal 156 zcmWe*W@MPo$iOg}nOQP-hW(jq>oNiwO0KR+k%+gDb=YxQXkK6(Yk2;b!>VNr3>*ja z52zo|IA8$Oko2FC0Z1`0h%<;XFbJjP=j)ZE7MJLy=jW&Ar0S&=G3)_KDl;%Ka54xn z2(U4-F|#tVGP5wUFf%bSF&mcvWd#`c7q#Nt literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/b12b5fc39edc5407b4a525c414ff6b5e116eee05 b/test/core/security/corpus/ssl_server_corpus/b12b5fc39edc5407b4a525c414ff6b5e116eee05 new file mode 100644 index 0000000000000000000000000000000000000000..09018f3092949bc606467657125c6b7aff8229d0 GIT binary patch literal 65 zcmWe*W@IpDWMD90W|qvIVSnb@x{QE^lB;V{W|UgWI_x+tG%qmDD?IoNiwO0KR+ktns0b=YxQXkMH>Yk2;b!>VNr3>*ja z52zo|IA8$Oko2FC0Z1`0h%<;XFbJ(o%g@&oR6Flw4htB2j7~>#*ar(7ZT%*6{ooNiwO0KR+ktns0b=YxQh?#+bfpH!H{>BWW literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/bd20809eacabadb9bcc77d31e42d3359117b03f2 b/test/core/security/corpus/ssl_server_corpus/bd20809eacabadb9bcc77d31e42d3359117b03f2 new file mode 100644 index 0000000000000000000000000000000000000000..150b87d74155e450f5399ffc8c962daf60674609 GIT binary patch literal 156 zcmWe*W@MPo$iOg}nOQP-hW(jq>oNiwO0KR+ktns0b=YxQXkK6(Yk2;b!>VNr3>*ja z52zo|IA8$Oko2FC0Z1`0h%<;XFbJjP=j)ZE7MJLy=jW&Ar0S&=0VNn1l!2I+L5M+s zjggI+m64U1g^`7siIIufxCAI8z`)1A!;xN8kgS_hQNWa8$iU6O#Q2nfi-CoKi9s9y D)Yu|4 literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/c328623c4ce12505a54cf1a7a1606e1db36e870d b/test/core/security/corpus/ssl_server_corpus/c328623c4ce12505a54cf1a7a1606e1db36e870d new file mode 100644 index 0000000000000000000000000000000000000000..32ef98cdb6a258646905c707e8b66a60d1e736a1 GIT binary patch literal 165 zcmWe*W@MOtl7V3|GqYsw4ErUfU6UeFY9Z^e*br}H-C0Ey^NR(R0I_x+tG%qmDD?IoNiwO0KR+ktns0b=YxQXkMH>Yk2;b!>VNr3>*ja z52zb3CLPdVU^wufkpZZcfkB)>lz~AgEk9qcB(=CiFFij$JttK!tq3T=z@QAoybMAN z0&I+I%&d&8%q)y7%uI|-%*G`^836`91|E*|qJm_3-PDRgrVJwnZU!cxsay;!3``8- E0QFrVe*gdg literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/cdbf0d2ae953bec07a67b7152785b548e55f85a4 b/test/core/security/corpus/ssl_server_corpus/cdbf0d2ae953bec07a67b7152785b548e55f85a4 new file mode 100644 index 00000000000..05a2a331845 --- /dev/null +++ b/test/core/security/corpus/ssl_server_corpus/cdbf0d2ae953bec07a67b7152785b548e55f85a4 @@ -0,0 +1 @@ +œHTTP diff --git a/test/core/security/corpus/ssl_server_corpus/cef06f9c35ee338998703555847d70c26bfc9474 b/test/core/security/corpus/ssl_server_corpus/cef06f9c35ee338998703555847d70c26bfc9474 new file mode 100644 index 0000000000000000000000000000000000000000..09f8c4ef69c716fa63baabc9d5e8c570ea0dff85 GIT binary patch literal 156 zcmWe*W@MPo$iOg}nOQP-hW(jq>oR6Flw4htB2j87>#*ar(7ZT%*6{o literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/cfb40ab8eb7031e978bed2418cdc2f0b8a8d8ec7 b/test/core/security/corpus/ssl_server_corpus/cfb40ab8eb7031e978bed2418cdc2f0b8a8d8ec7 new file mode 100644 index 0000000000000000000000000000000000000000..b1eceeaa0bb9b87f60e350bf943ad4faaade135f GIT binary patch literal 156 zcmWe*W@MPo$iOg}nOQP-hW(jq>oR6Flw4htB2j7~>#*ar(7ZT%*6{ooNiwO0KR+ktns0b=YxQXkMH>Yk2;b!>VNr3>*ja z52zo|IA8$Oko2FCfl-iwfkB)>lz~BLWmfk7FFc^QNR z7?>E@m{}QFnOPWFn3))vn2k$-G6D>I3_Kj^MFq*asTBoG8Ac4;K!pqpTnsD>OblWK zofa4ecG^-bP6L__avDRvlxTh$1FFl4ke$XLzy@}jIM{7Kr)e@9qPVRhRW}*vHbWG* Gi30#_HA8&> literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/d5afef69141edc7f4911243cf2deb19c912999cf b/test/core/security/corpus/ssl_server_corpus/d5afef69141edc7f4911243cf2deb19c912999cf new file mode 100644 index 0000000000000000000000000000000000000000..3086e8e13363daade0ddef2126bbfbad107b945e GIT binary patch literal 155 zcmWe*W@MPo$iOg}nOQP-hW(jq>oNiwO0KR+ktns0b=YxQXkK8PS9t!H!>VNr3>*ja z52zo|IA8$Oko2FC0Z1`0h%<;XFbJjP=j)ZE7MJLy=jW&Ar0S&=0VNn1l!2I+L5M+s zjggI+m64U1g^`7ck%`&31SlcEz{kMDkzQ1gteaXoNiwO0KR+ktj8nb=YxQXkMH>Yk2;b!>VNr3>*ja z52zo|IA8$Oko2FC0Z1`0h%<;XFbL_T<(K5A7MJLy=jW&Ar0S&=0VNn1l!2I+L5M+s zjggI+m64U1g^`7siIIufxCAI8z`)1A!vQiyH?^XGDZ_|?n}G?)oNiwO0KR+ktns0b=YxQXkMH>Yk2;b!>VNr3>*ja z52zo|IA8$Oko2FC0Z1`0h%<;XFbJjP=j)ZE7MJLy=jW&Ar0S&=0VNn1l!2I+L5M+s zjggI+m64U1g^`7siIIufxCAI8z`)1A!;xN8kgS_pQNWa8#K6tK1T>V3frWvIK^y?Y Cc_BXl literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/d7676dcd39b7c7cfaac513a98b56fe4ac8ea27d8 b/test/core/security/corpus/ssl_server_corpus/d7676dcd39b7c7cfaac513a98b56fe4ac8ea27d8 new file mode 100644 index 0000000000000000000000000000000000000000..87dcaf1fc304b6597e1270d4d5cb404c900ad0b9 GIT binary patch literal 156 zcmWe*W@MPo$iOg}nOQP-hW(jq>oNiwO0KR+k%+gDb=YxQXkK6(Yk2;b!>VNr3>*ja z52zo|IA8$O07OX)|AC}9gD3-oP+ESzUP)?kiC%hsetJ%-URn`Qf`LI9h&dUA7zEfD z*_c@wS(#ZFS(up^nV5}BfHDFMd<;As=|u&}x~UZfOc_QD+zd>N3`|@MEDTHx;sCqM BAvpj5 literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/d8c9e9ef14abc23b36cb493283ba3e2812d9e537 b/test/core/security/corpus/ssl_server_corpus/d8c9e9ef14abc23b36cb493283ba3e2812d9e537 new file mode 100644 index 0000000000000000000000000000000000000000..463accbde70f165e38a38519a6110555ef37dcd3 GIT binary patch literal 156 zcmWe*W@MPo$iOg}nOQP-#+hsDG6EV(uC7VpXJBA(*l}8DUYxxVYk2;b!>VNr3>*gz zs2|YRIA8$Oko5l>1CU~15N8l&WDrWr&)55sT3n)+o}Ztdld6|i1e9Q4PzGXN1|bFk zHbypPRz_B47Dg6kCPpS^BcMcy00SQb4@Y`YL9%XYMIlp$5d${^6VOmD1{MY;25|t~ CL?P7x literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/d9edb0aa5d2fe4af26ac861770c1530a4075f919 b/test/core/security/corpus/ssl_server_corpus/d9edb0aa5d2fe4af26ac861770c1530a4075f919 new file mode 100644 index 00000000000..809604e3440 --- /dev/null +++ b/test/core/security/corpus/ssl_server_corpus/d9edb0aa5d2fe4af26ac861770c1530a4075f919 @@ -0,0 +1 @@ +GET F \ No newline at end of file diff --git a/test/core/security/corpus/ssl_server_corpus/da1b52041957334b9ea1371bd2993013118bc82d b/test/core/security/corpus/ssl_server_corpus/da1b52041957334b9ea1371bd2993013118bc82d new file mode 100644 index 0000000000000000000000000000000000000000..6f09bd8856b1e7c3d37980d346929ec5cdff1f88 GIT binary patch literal 62 zcmWe*W@IpDWME)smdu@Df9Be{jDQB?t7}puN-bm^cATCk6d30fp8w@=*?|Kb`V0)} Q2Q&_t0+lEIXJi0U0A?W*wg3PC literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/dca7861424c8f92d3720de5c4488454cde1c39df b/test/core/security/corpus/ssl_server_corpus/dca7861424c8f92d3720de5c4488454cde1c39df new file mode 100644 index 0000000000000000000000000000000000000000..e3bf9475704debf7bcf3a4b41fa46279101ea016 GIT binary patch literal 64 zcmWe*W@IpDWME)0U}l!gone3G+PaK@hLWpmQY1<(WF2;#7Md3r#}%Ic<*;fQ0|Una U{R8T^H4d0EFeLqFWB}>|0B=|nCIA2c literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/df3755e257d024ef8ab08f6d5cefcf28148ea4b1 b/test/core/security/corpus/ssl_server_corpus/df3755e257d024ef8ab08f6d5cefcf28148ea4b1 new file mode 100644 index 0000000000000000000000000000000000000000..a2a28cd60b1dc6f1be6fb1109cd8ced3652b9790 GIT binary patch literal 64 zcmWe*W@IpDWMD90W|qvIVSnb@x{QE^lB;V{BuXu09d?`+nim-76`ud)uxc3t1Lpz# S1L_Af4wwQpB>iV(08#*lYZOfY literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/e360a49faefb87d671edb99e777f528f52cac9ae b/test/core/security/corpus/ssl_server_corpus/e360a49faefb87d671edb99e777f528f52cac9ae new file mode 100644 index 0000000000000000000000000000000000000000..92a0113f435009faccb63ae5b12a50900e18f231 GIT binary patch literal 156 zcmWe*W@MPo$iOg}nOQP-hW(jq>oNiwO0GJ{u8B|CVIgr^XkK6(Yk2;b!>VNr3>*ja z52zo|IAFlIfFbEWBLh$$1A{n&C<8-KT7JG>NosM4UV46hdQPfdS`ko!fk7FFc^QNl z1lSnam{}QFnOPWFn3))vm`zH6G6D>I3_Kj^MFq*asTBoG8Ac4;3`~p+Ok4~s3``8- E02W;$9smFU literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/e5e789605744d47e5a5d433bb04db1b413bc91a8 b/test/core/security/corpus/ssl_server_corpus/e5e789605744d47e5a5d433bb04db1b413bc91a8 new file mode 100644 index 0000000000000000000000000000000000000000..55f63dcec99b9e53271dd4c3dae9579ecf3348af GIT binary patch literal 43 zcmZo*WfWs%5Sz}(z%ZGaSu%Hqru~^~>oNiww5&?jq)3#S$U5veEyT>gz`zIq@oNiwO0KR+ktns0b=YxQXkMH>Yk2;b!>VNr3>*ja z52zo|IA8$Oko2FC0Z1`0h%<;XFbJ(o%goNiwO0KR+k%+gDb=YxQXkK6(Yk2;b!>VNr3>*ja z52zo|IA8$Oko2FC0Z1`0h%<;XFbJjP=j)ZE7MJLy=jW&Ar0S&=0VNn1l!2I&L5M+s zjggI+m64U1g^`7siIIufxCAI8z`)1A!;xN8kgS_pQNWa8#K6tK#K^$J#lXVA#2^j; D!0sVA literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/ea0645f46ccd233337a8389b6118db5b0289f040 b/test/core/security/corpus/ssl_server_corpus/ea0645f46ccd233337a8389b6118db5b0289f040 new file mode 100644 index 0000000000000000000000000000000000000000..8379f0182360726b1cef6bbcb4307e8e2f7ebed7 GIT binary patch literal 312 zcmWe*W@MPo$iOg}nOQP-hW(jq>oNiwO0KR+ktns0b=YxQXkMH>Yk2;b!>VNr3>*ja z52zo|IA8$Oko2FC0Z1`0h%<;XFbJjP=j)ZE7MJLy=jW&Ar0S&=0VNn1l!2I+L5M+s zjggI+m64U1g^`7siIIufxCAI8z`)1A!;xN8kgS_pQNWa8#K6tK1T>V3fdwclM$l=2 kaTrcBMRgiOzL02s8Uqnd69>Bu=rm32ZZkx38xw;#0Pjvhw*UYD literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/f6f7687df6b7056d3c819c03c9268e22a956b6b5 b/test/core/security/corpus/ssl_server_corpus/f6f7687df6b7056d3c819c03c9268e22a956b6b5 new file mode 100644 index 0000000000000000000000000000000000000000..0a3b794dbfd86849ed96da55ce6fcc4802eeb5fb GIT binary patch literal 156 zcmWe*W@MPo$iOg}nOQP-hW(jq>oNiwO0KR+ktns0b=YxQXkMH>Yk2;b!>VNr3>*ja z52zo|IA8$Oko2FC0Z1`0h%<;XFbJjP=j)ZE7MJLy=jW&Ar0S&=0VNn1l!2I+L5M+s zjggI+m64U1g^`7siIIufxCAI8z`)0##gSfApj(j4WK@xw!Jx^&1T>V3frWvIK^y?b Cjv;#h literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/f725caa73aa9467c5e934c49780fc409b36b251c b/test/core/security/corpus/ssl_server_corpus/f725caa73aa9467c5e934c49780fc409b36b251c new file mode 100644 index 0000000000000000000000000000000000000000..146d7f992435de424c771c1dd1b92efdf45d949a GIT binary patch literal 156 zcmWe*W@MPo$iOg}nOQP-hW(jq>oNiwO0KR+ktns0b=YxQXkMH>Yk2;b!>VNr3>*ja z52zo|FgO6zko5l>1CZin5N8l&WDrWr&(|wSEiTbZ&(BZKNzqFy0!lD2C^Il9@G=N7 z2(U4-F|#tVGP5wUFf%bSF&mWtWd#`c7oNiwO0KR+ktns0b=YxQXkMH>Yk2;b!>VNr3>*ja z52zo|IA8$Oko2FC0Z1`0h%-!OU`P|n&(|wSEiTbZ&(BZKN!3d$0!lD2C<8GsgAjuN z8zUPtD2 C(jmV9 literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/f9261344b4049e90e88b5af784dd29b938c5c838 b/test/core/security/corpus/ssl_server_corpus/f9261344b4049e90e88b5af784dd29b938c5c838 new file mode 100644 index 0000000000000000000000000000000000000000..02a90fb3a44407a8d1de4a0afd231d97fe55a128 GIT binary patch literal 156 zcmWe*W@MPo$iOg}nOQP-hW(jq>oNiwO0GJ{u8B|CVIgr^XkK6(Yk2;b!>VNr3>*ja z52zo|IA8$Oko2FC0Z1`0h%<;XFa)LL=j)ZE7MJLy=jW&Ar0S&=0VNn1l!2I+L5M+s zjggI+m64U1g^`7siIIufqy#7VNr3>*gz zs2|YRIA8$Oko5l>1CU~15N8l&WDrWr&)55sT3n)+o}Ztdld6|i1e9Q4PzGXN1|bFk zHbypPRz_B47Dg6kCPpS^qY|Ku00SQb4@Y`YL9%XYMIlp$5d${^6VOmD1{MY;25|sM CKO(3A literal 0 HcmV?d00001 diff --git a/test/core/security/corpus/ssl_server_corpus/f97db29497e4e3225016a6ced837e20a13622f16 b/test/core/security/corpus/ssl_server_corpus/f97db29497e4e3225016a6ced837e20a13622f16 new file mode 100644 index 0000000000000000000000000000000000000000..1159a7772bfb2f196a88378bcf3692a3213d3d9a GIT binary patch literal 156 zcmWe*W@MPo$iOg}nOQP-hW(jq>oNiwO0KR+ktns0b=YxQXkK6(Yk2;b!>VNr3>*ja z52zo|IA8$Oko2FC0Z1`0h%+$c3yJ2ZG3b?~7MJLy=jW&Ar0S&=fg~7|ftZ&;h(Umj zk&T&^k(HT+k%ftoNt4;Q1SliGz{kMDkzQ1gteaXoNiwO0KR+ktns0b=YxQXkMH>Yk2;b!>VNr3>*ja z52zo|IA8$Oko2FC0Z1`0h%<;XFbJjP=j)ZE7MJLy=jW&Ar0S&=0VNn1l!2I+L5M+s zjggI+m64U1g^`7siIIufxCAI8z`)1A!;xN8kgS_pQNWa8#K6tK1T>V7fdwclhTCc8 n5T^ykVK~hc)oBd*LZbO;3`96h9PBonPBVl$jSJ{BCI)c;t%E|5 literal 0 HcmV?d00001 From fdfe41fb036e5489b785db5e8ddeec231e6fdc5a Mon Sep 17 00:00:00 2001 From: Yuchen Zeng Date: Fri, 4 Nov 2016 16:19:17 -0700 Subject: [PATCH 23/55] Fix typo --- src/core/lib/iomgr/socket_utils_common_posix.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/lib/iomgr/socket_utils_common_posix.c b/src/core/lib/iomgr/socket_utils_common_posix.c index 19e290b95a1..88e9ade253e 100644 --- a/src/core/lib/iomgr/socket_utils_common_posix.c +++ b/src/core/lib/iomgr/socket_utils_common_posix.c @@ -209,7 +209,7 @@ grpc_error *grpc_set_socket_low_latency(int fd, int low_latency) { return GRPC_ERROR_NONE; } -/* set a socker using a grpc_socket_mutator */ +/* set a socket using a grpc_socket_mutator */ grpc_error *grpc_set_socket_with_mutator(int fd, grpc_socket_mutator *mutator) { GPR_ASSERT(mutator); if (!grpc_socket_mutator_mutate_fd(mutator, fd)) { From 6ab2ccd4372df54c2efb6741529b65c190ba0573 Mon Sep 17 00:00:00 2001 From: yang-g Date: Mon, 7 Nov 2016 10:11:34 -0800 Subject: [PATCH 24/55] regenerate projects --- Makefile | 13 - tools/fuzzer/runners/ssl_server_fuzzer.sh | 1 + tools/run_tests/sources_and_headers.json | 23 +- tools/run_tests/tests.json | 2178 +++++++++++++++++ .../google_benchmark/google_benchmark.vcxproj | 48 +- .../google_benchmark.vcxproj.filters | 118 - 6 files changed, 2181 insertions(+), 200 deletions(-) diff --git a/Makefile b/Makefile index 42fcfcb9266..31ccdf4bcb8 100644 --- a/Makefile +++ b/Makefile @@ -6755,19 +6755,6 @@ endif LIBGOOGLE_BENCHMARK_SRC = \ - third_party/google_benchmark/src/benchmark.cc \ - third_party/google_benchmark/src/benchmark_register.cc \ - third_party/google_benchmark/src/colorprint.cc \ - third_party/google_benchmark/src/commandlineflags.cc \ - third_party/google_benchmark/src/complexity.cc \ - third_party/google_benchmark/src/console_reporter.cc \ - third_party/google_benchmark/src/csv_reporter.cc \ - third_party/google_benchmark/src/json_reporter.cc \ - third_party/google_benchmark/src/reporter.cc \ - third_party/google_benchmark/src/sleep.cc \ - third_party/google_benchmark/src/string_util.cc \ - third_party/google_benchmark/src/sysinfo.cc \ - third_party/google_benchmark/src/timers.cc \ PUBLIC_HEADERS_CXX += \ diff --git a/tools/fuzzer/runners/ssl_server_fuzzer.sh b/tools/fuzzer/runners/ssl_server_fuzzer.sh index 23aef992e08..ce5396580e2 100644 --- a/tools/fuzzer/runners/ssl_server_fuzzer.sh +++ b/tools/fuzzer/runners/ssl_server_fuzzer.sh @@ -31,6 +31,7 @@ flags="-max_total_time=$runtime -artifact_prefix=fuzzer_output/ -max_len=2048 -timeout=120" + if [ "$jobs" != "1" ] then flags="-jobs=$jobs -workers=$jobs $flags" diff --git a/tools/run_tests/sources_and_headers.json b/tools/run_tests/sources_and_headers.json index 9af16d7f670..e2330064e8f 100644 --- a/tools/run_tests/sources_and_headers.json +++ b/tools/run_tests/sources_and_headers.json @@ -6144,28 +6144,7 @@ }, { "deps": [], - "headers": [ - "third_party/google_benchmark/include/benchmark/benchmark.h", - "third_party/google_benchmark/include/benchmark/benchmark_api.h", - "third_party/google_benchmark/include/benchmark/macros.h", - "third_party/google_benchmark/include/benchmark/reporter.h", - "third_party/google_benchmark/src/arraysize.h", - "third_party/google_benchmark/src/benchmark_api_internal.h", - "third_party/google_benchmark/src/check.h", - "third_party/google_benchmark/src/colorprint.h", - "third_party/google_benchmark/src/commandlineflags.h", - "third_party/google_benchmark/src/complexity.h", - "third_party/google_benchmark/src/cycleclock.h", - "third_party/google_benchmark/src/internal_macros.h", - "third_party/google_benchmark/src/log.h", - "third_party/google_benchmark/src/mutex.h", - "third_party/google_benchmark/src/re.h", - "third_party/google_benchmark/src/sleep.h", - "third_party/google_benchmark/src/stat.h", - "third_party/google_benchmark/src/string_util.h", - "third_party/google_benchmark/src/sysinfo.h", - "third_party/google_benchmark/src/timers.h" - ], + "headers": [], "is_filegroup": false, "language": "c++", "name": "google_benchmark", diff --git a/tools/run_tests/tests.json b/tools/run_tests/tests.json index 49c6d38300e..a6e840afe71 100644 --- a/tools/run_tests/tests.json +++ b/tools/run_tests/tests.json @@ -111927,6 +111927,2184 @@ ], "uses_polling": false }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/05cda1e986096f42698ee2d86ab0a4a3f6a6690b" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/0f65ef472e8308561c77ada56afd4de5932d950a" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/128915cb83e66a736f8a1833c8901eccb81e0656" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/134d3a5e7a1609a583f6282c48ef9b871e0fdc15" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/13fccd43a6b52c62851ea24e8be4f8cfe6c0103d" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/171bc6b14b94c72435d2da2e31e9682f12a3f13c" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/17dea38d21e9282ecd062466cf287ecf5b30c1cf" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/1961eb9d4dd4bf21cbcd9c45a17b1d025eb0d200" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/226ebb5cc16ac42fae3be273de533ac79759ae01" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/2333cf428cb1e2976679ac84e64873bf76c6595e" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/2885553a9e6829265d5f44ea4e24fcf7d6513436" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/28bce9a7cb21f3232239b9b71ef568137bf801f4" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/2a0286615be426d1e7fd5894aadf1a503df05a0a" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/2b4a1f3ebe223d91c042a5e86aff31e460f6cc3f" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/2cfbe809bcf53160ecc0109b2df01a8696a226fd" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/2f770de96db36ef9a71f7eb09b2e8695ac1f0655" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/30ba8ad171657470b5312232387b7da70c387219" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/36548a97a8b847e17a77d1e646c6eb5ec001d84a" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/3c442804f73cfe826a609d97c12ef87852742883" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/3dad758011b16a3771376f9af91242953be3e47b" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/43b56a1adffaf2c3c994679bf2b6fe6414e13df4" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/4446c60ab89c34e5ccc26bec18d7e7d21fe5aec1" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/44924b3866956d0668ec65750c3663279ac84a36" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/44e4370a4eafde61f8e7dc7e4542e0ad5ecf5253" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/44fb8c02117ebd75c97e517624c0abc9f9a76aa7" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/45d76dd1f0a29fce3f8d289b5177263871eb3f83" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/4fcbf18c4135352539eaf445c26f2f8a5da9b68e" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/508ca86c6f4e6ecc30c252ccf74e78256a893b17" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/515d240b860fcd1e77d4a5af291aa4a667d9b609" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/528e9738d5016f01cf59d74f20a8aa3f341ad89e" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/54b636a2bb66ccf8247b53ff76a6400e9f1355d0" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/5cc337c4b33cd703cd354804530f5b72684260d0" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/5ce3ec59111bf328044e41fcf26b3bc542df527e" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/5eaac270339f19cfce4eafa2e69d62adf100ad1c" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/6129382083353687a5c3acb3d4274b811227bf3d" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/616a25f7c4557ef9eb33d4367c6884abc336802d" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/6214e558afbfdb8451e49b62619896492f1a8972" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/6c6a6b2ce74acf8a8b90fc0b268ecc7dc992cd60" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/6f72309e1b23b824e9bbb9abf74a014b78be038e" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/7137ffad853e4dd76c6d6490f37b36e20de7ede0" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/71c9356b6b6c5a3a07033d0fa4ed417fa74a77e5" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/7414938799ed61282f41d5fb1474751ca52b2682" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/75e853eb2ff7e78efb327e114b39baff5a1dd5bb" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/7607c92952b4429e350260d8074c3c460468fd49" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/7677373c082fee56d8cdde009d9db5b117a4c8de" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/76abde5c970743f9fb8bc781e46c431dee2aa104" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/77e0b4e2066853df9d32d475b8788e3d7d19329b" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/78e66840048ddc3c75e0e4abffbb3109af0d750e" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/7dc620eb45764390c7b106362fc4922227415407" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/82ca7a52d589e9dbae37ebf1c59fac7ad876eb7c" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/8997d472f73eec84fea712638abd762818ec92ec" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/933bc3fdc56718d7ac0486c26eecddb6db1c5ba2" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/94431bda60ddc175cf86273ddc07cb41ecf45fa1" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/94c4272b2bb4fa9178eb4ae7dcf4b796fdcb22ac" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/9551c32a794250fb425005d8faf4bd24475acd41" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/9677da7c82f18cec3e0ed2e78aadd6e590271a52" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/9c2e6291aff608f3f5307a7c80db6b17107f0575" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/9c39dc04c7414ca0bb64fb942422bebe83ed8e8f" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/9cc8547d183a4f2ab7022b36376ca4a6230726c6" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/9e19e5e77789c34f99bbe1e6de198610d6765806" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/9f0853ccf6912df9fba2d5fc3a1ddece41c377ac" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/a6d521e501322f052df5a81ee622e0e4942ddcda" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/a9dc20f09890403be510357a7665a8f0db2468a4" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/ac1c60970910880558ae7a2ca2e155cfd7772e05" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/afe36d0187a155fc6e4e5c055c0ed0f3802cf696" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/b12b5fc39edc5407b4a525c414ff6b5e116eee05" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/b5b088c6e3a96f88119a940874ab04cb954797ae" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/b65ad77a43ede3394ba714238829860c4ef4bc9f" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/b6f265cad9d47e2ccd17a73a6d309d8898dc5428" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/b7ca5868bca7ae7d1952f44ca966218b26fb7207" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/bd20809eacabadb9bcc77d31e42d3359117b03f2" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/c328623c4ce12505a54cf1a7a1606e1db36e870d" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/c823e8bd5526d9fe7d51319737f51bd18bdd75e8" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/c9394095d86ff36b69d90f7122592bf51cafe7dd" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/cdbf0d2ae953bec07a67b7152785b548e55f85a4" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/cef06f9c35ee338998703555847d70c26bfc9474" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/cfb40ab8eb7031e978bed2418cdc2f0b8a8d8ec7" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/d30840c3f48f11179ef976ada30477045c6d1e98" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/d5afef69141edc7f4911243cf2deb19c912999cf" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/d5cf71396e1a04da1a7ec266957ffd2de29d6a57" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/d6dd8a2b085db5d33ef24b23502293ce1ce906a3" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/d7676dcd39b7c7cfaac513a98b56fe4ac8ea27d8" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/d8c9e9ef14abc23b36cb493283ba3e2812d9e537" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/d9edb0aa5d2fe4af26ac861770c1530a4075f919" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/da1b52041957334b9ea1371bd2993013118bc82d" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/dca7861424c8f92d3720de5c4488454cde1c39df" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/df3755e257d024ef8ab08f6d5cefcf28148ea4b1" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/e360a49faefb87d671edb99e777f528f52cac9ae" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/e5e789605744d47e5a5d433bb04db1b413bc91a8" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/e6e44a6aa0ece409450c85e43d02c57e338ce1da" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/e8ebd49ee98cf57ca7eb35b6e96ef8866270aac6" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/ea0645f46ccd233337a8389b6118db5b0289f040" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/f6f7687df6b7056d3c819c03c9268e22a956b6b5" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/f725caa73aa9467c5e934c49780fc409b36b251c" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/f8d3326a860091edd4d60725f96f429d13f3abe6" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/f9261344b4049e90e88b5af784dd29b938c5c838" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/f95b97ece3b46815204a8e6d6e94f92ec40a9672" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/f97db29497e4e3225016a6ced837e20a13622f16" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/security/corpus/ssl_server_corpus/ff1a900b12f19772f9a86bd5f560a754cdb18d1a" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "ssl_server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, { "args": [ "test/core/client_channel/uri_corpus/02d156dc5e6f2c11c90c2e06fcee04adf036a342" diff --git a/vsprojects/vcxproj/google_benchmark/google_benchmark.vcxproj b/vsprojects/vcxproj/google_benchmark/google_benchmark.vcxproj index 52774e08025..1c875d7c093 100644 --- a/vsprojects/vcxproj/google_benchmark/google_benchmark.vcxproj +++ b/vsprojects/vcxproj/google_benchmark/google_benchmark.vcxproj @@ -147,53 +147,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + diff --git a/vsprojects/vcxproj/google_benchmark/google_benchmark.vcxproj.filters b/vsprojects/vcxproj/google_benchmark/google_benchmark.vcxproj.filters index 9db6ed46574..00e4276f1d4 100644 --- a/vsprojects/vcxproj/google_benchmark/google_benchmark.vcxproj.filters +++ b/vsprojects/vcxproj/google_benchmark/google_benchmark.vcxproj.filters @@ -1,125 +1,7 @@ - - - third_party\google_benchmark\src - - - third_party\google_benchmark\src - - - third_party\google_benchmark\src - - - third_party\google_benchmark\src - - - third_party\google_benchmark\src - - - third_party\google_benchmark\src - - - third_party\google_benchmark\src - - - third_party\google_benchmark\src - - - third_party\google_benchmark\src - - - third_party\google_benchmark\src - - - third_party\google_benchmark\src - - - third_party\google_benchmark\src - - - third_party\google_benchmark\src - - - - - third_party\google_benchmark\include\benchmark - - - third_party\google_benchmark\include\benchmark - - - third_party\google_benchmark\include\benchmark - - - third_party\google_benchmark\include\benchmark - - - third_party\google_benchmark\src - - - third_party\google_benchmark\src - - - third_party\google_benchmark\src - - - third_party\google_benchmark\src - - - third_party\google_benchmark\src - - - third_party\google_benchmark\src - - - third_party\google_benchmark\src - - - third_party\google_benchmark\src - - - third_party\google_benchmark\src - - - third_party\google_benchmark\src - - - third_party\google_benchmark\src - - - third_party\google_benchmark\src - - - third_party\google_benchmark\src - - - third_party\google_benchmark\src - - - third_party\google_benchmark\src - - - third_party\google_benchmark\src - - - - {7458b63d-7ba4-103d-2bed-3e3ad30d8237} - - - {54a154e8-669b-a7c1-9b6e-bd1aab2f86e3} - - - {f54c3cb1-ec20-a651-6956-78379b51e1a5} - - - {0483a457-8050-4565-bc15-09695bf7b822} - - - {c39ff2d1-691e-4614-4d75-4bc20db05e09} - From b24fb69366cf4d715078e7b75f2915ee789a4862 Mon Sep 17 00:00:00 2001 From: yang-g Date: Mon, 7 Nov 2016 13:13:40 -0800 Subject: [PATCH 25/55] clang-format --- test/core/security/ssl_server_fuzzer.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/test/core/security/ssl_server_fuzzer.c b/test/core/security/ssl_server_fuzzer.c index 7723a67ff5a..4bb2b1c6eb7 100644 --- a/test/core/security/ssl_server_fuzzer.c +++ b/test/core/security/ssl_server_fuzzer.c @@ -109,15 +109,14 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { grpc_server_credentials_create_security_connector(creds, &sc); GPR_ASSERT(status == GRPC_SECURITY_OK); sc->channel_args = NULL; - gpr_timespec deadline = gpr_time_add( - gpr_now(GPR_CLOCK_MONOTONIC), - gpr_time_from_seconds(1, GPR_TIMESPAN)); + gpr_timespec deadline = gpr_time_add(gpr_now(GPR_CLOCK_MONOTONIC), + gpr_time_from_seconds(1, GPR_TIMESPAN)); struct handshake_state state; state.done_callback_called = false; - grpc_server_security_connector_do_handshake( - &exec_ctx, sc, NULL, mock_endpoint, NULL, deadline, - on_secure_handshake_done, &state); + grpc_server_security_connector_do_handshake(&exec_ctx, sc, NULL, + mock_endpoint, NULL, deadline, + on_secure_handshake_done, &state); grpc_exec_ctx_flush(&exec_ctx); bool mock_endpoint_shutdown = false; From aed3cb454fde496e14395ef03da971c8df686af9 Mon Sep 17 00:00:00 2001 From: yang-g Date: Tue, 8 Nov 2016 09:52:46 -0800 Subject: [PATCH 26/55] fix sources_and_headers.json --- Makefile | 13 ++ tools/run_tests/sources_and_headers.json | 23 +++- .../google_benchmark/google_benchmark.vcxproj | 48 ++++++- .../google_benchmark.vcxproj.filters | 118 ++++++++++++++++++ 4 files changed, 200 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 31ccdf4bcb8..42fcfcb9266 100644 --- a/Makefile +++ b/Makefile @@ -6755,6 +6755,19 @@ endif LIBGOOGLE_BENCHMARK_SRC = \ + third_party/google_benchmark/src/benchmark.cc \ + third_party/google_benchmark/src/benchmark_register.cc \ + third_party/google_benchmark/src/colorprint.cc \ + third_party/google_benchmark/src/commandlineflags.cc \ + third_party/google_benchmark/src/complexity.cc \ + third_party/google_benchmark/src/console_reporter.cc \ + third_party/google_benchmark/src/csv_reporter.cc \ + third_party/google_benchmark/src/json_reporter.cc \ + third_party/google_benchmark/src/reporter.cc \ + third_party/google_benchmark/src/sleep.cc \ + third_party/google_benchmark/src/string_util.cc \ + third_party/google_benchmark/src/sysinfo.cc \ + third_party/google_benchmark/src/timers.cc \ PUBLIC_HEADERS_CXX += \ diff --git a/tools/run_tests/sources_and_headers.json b/tools/run_tests/sources_and_headers.json index e2330064e8f..9af16d7f670 100644 --- a/tools/run_tests/sources_and_headers.json +++ b/tools/run_tests/sources_and_headers.json @@ -6144,7 +6144,28 @@ }, { "deps": [], - "headers": [], + "headers": [ + "third_party/google_benchmark/include/benchmark/benchmark.h", + "third_party/google_benchmark/include/benchmark/benchmark_api.h", + "third_party/google_benchmark/include/benchmark/macros.h", + "third_party/google_benchmark/include/benchmark/reporter.h", + "third_party/google_benchmark/src/arraysize.h", + "third_party/google_benchmark/src/benchmark_api_internal.h", + "third_party/google_benchmark/src/check.h", + "third_party/google_benchmark/src/colorprint.h", + "third_party/google_benchmark/src/commandlineflags.h", + "third_party/google_benchmark/src/complexity.h", + "third_party/google_benchmark/src/cycleclock.h", + "third_party/google_benchmark/src/internal_macros.h", + "third_party/google_benchmark/src/log.h", + "third_party/google_benchmark/src/mutex.h", + "third_party/google_benchmark/src/re.h", + "third_party/google_benchmark/src/sleep.h", + "third_party/google_benchmark/src/stat.h", + "third_party/google_benchmark/src/string_util.h", + "third_party/google_benchmark/src/sysinfo.h", + "third_party/google_benchmark/src/timers.h" + ], "is_filegroup": false, "language": "c++", "name": "google_benchmark", diff --git a/vsprojects/vcxproj/google_benchmark/google_benchmark.vcxproj b/vsprojects/vcxproj/google_benchmark/google_benchmark.vcxproj index 1c875d7c093..52774e08025 100644 --- a/vsprojects/vcxproj/google_benchmark/google_benchmark.vcxproj +++ b/vsprojects/vcxproj/google_benchmark/google_benchmark.vcxproj @@ -147,7 +147,53 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vsprojects/vcxproj/google_benchmark/google_benchmark.vcxproj.filters b/vsprojects/vcxproj/google_benchmark/google_benchmark.vcxproj.filters index 00e4276f1d4..9db6ed46574 100644 --- a/vsprojects/vcxproj/google_benchmark/google_benchmark.vcxproj.filters +++ b/vsprojects/vcxproj/google_benchmark/google_benchmark.vcxproj.filters @@ -1,7 +1,125 @@ + + + third_party\google_benchmark\src + + + third_party\google_benchmark\src + + + third_party\google_benchmark\src + + + third_party\google_benchmark\src + + + third_party\google_benchmark\src + + + third_party\google_benchmark\src + + + third_party\google_benchmark\src + + + third_party\google_benchmark\src + + + third_party\google_benchmark\src + + + third_party\google_benchmark\src + + + third_party\google_benchmark\src + + + third_party\google_benchmark\src + + + third_party\google_benchmark\src + + + + + third_party\google_benchmark\include\benchmark + + + third_party\google_benchmark\include\benchmark + + + third_party\google_benchmark\include\benchmark + + + third_party\google_benchmark\include\benchmark + + + third_party\google_benchmark\src + + + third_party\google_benchmark\src + + + third_party\google_benchmark\src + + + third_party\google_benchmark\src + + + third_party\google_benchmark\src + + + third_party\google_benchmark\src + + + third_party\google_benchmark\src + + + third_party\google_benchmark\src + + + third_party\google_benchmark\src + + + third_party\google_benchmark\src + + + third_party\google_benchmark\src + + + third_party\google_benchmark\src + + + third_party\google_benchmark\src + + + third_party\google_benchmark\src + + + third_party\google_benchmark\src + + + third_party\google_benchmark\src + + + + {7458b63d-7ba4-103d-2bed-3e3ad30d8237} + + + {54a154e8-669b-a7c1-9b6e-bd1aab2f86e3} + + + {f54c3cb1-ec20-a651-6956-78379b51e1a5} + + + {0483a457-8050-4565-bc15-09695bf7b822} + + + {c39ff2d1-691e-4614-4d75-4bc20db05e09} + From 55d2598ea56254109107bafa2de7c5a3f045e354 Mon Sep 17 00:00:00 2001 From: yang-g Date: Tue, 8 Nov 2016 13:47:37 -0800 Subject: [PATCH 27/55] grpc_slice --- test/core/security/ssl_server_fuzzer.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/test/core/security/ssl_server_fuzzer.c b/test/core/security/ssl_server_fuzzer.c index 4bb2b1c6eb7..09c8c54d67f 100644 --- a/test/core/security/ssl_server_fuzzer.c +++ b/test/core/security/ssl_server_fuzzer.c @@ -50,7 +50,7 @@ bool leak_check = false; #define SSL_KEY_PATH "src/core/lib/tsi/test_creds/server1.key" #define SSL_CA_PATH "src/core/lib/tsi/test_creds/ca.pem" -static void discard_write(gpr_slice slice) {} +static void discard_write(grpc_slice slice) {} static void dont_log(gpr_log_func_args *args) {} @@ -86,20 +86,20 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { grpc_mock_endpoint_put_read( &exec_ctx, mock_endpoint, - gpr_slice_from_copied_buffer((const char *)data, size)); + grpc_slice_from_copied_buffer((const char *)data, size)); // Load key pair and establish server SSL credentials. grpc_ssl_pem_key_cert_pair pem_key_cert_pair; - gpr_slice ca_slice, cert_slice, key_slice; + grpc_slice ca_slice, cert_slice, key_slice; GPR_ASSERT(GRPC_LOG_IF_ERROR("load_file", grpc_load_file(SSL_CA_PATH, 1, &ca_slice))); GPR_ASSERT(GRPC_LOG_IF_ERROR("load_file", grpc_load_file(SSL_CERT_PATH, 1, &cert_slice))); GPR_ASSERT(GRPC_LOG_IF_ERROR("load_file", grpc_load_file(SSL_KEY_PATH, 1, &key_slice))); - const char *ca_cert = (const char *)GPR_SLICE_START_PTR(ca_slice); - pem_key_cert_pair.private_key = (const char *)GPR_SLICE_START_PTR(key_slice); - pem_key_cert_pair.cert_chain = (const char *)GPR_SLICE_START_PTR(cert_slice); + const char *ca_cert = (const char *)GRPC_SLICE_START_PTR(ca_slice); + pem_key_cert_pair.private_key = (const char *)GRPC_SLICE_START_PTR(key_slice); + pem_key_cert_pair.cert_chain = (const char *)GRPC_SLICE_START_PTR(cert_slice); grpc_server_credentials *creds = grpc_ssl_server_credentials_create( ca_cert, &pem_key_cert_pair, 1, 0, NULL); @@ -133,9 +133,9 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { GRPC_SECURITY_CONNECTOR_UNREF(&sc->base, "test"); grpc_server_credentials_release(creds); - gpr_slice_unref(cert_slice); - gpr_slice_unref(key_slice); - gpr_slice_unref(ca_slice); + grpc_slice_unref(cert_slice); + grpc_slice_unref(key_slice); + grpc_slice_unref(ca_slice); // grpc_endpoint_destroy has been called in handshake failure handling code. if (!mock_endpoint_shutdown) { grpc_endpoint_shutdown(&exec_ctx, mock_endpoint); From f953295b742547120796c0eb51ae499f5a33b1a9 Mon Sep 17 00:00:00 2001 From: David Garcia Quintas Date: Tue, 8 Nov 2016 14:14:25 -0800 Subject: [PATCH 28/55] Fixed locking for grpclb --- src/core/ext/lb_policy/grpclb/grpclb.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/core/ext/lb_policy/grpclb/grpclb.c b/src/core/ext/lb_policy/grpclb/grpclb.c index 41e177c4952..9f37dc9a671 100644 --- a/src/core/ext/lb_policy/grpclb/grpclb.c +++ b/src/core/ext/lb_policy/grpclb/grpclb.c @@ -605,10 +605,10 @@ static void glb_rr_connectivity_changed(grpc_exec_ctx *exec_ctx, void *arg, * right grpclb status. */ rr_connectivity_data *rr_conn_data = arg; glb_lb_policy *glb_policy = rr_conn_data->glb_policy; + gpr_mu_lock(&glb_policy->mu); if (rr_conn_data->state != GRPC_CHANNEL_SHUTDOWN && !glb_policy->shutting_down) { - gpr_mu_lock(&glb_policy->mu); /* RR not shutting down. Mimic the RR's policy state */ grpc_connectivity_state_set(exec_ctx, &glb_policy->state_tracker, rr_conn_data->state, GRPC_ERROR_REF(error), @@ -617,12 +617,12 @@ static void glb_rr_connectivity_changed(grpc_exec_ctx *exec_ctx, void *arg, grpc_lb_policy_notify_on_state_change(exec_ctx, glb_policy->rr_policy, &rr_conn_data->state, &rr_conn_data->on_change); - gpr_mu_unlock(&glb_policy->mu); } else { GRPC_LB_POLICY_WEAK_UNREF(exec_ctx, &glb_policy->base, "rr_connectivity_cb"); gpr_free(rr_conn_data); } + gpr_mu_unlock(&glb_policy->mu); } static grpc_lb_policy *glb_create(grpc_exec_ctx *exec_ctx, @@ -1081,6 +1081,7 @@ static void lb_on_response_received(grpc_exec_ctx *exec_ctx, void *arg, grpc_op ops[2]; memset(ops, 0, sizeof(ops)); grpc_op *op = ops; + gpr_mu_lock(&glb_policy->mu); if (glb_policy->lb_response_payload != NULL) { gpr_backoff_reset(&glb_policy->lb_call_backoff_state); /* Received data from the LB server. Look inside @@ -1109,7 +1110,6 @@ static void lb_on_response_received(grpc_exec_ctx *exec_ctx, void *arg, /* update serverlist */ if (serverlist->num_servers > 0) { - gpr_mu_lock(&glb_policy->mu); if (grpc_grpclb_serverlist_equals(glb_policy->serverlist, serverlist)) { if (grpc_lb_glb_trace) { gpr_log(GPR_INFO, @@ -1125,7 +1125,6 @@ static void lb_on_response_received(grpc_exec_ctx *exec_ctx, void *arg, rr_handover_locked(exec_ctx, glb_policy, error); } - gpr_mu_unlock(&glb_policy->mu); } else { if (grpc_lb_glb_trace) { gpr_log(GPR_INFO, @@ -1153,11 +1152,13 @@ static void lb_on_response_received(grpc_exec_ctx *exec_ctx, void *arg, &glb_policy->lb_on_response_received); /* loop */ GPR_ASSERT(GRPC_CALL_OK == call_error); } + gpr_mu_unlock(&glb_policy->mu); } else { /* empty payload: call cancelled. */ /* dispose of the "lb_on_response_received" weak ref taken in * query_for_backends_locked() and reused in every reception loop */ - GRPC_LB_POLICY_WEAK_UNREF(exec_ctx, &glb_policy->base, - "lb_on_response_received_empty_payload"); + gpr_mu_unlock(&glb_policy->mu); + GRPC_LB_POLICY_WEAK_UNREF(exec_ctx, &glb_policy->base, + "lb_on_response_received_empty_payload"); } } @@ -1175,7 +1176,6 @@ static void lb_call_on_retry_timer(grpc_exec_ctx *exec_ctx, void *arg, query_for_backends_locked(exec_ctx, glb_policy); } gpr_mu_unlock(&glb_policy->mu); - GRPC_LB_POLICY_WEAK_UNREF(exec_ctx, &glb_policy->base, "grpclb_on_retry_timer"); } From 8006949fd372d0e18317060d0d070e9bd5d71401 Mon Sep 17 00:00:00 2001 From: David Garcia Quintas Date: Tue, 8 Nov 2016 14:17:48 -0800 Subject: [PATCH 29/55] Added assert for lb_token before reffing it --- src/core/ext/lb_policy/grpclb/grpclb.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/core/ext/lb_policy/grpclb/grpclb.c b/src/core/ext/lb_policy/grpclb/grpclb.c index 9f37dc9a671..a69b5c8e513 100644 --- a/src/core/ext/lb_policy/grpclb/grpclb.c +++ b/src/core/ext/lb_policy/grpclb/grpclb.c @@ -186,6 +186,7 @@ static void wrapped_rr_closure(grpc_exec_ctx *exec_ctx, void *arg, * addresses failed to connect). There won't be any user_data/token * available */ if (wc_arg->target != NULL) { + GPR_ASSERT(wc_arg->lb_token != NULL); initial_metadata_add_lb_token(wc_arg->initial_metadata, wc_arg->lb_token_mdelem_storage, GRPC_MDELEM_REF(wc_arg->lb_token)); From 7810898658353056bb6f6cd4c84bfa00ff7c7290 Mon Sep 17 00:00:00 2001 From: Yuchen Zeng Date: Tue, 8 Nov 2016 14:28:03 -0800 Subject: [PATCH 30/55] Add grpc_socket_mutator_compare --- src/core/lib/iomgr/socket_mutator.c | 19 ++++++++++++++++++- src/core/lib/iomgr/socket_mutator.h | 5 +++++ test/core/iomgr/socket_utils_test.c | 12 ++++++++++-- test/cpp/common/channel_arguments_test.cc | 9 +++++++-- 4 files changed, 40 insertions(+), 5 deletions(-) diff --git a/src/core/lib/iomgr/socket_mutator.c b/src/core/lib/iomgr/socket_mutator.c index 3f66cb100da..8b1efb6bab0 100644 --- a/src/core/lib/iomgr/socket_mutator.c +++ b/src/core/lib/iomgr/socket_mutator.c @@ -52,6 +52,20 @@ bool grpc_socket_mutator_mutate_fd(grpc_socket_mutator *mutator, int fd) { return mutator->vtable->mutate_fd(fd, mutator); } +int grpc_socket_mutator_compare(grpc_socket_mutator *a, + grpc_socket_mutator *b) { + int c = GPR_ICMP(a, b); + if (c != 0) { + grpc_socket_mutator *sma = a; + grpc_socket_mutator *smb = b; + c = GPR_ICMP(sma->vtable, smb->vtable); + if (c == 0) { + c = sma->vtable->compare(sma, smb); + } + } + return c; +} + void grpc_socket_mutator_unref(grpc_socket_mutator *mutator) { if (gpr_unref(&mutator->refcount)) { mutator->vtable->destory(mutator); @@ -66,7 +80,10 @@ static void socket_mutator_arg_destroy(void *p) { grpc_socket_mutator_unref(p); } -static int socket_mutator_cmp(void *a, void *b) { return GPR_ICMP(a, b); } +static int socket_mutator_cmp(void *a, void *b) { + return grpc_socket_mutator_compare((grpc_socket_mutator *)a, + (grpc_socket_mutator *)b); +} static const grpc_arg_pointer_vtable socket_mutator_arg_vtable = { socket_mutator_arg_copy, socket_mutator_arg_destroy, socket_mutator_cmp}; diff --git a/src/core/lib/iomgr/socket_mutator.h b/src/core/lib/iomgr/socket_mutator.h index 5200f52d3a1..2f5b6c248e9 100644 --- a/src/core/lib/iomgr/socket_mutator.h +++ b/src/core/lib/iomgr/socket_mutator.h @@ -45,6 +45,8 @@ extern "C" { typedef struct { /** Mutates the socket opitons of \a fd */ bool (*mutate_fd)(int fd, grpc_socket_mutator *mutator); + /** Compare socket mutator \a a and \a b */ + int (*compare)(grpc_socket_mutator *a, grpc_socket_mutator *b); /** Destroys the socket mutator instance */ void (*destory)(grpc_socket_mutator *mutator); } grpc_socket_mutator_vtable; @@ -65,6 +67,9 @@ grpc_arg grpc_socket_mutator_to_arg(grpc_socket_mutator *mutator); /** Perform the file descriptor mutation operation of \a mutator on \a fd */ bool grpc_socket_mutator_mutate_fd(grpc_socket_mutator *mutator, int fd); +/** Compare if \a a and \a b are the same mutator or have same settings */ +int grpc_socket_mutator_compare(grpc_socket_mutator *a, grpc_socket_mutator *b); + grpc_socket_mutator *grpc_socket_mutator_ref(grpc_socket_mutator *mutator); void grpc_socket_mutator_unref(grpc_socket_mutator *mutator); diff --git a/test/core/iomgr/socket_utils_test.c b/test/core/iomgr/socket_utils_test.c index b3363b2be2e..7eee2d1d102 100644 --- a/test/core/iomgr/socket_utils_test.c +++ b/test/core/iomgr/socket_utils_test.c @@ -45,6 +45,7 @@ #include #include #include +#include #include "src/core/lib/iomgr/socket_mutator.h" #include "test/core/util/test_config.h" @@ -76,8 +77,15 @@ static void destroy_test_mutator(grpc_socket_mutator *mutator) { gpr_free(m); } -static const grpc_socket_mutator_vtable mutator_vtable = {mutate_fd, - destroy_test_mutator}; +static int compare_test_mutator(grpc_socket_mutator *a, + grpc_socket_mutator *b) { + struct test_socket_mutator *ma = (struct test_socket_mutator *)a; + struct test_socket_mutator *mb = (struct test_socket_mutator *)b; + return GPR_ICMP(ma->option_value, mb->option_value); +} + +static const grpc_socket_mutator_vtable mutator_vtable = { + mutate_fd, compare_test_mutator, destroy_test_mutator}; int main(int argc, char **argv) { int sock; diff --git a/test/cpp/common/channel_arguments_test.cc b/test/cpp/common/channel_arguments_test.cc index e048108f0f5..c2cf350b37d 100644 --- a/test/cpp/common/channel_arguments_test.cc +++ b/test/cpp/common/channel_arguments_test.cc @@ -34,6 +34,7 @@ #include #include +#include #include #include "src/core/lib/iomgr/socket_mutator.h" @@ -62,13 +63,17 @@ bool test_mutator_mutate_fd(int fd, grpc_socket_mutator* mutator) { return tsm->MutateFd(fd); } +int test_mutator_compare(grpc_socket_mutator* a, grpc_socket_mutator* b) { + return GPR_ICMP(a, b); +} + void test_mutator_destroy(grpc_socket_mutator* mutator) { TestSocketMutator* tsm = (TestSocketMutator*)mutator; delete tsm; } -grpc_socket_mutator_vtable test_mutator_vtable = {test_mutator_mutate_fd, - test_mutator_destroy}; +grpc_socket_mutator_vtable test_mutator_vtable = { + test_mutator_mutate_fd, test_mutator_compare, test_mutator_destroy}; // // TestSocketMutator implementation From d4d2ecef8ea36b3ced81734aa485b79356c42da1 Mon Sep 17 00:00:00 2001 From: David Garcia Quintas Date: Tue, 8 Nov 2016 14:38:12 -0800 Subject: [PATCH 31/55] clang-format --- src/core/ext/lb_policy/grpclb/grpclb.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/core/ext/lb_policy/grpclb/grpclb.c b/src/core/ext/lb_policy/grpclb/grpclb.c index a69b5c8e513..d68fbb3dfb5 100644 --- a/src/core/ext/lb_policy/grpclb/grpclb.c +++ b/src/core/ext/lb_policy/grpclb/grpclb.c @@ -1155,11 +1155,11 @@ static void lb_on_response_received(grpc_exec_ctx *exec_ctx, void *arg, } gpr_mu_unlock(&glb_policy->mu); } else { /* empty payload: call cancelled. */ - /* dispose of the "lb_on_response_received" weak ref taken in - * query_for_backends_locked() and reused in every reception loop */ - gpr_mu_unlock(&glb_policy->mu); - GRPC_LB_POLICY_WEAK_UNREF(exec_ctx, &glb_policy->base, - "lb_on_response_received_empty_payload"); + /* dispose of the "lb_on_response_received" weak ref taken in + * query_for_backends_locked() and reused in every reception loop */ + gpr_mu_unlock(&glb_policy->mu); + GRPC_LB_POLICY_WEAK_UNREF(exec_ctx, &glb_policy->base, + "lb_on_response_received_empty_payload"); } } From fefb3caae4b9cc7bbdf411f7a0527b8497b60caa Mon Sep 17 00:00:00 2001 From: yang-g Date: Tue, 8 Nov 2016 16:46:02 -0800 Subject: [PATCH 32/55] shutdown is not needed with the changes to mock_ep --- test/core/security/ssl_server_fuzzer.c | 7 ------- 1 file changed, 7 deletions(-) diff --git a/test/core/security/ssl_server_fuzzer.c b/test/core/security/ssl_server_fuzzer.c index 09c8c54d67f..04969765f59 100644 --- a/test/core/security/ssl_server_fuzzer.c +++ b/test/core/security/ssl_server_fuzzer.c @@ -119,12 +119,10 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { on_secure_handshake_done, &state); grpc_exec_ctx_flush(&exec_ctx); - bool mock_endpoint_shutdown = false; // If the given string happens to be part of the correct client hello, the // server will wait for more data. Explicitly fail the server by shutting down // the endpoint. if (!state.done_callback_called) { - mock_endpoint_shutdown = true; grpc_endpoint_shutdown(&exec_ctx, mock_endpoint); grpc_exec_ctx_flush(&exec_ctx); } @@ -136,11 +134,6 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { grpc_slice_unref(cert_slice); grpc_slice_unref(key_slice); grpc_slice_unref(ca_slice); - // grpc_endpoint_destroy has been called in handshake failure handling code. - if (!mock_endpoint_shutdown) { - grpc_endpoint_shutdown(&exec_ctx, mock_endpoint); - grpc_exec_ctx_flush(&exec_ctx); - } grpc_exec_ctx_flush(&exec_ctx); grpc_shutdown(); From 5db488431ee266a5780b4e804eb6037514fa4a63 Mon Sep 17 00:00:00 2001 From: yang-g Date: Wed, 9 Nov 2016 10:54:54 -0800 Subject: [PATCH 33/55] ignore ssl error leak --- tools/lsan_suppressions.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/lsan_suppressions.txt b/tools/lsan_suppressions.txt index d672cb6cae5..a58a8a79b93 100644 --- a/tools/lsan_suppressions.txt +++ b/tools/lsan_suppressions.txt @@ -1,3 +1,4 @@ # this is busted in BoringSSL leak:CRYPTO_set_thread_local leak:err_get_state +leak:err_add_error_dataf From dabe6bd2af864f64c40685b1cdc49b8a9bfebdd5 Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Wed, 9 Nov 2016 11:03:21 -0800 Subject: [PATCH 34/55] Enable Node Express benchmarks, fix copy/paste errors --- tools/jenkins/run_full_performance.sh | 2 +- tools/run_tests/performance/scenario_config.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/jenkins/run_full_performance.sh b/tools/jenkins/run_full_performance.sh index 7631db8844b..4c4bddb8550 100755 --- a/tools/jenkins/run_full_performance.sh +++ b/tools/jenkins/run_full_performance.sh @@ -36,7 +36,7 @@ cd $(dirname $0)/../.. # run 8core client vs 8core server tools/run_tests/run_performance_tests.py \ - -l c++ csharp node ruby java python go \ + -l c++ csharp node ruby java python go node_express \ --netperf \ --category scalable \ --bq_result_table performance_test.performance_experiment \ diff --git a/tools/run_tests/performance/scenario_config.py b/tools/run_tests/performance/scenario_config.py index 4e4c16642ba..ac703fd6d9c 100644 --- a/tools/run_tests/performance/scenario_config.py +++ b/tools/run_tests/performance/scenario_config.py @@ -700,12 +700,12 @@ class NodeExpressLanguage: # client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER') yield _ping_pong_scenario( - 'node_protobuf_unary_ping_pong', rpc_type='UNARY', + 'node_express_json_unary_ping_pong', rpc_type='UNARY', client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER', categories=[SCALABLE, SMOKETEST]) yield _ping_pong_scenario( - 'node_protobuf_async_unary_qps_unconstrained', rpc_type='UNARY', + 'node_express_json_async_unary_qps_unconstrained', rpc_type='UNARY', client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER', unconstrained_client='async', categories=[SCALABLE, SMOKETEST]) From ae4ab4fb0cb4b5ffb9e04ddb7deb17aad920a0e2 Mon Sep 17 00:00:00 2001 From: Jan Tattermusch Date: Wed, 9 Nov 2016 22:52:38 +0100 Subject: [PATCH 35/55] allow null metadata_array in plugin notify --- src/csharp/ext/grpc_csharp_ext.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/csharp/ext/grpc_csharp_ext.c b/src/csharp/ext/grpc_csharp_ext.c index 0bf5b0acf32..37d04eb1000 100644 --- a/src/csharp/ext/grpc_csharp_ext.c +++ b/src/csharp/ext/grpc_csharp_ext.c @@ -991,7 +991,11 @@ GPR_EXPORT void GPR_CALLTYPE grpcsharp_metadata_credentials_notify_from_plugin( grpc_credentials_plugin_metadata_cb cb, void *user_data, grpc_metadata_array *metadata, grpc_status_code status, const char *error_details) { - cb(user_data, metadata->metadata, metadata->count, status, error_details); + if (metadata) { + cb(user_data, metadata->metadata, metadata->count, status, error_details); + } else { + cb(user_data, NULL, 0, status, error_details); + } } typedef void(GPR_CALLTYPE *grpcsharp_metadata_interceptor_func)( From 90eb388c17a611f01579856307b64c781bb39663 Mon Sep 17 00:00:00 2001 From: Jan Tattermusch Date: Wed, 9 Nov 2016 22:53:16 +0100 Subject: [PATCH 36/55] add more MetadataCredentials tests --- .../MetadataCredentialsTest.cs | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/csharp/Grpc.IntegrationTesting/MetadataCredentialsTest.cs b/src/csharp/Grpc.IntegrationTesting/MetadataCredentialsTest.cs index eb3bb8a28bb..10ab67abae6 100644 --- a/src/csharp/Grpc.IntegrationTesting/MetadataCredentialsTest.cs +++ b/src/csharp/Grpc.IntegrationTesting/MetadataCredentialsTest.cs @@ -103,6 +103,33 @@ namespace Grpc.IntegrationTesting client.UnaryCall(new SimpleRequest { }, new CallOptions(credentials: callCredentials)); } + [Test] + public void MetadataCredentials_InterceptorLeavesMetadataEmpty() + { + var channelCredentials = ChannelCredentials.Create(TestCredentials.CreateSslCredentials(), + CallCredentials.FromInterceptor(new AsyncAuthInterceptor((context, metadata) => TaskUtils.CompletedTask))); + channel = new Channel(Host, server.Ports.Single().BoundPort, channelCredentials, options); + client = new TestService.TestServiceClient(channel); + + var ex = Assert.Throws(() => client.UnaryCall(new SimpleRequest { })); + Assert.AreEqual(StatusCode.Unknown, ex.Status.StatusCode); + } + + [Test] + public void MetadataCredentials_InterceptorThrows() + { + var callCredentials = CallCredentials.FromInterceptor(new AsyncAuthInterceptor((context, metadata) => + { + throw new Exception("Auth interceptor throws"); + })); + var channelCredentials = ChannelCredentials.Create(TestCredentials.CreateSslCredentials(), callCredentials); + channel = new Channel(Host, server.Ports.Single().BoundPort, channelCredentials, options); + client = new TestService.TestServiceClient(channel); + + var ex = Assert.Throws(() => client.UnaryCall(new SimpleRequest { })); + Assert.AreEqual(StatusCode.Unauthenticated, ex.Status.StatusCode); + } + private class FakeTestService : TestService.TestServiceBase { public override Task UnaryCall(SimpleRequest request, ServerCallContext context) From 998fdd0c46a0684a6c7348751cc1632ce21d3e2f Mon Sep 17 00:00:00 2001 From: Jan Tattermusch Date: Wed, 9 Nov 2016 22:54:05 +0100 Subject: [PATCH 37/55] dont hang when empty metadata is passed --- src/core/lib/security/credentials/plugin/plugin_credentials.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/core/lib/security/credentials/plugin/plugin_credentials.c b/src/core/lib/security/credentials/plugin/plugin_credentials.c index 61c10862dac..5d950098a06 100644 --- a/src/core/lib/security/credentials/plugin/plugin_credentials.c +++ b/src/core/lib/security/credentials/plugin/plugin_credentials.c @@ -104,6 +104,8 @@ static void plugin_md_request_metadata_ready(void *request, grpc_slice_unref(md_array[i].value); } gpr_free(md_array); + } else if (num_md == 0) { + r->cb(&exec_ctx, r->user_data, NULL, 0, GRPC_CREDENTIALS_OK, NULL); } } gpr_free(r); From 9ba52e7aa99eb9f71af09616e5b61e03654b90de Mon Sep 17 00:00:00 2001 From: Yuxuan Li Date: Wed, 9 Nov 2016 14:45:25 -0800 Subject: [PATCH 38/55] unblock the performance tests. hide the cpu usage field for now. --- tools/run_tests/performance/bq_upload_result.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/run_tests/performance/bq_upload_result.py b/tools/run_tests/performance/bq_upload_result.py index 0ea23d22122..5d0fcfa67aa 100755 --- a/tools/run_tests/performance/bq_upload_result.py +++ b/tools/run_tests/performance/bq_upload_result.py @@ -122,6 +122,7 @@ def _flatten_result_inplace(scenario_result): scenario_result['clientSuccess'] = json.dumps(scenario_result['clientSuccess']) scenario_result['serverSuccess'] = json.dumps(scenario_result['serverSuccess']) scenario_result['requestResults'] = json.dumps(scenario_result.get('requestResults', [])) + scenario_result['summary'].pop('serverCpuUsage', None) scenario_result['summary'].pop('successfulRequestsPerSecond', None) scenario_result['summary'].pop('failedRequestsPerSecond', None) From 02b1ae456fa3075793ab963ba1e0bf09e48fd491 Mon Sep 17 00:00:00 2001 From: "Mark D. Roth" Date: Wed, 9 Nov 2016 14:47:21 -0800 Subject: [PATCH 39/55] clang-format --- test/core/end2end/tests/authority_not_supported.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/core/end2end/tests/authority_not_supported.c b/test/core/end2end/tests/authority_not_supported.c index 0b49dc85842..705970f6cab 100644 --- a/test/core/end2end/tests/authority_not_supported.c +++ b/test/core/end2end/tests/authority_not_supported.c @@ -98,7 +98,8 @@ static void end_test(grpc_end2end_test_fixture *f) { /* Request/response with metadata and payload.*/ static void test_with_authority_header(grpc_end2end_test_config config) { grpc_call *c; - grpc_slice request_payload_slice = grpc_slice_from_copied_string("hello world"); + grpc_slice request_payload_slice = + grpc_slice_from_copied_string("hello world"); grpc_byte_buffer *request_payload = grpc_raw_byte_buffer_create(&request_payload_slice, 1); gpr_timespec deadline = five_seconds_time(); From 2b4d3726203f96fb0e51215e118bec33e8d3493c Mon Sep 17 00:00:00 2001 From: Yuxuan Li Date: Wed, 9 Nov 2016 15:06:00 -0800 Subject: [PATCH 40/55] hiding totalCpuTime and idleCpuTime from ServerStatus proto message --- tools/run_tests/performance/bq_upload_result.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/run_tests/performance/bq_upload_result.py b/tools/run_tests/performance/bq_upload_result.py index 5d0fcfa67aa..995f1fda63f 100755 --- a/tools/run_tests/performance/bq_upload_result.py +++ b/tools/run_tests/performance/bq_upload_result.py @@ -125,7 +125,8 @@ def _flatten_result_inplace(scenario_result): scenario_result['summary'].pop('serverCpuUsage', None) scenario_result['summary'].pop('successfulRequestsPerSecond', None) scenario_result['summary'].pop('failedRequestsPerSecond', None) - + scenario_result['stats'].pop('totalCpuTime', None) + scenario_result['stats'].pop('idleCpuTime', None) def _populate_metadata_inplace(scenario_result): """Populates metadata based on environment variables set by Jenkins.""" From 317f60b98ee5d0f90c1486644aecd692d03f5f24 Mon Sep 17 00:00:00 2001 From: Yuxuan Li Date: Wed, 9 Nov 2016 15:08:26 -0800 Subject: [PATCH 41/55] add a blank line back --- tools/run_tests/performance/bq_upload_result.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/run_tests/performance/bq_upload_result.py b/tools/run_tests/performance/bq_upload_result.py index 995f1fda63f..2bdd94e36bc 100755 --- a/tools/run_tests/performance/bq_upload_result.py +++ b/tools/run_tests/performance/bq_upload_result.py @@ -128,6 +128,7 @@ def _flatten_result_inplace(scenario_result): scenario_result['stats'].pop('totalCpuTime', None) scenario_result['stats'].pop('idleCpuTime', None) + def _populate_metadata_inplace(scenario_result): """Populates metadata based on environment variables set by Jenkins.""" # NOTE: Grabbing the Jenkins environment variables will only work if the From e2672c92b60bf736c8aef331fdd8c7e087dc0b90 Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Wed, 9 Nov 2016 15:12:22 -0800 Subject: [PATCH 42/55] Some slice and resource quota updates to UV and Node code --- src/core/lib/iomgr/tcp_uv.c | 86 +++++++++++++++---------------------- src/node/ext/byte_buffer.cc | 2 +- 2 files changed, 35 insertions(+), 53 deletions(-) diff --git a/src/core/lib/iomgr/tcp_uv.c b/src/core/lib/iomgr/tcp_uv.c index 8b58c04ff5a..e690b18f20d 100644 --- a/src/core/lib/iomgr/tcp_uv.c +++ b/src/core/lib/iomgr/tcp_uv.c @@ -38,14 +38,17 @@ #include #include +#include + #include #include -#include #include #include "src/core/lib/iomgr/error.h" #include "src/core/lib/iomgr/network_status_tracker.h" +#include "src/core/lib/iomgr/resource_quota.h" #include "src/core/lib/iomgr/tcp_uv.h" +#include "src/core/lib/slice/slice_string_helpers.h" #include "src/core/lib/support/string.h" int grpc_tcp_trace = 0; @@ -62,15 +65,14 @@ typedef struct { grpc_closure *read_cb; grpc_closure *write_cb; - GRPC_SLICE read_slice; - GRPC_SLICE_buffer *read_slices; - GRPC_SLICE_buffer *write_slices; + grpc_slice read_slice; + grpc_slice_buffer *read_slices; + grpc_slice_buffer *write_slices; uv_buf_t *write_buffers; - grpc_resource_user resource_user; + grpc_resource_user *resource_user; bool shutting_down; - bool resource_user_shutting_down; char *peer_string; grpc_pollset *pollset; @@ -78,23 +80,21 @@ typedef struct { static void uv_close_callback(uv_handle_t *handle) { gpr_free(handle); } -static void tcp_free(grpc_tcp *tcp) { - grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - grpc_resource_user_destroy(&exec_ctx, &tcp->resource_user); +static void tcp_free(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) { + grpc_resource_user_unref(exec_ctx, tcp->resource_user); gpr_free(tcp); - grpc_exec_ctx_finish(&exec_ctx); } /*#define GRPC_TCP_REFCOUNT_DEBUG*/ #ifdef GRPC_TCP_REFCOUNT_DEBUG -#define TCP_UNREF(tcp, reason) tcp_unref((tcp), (reason), __FILE__, __LINE__) -#define TCP_REF(tcp, reason) tcp_ref((tcp), (reason), __FILE__, __LINE__) -static void tcp_unref(grpc_tcp *tcp, const char *reason, const char *file, +#define TCP_UNREF(exec_ctx, tcp, reason) tcp_unref((exec_ctx), (tcp), (reason), __FILE__, __LINE__) +#define TCP_REF(tcp, reason) tcp_ref((exec_ctx), (tcp), (reason), __FILE__, __LINE__) +static void tcp_unref(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp, const char *reason, const char *file, int line) { gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG, "TCP unref %p : %s %d -> %d", tcp, reason, tcp->refcount.count, tcp->refcount.count - 1); if (gpr_unref(&tcp->refcount)) { - tcp_free(tcp); + tcp_free(exec_ctx, tcp); } } @@ -105,11 +105,11 @@ static void tcp_ref(grpc_tcp *tcp, const char *reason, const char *file, gpr_ref(&tcp->refcount); } #else -#define TCP_UNREF(tcp, reason) tcp_unref((tcp)) +#define TCP_UNREF(exec_ctx, tcp, reason) tcp_unref((exec_ctx), (tcp)) #define TCP_REF(tcp, reason) tcp_ref((tcp)) -static void tcp_unref(grpc_tcp *tcp) { +static void tcp_unref(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) { if (gpr_unref(&tcp->refcount)) { - tcp_free(tcp); + tcp_free(exec_ctx, tcp); } } @@ -122,7 +122,7 @@ static void alloc_uv_buf(uv_handle_t *handle, size_t suggested_size, grpc_tcp *tcp = handle->data; (void)suggested_size; tcp->read_slice = grpc_resource_user_slice_malloc( - &exec_ctx, &tcp->resource_user, GRPC_TCP_DEFAULT_READ_SLICE_SIZE); + &exec_ctx, tcp->resource_user, GRPC_TCP_DEFAULT_READ_SLICE_SIZE); buf->base = (char *)GRPC_SLICE_START_PTR(tcp->read_slice); buf->len = GRPC_SLICE_LENGTH(tcp->read_slice); grpc_exec_ctx_finish(&exec_ctx); @@ -130,7 +130,7 @@ static void alloc_uv_buf(uv_handle_t *handle, size_t suggested_size, static void read_callback(uv_stream_t *stream, ssize_t nread, const uv_buf_t *buf) { - GRPC_SLICE sub; + grpc_slice sub; grpc_error *error; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; grpc_tcp *tcp = stream->data; @@ -139,7 +139,7 @@ static void read_callback(uv_stream_t *stream, ssize_t nread, // Nothing happened. Wait for the next callback return; } - TCP_UNREF(tcp, "read"); + TCP_UNREF(&exec_ctx, tcp, "read"); tcp->read_cb = NULL; // TODO(murgatroid99): figure out what the return value here means uv_read_stop(stream); @@ -147,8 +147,8 @@ static void read_callback(uv_stream_t *stream, ssize_t nread, error = GRPC_ERROR_CREATE("EOF"); } else if (nread > 0) { // Successful read - sub = GRPC_SLICE_sub_no_ref(tcp->read_slice, 0, (size_t)nread); - GRPC_SLICE_buffer_add(tcp->read_slices, sub); + sub = grpc_slice_sub_no_ref(tcp->read_slice, 0, (size_t)nread); + grpc_slice_buffer_add(tcp->read_slices, sub); error = GRPC_ERROR_NONE; if (grpc_tcp_trace) { size_t i; @@ -156,7 +156,7 @@ static void read_callback(uv_stream_t *stream, ssize_t nread, gpr_log(GPR_DEBUG, "read: error=%s", str); grpc_error_free_string(str); for (i = 0; i < tcp->read_slices->count; i++) { - char *dump = gpr_dump_slice(tcp->read_slices->slices[i], + char *dump = grpc_dump_slice(tcp->read_slices->slices[i], GPR_DUMP_HEX | GPR_DUMP_ASCII); gpr_log(GPR_DEBUG, "READ %p (peer=%s): %s", tcp, tcp->peer_string, dump); @@ -172,14 +172,14 @@ static void read_callback(uv_stream_t *stream, ssize_t nread, } static void uv_endpoint_read(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, - GRPC_SLICE_buffer *read_slices, grpc_closure *cb) { + grpc_slice_buffer *read_slices, grpc_closure *cb) { grpc_tcp *tcp = (grpc_tcp *)ep; int status; grpc_error *error = GRPC_ERROR_NONE; GPR_ASSERT(tcp->read_cb == NULL); tcp->read_cb = cb; tcp->read_slices = read_slices; - GRPC_SLICE_buffer_reset_and_unref(read_slices); + grpc_slice_buffer_reset_and_unref(read_slices); TCP_REF(tcp, "read"); // TODO(murgatroid99): figure out what the return value here means status = @@ -202,7 +202,7 @@ static void write_callback(uv_write_t *req, int status) { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; grpc_closure *cb = tcp->write_cb; tcp->write_cb = NULL; - TCP_UNREF(tcp, "write"); + TCP_UNREF(&exec_ctx, tcp, "write"); if (status == 0) { error = GRPC_ERROR_NONE; } else { @@ -213,27 +213,27 @@ static void write_callback(uv_write_t *req, int status) { gpr_log(GPR_DEBUG, "write complete on %p: error=%s", tcp, str); } gpr_free(tcp->write_buffers); - grpc_resource_user_free(&exec_ctx, &tcp->resource_user, + grpc_resource_user_free(&exec_ctx, tcp->resource_user, sizeof(uv_buf_t) * tcp->write_slices->count); grpc_exec_ctx_sched(&exec_ctx, cb, error, NULL); grpc_exec_ctx_finish(&exec_ctx); } static void uv_endpoint_write(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, - GRPC_SLICE_buffer *write_slices, + grpc_slice_buffer *write_slices, grpc_closure *cb) { grpc_tcp *tcp = (grpc_tcp *)ep; uv_buf_t *buffers; unsigned int buffer_count; unsigned int i; - GRPC_SLICE *slice; + grpc_slice *slice; uv_write_t *write_req; if (grpc_tcp_trace) { size_t j; for (j = 0; j < write_slices->count; j++) { - char *data = gpr_dump_slice(write_slices->slices[j], + char *data = grpc_dump_slice(write_slices->slices[j], GPR_DUMP_HEX | GPR_DUMP_ASCII); gpr_log(GPR_DEBUG, "WRITE %p (peer=%s): %s", tcp, tcp->peer_string, data); gpr_free(data); @@ -259,7 +259,7 @@ static void uv_endpoint_write(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, tcp->write_cb = cb; buffer_count = (unsigned int)tcp->write_slices->count; buffers = gpr_malloc(sizeof(uv_buf_t) * buffer_count); - grpc_resource_user_alloc(exec_ctx, &tcp->resource_user, + grpc_resource_user_alloc(exec_ctx, tcp->resource_user, sizeof(uv_buf_t) * buffer_count, NULL); for (i = 0; i < buffer_count; i++) { slice = &tcp->write_slices->slices[i]; @@ -295,22 +295,6 @@ static void uv_add_to_pollset_set(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, static void shutdown_callback(uv_shutdown_t *req, int status) {} -static void resource_user_shutdown_done(grpc_exec_ctx *exec_ctx, void *arg, - grpc_error *error) { - TCP_UNREF(arg, "resource_user"); -} - -static void uv_resource_user_maybe_shutdown(grpc_exec_ctx *exec_ctx, - grpc_tcp *tcp) { - if (!tcp->resource_user_shutting_down) { - tcp->resource_user_shutting_down = true; - TCP_REF(tcp, "resource_user"); - grpc_resource_user_shutdown( - exec_ctx, &tcp->resource_user, - grpc_closure_create(resource_user_shutdown_done, tcp)); - } -} - static void uv_endpoint_shutdown(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep) { grpc_tcp *tcp = (grpc_tcp *)ep; if (!tcp->shutting_down) { @@ -324,8 +308,7 @@ static void uv_destroy(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep) { grpc_network_status_unregister_endpoint(ep); grpc_tcp *tcp = (grpc_tcp *)ep; uv_close((uv_handle_t *)tcp->handle, uv_close_callback); - uv_resource_user_maybe_shutdown(exec_ctx, tcp); - TCP_UNREF(tcp, "destroy"); + TCP_UNREF(exec_ctx, tcp, "destroy"); } static char *uv_get_peer(grpc_endpoint *ep) { @@ -335,7 +318,7 @@ static char *uv_get_peer(grpc_endpoint *ep) { static grpc_resource_user *uv_get_resource_user(grpc_endpoint *ep) { grpc_tcp *tcp = (grpc_tcp *)ep; - return &tcp->resource_user; + return tcp->resource_user; } static grpc_workqueue *uv_get_workqueue(grpc_endpoint *ep) { return NULL; } @@ -364,8 +347,7 @@ grpc_endpoint *grpc_tcp_create(uv_tcp_t *handle, gpr_ref_init(&tcp->refcount, 1); tcp->peer_string = gpr_strdup(peer_string); tcp->shutting_down = false; - tcp->resource_user_shutting_down = false; - grpc_resource_user_init(&tcp->resource_user, resource_quota, peer_string); + tcp->resource_user = grpc_resource_user_create(resource_quota, peer_string); /* Tell network status tracking code about the new endpoint */ grpc_network_status_register_endpoint(&tcp->base); diff --git a/src/node/ext/byte_buffer.cc b/src/node/ext/byte_buffer.cc index 017d7962c31..fc339fc4629 100644 --- a/src/node/ext/byte_buffer.cc +++ b/src/node/ext/byte_buffer.cc @@ -37,7 +37,7 @@ #include #include "grpc/grpc.h" #include "grpc/byte_buffer_reader.h" -#include "grpc/support/slice.h" +#include "grpc/slice.h" #include "byte_buffer.h" From a91fb72484ce32bcc43c8b0a1ec13088210c742d Mon Sep 17 00:00:00 2001 From: yang-g Date: Wed, 9 Nov 2016 15:43:55 -0800 Subject: [PATCH 43/55] ERR --- tools/lsan_suppressions.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/lsan_suppressions.txt b/tools/lsan_suppressions.txt index a58a8a79b93..4a7b62c467e 100644 --- a/tools/lsan_suppressions.txt +++ b/tools/lsan_suppressions.txt @@ -1,4 +1,4 @@ # this is busted in BoringSSL leak:CRYPTO_set_thread_local leak:err_get_state -leak:err_add_error_dataf +leak:ERR_add_error_dataf From d885a27ccb130269b6222833108846ba57113da9 Mon Sep 17 00:00:00 2001 From: Yuxuan Li Date: Wed, 9 Nov 2016 15:46:06 -0800 Subject: [PATCH 44/55] fix repeated field --- tools/run_tests/performance/bq_upload_result.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tools/run_tests/performance/bq_upload_result.py b/tools/run_tests/performance/bq_upload_result.py index 2bdd94e36bc..ddcf053ae5e 100755 --- a/tools/run_tests/performance/bq_upload_result.py +++ b/tools/run_tests/performance/bq_upload_result.py @@ -115,6 +115,9 @@ def _flatten_result_inplace(scenario_result): scenario_result['scenario']['clientConfig'] = json.dumps(scenario_result['scenario']['clientConfig']) scenario_result['scenario']['serverConfig'] = json.dumps(scenario_result['scenario']['serverConfig']) scenario_result['latencies'] = json.dumps(scenario_result['latencies']) + for stats in scenario_result['serverStats']: + stats.pop('totalCpuTime', None) + stats.pop('idleCpuTime', None) for stats in scenario_result['clientStats']: stats['latencies'] = json.dumps(stats['latencies']) stats.pop('requestResults', None) @@ -125,8 +128,6 @@ def _flatten_result_inplace(scenario_result): scenario_result['summary'].pop('serverCpuUsage', None) scenario_result['summary'].pop('successfulRequestsPerSecond', None) scenario_result['summary'].pop('failedRequestsPerSecond', None) - scenario_result['stats'].pop('totalCpuTime', None) - scenario_result['stats'].pop('idleCpuTime', None) def _populate_metadata_inplace(scenario_result): From aa6c94cb26cf7b5301da3adbee068e6ae10fee19 Mon Sep 17 00:00:00 2001 From: Matt Kwong Date: Wed, 9 Nov 2016 15:53:23 -0800 Subject: [PATCH 45/55] Fix skipped tests not showing up in Jenkins UI --- tools/run_tests/run_tests_matrix.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tools/run_tests/run_tests_matrix.py b/tools/run_tests/run_tests_matrix.py index 25fbe8110f0..544b6bc57df 100755 --- a/tools/run_tests/run_tests_matrix.py +++ b/tools/run_tests/run_tests_matrix.py @@ -301,7 +301,9 @@ if __name__ == "__main__": print('No tests will be skipped.') else: print('These tests will be skipped:') - skipped_jobs = [job for job in jobs if job not in relevant_jobs] + skipped_jobs = list(set(jobs) - set(relevant_jobs)) + # Sort by shortnames to make printing of skipped tests consistent + skipped_jobs.sort(key=lambda job: job.shortname) for job in list(skipped_jobs): print(' %s' % job.shortname) jobs = relevant_jobs From e8f9cbbd681a7c2d10efb39cd13b745054149b11 Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Wed, 9 Nov 2016 17:13:45 -0800 Subject: [PATCH 46/55] Remove some disabled copied Node Express perf tests --- .../run_tests/performance/scenario_config.py | 29 ------------------- 1 file changed, 29 deletions(-) diff --git a/tools/run_tests/performance/scenario_config.py b/tools/run_tests/performance/scenario_config.py index ac703fd6d9c..c3c5ece3628 100644 --- a/tools/run_tests/performance/scenario_config.py +++ b/tools/run_tests/performance/scenario_config.py @@ -688,17 +688,6 @@ class NodeExpressLanguage: return 700 def scenarios(self): - # TODO(jtattermusch): make this scenario work - #yield _ping_pong_scenario( - # 'node_generic_async_streaming_ping_pong', rpc_type='STREAMING', - # client_type='ASYNC_CLIENT', server_type='ASYNC_GENERIC_SERVER', - # use_generic_payload=True) - - # TODO(jtattermusch): make this scenario work - #yield _ping_pong_scenario( - # 'node_protobuf_async_streaming_ping_pong', rpc_type='STREAMING', - # client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER') - yield _ping_pong_scenario( 'node_express_json_unary_ping_pong', rpc_type='UNARY', client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER', @@ -710,24 +699,6 @@ class NodeExpressLanguage: unconstrained_client='async', categories=[SCALABLE, SMOKETEST]) - # TODO(jtattermusch): make this scenario work - #yield _ping_pong_scenario( - # 'node_protobuf_async_streaming_qps_unconstrained', rpc_type='STREAMING', - # client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER', - # unconstrained_client='async') - - # TODO(jtattermusch): make this scenario work - #yield _ping_pong_scenario( - # 'node_to_cpp_protobuf_async_unary_ping_pong', rpc_type='UNARY', - # client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER', - # server_language='c++', server_core_limit=1, async_server_threads=1) - - # TODO(jtattermusch): make this scenario work - #yield _ping_pong_scenario( - # 'node_to_cpp_protobuf_async_streaming_ping_pong', rpc_type='STREAMING', - # client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER', - # server_language='c++', server_core_limit=1, async_server_threads=1) - def __str__(self): return 'node_express' From 979abf674721ee4b3482c02e0690ecc6e867ec04 Mon Sep 17 00:00:00 2001 From: yang-g Date: Wed, 9 Nov 2016 21:52:27 -0800 Subject: [PATCH 47/55] regenerate projects --- Makefile | 4 +- tools/run_tests/sources_and_headers.json | 2 + tools/run_tests/tests.json | 891 ++++++++++-------- .../end2end_nosec_tests.vcxproj | 2 + .../end2end_nosec_tests.vcxproj.filters | 3 + .../tests/end2end_tests/end2end_tests.vcxproj | 2 + .../end2end_tests.vcxproj.filters | 3 + 7 files changed, 494 insertions(+), 413 deletions(-) diff --git a/Makefile b/Makefile index 5d7287d5111..56c05f15856 100644 --- a/Makefile +++ b/Makefile @@ -6973,6 +6973,7 @@ endif LIBEND2END_TESTS_SRC = \ test/core/end2end/end2end_tests.c \ test/core/end2end/end2end_test_utils.c \ + test/core/end2end/tests/authority_not_supported.c \ test/core/end2end/tests/bad_hostname.c \ test/core/end2end/tests/binary_metadata.c \ test/core/end2end/tests/call_creds.c \ @@ -7018,7 +7019,6 @@ LIBEND2END_TESTS_SRC = \ test/core/end2end/tests/simple_request.c \ test/core/end2end/tests/streaming_error_response.c \ test/core/end2end/tests/trailing_metadata.c \ - test/core/end2end/tests/authority_not_supported.c \ PUBLIC_HEADERS_C += \ @@ -7059,6 +7059,7 @@ endif LIBEND2END_NOSEC_TESTS_SRC = \ test/core/end2end/end2end_nosec_tests.c \ test/core/end2end/end2end_test_utils.c \ + test/core/end2end/tests/authority_not_supported.c \ test/core/end2end/tests/bad_hostname.c \ test/core/end2end/tests/binary_metadata.c \ test/core/end2end/tests/cancel_after_accept.c \ @@ -7103,7 +7104,6 @@ LIBEND2END_NOSEC_TESTS_SRC = \ test/core/end2end/tests/simple_request.c \ test/core/end2end/tests/streaming_error_response.c \ test/core/end2end/tests/trailing_metadata.c \ - test/core/end2end/tests/authority_not_supported.c \ PUBLIC_HEADERS_C += \ diff --git a/tools/run_tests/sources_and_headers.json b/tools/run_tests/sources_and_headers.json index 02c60eb0ea1..104eaa7475e 100644 --- a/tools/run_tests/sources_and_headers.json +++ b/tools/run_tests/sources_and_headers.json @@ -6292,6 +6292,7 @@ "test/core/end2end/end2end_test_utils.c", "test/core/end2end/end2end_tests.c", "test/core/end2end/end2end_tests.h", + "test/core/end2end/tests/authority_not_supported.c", "test/core/end2end/tests/bad_hostname.c", "test/core/end2end/tests/binary_metadata.c", "test/core/end2end/tests/call_creds.c", @@ -6360,6 +6361,7 @@ "test/core/end2end/end2end_nosec_tests.c", "test/core/end2end/end2end_test_utils.c", "test/core/end2end/end2end_tests.h", + "test/core/end2end/tests/authority_not_supported.c", "test/core/end2end/tests/bad_hostname.c", "test/core/end2end/tests/binary_metadata.c", "test/core/end2end/tests/cancel_after_accept.c", diff --git a/tools/run_tests/tests.json b/tools/run_tests/tests.json index 554f9ccafd0..ffa03e32c3e 100644 --- a/tools/run_tests/tests.json +++ b/tools/run_tests/tests.json @@ -4975,6 +4975,29 @@ "windows" ] }, + { + "args": [ + "authority_not_supported" + ], + "ci_platforms": [ + "windows", + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [], + "flaky": false, + "language": "c", + "name": "h2_census_test", + "platforms": [ + "windows", + "linux", + "mac", + "posix" + ] + }, { "args": [ "bad_hostname" @@ -6015,25 +6038,26 @@ { "args": [ "authority_not_supported" - ], + ], "ci_platforms": [ "windows", "linux", "mac", "posix" - ], - "cpu_cost": 1.0, + ], + "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], "flaky": false, - "language": "c", - "name": "h2_census_test", + "language": "c", + "name": "h2_compress_test", "platforms": [ "windows", "linux", "mac", "posix" ] - }, + }, { "args": [ "bad_hostname" @@ -7074,25 +7098,25 @@ { "args": [ "authority_not_supported" - ], + ], "ci_platforms": [ - "windows", - "linux", - "mac", + "windows", + "linux", "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_compress_test", + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [], + "flaky": false, + "language": "c", + "name": "h2_fakesec_test", "platforms": [ - "windows", - "linux", - "mac", + "windows", + "linux", + "mac", "posix" ] - }, + }, { "args": [ "bad_hostname" @@ -8088,24 +8112,26 @@ { "args": [ "authority_not_supported" - ], + ], "ci_platforms": [ - "windows", - "linux", + "linux", + "mac", "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_fakesec_test", + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "h2_fd_test", "platforms": [ - "windows", - "linux", - "mac", + "linux", + "mac", "posix" ] - }, + }, { "args": [ "bad_hostname" @@ -9029,23 +9055,26 @@ { "args": [ "authority_not_supported" - ], + ], "ci_platforms": [ - "linux", - "mac", + "windows", + "linux", + "mac", "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_fd_test", + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [], + "flaky": false, + "language": "c", + "name": "h2_full_test", "platforms": [ - "linux", - "mac", + "windows", + "linux", + "mac", "posix" ] - }, + }, { "args": [ "bad_hostname" @@ -10086,25 +10115,22 @@ { "args": [ "authority_not_supported" - ], + ], "ci_platforms": [ - "windows", - "linux", - "mac", - "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_full_test", + "linux" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "h2_full+pipe_test", "platforms": [ - "windows", - "linux", - "mac", - "posix" + "linux" ] - }, + }, { "args": [ "bad_hostname" @@ -10963,19 +10989,26 @@ { "args": [ "authority_not_supported" - ], + ], "ci_platforms": [ - "linux" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_full+pipe_test", + "windows", + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [], + "flaky": false, + "language": "c", + "name": "h2_full+trace_test", "platforms": [ - "linux" + "windows", + "linux", + "mac", + "posix" ] - }, + }, { "args": [ "bad_hostname" @@ -11970,25 +12003,27 @@ { "args": [ "authority_not_supported" - ], + ], "ci_platforms": [ - "windows", - "linux", - "mac", + "windows", + "linux", "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_full+trace_test", + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "h2_http_proxy_test", "platforms": [ - "windows", - "linux", - "mac", + "windows", + "linux", + "mac", "posix" ] - }, + }, { "args": [ "bad_hostname" @@ -13072,24 +13107,26 @@ { "args": [ "authority_not_supported" - ], + ], "ci_platforms": [ - "windows", - "linux", + "windows", + "linux", + "mac", "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_http_proxy_test", + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [], + "flaky": false, + "language": "c", + "name": "h2_load_reporting_test", "platforms": [ - "windows", - "linux", - "mac", + "windows", + "linux", + "mac", "posix" ] - }, + }, { "args": [ "bad_hostname" @@ -14130,25 +14167,27 @@ { "args": [ "authority_not_supported" - ], + ], "ci_platforms": [ - "windows", - "linux", - "mac", + "windows", + "linux", "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_load_reporting_test", + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "h2_oauth2_test", "platforms": [ - "windows", - "linux", - "mac", + "windows", + "linux", + "mac", "posix" ] - }, + }, { "args": [ "bad_hostname" @@ -15232,24 +15271,27 @@ { "args": [ "authority_not_supported" - ], + ], "ci_platforms": [ - "windows", - "linux", + "windows", + "linux", "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_oauth2_test", + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "h2_proxy_test", "platforms": [ - "windows", - "linux", - "mac", + "windows", + "linux", + "mac", "posix" ] - }, + }, { "args": [ "bad_hostname" @@ -16165,24 +16207,27 @@ { "args": [ "authority_not_supported" - ], + ], "ci_platforms": [ - "windows", - "linux", + "windows", + "linux", "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_proxy_test", + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "h2_sockpair_test", "platforms": [ - "windows", - "linux", - "mac", + "windows", + "linux", + "mac", "posix" ] - }, + }, { "args": [ "bad_hostname" @@ -17146,24 +17191,27 @@ { "args": [ "authority_not_supported" - ], + ], "ci_platforms": [ - "windows", - "linux", + "windows", + "linux", "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_sockpair_test", + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "h2_sockpair+trace_test", "platforms": [ - "windows", - "linux", - "mac", + "windows", + "linux", + "mac", "posix" ] - }, + }, { "args": [ "bad_hostname" @@ -18055,24 +18103,29 @@ { "args": [ "authority_not_supported" - ], + ], "ci_platforms": [ - "windows", - "linux", + "windows", + "linux", "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_sockpair+trace_test", + ], + "cpu_cost": 1.0, + "exclude_configs": [ + "msan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "h2_sockpair_1byte_test", "platforms": [ - "windows", - "linux", - "mac", + "windows", + "linux", + "mac", "posix" ] - }, + }, { "args": [ "bad_hostname" @@ -19090,24 +19143,26 @@ { "args": [ "authority_not_supported" - ], + ], "ci_platforms": [ - "windows", - "linux", + "windows", + "linux", + "mac", "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_sockpair_1byte_test", + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [], + "flaky": false, + "language": "c", + "name": "h2_ssl_test", "platforms": [ - "windows", - "linux", - "mac", + "windows", + "linux", + "mac", "posix" ] - }, + }, { "args": [ "bad_hostname" @@ -20148,25 +20203,26 @@ { "args": [ "authority_not_supported" - ], + ], "ci_platforms": [ - "windows", - "linux", - "mac", + "windows", + "linux", + "mac", "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_ssl_test", + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [], + "flaky": false, + "language": "c", + "name": "h2_ssl_cert_test", "platforms": [ - "windows", - "linux", - "mac", + "windows", + "linux", + "mac", "posix" ] - }, + }, { "args": [ "bad_hostname" @@ -21207,25 +21263,27 @@ { "args": [ "authority_not_supported" - ], + ], "ci_platforms": [ - "windows", - "linux", - "mac", + "windows", + "linux", "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_ssl_cert_test", + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "h2_ssl_proxy_test", "platforms": [ - "windows", - "linux", - "mac", + "windows", + "linux", + "mac", "posix" ] - }, + }, { "args": [ "bad_hostname" @@ -22141,24 +22199,26 @@ { "args": [ "authority_not_supported" - ], + ], "ci_platforms": [ - "windows", - "linux", + "linux", + "mac", "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_ssl_proxy_test", + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "h2_uds_test", "platforms": [ - "windows", - "linux", - "mac", + "linux", + "mac", "posix" ] - }, + }, { "args": [ "bad_hostname" @@ -23174,23 +23234,26 @@ { "args": [ "authority_not_supported" - ], + ], "ci_platforms": [ - "linux", - "mac", + "windows", + "linux", + "mac", "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_uds_test", + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [], + "flaky": false, + "language": "c", + "name": "h2_census_nosec_test", "platforms": [ - "linux", - "mac", + "windows", + "linux", + "mac", "posix" ] - }, + }, { "args": [ "bad_hostname" @@ -24208,25 +24271,26 @@ { "args": [ "authority_not_supported" - ], + ], "ci_platforms": [ - "windows", - "linux", - "mac", + "windows", + "linux", + "mac", "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_census_nosec_test", + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [], + "flaky": false, + "language": "c", + "name": "h2_compress_nosec_test", "platforms": [ - "windows", - "linux", - "mac", + "windows", + "linux", + "mac", "posix" ] - }, + }, { "args": [ "bad_hostname" @@ -25244,25 +25308,26 @@ { "args": [ "authority_not_supported" - ], + ], "ci_platforms": [ - "windows", - "linux", - "mac", + "linux", + "mac", "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_compress_nosec_test", + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "h2_fd_nosec_test", "platforms": [ - "windows", - "linux", - "mac", + "linux", + "mac", "posix" ] - }, + }, { "args": [ "bad_hostname" @@ -26163,23 +26228,26 @@ { "args": [ "authority_not_supported" - ], + ], "ci_platforms": [ - "linux", - "mac", + "windows", + "linux", + "mac", "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_fd_nosec_test", + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [], + "flaky": false, + "language": "c", + "name": "h2_full_nosec_test", "platforms": [ - "linux", - "mac", + "windows", + "linux", + "mac", "posix" ] - }, + }, { "args": [ "bad_hostname" @@ -27197,25 +27265,22 @@ { "args": [ "authority_not_supported" - ], + ], "ci_platforms": [ - "windows", - "linux", - "mac", - "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_full_nosec_test", + "linux" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "h2_full+pipe_nosec_test", "platforms": [ - "windows", - "linux", - "mac", - "posix" + "linux" ] - }, + }, { "args": [ "bad_hostname" @@ -28055,19 +28120,26 @@ { "args": [ "authority_not_supported" - ], + ], "ci_platforms": [ - "linux" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_full+pipe_nosec_test", + "windows", + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [], + "flaky": false, + "language": "c", + "name": "h2_full+trace_nosec_test", "platforms": [ - "linux" + "windows", + "linux", + "mac", + "posix" ] - }, + }, { "args": [ "bad_hostname" @@ -29039,25 +29111,27 @@ { "args": [ "authority_not_supported" - ], + ], "ci_platforms": [ - "windows", - "linux", - "mac", + "windows", + "linux", "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_full+trace_nosec_test", + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "h2_http_proxy_nosec_test", "platforms": [ - "windows", - "linux", - "mac", + "windows", + "linux", + "mac", "posix" ] - }, + }, { "args": [ "bad_hostname" @@ -30117,24 +30191,26 @@ { "args": [ "authority_not_supported" - ], + ], "ci_platforms": [ - "windows", - "linux", + "windows", + "linux", + "mac", "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_http_proxy_nosec_test", + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [], + "flaky": false, + "language": "c", + "name": "h2_load_reporting_nosec_test", "platforms": [ - "windows", - "linux", - "mac", + "windows", + "linux", + "mac", "posix" ] - }, + }, { "args": [ "bad_hostname" @@ -31152,25 +31228,27 @@ { "args": [ "authority_not_supported" - ], + ], "ci_platforms": [ - "windows", - "linux", - "mac", + "windows", + "linux", "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_load_reporting_nosec_test", + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "h2_proxy_nosec_test", "platforms": [ - "windows", - "linux", - "mac", + "windows", + "linux", + "mac", "posix" ] - }, + }, { "args": [ "bad_hostname" @@ -32062,24 +32140,27 @@ { "args": [ "authority_not_supported" - ], + ], "ci_platforms": [ - "windows", - "linux", + "windows", + "linux", "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_proxy_nosec_test", + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "h2_sockpair_nosec_test", "platforms": [ - "windows", - "linux", - "mac", + "windows", + "linux", + "mac", "posix" ] - }, + }, { "args": [ "bad_hostname" @@ -33019,24 +33100,27 @@ { "args": [ "authority_not_supported" - ], + ], "ci_platforms": [ - "windows", - "linux", + "windows", + "linux", "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_sockpair_nosec_test", + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "h2_sockpair+trace_nosec_test", "platforms": [ - "windows", - "linux", - "mac", + "windows", + "linux", + "mac", "posix" ] - }, + }, { "args": [ "bad_hostname" @@ -33904,24 +33988,29 @@ { "args": [ "authority_not_supported" - ], + ], "ci_platforms": [ - "windows", - "linux", + "windows", + "linux", "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_sockpair+trace_nosec_test", + ], + "cpu_cost": 1.0, + "exclude_configs": [ + "msan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "h2_sockpair_1byte_nosec_test", "platforms": [ - "windows", - "linux", - "mac", + "windows", + "linux", + "mac", "posix" ] - }, + }, { "args": [ "bad_hostname" @@ -34913,26 +35002,26 @@ { "args": [ "authority_not_supported" - ], + ], "ci_platforms": [ - "windows", - "linux", + "linux", + "mac", "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [ - "msan" - ], - "flaky": false, - "language": "c", - "name": "h2_sockpair_1byte_nosec_test", + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "h2_uds_nosec_test", "platforms": [ - "windows", - "linux", - "mac", + "linux", + "mac", "posix" ] - }, + }, { "args": [ "bad_hostname" @@ -35922,26 +36011,6 @@ "posix" ] }, - { - "args": [ - "authority_not_supported" - ], - "ci_platforms": [ - "linux", - "mac", - "posix" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "flaky": false, - "language": "c", - "name": "h2_uds_nosec_test", - "platforms": [ - "linux", - "mac", - "posix" - ] - }, { "args": [ "--scenarios_json", diff --git a/vsprojects/vcxproj/test/end2end/tests/end2end_nosec_tests/end2end_nosec_tests.vcxproj b/vsprojects/vcxproj/test/end2end/tests/end2end_nosec_tests/end2end_nosec_tests.vcxproj index 3d510d51568..954ac21b497 100644 --- a/vsprojects/vcxproj/test/end2end/tests/end2end_nosec_tests/end2end_nosec_tests.vcxproj +++ b/vsprojects/vcxproj/test/end2end/tests/end2end_nosec_tests/end2end_nosec_tests.vcxproj @@ -155,6 +155,8 @@ + + diff --git a/vsprojects/vcxproj/test/end2end/tests/end2end_nosec_tests/end2end_nosec_tests.vcxproj.filters b/vsprojects/vcxproj/test/end2end/tests/end2end_nosec_tests/end2end_nosec_tests.vcxproj.filters index a0b01ddbc89..b2747d25784 100644 --- a/vsprojects/vcxproj/test/end2end/tests/end2end_nosec_tests/end2end_nosec_tests.vcxproj.filters +++ b/vsprojects/vcxproj/test/end2end/tests/end2end_nosec_tests/end2end_nosec_tests.vcxproj.filters @@ -7,6 +7,9 @@ test\core\end2end + + test\core\end2end\tests + test\core\end2end\tests diff --git a/vsprojects/vcxproj/test/end2end/tests/end2end_tests/end2end_tests.vcxproj b/vsprojects/vcxproj/test/end2end/tests/end2end_tests/end2end_tests.vcxproj index 5699e8308ed..51b744bc214 100644 --- a/vsprojects/vcxproj/test/end2end/tests/end2end_tests/end2end_tests.vcxproj +++ b/vsprojects/vcxproj/test/end2end/tests/end2end_tests/end2end_tests.vcxproj @@ -155,6 +155,8 @@ + + diff --git a/vsprojects/vcxproj/test/end2end/tests/end2end_tests/end2end_tests.vcxproj.filters b/vsprojects/vcxproj/test/end2end/tests/end2end_tests/end2end_tests.vcxproj.filters index bfb5e2b2292..33e7098ecf4 100644 --- a/vsprojects/vcxproj/test/end2end/tests/end2end_tests/end2end_tests.vcxproj.filters +++ b/vsprojects/vcxproj/test/end2end/tests/end2end_tests/end2end_tests.vcxproj.filters @@ -7,6 +7,9 @@ test\core\end2end + + test\core\end2end\tests + test\core\end2end\tests From 60d0f4ced3204e4559ce915a320bef307a291c66 Mon Sep 17 00:00:00 2001 From: Jan Tattermusch Date: Thu, 10 Nov 2016 09:54:33 +0100 Subject: [PATCH 48/55] add a comment --- src/csharp/Grpc.IntegrationTesting/MetadataCredentialsTest.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/csharp/Grpc.IntegrationTesting/MetadataCredentialsTest.cs b/src/csharp/Grpc.IntegrationTesting/MetadataCredentialsTest.cs index 10ab67abae6..d55e658d949 100644 --- a/src/csharp/Grpc.IntegrationTesting/MetadataCredentialsTest.cs +++ b/src/csharp/Grpc.IntegrationTesting/MetadataCredentialsTest.cs @@ -112,6 +112,7 @@ namespace Grpc.IntegrationTesting client = new TestService.TestServiceClient(channel); var ex = Assert.Throws(() => client.UnaryCall(new SimpleRequest { })); + // StatusCode.Unknown as the server-side handler throws an exception after not receiving the authorization header. Assert.AreEqual(StatusCode.Unknown, ex.Status.StatusCode); } From 8bac679a1620bc9fdd649bd6fe4e870aa2bff627 Mon Sep 17 00:00:00 2001 From: David Garcia Quintas Date: Thu, 10 Nov 2016 14:04:18 -0800 Subject: [PATCH 49/55] Demote secure handshake failures even further --- src/core/lib/security/transport/handshake.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/lib/security/transport/handshake.c b/src/core/lib/security/transport/handshake.c index 2eb5544f43f..96237976107 100644 --- a/src/core/lib/security/transport/handshake.c +++ b/src/core/lib/security/transport/handshake.c @@ -125,7 +125,7 @@ static void security_handshake_done(grpc_exec_ctx *exec_ctx, h->auth_context); } else { const char *msg = grpc_error_string(error); - gpr_log(GPR_INFO, "Security handshake failed: %s", msg); + gpr_log(GPR_DEBUG, "Security handshake failed: %s", msg); grpc_error_free_string(msg); if (h->secure_endpoint != NULL) { From fd825f51ac7c62cf5c9258d46aaee4695dae1d2e Mon Sep 17 00:00:00 2001 From: Wenbo Zhu Date: Thu, 10 Nov 2016 15:47:03 -0800 Subject: [PATCH 50/55] Update PROTOCOL-WEB.md Using http/2 literal header format for status. --- doc/PROTOCOL-WEB.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/doc/PROTOCOL-WEB.md b/doc/PROTOCOL-WEB.md index 7d9b9f069ae..562d5999cf5 100644 --- a/doc/PROTOCOL-WEB.md +++ b/doc/PROTOCOL-WEB.md @@ -60,8 +60,7 @@ HTTP/2 related behavior (specified in [gRPC over HTTP2](http://www.grpc.io/docs/ Message framing (vs. [http2-transport-mapping](http://www.grpc.io/docs/guides/wire.html#http2-transport-mapping)) 1. Response status encoded as part of the response body - * Key-value pairs formatted as HTTP/1.1 headers block (without the empty - newline \r\n to terminate the block) + * Key-value pairs encoded in the HTTP/2 [literal header format](https://tools.ietf.org/html/rfc7541#section-6.2) as a single header block. 2. 8th (MSB) bit of the 1st gRPC frame byte * 0: data * 1: trailers From 2e01234d1ca35f65c70f06dd164e69c03132f97c Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Thu, 10 Nov 2016 18:24:08 -0800 Subject: [PATCH 51/55] Fix sanity, uv, and windows builds --- src/core/ext/lb_policy/grpclb/grpclb.c | 4 ++-- src/core/lib/iomgr/tcp_uv.c | 19 ++++++++++++------- src/core/lib/iomgr/tcp_windows.c | 5 ++++- .../lib/security/transport/secure_endpoint.c | 9 +++++++-- 4 files changed, 25 insertions(+), 12 deletions(-) diff --git a/src/core/ext/lb_policy/grpclb/grpclb.c b/src/core/ext/lb_policy/grpclb/grpclb.c index d68fbb3dfb5..44ac9a017ed 100644 --- a/src/core/ext/lb_policy/grpclb/grpclb.c +++ b/src/core/ext/lb_policy/grpclb/grpclb.c @@ -1155,8 +1155,8 @@ static void lb_on_response_received(grpc_exec_ctx *exec_ctx, void *arg, } gpr_mu_unlock(&glb_policy->mu); } else { /* empty payload: call cancelled. */ - /* dispose of the "lb_on_response_received" weak ref taken in - * query_for_backends_locked() and reused in every reception loop */ + /* dispose of the "lb_on_response_received" weak ref taken in + * query_for_backends_locked() and reused in every reception loop */ gpr_mu_unlock(&glb_policy->mu); GRPC_LB_POLICY_WEAK_UNREF(exec_ctx, &glb_policy->base, "lb_on_response_received_empty_payload"); diff --git a/src/core/lib/iomgr/tcp_uv.c b/src/core/lib/iomgr/tcp_uv.c index e690b18f20d..6e2ad1dbe92 100644 --- a/src/core/lib/iomgr/tcp_uv.c +++ b/src/core/lib/iomgr/tcp_uv.c @@ -87,10 +87,12 @@ static void tcp_free(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) { /*#define GRPC_TCP_REFCOUNT_DEBUG*/ #ifdef GRPC_TCP_REFCOUNT_DEBUG -#define TCP_UNREF(exec_ctx, tcp, reason) tcp_unref((exec_ctx), (tcp), (reason), __FILE__, __LINE__) -#define TCP_REF(tcp, reason) tcp_ref((exec_ctx), (tcp), (reason), __FILE__, __LINE__) -static void tcp_unref(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp, const char *reason, const char *file, - int line) { +#define TCP_UNREF(exec_ctx, tcp, reason) \ + tcp_unref((exec_ctx), (tcp), (reason), __FILE__, __LINE__) +#define TCP_REF(tcp, reason) \ + tcp_ref((exec_ctx), (tcp), (reason), __FILE__, __LINE__) +static void tcp_unref(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp, + const char *reason, const char *file, int line) { gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG, "TCP unref %p : %s %d -> %d", tcp, reason, tcp->refcount.count, tcp->refcount.count - 1); if (gpr_unref(&tcp->refcount)) { @@ -157,7 +159,7 @@ static void read_callback(uv_stream_t *stream, ssize_t nread, grpc_error_free_string(str); for (i = 0; i < tcp->read_slices->count; i++) { char *dump = grpc_dump_slice(tcp->read_slices->slices[i], - GPR_DUMP_HEX | GPR_DUMP_ASCII); + GPR_DUMP_HEX | GPR_DUMP_ASCII); gpr_log(GPR_DEBUG, "READ %p (peer=%s): %s", tcp, tcp->peer_string, dump); gpr_free(dump); @@ -234,7 +236,7 @@ static void uv_endpoint_write(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, for (j = 0; j < write_slices->count; j++) { char *data = grpc_dump_slice(write_slices->slices[j], - GPR_DUMP_HEX | GPR_DUMP_ASCII); + GPR_DUMP_HEX | GPR_DUMP_ASCII); gpr_log(GPR_DEBUG, "WRITE %p (peer=%s): %s", tcp, tcp->peer_string, data); gpr_free(data); } @@ -323,10 +325,13 @@ static grpc_resource_user *uv_get_resource_user(grpc_endpoint *ep) { static grpc_workqueue *uv_get_workqueue(grpc_endpoint *ep) { return NULL; } +static int uv_get_fd(grpc_endpoint *ep) { return -1; } + static grpc_endpoint_vtable vtable = { uv_endpoint_read, uv_endpoint_write, uv_get_workqueue, uv_add_to_pollset, uv_add_to_pollset_set, uv_endpoint_shutdown, - uv_destroy, uv_get_resource_user, uv_get_peer}; + uv_destroy, uv_get_resource_user, uv_get_peer, + uv_get_fd}; grpc_endpoint *grpc_tcp_create(uv_tcp_t *handle, grpc_resource_quota *resource_quota, diff --git a/src/core/lib/iomgr/tcp_windows.c b/src/core/lib/iomgr/tcp_windows.c index 1fb7edc2b11..62afbcef512 100644 --- a/src/core/lib/iomgr/tcp_windows.c +++ b/src/core/lib/iomgr/tcp_windows.c @@ -402,6 +402,8 @@ static grpc_resource_user *win_get_resource_user(grpc_endpoint *ep) { return tcp->resource_user; } +static int win_get_fd(grpc_endpoint *ep) { return -1; } + static grpc_endpoint_vtable vtable = {win_read, win_write, win_get_workqueue, @@ -410,7 +412,8 @@ static grpc_endpoint_vtable vtable = {win_read, win_shutdown, win_destroy, win_get_resource_user, - win_get_peer}; + win_get_peer, + win_get_fd}; grpc_endpoint *grpc_tcp_create(grpc_winsocket *socket, grpc_resource_quota *resource_quota, diff --git a/src/core/lib/security/transport/secure_endpoint.c b/src/core/lib/security/transport/secure_endpoint.c index 2d32fae8a17..1b278410e80 100644 --- a/src/core/lib/security/transport/secure_endpoint.c +++ b/src/core/lib/security/transport/secure_endpoint.c @@ -31,15 +31,20 @@ * */ -#include "src/core/lib/security/transport/secure_endpoint.h" +/* With the addition of a libuv endpoint, sockaddr.h now includes uv.h when + using that endpoint. Because of various transitive includes in uv.h, + including windows.h on Windows, uv.h must be included before other system + headers. Therefore, sockaddr.h must always be included first */ +#include "src/core/lib/iomgr/sockaddr.h" + #include #include #include #include #include #include "src/core/lib/debug/trace.h" -#include "src/core/lib/iomgr/sockaddr.h" #include "src/core/lib/profiling/timers.h" +#include "src/core/lib/security/transport/secure_endpoint.h" #include "src/core/lib/security/transport/tsi_error.h" #include "src/core/lib/slice/slice_string_helpers.h" #include "src/core/lib/support/string.h" From fdf45ab6fdaddb9e6c8691f415540c64e7dac4bc Mon Sep 17 00:00:00 2001 From: Jan Tattermusch Date: Wed, 19 Oct 2016 10:35:01 +0200 Subject: [PATCH 52/55] support threadpool tracing --- .../Grpc.Core/Internal/GrpcThreadPool.cs | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/csharp/Grpc.Core/Internal/GrpcThreadPool.cs b/src/csharp/Grpc.Core/Internal/GrpcThreadPool.cs index a446c1f99f2..25a6589f115 100644 --- a/src/csharp/Grpc.Core/Internal/GrpcThreadPool.cs +++ b/src/csharp/Grpc.Core/Internal/GrpcThreadPool.cs @@ -37,6 +37,7 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; using Grpc.Core.Logging; +using Grpc.Core.Profiling; using Grpc.Core.Utils; namespace Grpc.Core.Internal @@ -54,6 +55,8 @@ namespace Grpc.Core.Internal readonly int poolSize; readonly int completionQueueCount; + readonly List threadProfilers = new List(); // profilers assigned to threadpool threads + bool stopRequested; IReadOnlyCollection completionQueues; @@ -82,7 +85,8 @@ namespace Grpc.Core.Internal for (int i = 0; i < poolSize; i++) { - threads.Add(CreateAndStartThread(i)); + var optionalProfiler = i < threadProfilers.Count ? threadProfilers[i] : null; + threads.Add(CreateAndStartThread(i, optionalProfiler)); } } } @@ -111,6 +115,11 @@ namespace Grpc.Core.Internal { cq.Dispose(); } + + for (int i = 0; i < threadProfilers.Count; i++) + { + threadProfilers[i].Dump(string.Format("grpc_trace_thread_{0}.txt", i)); + } }); } @@ -137,12 +146,12 @@ namespace Grpc.Core.Internal } } - private Thread CreateAndStartThread(int threadIndex) + private Thread CreateAndStartThread(int threadIndex, IProfiler optionalProfiler) { var cqIndex = threadIndex % completionQueues.Count; var cq = completionQueues.ElementAt(cqIndex); - var thread = new Thread(new ThreadStart(() => RunHandlerLoop(cq))); + var thread = new Thread(new ThreadStart(() => RunHandlerLoop(cq, optionalProfiler))); thread.IsBackground = true; thread.Name = string.Format("grpc {0} (cq {1})", threadIndex, cqIndex); thread.Start(); @@ -153,8 +162,13 @@ namespace Grpc.Core.Internal /// /// Body of the polling thread. /// - private void RunHandlerLoop(CompletionQueueSafeHandle cq) + private void RunHandlerLoop(CompletionQueueSafeHandle cq, IProfiler optionalProfiler) { + if (optionalProfiler != null) + { + Profilers.SetForCurrentThread(optionalProfiler); + } + CompletionQueueEvent ev; do { From 475e06bb128f8435abc301904ea9e561e46c4496 Mon Sep 17 00:00:00 2001 From: Jan Tattermusch Date: Sun, 23 Oct 2016 09:28:24 +0200 Subject: [PATCH 53/55] 10m entries in profiler --- src/csharp/Grpc.Core/Profiling/Profilers.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/csharp/Grpc.Core/Profiling/Profilers.cs b/src/csharp/Grpc.Core/Profiling/Profilers.cs index aa0d96c0e02..6afabff6a79 100644 --- a/src/csharp/Grpc.Core/Profiling/Profilers.cs +++ b/src/csharp/Grpc.Core/Profiling/Profilers.cs @@ -80,7 +80,7 @@ namespace Grpc.Core.Profiling ProfilerEntry[] entries; int count; - public BasicProfiler() : this(1024*1024) + public BasicProfiler() : this(20*1024*1024) { } From b35dfa83b5ba69daf000125f37602ae1fff011d6 Mon Sep 17 00:00:00 2001 From: Jan Tattermusch Date: Fri, 28 Oct 2016 16:40:22 +0200 Subject: [PATCH 54/55] remove existing profiling points --- src/csharp/Grpc.Core/Internal/AsyncCall.cs | 97 +++++++++---------- .../Grpc.Core/Internal/AsyncCallBase.cs | 41 +++----- .../Grpc.Core/Internal/CallSafeHandle.cs | 7 +- .../Grpc.Core/Internal/ChannelSafeHandle.cs | 13 +-- .../Internal/CompletionQueueSafeHandle.cs | 5 +- .../Internal/MetadataArraySafeHandle.cs | 23 ++--- 6 files changed, 77 insertions(+), 109 deletions(-) diff --git a/src/csharp/Grpc.Core/Internal/AsyncCall.cs b/src/csharp/Grpc.Core/Internal/AsyncCall.cs index 5e61e9ec129..da45c4829df 100644 --- a/src/csharp/Grpc.Core/Internal/AsyncCall.cs +++ b/src/csharp/Grpc.Core/Internal/AsyncCall.cs @@ -388,35 +388,29 @@ namespace Grpc.Core.Internal private void Initialize(CompletionQueueSafeHandle cq) { - using (Profilers.ForCurrentThread().NewScope("AsyncCall.Initialize")) - { - var call = CreateNativeCall(cq); + var call = CreateNativeCall(cq); - details.Channel.AddCallReference(this); - InitializeInternal(call); - RegisterCancellationCallback(); - } + details.Channel.AddCallReference(this); + InitializeInternal(call); + RegisterCancellationCallback(); } private INativeCall CreateNativeCall(CompletionQueueSafeHandle cq) { - using (Profilers.ForCurrentThread().NewScope("AsyncCall.CreateNativeCall")) - { - if (injectedNativeCall != null) - { - return injectedNativeCall; // allows injecting a mock INativeCall in tests. - } + if (injectedNativeCall != null) + { + return injectedNativeCall; // allows injecting a mock INativeCall in tests. + } - var parentCall = details.Options.PropagationToken != null ? details.Options.PropagationToken.ParentCall : CallSafeHandle.NullInstance; + var parentCall = details.Options.PropagationToken != null ? details.Options.PropagationToken.ParentCall : CallSafeHandle.NullInstance; - var credentials = details.Options.Credentials; - using (var nativeCredentials = credentials != null ? credentials.ToNativeCredentials() : null) - { - var result = details.Channel.Handle.CreateCall( - parentCall, ContextPropagationToken.DefaultMask, cq, - details.Method, details.Host, Timespec.FromDateTime(details.Options.Deadline.Value), nativeCredentials); - return result; - } + var credentials = details.Options.Credentials; + using (var nativeCredentials = credentials != null ? credentials.ToNativeCredentials() : null) + { + var result = details.Channel.Handle.CreateCall( + parentCall, ContextPropagationToken.DefaultMask, cq, + details.Method, details.Host, Timespec.FromDateTime(details.Options.Deadline.Value), nativeCredentials); + return result; } } @@ -456,47 +450,44 @@ namespace Grpc.Core.Internal // NOTE: because this event is a result of batch containing GRPC_OP_RECV_STATUS_ON_CLIENT, // success will be always set to true. - using (Profilers.ForCurrentThread().NewScope("AsyncCall.HandleUnaryResponse")) + TaskCompletionSource delayedStreamingWriteTcs = null; + TResponse msg = default(TResponse); + var deserializeException = TryDeserialize(receivedMessage, out msg); + + lock (myLock) { - TaskCompletionSource delayedStreamingWriteTcs = null; - TResponse msg = default(TResponse); - var deserializeException = TryDeserialize(receivedMessage, out msg); + finished = true; - lock (myLock) + if (deserializeException != null && receivedStatus.Status.StatusCode == StatusCode.OK) { - finished = true; - - if (deserializeException != null && receivedStatus.Status.StatusCode == StatusCode.OK) - { - receivedStatus = new ClientSideStatus(DeserializeResponseFailureStatus, receivedStatus.Trailers); - } - finishedStatus = receivedStatus; - - if (isStreamingWriteCompletionDelayed) - { - delayedStreamingWriteTcs = streamingWriteTcs; - streamingWriteTcs = null; - } - - ReleaseResourcesIfPossible(); + receivedStatus = new ClientSideStatus(DeserializeResponseFailureStatus, receivedStatus.Trailers); } + finishedStatus = receivedStatus; - responseHeadersTcs.SetResult(responseHeaders); - - if (delayedStreamingWriteTcs != null) + if (isStreamingWriteCompletionDelayed) { - delayedStreamingWriteTcs.SetException(GetRpcExceptionClientOnly()); + delayedStreamingWriteTcs = streamingWriteTcs; + streamingWriteTcs = null; } - var status = receivedStatus.Status; - if (status.StatusCode != StatusCode.OK) - { - unaryResponseTcs.SetException(new RpcException(status)); - return; - } + ReleaseResourcesIfPossible(); + } + + responseHeadersTcs.SetResult(responseHeaders); - unaryResponseTcs.SetResult(msg); + if (delayedStreamingWriteTcs != null) + { + delayedStreamingWriteTcs.SetException(GetRpcExceptionClientOnly()); + } + + var status = receivedStatus.Status; + if (status.StatusCode != StatusCode.OK) + { + unaryResponseTcs.SetException(new RpcException(status)); + return; } + + unaryResponseTcs.SetResult(msg); } /// diff --git a/src/csharp/Grpc.Core/Internal/AsyncCallBase.cs b/src/csharp/Grpc.Core/Internal/AsyncCallBase.cs index 9f9d260e7eb..8668903f6e9 100644 --- a/src/csharp/Grpc.Core/Internal/AsyncCallBase.cs +++ b/src/csharp/Grpc.Core/Internal/AsyncCallBase.cs @@ -181,19 +181,16 @@ namespace Grpc.Core.Internal /// protected bool ReleaseResourcesIfPossible() { - using (Profilers.ForCurrentThread().NewScope("AsyncCallBase.ReleaseResourcesIfPossible")) + if (!disposed && call != null) { - if (!disposed && call != null) + bool noMoreSendCompletions = streamingWriteTcs == null && (halfcloseRequested || cancelRequested || finished); + if (noMoreSendCompletions && readingDone && finished) { - bool noMoreSendCompletions = streamingWriteTcs == null && (halfcloseRequested || cancelRequested || finished); - if (noMoreSendCompletions && readingDone && finished) - { - ReleaseResources(); - return true; - } + ReleaseResources(); + return true; } - return false; } + return false; } protected abstract bool IsClient @@ -229,28 +226,20 @@ namespace Grpc.Core.Internal protected byte[] UnsafeSerialize(TWrite msg) { - using (Profilers.ForCurrentThread().NewScope("AsyncCallBase.UnsafeSerialize")) - { - return serializer(msg); - } + return serializer(msg); } protected Exception TryDeserialize(byte[] payload, out TRead msg) { - using (Profilers.ForCurrentThread().NewScope("AsyncCallBase.TryDeserialize")) + try { - try - { - - msg = deserializer(payload); - return null; - - } - catch (Exception e) - { - msg = default(TRead); - return e; - } + msg = deserializer(payload); + return null; + } + catch (Exception e) + { + msg = default(TRead); + return e; } } diff --git a/src/csharp/Grpc.Core/Internal/CallSafeHandle.cs b/src/csharp/Grpc.Core/Internal/CallSafeHandle.cs index 82361f57979..f817a61bce8 100644 --- a/src/csharp/Grpc.Core/Internal/CallSafeHandle.cs +++ b/src/csharp/Grpc.Core/Internal/CallSafeHandle.cs @@ -76,11 +76,8 @@ namespace Grpc.Core.Internal public void StartUnary(BatchContextSafeHandle ctx, byte[] payload, MetadataArraySafeHandle metadataArray, WriteFlags writeFlags) { - using (Profilers.ForCurrentThread().NewScope("CallSafeHandle.StartUnary")) - { - Native.grpcsharp_call_start_unary(this, ctx, payload, new UIntPtr((ulong)payload.Length), metadataArray, writeFlags) - .CheckOk(); - } + Native.grpcsharp_call_start_unary(this, ctx, payload, new UIntPtr((ulong)payload.Length), metadataArray, writeFlags) + .CheckOk(); } public void StartClientStreaming(UnaryResponseClientHandler callback, MetadataArraySafeHandle metadataArray) diff --git a/src/csharp/Grpc.Core/Internal/ChannelSafeHandle.cs b/src/csharp/Grpc.Core/Internal/ChannelSafeHandle.cs index 62864dff0cb..0fb6360a23e 100644 --- a/src/csharp/Grpc.Core/Internal/ChannelSafeHandle.cs +++ b/src/csharp/Grpc.Core/Internal/ChannelSafeHandle.cs @@ -65,16 +65,13 @@ namespace Grpc.Core.Internal public CallSafeHandle CreateCall(CallSafeHandle parentCall, ContextPropagationFlags propagationMask, CompletionQueueSafeHandle cq, string method, string host, Timespec deadline, CallCredentialsSafeHandle credentials) { - using (Profilers.ForCurrentThread().NewScope("ChannelSafeHandle.CreateCall")) + var result = Native.grpcsharp_channel_create_call(this, parentCall, propagationMask, cq, method, host, deadline); + if (credentials != null) { - var result = Native.grpcsharp_channel_create_call(this, parentCall, propagationMask, cq, method, host, deadline); - if (credentials != null) - { - result.SetCredentials(credentials); - } - result.Initialize(cq); - return result; + result.SetCredentials(credentials); } + result.Initialize(cq); + return result; } public ChannelState CheckConnectivityState(bool tryToConnect) diff --git a/src/csharp/Grpc.Core/Internal/CompletionQueueSafeHandle.cs b/src/csharp/Grpc.Core/Internal/CompletionQueueSafeHandle.cs index 46f56242231..6c9a31921eb 100644 --- a/src/csharp/Grpc.Core/Internal/CompletionQueueSafeHandle.cs +++ b/src/csharp/Grpc.Core/Internal/CompletionQueueSafeHandle.cs @@ -70,10 +70,7 @@ namespace Grpc.Core.Internal public CompletionQueueEvent Pluck(IntPtr tag) { - using (Profilers.ForCurrentThread().NewScope("CompletionQueueSafeHandle.Pluck")) - { - return Native.grpcsharp_completion_queue_pluck(this, tag); - } + return Native.grpcsharp_completion_queue_pluck(this, tag); } /// diff --git a/src/csharp/Grpc.Core/Internal/MetadataArraySafeHandle.cs b/src/csharp/Grpc.Core/Internal/MetadataArraySafeHandle.cs index dc9f62fdab4..05dda5b1486 100644 --- a/src/csharp/Grpc.Core/Internal/MetadataArraySafeHandle.cs +++ b/src/csharp/Grpc.Core/Internal/MetadataArraySafeHandle.cs @@ -48,22 +48,19 @@ namespace Grpc.Core.Internal public static MetadataArraySafeHandle Create(Metadata metadata) { - using (Profilers.ForCurrentThread().NewScope("MetadataArraySafeHandle.Create")) + if (metadata.Count == 0) { - if (metadata.Count == 0) - { - return new MetadataArraySafeHandle(); - } + return new MetadataArraySafeHandle(); + } - // TODO(jtattermusch): we might wanna check that the metadata is readonly - var metadataArray = Native.grpcsharp_metadata_array_create(new UIntPtr((ulong)metadata.Count)); - for (int i = 0; i < metadata.Count; i++) - { - var valueBytes = metadata[i].GetSerializedValueUnsafe(); - Native.grpcsharp_metadata_array_add(metadataArray, metadata[i].Key, valueBytes, new UIntPtr((ulong)valueBytes.Length)); - } - return metadataArray; + // TODO(jtattermusch): we might wanna check that the metadata is readonly + var metadataArray = Native.grpcsharp_metadata_array_create(new UIntPtr((ulong)metadata.Count)); + for (int i = 0; i < metadata.Count; i++) + { + var valueBytes = metadata[i].GetSerializedValueUnsafe(); + Native.grpcsharp_metadata_array_add(metadataArray, metadata[i].Key, valueBytes, new UIntPtr((ulong)valueBytes.Length)); } + return metadataArray; } /// From 67ffe3f82de4d860f1d39f9ace55a6731e82a69c Mon Sep 17 00:00:00 2001 From: Yuchen Zeng Date: Fri, 11 Nov 2016 10:50:42 -0800 Subject: [PATCH 55/55] clang-format --- src/core/lib/iomgr/tcp_client_posix.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/core/lib/iomgr/tcp_client_posix.c b/src/core/lib/iomgr/tcp_client_posix.c index 169ddcabed8..13347735df9 100644 --- a/src/core/lib/iomgr/tcp_client_posix.c +++ b/src/core/lib/iomgr/tcp_client_posix.c @@ -299,8 +299,7 @@ static void tcp_client_connect_impl(grpc_exec_ctx *exec_ctx, GPR_ASSERT(grpc_sockaddr_is_v4mapped(addr, &addr4_copy)); addr = &addr4_copy; } - if ((error = prepare_socket(addr, fd, channel_args)) != - GRPC_ERROR_NONE) { + if ((error = prepare_socket(addr, fd, channel_args)) != GRPC_ERROR_NONE) { grpc_exec_ctx_sched(exec_ctx, closure, error, NULL); return; }